11 #include "IActivityHandler.h" 12 #include "IInputHandler.h" 13 #include "JNIMainActivity.h" 14 #include "JNIXBMCAudioManagerOnAudioFocusChangeListener.h" 15 #include "JNIXBMCDisplayManagerDisplayListener.h" 16 #include "JNIXBMCMainView.h" 17 #include "JNIXBMCMediaSession.h" 18 #include "interfaces/IAnnouncer.h" 19 #include "platform/xbmc.h" 20 #include "threads/Event.h" 21 #include "utils/Geometry.h" 30 #include <android/native_activity.h> 31 #include <androidjni/Activity.h> 32 #include <androidjni/AudioManager.h> 33 #include <androidjni/BroadcastReceiver.h> 34 #include <androidjni/SurfaceHolder.h> 35 #include <androidjni/View.h> 43 class CJNIActivityManager;
45 typedef struct _JNIEnv JNIEnv;
56 std::string packageName;
57 std::string packageLabel;
66 static std::shared_ptr<CNativeWindow> CreateFromSurface(CJNISurfaceHolder holder);
69 bool SetBuffersGeometry(
int width,
int height,
int format);
70 int32_t GetWidth()
const;
71 int32_t GetHeight()
const;
80 ANativeWindow* m_window{
nullptr};
85 public CJNIBroadcastReceiver,
87 public CJNISurfaceHolderCallback
92 m_appinstance.reset(
new CXBMCApp(nativeActivity, inputhandler));
93 return *m_appinstance;
95 static CXBMCApp& Get() {
return *m_appinstance; }
96 static void Destroy() { m_appinstance.reset(); }
102 void Announce(ANNOUNCEMENT::AnnouncementFlag flag,
103 const std::string& sender,
104 const std::string& message,
107 void onReceive(CJNIIntent intent)
override;
108 void onNewIntent(CJNIIntent intent)
override;
109 void onActivityResult(
int requestCode,
int resultCode, CJNIIntent resultData)
override;
110 void onVolumeChanged(
int volume)
override;
111 virtual void onAudioFocusChange(
int focusChange);
112 void doFrame(int64_t frameTimeNanos)
override;
113 void onVisibleBehindCanceled()
override;
116 void onInputDeviceAdded(
int deviceId)
override;
117 void onInputDeviceChanged(
int deviceId)
override;
118 void onInputDeviceRemoved(
int deviceId)
override;
121 void onDisplayAdded(
int displayId)
override;
122 void onDisplayChanged(
int displayId)
override;
123 void onDisplayRemoved(
int displayId)
override;
124 jni::jhobject getDisplayListener() {
return m_displayListener.get_raw(); }
126 bool isValid() {
return m_activity != NULL; }
128 void onStart()
override;
129 void onResume()
override;
130 void onPause()
override;
131 void onStop()
override;
132 void onDestroy()
override;
134 void onSaveState(
void **data,
size_t *size)
override;
135 void onConfigurationChanged()
override;
136 void onLowMemory()
override;
138 void onCreateWindow(ANativeWindow* window)
override;
139 void onResizeWindow()
override;
140 void onDestroyWindow()
override;
141 void onGainFocus()
override;
142 void onLostFocus()
override;
147 bool Stop(
int exitCode);
150 std::shared_ptr<CNativeWindow> GetNativeWindow(
int timeout)
const;
152 bool SetBuffersGeometry(
int width,
int height,
int format);
153 static int android_printf(
const char *format, ...);
155 int GetBatteryLevel()
const;
156 void KeepScreenOn(
bool on);
157 bool HasFocus()
const {
return m_hasFocus; }
159 static bool StartActivity(
const std::string& package,
160 const std::string& intent = std::string(),
161 const std::string& dataType = std::string(),
162 const std::string& dataURI = std::string(),
163 const std::string& flags = std::string(),
164 const std::string& extras = std::string(),
165 const std::string& action = std::string(),
166 const std::string& category = std::string(),
167 const std::string& className = std::string());
168 std::vector<androidPackage> GetApplications()
const;
176 static bool GetExternalStorage(std::string &path,
const std::string &type =
"");
177 static bool GetStorageUsage(
const std::string &path, std::string &usage);
178 static int GetMaxSystemVolume();
179 static float GetSystemVolume();
180 static void SetSystemVolume(
float percent);
182 void SetRefreshRate(
float rate);
183 void SetDisplayMode(
int mode,
float rate);
189 void OnPlayBackStarted();
190 void OnPlayBackPaused();
191 void OnPlayBackStopped();
194 void UpdateSessionMetadata();
195 void UpdateSessionState();
199 void UnregisterInputDeviceCallbacks();
200 static const CJNIViewInputDevice GetInputDevice(
int deviceId);
201 static std::vector<int> GetInputDeviceIds();
204 void UnregisterInputDeviceEventHandler();
205 bool onInputDeviceEvent(
const AInputEvent* event);
208 void DeinitFrameCallback();
213 bool WaitVSync(
unsigned int milliSeconds);
214 int64_t GetNextFrameTime()
const;
215 float GetFrameLatencyMs()
const;
217 bool getVideosurfaceInUse();
218 void setVideosurfaceInUse(
bool videosurfaceInUse);
220 bool GetMemoryInfo(
long& availMem,
long& totalMem);
226 static int GetMaxSystemVolume(JNIEnv *env);
227 bool AcquireAudioFocus();
228 bool ReleaseAudioFocus();
229 void RequestVisibleBehind(
bool requested);
232 static std::unique_ptr<CXBMCApp> m_appinstance;
238 std::unique_ptr<jni::CJNIXBMCMainView> m_mainView;
239 std::unique_ptr<jni::CJNIXBMCMediaSession> m_mediaSession;
240 std::string GetFilenameFromIntent(
const CJNIIntent &intent);
245 static void SetRefreshRateCallback(
void* rateVariant);
246 static void SetDisplayModeCallback(
void* modeVariant);
247 static void KeepScreenOnCallback(
void* onVariant);
249 static void RegisterDisplayListenerCallback(
void*);
250 void UnregisterDisplayListener();
252 ANativeActivity* m_activity{
nullptr};
254 int m_batteryLevel{0};
255 bool m_hasFocus{
false};
256 bool m_headsetPlugged{
false};
257 bool m_hdmiSource{
false};
260 bool m_hasReqVisible{
false};
261 bool m_firstrun{
true};
262 std::atomic<bool> m_exiting{
false};
264 bool m_bResumePlayback{
false};
265 std::thread m_thread;
266 mutable CCriticalSection m_applicationsMutex;
267 mutable std::vector<androidPackage> m_applications;
269 std::shared_ptr<CNativeWindow> m_window;
273 CEvent m_displayChangeEvent;
275 std::unique_ptr<CJNIActivityManager> m_activityManager;
277 bool XBMC_DestroyDisplay();
278 bool XBMC_SetupDisplay();
280 uint32_t m_playback_state{0};
281 int64_t m_frameTimeNanos{0};
282 float m_refreshRate{0.0f};
286 void surfaceChanged(CJNISurfaceHolder holder,
int format,
int width,
int height)
override;
287 void surfaceCreated(CJNISurfaceHolder holder)
override;
288 void surfaceDestroyed(CJNISurfaceHolder holder)
override;
This is an Event class built from a ConditionVariable.
Definition: Event.h:35
Definition: JNIMainActivity.h:18
Definition: IAnnouncer.h:70
Definition: WinSystemAndroidGLESContext.h:19
Definition: VideoSyncAndroid.h:14
Definition: JNIXBMCAudioManagerOnAudioFocusChangeListener.h:17
Definition: JNIXBMCDisplayManagerDisplayListener.h:16
Definition: IActivityHandler.h:24
Definition: AESinkAUDIOTRACK.h:23