From c72d4cbc818bb5e755e1fd86c9c6c30c4e2375dd Mon Sep 17 00:00:00 2001 From: John Spurlock Date: Thu, 26 Feb 2015 14:49:55 -0500 Subject: VolumePrototypes: Better handle removals/upgrades. - Repoke the setting at startup to ensure we have the latest UID. - Automatically restore the default volume UI when the current vcs is uninstalled. Bug: 19260237 Change-Id: Ie1fe356fea08392278340b54230ab429d14e1583 --- .../android/systemui/statusbar/ServiceMonitor.java | 25 ++++++++++++++++------ .../src/com/android/systemui/volume/VolumeUI.java | 9 ++++++-- 2 files changed, 26 insertions(+), 8 deletions(-) (limited to 'packages') diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ServiceMonitor.java b/packages/SystemUI/src/com/android/systemui/statusbar/ServiceMonitor.java index 69a4932..602989a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/ServiceMonitor.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/ServiceMonitor.java @@ -177,6 +177,7 @@ public class ServiceMonitor { IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_PACKAGE_ADDED); filter.addAction(Intent.ACTION_PACKAGE_CHANGED); + filter.addAction(Intent.ACTION_PACKAGE_REMOVED); filter.addDataScheme("package"); mContext.registerReceiver(mBroadcastReceiver, filter); @@ -196,13 +197,14 @@ public class ServiceMonitor { + " extras=" + bundleToString(intent.getExtras())); if (Intent.ACTION_PACKAGE_ADDED.equals(intent.getAction())) { mHandler.sendEmptyMessage(MSG_START_SERVICE); - } else if (Intent.ACTION_PACKAGE_CHANGED.equals(intent.getAction())) { - PackageManager pm = mContext.getPackageManager(); - boolean serviceEnabled = - pm.getApplicationEnabledSetting(mServiceName.getPackageName()) - != PackageManager.COMPONENT_ENABLED_STATE_DISABLED + } else if (Intent.ACTION_PACKAGE_CHANGED.equals(intent.getAction()) + || Intent.ACTION_PACKAGE_REMOVED.equals(intent.getAction())) { + final PackageManager pm = mContext.getPackageManager(); + final boolean serviceEnabled = isPackageAvailable() + && pm.getApplicationEnabledSetting(mServiceName.getPackageName()) + != PackageManager.COMPONENT_ENABLED_STATE_DISABLED && pm.getComponentEnabledSetting(mServiceName) - != PackageManager.COMPONENT_ENABLED_STATE_DISABLED; + != PackageManager.COMPONENT_ENABLED_STATE_DISABLED; if (mBound && !serviceEnabled) { stopService(); scheduleCheckBound(); @@ -289,4 +291,15 @@ public class ServiceMonitor { Settings.Secure.putStringForUser(mContext.getContentResolver(), mSettingKey, setting, UserHandle.USER_CURRENT); } + + public boolean isPackageAvailable() { + final ComponentName component = getComponent(); + if (component == null) return false; + try { + return mContext.getPackageManager().isPackageAvailable(component.getPackageName()); + } catch (RuntimeException e) { + Log.w(mTag, "Error checking package availability", e); + return false; + } + } } diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java index 8048a48..b9d295c 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java @@ -111,11 +111,11 @@ public class VolumeUI extends SystemUI { private void setVolumeController(boolean register) { if (register) { - if (LOGD) Log.d(TAG, "Registering volume controller"); + if (LOGD) Log.d(TAG, "Registering default volume controller"); mAudioManager.setVolumeController(mVolumeController); mMediaSessionManager.setRemoteVolumeController(mRemoteVolumeController); } else { - if (LOGD) Log.d(TAG, "Unregistering volume controller"); + if (LOGD) Log.d(TAG, "Unregistering default volume controller"); mAudioManager.setVolumeController(null); mMediaSessionManager.setRemoteVolumeController(null); } @@ -258,11 +258,16 @@ public class VolumeUI extends SystemUI { if (LOGD) Log.d(TAG, "onNoService"); setVolumeController(true); mRestorationNotification.hide(); + if (!mVolumeControllerService.isPackageAvailable()) { + mVolumeControllerService.setComponent(null); + } } @Override public long onServiceStartAttempt() { if (LOGD) Log.d(TAG, "onServiceStartAttempt"); + // poke the setting to update the uid + mVolumeControllerService.setComponent(mVolumeControllerService.getComponent()); setVolumeController(false); mVolumeController.dismissNow(); mRestorationNotification.show(); -- cgit v1.1