-
Notifications
You must be signed in to change notification settings - Fork 0
/
XBMCApp.h
162 lines (133 loc) · 4.49 KB
/
XBMCApp.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#pragma once
/*
* Copyright (C) 2012-2013 Team XBMC
* http://www.xbmc.org
*
* This Program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This Program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with XBMC; see the file COPYING. If not, see
* <http://www.gnu.org/licenses/>.
*
*/
#include <math.h>
#include <pthread.h>
#include <string>
#include <vector>
#include <android/native_activity.h>
#include "IActivityHandler.h"
#include "IInputHandler.h"
#include "xbmc.h"
// forward delares
class CAESinkAUDIOTRACK;
typedef struct _JNIEnv JNIEnv;
struct androidIcon
{
unsigned int width;
unsigned int height;
void *pixels;
};
struct androidPackage
{
std::string packageName;
std::string packageLabel;
};
class CXBMCApp : public IActivityHandler
{
public:
CXBMCApp(ANativeActivity *nativeActivity);
virtual ~CXBMCApp();
bool isValid() { return m_activity != NULL; }
ActivityResult onActivate();
void onDeactivate();
void onStart();
void onResume();
void onPause();
void onStop();
void onDestroy();
void onSaveState(void **data, size_t *size);
void onConfigurationChanged();
void onLowMemory();
void onCreateWindow(ANativeWindow* window);
void onResizeWindow();
void onDestroyWindow();
void onGainFocus();
void onLostFocus();
static ANativeWindow* GetNativeWindow() { return m_window; };
static int SetBuffersGeometry(int width, int height, int format);
static int android_printf(const char *format, ...);
static int GetBatteryLevel();
static bool StartActivity(const std::string &package, const std::string &intent = std::string(), const std::string &dataType = std::string(), const std::string &dataURI = std::string());
static bool ListApplications(std::vector <androidPackage> *applications);
static bool GetIconSize(const std::string &packageName, int *width, int *height);
static bool GetIcon(const std::string &packageName, void* buffer, unsigned int bufSize);
/*!
* \brief If external storage is available, it returns the path for the external storage (for the specified type)
* \param path will contain the path of the external storage (for the specified type)
* \param type optional type. Possible values are "", "files", "music", "videos", "pictures", "photos, "downloads"
* \return true if external storage is available and a valid path has been stored in the path parameter
*/
static bool GetExternalStorage(std::string &path, const std::string &type = "");
static bool GetStorageUsage(const std::string &path, std::string &usage);
static int GetMaxSystemVolume();
static int GetDPI();
protected:
// limit who can access AttachCurrentThread/DetachCurrentThread
friend class CAESinkAUDIOTRACK;
friend class CAndroidFeatures;
friend class CFileAndroidApp;
friend class CAndroidIntents;
static int AttachCurrentThread(JNIEnv** p_env, void* thr_args = NULL);
static int DetachCurrentThread();
static int GetMaxSystemVolume(JNIEnv *env);
static void SetSystemVolume(JNIEnv *env, float percent);
private:
static bool HasLaunchIntent(const std::string &package);
bool getWakeLock(JNIEnv *env);
void acquireWakeLock();
void releaseWakeLock();
void run();
void stop();
static ANativeActivity *m_activity;
jobject m_wakeLock;
typedef enum {
// XBMC_Initialize hasn't been executed yet
Uninitialized,
// XBMC_Initialize has been successfully executed
Initialized,
// XBMC is currently rendering
Rendering,
// XBMC has stopped rendering because it has lost focus
// but it still has an EGLContext
Unfocused,
// XBMC has been paused/stopped and does not have an
// EGLContext
Paused,
// XBMC is being stopped
Stopping,
// XBMC has stopped
Stopped,
// An error has occured
Error
} AppState;
typedef struct {
pthread_t thread;
pthread_mutex_t mutex;
AppState appState;
} State;
State m_state;
void setAppState(AppState state);
static ANativeWindow* m_window;
void XBMC_Pause(bool pause);
void XBMC_Stop();
bool XBMC_DestroyDisplay();
bool XBMC_SetupDisplay();
};