OSDN Git Service

Merge "Take into account default app for default grants"
authorSvetoslav Ganov <svetoslavganov@google.com>
Thu, 5 Nov 2015 02:19:12 +0000 (02:19 +0000)
committerGerrit Code Review <noreply-gerritcodereview@google.com>
Thu, 5 Nov 2015 02:19:12 +0000 (02:19 +0000)
1  2 
services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java

@@@ -245,8 -245,6 +245,8 @@@ final class DefaultPermissionGrantPolic
              if (verifierPackage != null
                      && doesPackageSupportRuntimePermissions(verifierPackage)) {
                  grantRuntimePermissionsLPw(verifierPackage, STORAGE_PERMISSIONS, true, userId);
 +                grantRuntimePermissionsLPw(verifierPackage, PHONE_PERMISSIONS, false, userId);
 +                grantRuntimePermissionsLPw(verifierPackage, SMS_PERMISSIONS, false, userId);
              }
  
              // SetupWizard
          }
      }
  
      private void grantDefaultPermissionsToDefaultSystemSmsAppLPr(
              PackageParser.Package smsPackage, int userId) {
          if (doesPackageSupportRuntimePermissions(smsPackage)) {
          }
      }
  
      public void grantDefaultPermissionsToDefaultSmsAppLPr(String packageName, int userId) {
          Log.i(TAG, "Granting permissions to default sms app for user:" + userId);
          if (packageName == null) {
  
      private PackageParser.Package getDefaultSystemHandlerActivityPackageLPr(
              Intent intent, int userId) {
-         List<ResolveInfo> handlers = mService.mActivities.queryIntent(intent,
-                 intent.resolveType(mService.mContext.getContentResolver()),
-                 PackageManager.GET_DISABLED_COMPONENTS, userId);
-         if (handlers == null) {
+         ResolveInfo handler = mService.resolveIntent(intent,
+                 intent.resolveType(mService.mContext.getContentResolver()), 0, userId);
+         if (handler == null) {
              return null;
          }
-         final int handlerCount = handlers.size();
-         for (int i = 0; i < handlerCount; i++) {
-             ResolveInfo handler = handlers.get(i);
-             PackageParser.Package handlerPackage = getSystemPackageLPr(
-                     handler.activityInfo.packageName);
-             if (handlerPackage != null) {
-                 return handlerPackage;
-             }
-         }
-         return null;
+         return getSystemPackageLPr(handler.activityInfo.packageName);
      }
  
      private PackageParser.Package getDefaultSystemHandlerServicePackageLPr(
              Intent intent, int userId) {
          List<ResolveInfo> handlers = mService.queryIntentServices(intent,
-                 intent.resolveType(mService.mContext.getContentResolver()),
-                 PackageManager.GET_DISABLED_COMPONENTS, userId);
+                 intent.resolveType(mService.mContext.getContentResolver()), 0, userId);
          if (handlers == null) {
              return null;
          }
          for (String syncAdapterPackageName : syncAdapterPackageNames) {
              homeIntent.setPackage(syncAdapterPackageName);
  
-             List<ResolveInfo> homeActivities = mService.mActivities.queryIntent(homeIntent,
-                     homeIntent.resolveType(mService.mContext.getContentResolver()),
-                     PackageManager.GET_DISABLED_COMPONENTS, userId);
-             if (!homeActivities.isEmpty()) {
+             ResolveInfo homeActivity = mService.resolveIntent(homeIntent,
+                     homeIntent.resolveType(mService.mContext.getContentResolver()), 0, userId);
+             if (homeActivity != null) {
                  continue;
              }
  
  
                      mService.grantRuntimePermission(pkg.packageName, permission, userId);
                      if (DEBUG) {
 -                        Log.i(TAG, "Granted " + permission + " to default handler "
 -                                + pkg.packageName);
 +                        Log.i(TAG, "Granted " + (systemFixed ? "fixed " : "not fixed ")
 +                                + permission + " to default handler " + pkg.packageName);
                      }
  
                      int newFlags = PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT;
                      mService.updatePermissionFlags(permission, pkg.packageName,
                              newFlags, newFlags, userId);
                  }
 +
 +                // If a component gets a permission for being the default handler A
 +                // and also default handler B, we grant the weaker grant form.
 +                if ((flags & PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT) != 0
 +                        && (flags & PackageManager.FLAG_PERMISSION_SYSTEM_FIXED) != 0
 +                        && !systemFixed) {
 +                    if (DEBUG) {
 +                        Log.i(TAG, "Granted not fixed " + permission + " to default handler "
 +                                + pkg.packageName);
 +                    }
 +                    mService.updatePermissionFlags(permission, pkg.packageName,
 +                            PackageManager.FLAG_PERMISSION_SYSTEM_FIXED, 0, userId);
 +                }
              }
          }
      }