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 SetDisplayMode(
int mode,
float rate);
188 void OnPlayBackStarted();
189 void OnPlayBackPaused();
190 void OnPlayBackStopped();
193 void UpdateSessionMetadata();
194 void UpdateSessionState();
198 void UnregisterInputDeviceCallbacks();
199 static const CJNIViewInputDevice GetInputDevice(
int deviceId);
200 static std::vector<int> GetInputDeviceIds();
203 void UnregisterInputDeviceEventHandler();
204 bool onInputDeviceEvent(
const AInputEvent* event);
207 void DeinitFrameCallback();
212 bool WaitVSync(
unsigned int milliSeconds);
213 int64_t GetNextFrameTime()
const;
214 float GetFrameLatencyMs()
const;
216 bool getVideosurfaceInUse();
217 void setVideosurfaceInUse(
bool videosurfaceInUse);
219 bool GetMemoryInfo(
long& availMem,
long& totalMem);
225 static int GetMaxSystemVolume(JNIEnv *env);
226 bool AcquireAudioFocus();
227 bool ReleaseAudioFocus();
228 void RequestVisibleBehind(
bool requested);
231 static std::unique_ptr<CXBMCApp> m_appinstance;
237 std::unique_ptr<jni::CJNIXBMCMainView> m_mainView;
238 std::unique_ptr<jni::CJNIXBMCMediaSession> m_mediaSession;
239 std::string GetFilenameFromIntent(
const CJNIIntent &intent);
244 static void SetDisplayModeCallback(
void* modeVariant);
245 static void KeepScreenOnCallback(
void* onVariant);
247 static void RegisterDisplayListenerCallback(
void*);
248 void UnregisterDisplayListener();
250 ANativeActivity* m_activity{
nullptr};
252 int m_batteryLevel{0};
253 bool m_hasFocus{
false};
254 bool m_headsetPlugged{
false};
255 bool m_hdmiSource{
false};
256 bool m_wakeUp{
false};
257 bool m_aeReset{
false};
258 bool m_hdmiPlugged{
true};
259 bool m_mediaSessionUpdated{
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();
285 uint32_t m_playback_state{0};
286 int64_t m_frameTimeNanos{0};
287 float m_refreshRate{0.0f};
291 void surfaceChanged(CJNISurfaceHolder holder,
int format,
int width,
int height)
override;
292 void surfaceCreated(CJNISurfaceHolder holder)
override;
293 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