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()
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)