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