Apps on sdcard: Add new broadcasts
Add new broadcasts ACTION_MEDIA_RESOURCES_AVAILABLE and ACTION_MEDIA_RESOURCES_UNAVAILABLE that get broadcast by PackageManagerService when sdcard gets mounted/unmounted by MountService so that packages on sdcard get recognized by various system services as being installed/available or removed/unavailable by the system. The broadcasts are sent before the actual package cleanup which includes mounting/unmounting the packages and we force a gc right after so that any lingering file references to resources on sdcard get released.
This commit is contained in:
@@ -329,16 +329,27 @@ class NotificationManagerService extends INotificationManager.Stub
|
||||
mUsbConnected = false;
|
||||
updateAdbNotification();
|
||||
} else if (action.equals(Intent.ACTION_PACKAGE_REMOVED)
|
||||
|| action.equals(Intent.ACTION_PACKAGE_RESTARTED)) {
|
||||
Uri uri = intent.getData();
|
||||
if (uri == null) {
|
||||
return;
|
||||
|| action.equals(Intent.ACTION_PACKAGE_RESTARTED)
|
||||
|| action.equals(Intent.ACTION_MEDIA_RESOURCES_UNAVAILABLE)) {
|
||||
String pkgList[] = null;
|
||||
if (action.equals(Intent.ACTION_MEDIA_RESOURCES_UNAVAILABLE)) {
|
||||
pkgList = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST);
|
||||
} else {
|
||||
Uri uri = intent.getData();
|
||||
if (uri == null) {
|
||||
return;
|
||||
}
|
||||
String pkgName = uri.getSchemeSpecificPart();
|
||||
if (pkgName == null) {
|
||||
return;
|
||||
}
|
||||
pkgList = new String[]{pkgName};
|
||||
}
|
||||
String pkgName = uri.getSchemeSpecificPart();
|
||||
if (pkgName == null) {
|
||||
return;
|
||||
if (pkgList != null && (pkgList.length > 0)) {
|
||||
for (String pkgName : pkgList) {
|
||||
cancelAllNotificationsInt(pkgName, 0, 0);
|
||||
}
|
||||
}
|
||||
cancelAllNotificationsInt(pkgName, 0, 0);
|
||||
} else if (action.equals(Intent.ACTION_SCREEN_ON)) {
|
||||
mScreenOn = true;
|
||||
updateNotificationPulse();
|
||||
@@ -429,6 +440,8 @@ class NotificationManagerService extends INotificationManager.Stub
|
||||
filter.addAction(Intent.ACTION_SCREEN_ON);
|
||||
filter.addAction(Intent.ACTION_SCREEN_OFF);
|
||||
mContext.registerReceiver(mIntentReceiver, filter);
|
||||
IntentFilter sdFilter = new IntentFilter(Intent.ACTION_MEDIA_RESOURCES_UNAVAILABLE);
|
||||
mContext.registerReceiver(mIntentReceiver, sdFilter);
|
||||
|
||||
SettingsObserver observer = new SettingsObserver(mHandler);
|
||||
observer.observe();
|
||||
|
||||
Reference in New Issue
Block a user