From 672afaa43b97d24c1f3aaf9722e53b70dbac8c54 Mon Sep 17 00:00:00 2001 From: Craig Donner Date: Mon, 18 Apr 2016 15:50:57 -0700 Subject: [PATCH] Checks for existence of vr components before trying to disable them. Fixes: 28249296 Change-Id: I98506c263387c9deb05ae6bc997e92e0000b71ad --- .../android/server/vr/VrManagerService.java | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/services/core/java/com/android/server/vr/VrManagerService.java b/services/core/java/com/android/server/vr/VrManagerService.java index 890a7159fbd90..a9553a586c5ca 100644 --- a/services/core/java/com/android/server/vr/VrManagerService.java +++ b/services/core/java/com/android/server/vr/VrManagerService.java @@ -335,10 +335,7 @@ public class VrManagerService extends SystemService implements EnabledComponentC if (!vrModeIsUsed) { Slog.i(TAG, "No VR packages found, disabling VR components"); - for (ComponentName componentName : vrComponents) { - pm.setApplicationEnabledSetting(componentName.getPackageName(), - PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0); - } + setVrComponentsEnabledOrDisabled(vrComponents, false); // Register to receive an intent when a new package is installed, in case that package // requires VR components. @@ -364,6 +361,26 @@ public class VrManagerService extends SystemService implements EnabledComponentC } } + private void setVrComponentsEnabledOrDisabled(ArraySet vrComponents, + boolean enabled) { + int state = enabled ? + PackageManager.COMPONENT_ENABLED_STATE_ENABLED : + PackageManager.COMPONENT_ENABLED_STATE_DISABLED; + PackageManager pm = mContext.getPackageManager(); + for (ComponentName componentName : vrComponents) { + try { + // Note that we must first check for the existance of the package before trying + // to set its enabled state. This is to prevent PackageManager from throwing + // an excepton if the package is not found (not just a NameNotFoundException + // exception). + PackageInfo packageInfo = pm.getPackageInfo(componentName.getPackageName(), + PackageManager.GET_CONFIGURATIONS); + pm.setApplicationEnabledSetting(componentName.getPackageName(), state , 0); + } catch (NameNotFoundException e) { + } + } + } + private boolean enableVrComponentsIfVrModeUsed(PackageManager pm, PackageInfo packageInfo, ArraySet vrComponentPackageNames, ArraySet vrComponents) { boolean isVrComponent = vrComponents != null && @@ -374,10 +391,7 @@ public class VrManagerService extends SystemService implements EnabledComponentC (featureInfo.name.equals(PackageManager.FEATURE_VR_MODE) || featureInfo.name.equals(PackageManager.FEATURE_VR_MODE_HIGH_PERFORMANCE))) { Slog.i(TAG, "VR package found, enabling VR components"); - for (ComponentName componentName : vrComponents) { - pm.setApplicationEnabledSetting(componentName.getPackageName(), - PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0); - } + setVrComponentsEnabledOrDisabled(vrComponents, true); return true; } }