Check for permissions after checking for features.

This changelist moves around the check for permissions and features,
so that apps that do not have the right features, do not trigger a
permission granting notification.

Such apps are, for example, MotoConnect and other device-specific
apps, that are synced to all devices but should not be installed on
devices that do not match.

At the moment, these show a permission but installation will fail
silently later on.

Bug: 30582992
Change-Id: Ia75591d90f2c056378e256f98fe7db61ede4c7b2
diff --git a/src/com/android/packageinstaller/wear/WearPackageInstallerService.java b/src/com/android/packageinstaller/wear/WearPackageInstallerService.java
index 2d4744c..443aa89 100644
--- a/src/com/android/packageinstaller/wear/WearPackageInstallerService.java
+++ b/src/com/android/packageinstaller/wear/WearPackageInstallerService.java
@@ -298,16 +298,6 @@
                 }
             }
 
-            // Check permissions on both the new wearable package and also on the already installed
-            // wearable package.
-            // If the app is targeting API level 23, we will also start a service in ClockworkHome
-            // which will ultimately prompt the user to accept/reject permissions.
-            if (checkPerms && !checkPermissions(pkg, companionSdkVersion, companionDeviceVersion,
-                    permUri, wearablePerms, tempFile)) {
-                Log.w(TAG, "Wearable does not have enough permissions.");
-                return;
-            }
-
             // Check that the wearable has all the features.
             boolean hasAllFeatures = true;
             if (pkg.reqFeatures != null) {
@@ -325,6 +315,16 @@
                 return;
             }
 
+            // Check permissions on both the new wearable package and also on the already installed
+            // wearable package.
+            // If the app is targeting API level 23, we will also start a service in ClockworkHome
+            // which will ultimately prompt the user to accept/reject permissions.
+            if (checkPerms && !checkPermissions(pkg, companionSdkVersion, companionDeviceVersion,
+                    permUri, wearablePerms, tempFile)) {
+                Log.w(TAG, "Wearable does not have enough permissions.");
+                return;
+            }
+
             // Finally install the package.
             ParcelFileDescriptor fd = getContentResolver().openFileDescriptor(assetUri, "r");
             PackageInstallerFactory.getPackageInstaller(this).install(packageName, fd,