OSDN Git Service

Checks for existence of vr components before trying to disable them.
authorCraig Donner <cdonner@google.com>
Mon, 18 Apr 2016 22:50:57 +0000 (15:50 -0700)
committerCraig Donner <cdonner@google.com>
Mon, 18 Apr 2016 23:31:52 +0000 (16:31 -0700)
Fixes: 28249296
Change-Id: I98506c263387c9deb05ae6bc997e92e0000b71ad

services/core/java/com/android/server/vr/VrManagerService.java

index 890a715..a9553a5 100644 (file)
@@ -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<ComponentName> 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<String> vrComponentPackageNames, ArraySet<ComponentName> 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;
                 }
             }