summaryrefslogtreecommitdiffstats
path: root/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
diff options
context:
space:
mode:
Diffstat (limited to 'services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java')
-rw-r--r--services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java174
1 files changed, 120 insertions, 54 deletions
diff --git a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
index c9555c4..82b8bca 100644
--- a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
+++ b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
@@ -56,7 +56,7 @@ final class DefaultPermissionGrantPolicy {
static {
PHONE_PERMISSIONS.add(Manifest.permission.READ_PHONE_STATE);
PHONE_PERMISSIONS.add(Manifest.permission.CALL_PHONE);
- PHONE_PERMISSIONS.add( Manifest.permission.READ_CALL_LOG);
+ PHONE_PERMISSIONS.add(Manifest.permission.READ_CALL_LOG);
PHONE_PERMISSIONS.add(Manifest.permission.WRITE_CALL_LOG);
PHONE_PERMISSIONS.add(Manifest.permission.ADD_VOICEMAIL);
PHONE_PERMISSIONS.add(Manifest.permission.USE_SIP);
@@ -135,7 +135,8 @@ final class DefaultPermissionGrantPolicy {
private PackagesProvider mImePackagesProvider;
private PackagesProvider mLocationPackagesProvider;
private PackagesProvider mVoiceInteractionPackagesProvider;
- private PackagesProvider mCarrierAppPackagesProvider;
+ private PackagesProvider mSmsAppPackagesProvider;
+ private PackagesProvider mDialerAppPackagesProvider;
public DefaultPermissionGrantPolicy(PackageManagerService service) {
mService = service;
@@ -153,8 +154,12 @@ final class DefaultPermissionGrantPolicy {
mVoiceInteractionPackagesProvider = provider;
}
- public void setCarrierAppPackagesProviderLPw(PackagesProvider provider) {
- mCarrierAppPackagesProvider = provider;
+ public void setSmsAppPackagesProviderLPw(PackagesProvider provider) {
+ mSmsAppPackagesProvider = provider;
+ }
+
+ public void setDialerAppPackagesProviderLPw(PackagesProvider provider) {
+ mDialerAppPackagesProvider = provider;
}
public void grantDefaultPermissions(int userId) {
@@ -163,7 +168,7 @@ final class DefaultPermissionGrantPolicy {
}
private void grantPermissionsToSysComponentsAndPrivApps(int userId) {
- Log.i(TAG, "Granting permissions to platform components");
+ Log.i(TAG, "Granting permissions to platform components for user" + userId);
synchronized (mService.mPackages) {
for (PackageParser.Package pkg : mService.mPackages.values()) {
@@ -195,18 +200,20 @@ final class DefaultPermissionGrantPolicy {
}
private void grantDefaultSystemHandlerPermissions(int userId) {
- Log.i(TAG, "Granting permissions to default platform handlers");
+ Log.i(TAG, "Granting permissions to default platform handlers for user:" + userId);
final PackagesProvider imePackagesProvider;
final PackagesProvider locationPackagesProvider;
final PackagesProvider voiceInteractionPackagesProvider;
- final PackagesProvider carrierAppPackagesProvider;
+ final PackagesProvider smsAppPackagesProvider;
+ final PackagesProvider dialerAppPackagesProvider;
synchronized (mService.mPackages) {
imePackagesProvider = mImePackagesProvider;
locationPackagesProvider = mLocationPackagesProvider;
voiceInteractionPackagesProvider = mVoiceInteractionPackagesProvider;
- carrierAppPackagesProvider = mCarrierAppPackagesProvider;
+ smsAppPackagesProvider = mSmsAppPackagesProvider;
+ dialerAppPackagesProvider = mDialerAppPackagesProvider;
}
String[] imePackageNames = (imePackagesProvider != null)
@@ -215,8 +222,10 @@ final class DefaultPermissionGrantPolicy {
? voiceInteractionPackagesProvider.getPackages(userId) : null;
String[] locationPackageNames = (locationPackagesProvider != null)
? locationPackagesProvider.getPackages(userId) : null;
- String[] carrierAppPackageNames = (carrierAppPackagesProvider != null)
- ? carrierAppPackagesProvider.getPackages(userId) : null;
+ String[] smsAppPackageNames = (smsAppPackagesProvider != null)
+ ? smsAppPackagesProvider.getPackages(userId) : null;
+ String[] dialerAppPackageNames = (dialerAppPackagesProvider != null)
+ ? dialerAppPackagesProvider.getPackages(userId) : null;
synchronized (mService.mPackages) {
// Installers
@@ -248,7 +257,7 @@ final class DefaultPermissionGrantPolicy {
// SetupWizard
Intent setupIntent = new Intent(Intent.ACTION_MAIN);
setupIntent.addCategory(Intent.CATEGORY_HOME);
- PackageParser.Package setupPackage = getDefaultSystemHandlerActvityPackageLPr(
+ PackageParser.Package setupPackage = getDefaultSystemHandlerActivityPackageLPr(
setupIntent, userId);
if (setupPackage != null
&& doesPackageSupportRuntimePermissions(setupPackage)) {
@@ -257,21 +266,23 @@ final class DefaultPermissionGrantPolicy {
grantRuntimePermissionsLPw(setupPackage, SETTINGS_PERMISSIONS, userId);
}
- // Phone
- Intent dialerIntent = new Intent(Intent.ACTION_DIAL);
- PackageParser.Package dialerPackage = getDefaultSystemHandlerActvityPackageLPr(
- dialerIntent, userId);
- if (dialerPackage != null
- && doesPackageSupportRuntimePermissions(dialerPackage)) {
- grantRuntimePermissionsLPw(dialerPackage, PHONE_PERMISSIONS, userId);
- grantRuntimePermissionsLPw(dialerPackage, CONTACTS_PERMISSIONS, userId);
- grantRuntimePermissionsLPw(dialerPackage, SMS_PERMISSIONS, userId);
- grantRuntimePermissionsLPw(dialerPackage, MICROPHONE_PERMISSIONS, userId);
+ // Dialer
+ if (dialerAppPackageNames != null) {
+ for (String dialerAppPackageName : dialerAppPackageNames) {
+ PackageParser.Package dialerPackage = getPackageLPr(dialerAppPackageName);
+ if (dialerPackage != null
+ && doesPackageSupportRuntimePermissions(dialerPackage)) {
+ grantRuntimePermissionsLPw(dialerPackage, PHONE_PERMISSIONS, userId);
+ grantRuntimePermissionsLPw(dialerPackage, CONTACTS_PERMISSIONS, userId);
+ grantRuntimePermissionsLPw(dialerPackage, SMS_PERMISSIONS, userId);
+ grantRuntimePermissionsLPw(dialerPackage, MICROPHONE_PERMISSIONS, userId);
+ }
+ }
}
// Camera
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
- PackageParser.Package cameraPackage = getDefaultSystemHandlerActvityPackageLPr(
+ PackageParser.Package cameraPackage = getDefaultSystemHandlerActivityPackageLPr(
cameraIntent, userId);
if (cameraPackage != null
&& doesPackageSupportRuntimePermissions(cameraPackage)) {
@@ -296,29 +307,30 @@ final class DefaultPermissionGrantPolicy {
// Downloads UI
Intent downloadsUiIntent = new Intent(DownloadManager.ACTION_VIEW_DOWNLOADS);
- PackageParser.Package downloadsUiPackage = getDefaultSystemHandlerActvityPackageLPr(
+ PackageParser.Package downloadsUiPackage = getDefaultSystemHandlerActivityPackageLPr(
downloadsUiIntent, userId);
if (downloadsUiPackage != null
&& doesPackageSupportRuntimePermissions(downloadsUiPackage)) {
grantRuntimePermissionsLPw(downloadsUiPackage, STORAGE_PERMISSIONS, userId);
}
- // Messaging
- Intent messagingIntent = new Intent(Intent.ACTION_MAIN);
- messagingIntent.addCategory(Intent.CATEGORY_APP_MESSAGING);
- PackageParser.Package messagingPackage = getDefaultSystemHandlerActvityPackageLPr(
- messagingIntent, userId);
- if (messagingPackage != null
- && doesPackageSupportRuntimePermissions(messagingPackage)) {
- grantRuntimePermissionsLPw(messagingPackage, PHONE_PERMISSIONS, userId);
- grantRuntimePermissionsLPw(messagingPackage, CONTACTS_PERMISSIONS, userId);
- grantRuntimePermissionsLPw(messagingPackage, SMS_PERMISSIONS, userId);
+ // SMS
+ if (smsAppPackageNames != null) {
+ for (String smsPackageName : smsAppPackageNames) {
+ PackageParser.Package smsPackage = getPackageLPr(smsPackageName);
+ if (smsPackage != null
+ && doesPackageSupportRuntimePermissions(smsPackage)) {
+ grantRuntimePermissionsLPw(smsPackage, PHONE_PERMISSIONS, userId);
+ grantRuntimePermissionsLPw(smsPackage, CONTACTS_PERMISSIONS, userId);
+ grantRuntimePermissionsLPw(smsPackage, SMS_PERMISSIONS, userId);
+ }
+ }
}
// Calendar
Intent calendarIntent = new Intent(Intent.ACTION_MAIN);
calendarIntent.addCategory(Intent.CATEGORY_APP_CALENDAR);
- PackageParser.Package calendarPackage = getDefaultSystemHandlerActvityPackageLPr(
+ PackageParser.Package calendarPackage = getDefaultSystemHandlerActivityPackageLPr(
calendarIntent, userId);
if (calendarPackage != null
&& doesPackageSupportRuntimePermissions(calendarPackage)) {
@@ -329,7 +341,7 @@ final class DefaultPermissionGrantPolicy {
// Contacts
Intent contactsIntent = new Intent(Intent.ACTION_MAIN);
contactsIntent.addCategory(Intent.CATEGORY_APP_CONTACTS);
- PackageParser.Package contactsPackage = getDefaultSystemHandlerActvityPackageLPr(
+ PackageParser.Package contactsPackage = getDefaultSystemHandlerActivityPackageLPr(
contactsIntent, userId);
if (contactsPackage != null
&& doesPackageSupportRuntimePermissions(contactsPackage)) {
@@ -340,7 +352,7 @@ final class DefaultPermissionGrantPolicy {
// Maps
Intent mapsIntent = new Intent(Intent.ACTION_MAIN);
mapsIntent.addCategory(Intent.CATEGORY_APP_MAPS);
- PackageParser.Package mapsPackage = getDefaultSystemHandlerActvityPackageLPr(
+ PackageParser.Package mapsPackage = getDefaultSystemHandlerActivityPackageLPr(
mapsIntent, userId);
if (mapsPackage != null
&& doesPackageSupportRuntimePermissions(mapsPackage)) {
@@ -350,7 +362,7 @@ final class DefaultPermissionGrantPolicy {
// Email
Intent emailIntent = new Intent(Intent.ACTION_MAIN);
emailIntent.addCategory(Intent.CATEGORY_APP_EMAIL);
- PackageParser.Package emailPackage = getDefaultSystemHandlerActvityPackageLPr(
+ PackageParser.Package emailPackage = getDefaultSystemHandlerActivityPackageLPr(
emailIntent, userId);
if (emailPackage != null
&& doesPackageSupportRuntimePermissions(emailPackage)) {
@@ -358,10 +370,17 @@ final class DefaultPermissionGrantPolicy {
}
// Browser
- Intent browserIntent = new Intent(Intent.ACTION_MAIN);
- browserIntent.addCategory(Intent.CATEGORY_APP_BROWSER);
- PackageParser.Package browserPackage = getDefaultSystemHandlerActvityPackageLPr(
- browserIntent, userId);
+ PackageParser.Package browserPackage = null;
+ String defaultBrowserPackage = mService.getDefaultBrowserPackageName(userId);
+ if (defaultBrowserPackage != null) {
+ browserPackage = getPackageLPr(defaultBrowserPackage);
+ }
+ if (browserPackage == null) {
+ Intent browserIntent = new Intent(Intent.ACTION_MAIN);
+ browserIntent.addCategory(Intent.CATEGORY_APP_BROWSER);
+ browserPackage = getDefaultSystemHandlerActivityPackageLPr(
+ browserIntent, userId);
+ }
if (browserPackage != null
&& doesPackageSupportRuntimePermissions(browserPackage)) {
grantRuntimePermissionsLPw(browserPackage, LOCATION_PERMISSIONS, userId);
@@ -420,19 +439,62 @@ final class DefaultPermissionGrantPolicy {
}
}
- // Carrier apps
- if (carrierAppPackageNames != null) {
- for (String packageName : carrierAppPackageNames) {
- PackageParser.Package carrierPackage = getSystemPackageLPr(packageName);
- if (carrierPackage != null
- && doesPackageSupportRuntimePermissions(carrierPackage)) {
- grantRuntimePermissionsLPw(carrierPackage, PHONE_PERMISSIONS, userId);
- grantRuntimePermissionsLPw(carrierPackage, LOCATION_PERMISSIONS, userId);
- }
- }
+ mService.mSettings.onDefaultRuntimePermissionsGrantedLPr(userId);
+ }
+ }
+
+ public void grantDefaultPermissionsToDefaultSmsAppLPr(String packageName, int userId) {
+ Log.i(TAG, "Granting permissions to default sms app for user:" + userId);
+ if (packageName == null) {
+ return;
+ }
+ PackageParser.Package smsPackage = getPackageLPr(packageName);
+ if (smsPackage != null && doesPackageSupportRuntimePermissions(smsPackage)) {
+ grantRuntimePermissionsLPw(smsPackage, PHONE_PERMISSIONS, userId);
+ grantRuntimePermissionsLPw(smsPackage, CONTACTS_PERMISSIONS, userId);
+ grantRuntimePermissionsLPw(smsPackage, SMS_PERMISSIONS, userId);
+ }
+ }
+
+ public void grantDefaultPermissionsToDefaultDialerAppLPr(String packageName, int userId) {
+ Log.i(TAG, "Granting permissions to default dialer app for user:" + userId);
+ if (packageName == null) {
+ return;
+ }
+ PackageParser.Package dialerPackage = getPackageLPr(packageName);
+ if (dialerPackage != null
+ && doesPackageSupportRuntimePermissions(dialerPackage)) {
+ grantRuntimePermissionsLPw(dialerPackage, PHONE_PERMISSIONS, userId);
+ grantRuntimePermissionsLPw(dialerPackage, CONTACTS_PERMISSIONS, userId);
+ grantRuntimePermissionsLPw(dialerPackage, SMS_PERMISSIONS, userId);
+ grantRuntimePermissionsLPw(dialerPackage, MICROPHONE_PERMISSIONS, userId);
+ }
+ }
+
+ public void grantDefaultPermissionsToEnabledCarrierAppsLPr(String[] packageNames, int userId) {
+ Log.i(TAG, "Granting permissions to enabled carrier apps for user:" + userId);
+ if (packageNames == null) {
+ return;
+ }
+ for (String packageName : packageNames) {
+ PackageParser.Package carrierPackage = getSystemPackageLPr(packageName);
+ if (carrierPackage != null
+ && doesPackageSupportRuntimePermissions(carrierPackage)) {
+ grantRuntimePermissionsLPw(carrierPackage, PHONE_PERMISSIONS, userId);
+ grantRuntimePermissionsLPw(carrierPackage, LOCATION_PERMISSIONS, userId);
}
+ }
+ }
- mService.mSettings.onDefaultRuntimePermissionsGrantedLPr(userId);
+ public void grantDefaultPermissionsToDefaultBrowserLPr(String packageName, int userId) {
+ Log.i(TAG, "Granting permissions to default browser for user:" + userId);
+ if (packageName == null) {
+ return;
+ }
+ PackageParser.Package browserPackage = getSystemPackageLPr(packageName);
+ if (browserPackage != null
+ && doesPackageSupportRuntimePermissions(browserPackage)) {
+ grantRuntimePermissionsLPw(browserPackage, LOCATION_PERMISSIONS, userId);
}
}
@@ -466,7 +528,7 @@ final class DefaultPermissionGrantPolicy {
return handlerPackages;
}
- private PackageParser.Package getDefaultSystemHandlerActvityPackageLPr(
+ private PackageParser.Package getDefaultSystemHandlerActivityPackageLPr(
Intent intent, int userId) {
List<ResolveInfo> handlers = mService.queryIntentActivities(intent, null, 0, userId);
final int handlerCount = handlers.size();
@@ -491,8 +553,12 @@ final class DefaultPermissionGrantPolicy {
return null;
}
+ private PackageParser.Package getPackageLPr(String packageName) {
+ return mService.mPackages.get(packageName);
+ }
+
private PackageParser.Package getSystemPackageLPr(String packageName) {
- PackageParser.Package pkg = mService.mPackages.get(packageName);
+ PackageParser.Package pkg = getPackageLPr(packageName);
if (pkg != null && pkg.isSystemApp()) {
return !isSysComponentOrPersistentPrivApp(pkg) ? pkg : null;
}