X-Git-Url: http://code.vuplus.com/gitweb/?a=blobdiff_plain;f=xbmc%2Fandroid%2Factivity%2FXBMCApp.cpp;h=a9c66a93af0aa861f4a8132dc17a3a4d0bdd3183;hb=2d2eff9c723670fd76f711e94bad69fbd587438c;hp=1b95381410802545ec76748ce344dab34eb9d506;hpb=c6201c0edfd3ac48d7047c1de61b349c109efdaa;p=vuplus_xbmc diff --git a/xbmc/android/activity/XBMCApp.cpp b/xbmc/android/activity/XBMCApp.cpp index 1b95381..a9c66a9 100644 --- a/xbmc/android/activity/XBMCApp.cpp +++ b/xbmc/android/activity/XBMCApp.cpp @@ -46,6 +46,7 @@ #include "ApplicationMessenger.h" #include "utils/StringUtils.h" #include "AppParamParser.h" +#include "XbmcContext.h" #include #include "android/jni/JNIThreading.h" #include "android/jni/BroadcastReceiver.h" @@ -86,6 +87,9 @@ ANativeActivity *CXBMCApp::m_activity = NULL; ANativeWindow* CXBMCApp::m_window = NULL; int CXBMCApp::m_batteryLevel = 0; int CXBMCApp::m_initialVolume = 0; +CCriticalSection CXBMCApp::m_applicationsMutex; +std::vector CXBMCApp::m_applications; + CXBMCApp::CXBMCApp(ANativeActivity* nativeActivity) : CJNIContext(nativeActivity) @@ -128,6 +132,12 @@ void CXBMCApp::onResume() 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() @@ -251,7 +261,8 @@ void CXBMCApp::run() int status = 0; SetupEnv(); - + XBMC::Context context; + m_initialVolume = GetSystemVolume(); CJNIIntent startIntent = getIntent(); @@ -347,22 +358,27 @@ int CXBMCApp::GetDPI() return dpi; } -bool CXBMCApp::ListApplications(vector *applications) +std::vector CXBMCApp::GetApplications() { - CJNIList 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 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)