#include "ApplicationMessenger.h"
#include "utils/StringUtils.h"
#include "AppParamParser.h"
+#include "XbmcContext.h"
#include <android/bitmap.h>
#include "android/jni/JNIThreading.h"
#include "android/jni/BroadcastReceiver.h"
ANativeWindow* CXBMCApp::m_window = NULL;
int CXBMCApp::m_batteryLevel = 0;
int CXBMCApp::m_initialVolume = 0;
+CCriticalSection CXBMCApp::m_applicationsMutex;
+std::vector<androidPackage> CXBMCApp::m_applications;
+
CXBMCApp::CXBMCApp(ANativeActivity* nativeActivity)
: CJNIContext(nativeActivity)
CJNIIntentFilter batteryFilter;
batteryFilter.addAction("android.intent.action.BATTERY_CHANGED");
registerReceiver(*this, batteryFilter);
+
+ // Clear the applications cache. We could have installed/deinstalled apps
+ {
+ CSingleLock lock(m_applicationsMutex);
+ m_applications.clear();
+ }
}
void CXBMCApp::onPause()
int status = 0;
SetupEnv();
-
+ XBMC::Context context;
+
m_initialVolume = GetSystemVolume();
CJNIIntent startIntent = getIntent();
return dpi;
}
-bool CXBMCApp::ListApplications(vector<androidPackage> *applications)
+std::vector<androidPackage> CXBMCApp::GetApplications()
{
- CJNIList<CJNIApplicationInfo> packageList = GetPackageManager().getInstalledApplications(CJNIPackageManager::GET_ACTIVITIES);
- int numPackages = packageList.size();
- for (int i = 0; i < numPackages; i++)
+ CSingleLock lock(m_applicationsMutex);
+ if (m_applications.empty())
{
- androidPackage newPackage;
- newPackage.packageName = packageList.get(i).packageName;
- newPackage.packageLabel = GetPackageManager().getApplicationLabel(packageList.get(i)).toString();
- CJNIIntent intent = GetPackageManager().getLaunchIntentForPackage(newPackage.packageName);
- if (!intent || !intent.hasCategory("android.intent.category.LAUNCHER"))
- continue;
-
- applications->push_back(newPackage);
+ CJNIList<CJNIApplicationInfo> packageList = GetPackageManager().getInstalledApplications(CJNIPackageManager::GET_ACTIVITIES);
+ int numPackages = packageList.size();
+ for (int i = 0; i < numPackages; i++)
+ {
+ androidPackage newPackage;
+ newPackage.packageName = packageList.get(i).packageName;
+ newPackage.packageLabel = GetPackageManager().getApplicationLabel(packageList.get(i)).toString();
+ CJNIIntent intent = GetPackageManager().getLaunchIntentForPackage(newPackage.packageName);
+ if (!intent || !intent.hasCategory("android.intent.category.LAUNCHER"))
+ continue;
+
+ m_applications.push_back(newPackage);
+ }
}
- return true;
+
+ return m_applications;
}
bool CXBMCApp::GetIconSize(const string &packageName, int *width, int *height)