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 int32_t GetSDKVersion()
const {
return m_activity->sdkVersion; }
130 void onStart()
override;
131 void onResume()
override;
132 void onPause()
override;
133 void onStop()
override;
134 void onDestroy()
override;
136 void onSaveState(
void **data,
size_t *size)
override;
137 void onConfigurationChanged()
override;
138 void onLowMemory()
override;
140 void onCreateWindow(ANativeWindow* window)
override;
141 void onResizeWindow()
override;
142 void onDestroyWindow()
override;
143 void onGainFocus()
override;
144 void onLostFocus()
override;
149 bool Stop(
int exitCode);
152 std::shared_ptr<CNativeWindow> GetNativeWindow(
int timeout)
const;
154 bool SetBuffersGeometry(
int width,
int height,
int format);
155 static int android_printf(
const char *format, ...);
157 int GetBatteryLevel()
const;
158 void KeepScreenOn(
bool on);
159 bool HasFocus()
const {
return m_hasFocus; }
161 static bool StartActivity(
const std::string& package,
162 const std::string& intent = std::string(),
163 const std::string& dataType = std::string(),
164 const std::string& dataURI = std::string(),
165 const std::string& flags = std::string(),
166 const std::string& extras = std::string(),
167 const std::string& action = std::string(),
168 const std::string& category = std::string(),
169 const std::string& className = std::string());
170 std::vector<androidPackage> GetApplications()
const;
178 static bool GetExternalStorage(std::string &path,
const std::string &type =
"");
179 static bool GetStorageUsage(
const std::string &path, std::string &usage);
180 static int GetMaxSystemVolume();
181 static float GetSystemVolume();
182 static void SetSystemVolume(
float percent);
184 void SetRefreshRate(
float rate);
185 void SetDisplayMode(
int mode,
float rate);
191 void OnPlayBackStarted();
192 void OnPlayBackPaused();
193 void OnPlayBackStopped();
196 void UpdateSessionMetadata();
197 void UpdateSessionState();
201 void UnregisterInputDeviceCallbacks();
202 static const CJNIViewInputDevice GetInputDevice(
int deviceId);
203 static std::vector<int> GetInputDeviceIds();
206 void UnregisterInputDeviceEventHandler();
207 bool onInputDeviceEvent(
const AInputEvent* event);
210 void DeinitFrameCallback();
215 bool WaitVSync(
unsigned int milliSeconds);
216 int64_t GetNextFrameTime()
const;
217 float GetFrameLatencyMs()
const;
219 bool getVideosurfaceInUse();
220 void setVideosurfaceInUse(
bool videosurfaceInUse);
222 bool GetMemoryInfo(
long& availMem,
long& totalMem);
228 static int GetMaxSystemVolume(JNIEnv *env);
229 bool AcquireAudioFocus();
230 bool ReleaseAudioFocus();
231 void RequestVisibleBehind(
bool requested);
234 static std::unique_ptr<CXBMCApp> m_appinstance;
240 std::unique_ptr<CJNIXBMCMainView> m_mainView;
241 std::unique_ptr<jni::CJNIXBMCMediaSession> m_mediaSession;
242 std::string GetFilenameFromIntent(
const CJNIIntent &intent);
247 static void SetRefreshRateCallback(
void* rateVariant);
248 static void SetDisplayModeCallback(
void* modeVariant);
249 static void KeepScreenOnCallback(
void* onVariant);
251 static void RegisterDisplayListenerCallback(
void*);
252 void UnregisterDisplayListener();
254 ANativeActivity* m_activity{
nullptr};
256 int m_batteryLevel{0};
257 bool m_hasFocus{
false};
258 bool m_headsetPlugged{
false};
259 bool m_hdmiSource{
false};
262 bool m_hasReqVisible{
false};
263 bool m_firstrun{
true};
264 std::atomic<bool> m_exiting{
false};
266 bool m_bResumePlayback{
false};
267 std::thread m_thread;
268 mutable CCriticalSection m_applicationsMutex;
269 mutable std::vector<androidPackage> m_applications;
271 std::shared_ptr<CNativeWindow> m_window;
275 CEvent m_displayChangeEvent;
277 std::unique_ptr<CJNIActivityManager> m_activityManager;
279 bool XBMC_DestroyDisplay();
280 bool XBMC_SetupDisplay();
282 uint32_t m_playback_state{0};
283 int64_t m_frameTimeNanos{0};
284 float m_refreshRate{0.0f};
288 void surfaceChanged(CJNISurfaceHolder holder,
int format,
int width,
int height)
override;
289 void surfaceCreated(CJNISurfaceHolder holder)
override;
290 void surfaceDestroyed(CJNISurfaceHolder holder)
override;
This is an Event class built from a ConditionVariable.
Definition: Event.h:35
Definition: JNIMainActivity.h:15
Definition: IAnnouncer.h:70
Definition: WinSystemAndroidGLESContext.h:19
Definition: VideoSyncAndroid.h:14
Definition: JNIXBMCAudioManagerOnAudioFocusChangeListener.h:14
Definition: IActivityHandler.h:24
Definition: JNIXBMCDisplayManagerDisplayListener.h:13
Definition: AESinkAUDIOTRACK.h:23