Loading Android.mk +0 −1 Original line number Original line Diff line number Diff line Loading @@ -142,7 +142,6 @@ LOCAL_SRC_FILES += \ core/java/android/content/pm/IPackageManager.aidl \ core/java/android/content/pm/IPackageManager.aidl \ core/java/android/content/pm/IPackageMoveObserver.aidl \ core/java/android/content/pm/IPackageMoveObserver.aidl \ core/java/android/content/pm/IPackageStatsObserver.aidl \ core/java/android/content/pm/IPackageStatsObserver.aidl \ core/java/android/content/pm/IPackagesProvider.aidl \ core/java/android/content/pm/IOnPermissionsChangeListener.aidl \ core/java/android/content/pm/IOnPermissionsChangeListener.aidl \ core/java/android/database/IContentObserver.aidl \ core/java/android/database/IContentObserver.aidl \ core/java/android/hardware/ICameraService.aidl \ core/java/android/hardware/ICameraService.aidl \ Loading core/java/android/content/pm/IPackageManager.aidl +2 −3 Original line number Original line Diff line number Diff line Loading @@ -31,7 +31,6 @@ import android.content.pm.IPackageDeleteObserver2; import android.content.pm.IPackageDataObserver; import android.content.pm.IPackageDataObserver; import android.content.pm.IPackageMoveObserver; import android.content.pm.IPackageMoveObserver; import android.content.pm.IPackageStatsObserver; import android.content.pm.IPackageStatsObserver; import android.content.pm.IPackagesProvider; import android.content.pm.IOnPermissionsChangeListener; import android.content.pm.IOnPermissionsChangeListener; import android.content.pm.IntentFilterVerificationInfo; import android.content.pm.IntentFilterVerificationInfo; import android.content.pm.InstrumentationInfo; import android.content.pm.InstrumentationInfo; Loading Loading @@ -504,7 +503,7 @@ interface IPackageManager { void addOnPermissionsChangeListener(in IOnPermissionsChangeListener listener); void addOnPermissionsChangeListener(in IOnPermissionsChangeListener listener); void removeOnPermissionsChangeListener(in IOnPermissionsChangeListener listener); void removeOnPermissionsChangeListener(in IOnPermissionsChangeListener listener); void grantDefaultPermissions(int userId); void setCarrierAppPackagesProvider(in IPackagesProvider provider); int getMountExternalMode(int uid); int getMountExternalMode(int uid); void grantDefaultPermissionsToEnabledCarrierApps(in String[] packageNames, int userId); } } core/java/android/content/pm/IPackagesProvider.aidldeleted 100644 → 0 +0 −22 Original line number Original line Diff line number Diff line /* * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.content.pm; /** {@hide} */ interface IPackagesProvider { String[] getPackages(int userId); } core/java/android/content/pm/PackageManagerInternal.java +26 −0 Original line number Original line Diff line number Diff line Loading @@ -55,4 +55,30 @@ public abstract class PackageManagerInternal { * @param provider The packages provider. * @param provider The packages provider. */ */ public abstract void setVoiceInteractionPackagesProvider(PackagesProvider provider); public abstract void setVoiceInteractionPackagesProvider(PackagesProvider provider); /** * Sets the SMS packages provider. * @param provider The packages provider. */ public abstract void setSmsAppPackagesProvider(PackagesProvider provider); /** * Sets the dialer packages provider. * @param provider The packages provider. */ public abstract void setDialerAppPackagesProvider(PackagesProvider provider); /** * Requests granting of the default permissions to the current default SMS app. * @param packageName The default SMS package name. * @param userId The user for which to grant the permissions. */ public abstract void grantDefaultPermissionsToDefaultSmsApp(String packageName, int userId); /** * Requests granting of the default permissions to the current default dialer app. * @param packageName The default dialer package name. * @param userId The user for which to grant the permissions. */ public abstract void grantDefaultPermissionsToDefaultDialerApp(String packageName, int userId); } } services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java +119 −53 Original line number Original line Diff line number Diff line Loading @@ -143,7 +143,8 @@ final class DefaultPermissionGrantPolicy { private PackagesProvider mImePackagesProvider; private PackagesProvider mImePackagesProvider; private PackagesProvider mLocationPackagesProvider; private PackagesProvider mLocationPackagesProvider; private PackagesProvider mVoiceInteractionPackagesProvider; private PackagesProvider mVoiceInteractionPackagesProvider; private PackagesProvider mCarrierAppPackagesProvider; private PackagesProvider mSmsAppPackagesProvider; private PackagesProvider mDialerAppPackagesProvider; public DefaultPermissionGrantPolicy(PackageManagerService service) { public DefaultPermissionGrantPolicy(PackageManagerService service) { mService = service; mService = service; Loading @@ -161,8 +162,12 @@ final class DefaultPermissionGrantPolicy { mVoiceInteractionPackagesProvider = provider; mVoiceInteractionPackagesProvider = provider; } } public void setCarrierAppPackagesProviderLPw(PackagesProvider provider) { public void setSmsAppPackagesProviderLPw(PackagesProvider provider) { mCarrierAppPackagesProvider = provider; mSmsAppPackagesProvider = provider; } public void setDialerAppPackagesProviderLPw(PackagesProvider provider) { mDialerAppPackagesProvider = provider; } } public void grantDefaultPermissions(int userId) { public void grantDefaultPermissions(int userId) { Loading @@ -171,7 +176,7 @@ final class DefaultPermissionGrantPolicy { } } private void grantPermissionsToSysComponentsAndPrivApps(int userId) { 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) { synchronized (mService.mPackages) { for (PackageParser.Package pkg : mService.mPackages.values()) { for (PackageParser.Package pkg : mService.mPackages.values()) { Loading Loading @@ -203,18 +208,20 @@ final class DefaultPermissionGrantPolicy { } } private void grantDefaultSystemHandlerPermissions(int userId) { 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 imePackagesProvider; final PackagesProvider locationPackagesProvider; final PackagesProvider locationPackagesProvider; final PackagesProvider voiceInteractionPackagesProvider; final PackagesProvider voiceInteractionPackagesProvider; final PackagesProvider carrierAppPackagesProvider; final PackagesProvider smsAppPackagesProvider; final PackagesProvider dialerAppPackagesProvider; synchronized (mService.mPackages) { synchronized (mService.mPackages) { imePackagesProvider = mImePackagesProvider; imePackagesProvider = mImePackagesProvider; locationPackagesProvider = mLocationPackagesProvider; locationPackagesProvider = mLocationPackagesProvider; voiceInteractionPackagesProvider = mVoiceInteractionPackagesProvider; voiceInteractionPackagesProvider = mVoiceInteractionPackagesProvider; carrierAppPackagesProvider = mCarrierAppPackagesProvider; smsAppPackagesProvider = mSmsAppPackagesProvider; dialerAppPackagesProvider = mDialerAppPackagesProvider; } } String[] imePackageNames = (imePackagesProvider != null) String[] imePackageNames = (imePackagesProvider != null) Loading @@ -223,8 +230,10 @@ final class DefaultPermissionGrantPolicy { ? voiceInteractionPackagesProvider.getPackages(userId) : null; ? voiceInteractionPackagesProvider.getPackages(userId) : null; String[] locationPackageNames = (locationPackagesProvider != null) String[] locationPackageNames = (locationPackagesProvider != null) ? locationPackagesProvider.getPackages(userId) : null; ? locationPackagesProvider.getPackages(userId) : null; String[] carrierAppPackageNames = (carrierAppPackagesProvider != null) String[] smsAppPackageNames = (smsAppPackagesProvider != null) ? carrierAppPackagesProvider.getPackages(userId) : null; ? smsAppPackagesProvider.getPackages(userId) : null; String[] dialerAppPackageNames = (dialerAppPackagesProvider != null) ? dialerAppPackagesProvider.getPackages(userId) : null; synchronized (mService.mPackages) { synchronized (mService.mPackages) { // Installers // Installers Loading Loading @@ -256,7 +265,7 @@ final class DefaultPermissionGrantPolicy { // SetupWizard // SetupWizard Intent setupIntent = new Intent(Intent.ACTION_MAIN); Intent setupIntent = new Intent(Intent.ACTION_MAIN); setupIntent.addCategory(Intent.CATEGORY_HOME); setupIntent.addCategory(Intent.CATEGORY_HOME); PackageParser.Package setupPackage = getDefaultSystemHandlerActvityPackageLPr( PackageParser.Package setupPackage = getDefaultSystemHandlerActivityPackageLPr( setupIntent, userId); setupIntent, userId); if (setupPackage != null if (setupPackage != null && doesPackageSupportRuntimePermissions(setupPackage)) { && doesPackageSupportRuntimePermissions(setupPackage)) { Loading @@ -265,10 +274,10 @@ final class DefaultPermissionGrantPolicy { grantRuntimePermissionsLPw(setupPackage, SETTINGS_PERMISSIONS, userId); grantRuntimePermissionsLPw(setupPackage, SETTINGS_PERMISSIONS, userId); } } // Phone // Dialer Intent dialerIntent = new Intent(Intent.ACTION_DIAL); if (dialerAppPackageNames != null) { PackageParser.Package dialerPackage = getDefaultSystemHandlerActvityPackageLPr( for (String dialerAppPackageName : dialerAppPackageNames) { dialerIntent, userId); PackageParser.Package dialerPackage = getPackageLPr(dialerAppPackageName); if (dialerPackage != null if (dialerPackage != null && doesPackageSupportRuntimePermissions(dialerPackage)) { && doesPackageSupportRuntimePermissions(dialerPackage)) { grantRuntimePermissionsLPw(dialerPackage, PHONE_PERMISSIONS, userId); grantRuntimePermissionsLPw(dialerPackage, PHONE_PERMISSIONS, userId); Loading @@ -276,10 +285,12 @@ final class DefaultPermissionGrantPolicy { grantRuntimePermissionsLPw(dialerPackage, SMS_PERMISSIONS, userId); grantRuntimePermissionsLPw(dialerPackage, SMS_PERMISSIONS, userId); grantRuntimePermissionsLPw(dialerPackage, MICROPHONE_PERMISSIONS, userId); grantRuntimePermissionsLPw(dialerPackage, MICROPHONE_PERMISSIONS, userId); } } } } // Camera // Camera Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); PackageParser.Package cameraPackage = getDefaultSystemHandlerActvityPackageLPr( PackageParser.Package cameraPackage = getDefaultSystemHandlerActivityPackageLPr( cameraIntent, userId); cameraIntent, userId); if (cameraPackage != null if (cameraPackage != null && doesPackageSupportRuntimePermissions(cameraPackage)) { && doesPackageSupportRuntimePermissions(cameraPackage)) { Loading @@ -304,29 +315,30 @@ final class DefaultPermissionGrantPolicy { // Downloads UI // Downloads UI Intent downloadsUiIntent = new Intent(DownloadManager.ACTION_VIEW_DOWNLOADS); Intent downloadsUiIntent = new Intent(DownloadManager.ACTION_VIEW_DOWNLOADS); PackageParser.Package downloadsUiPackage = getDefaultSystemHandlerActvityPackageLPr( PackageParser.Package downloadsUiPackage = getDefaultSystemHandlerActivityPackageLPr( downloadsUiIntent, userId); downloadsUiIntent, userId); if (downloadsUiPackage != null if (downloadsUiPackage != null && doesPackageSupportRuntimePermissions(downloadsUiPackage)) { && doesPackageSupportRuntimePermissions(downloadsUiPackage)) { grantRuntimePermissionsLPw(downloadsUiPackage, STORAGE_PERMISSIONS, userId); grantRuntimePermissionsLPw(downloadsUiPackage, STORAGE_PERMISSIONS, userId); } } // Messaging // SMS Intent messagingIntent = new Intent(Intent.ACTION_MAIN); if (smsAppPackageNames != null) { messagingIntent.addCategory(Intent.CATEGORY_APP_MESSAGING); for (String smsPackageName : smsAppPackageNames) { PackageParser.Package messagingPackage = getDefaultSystemHandlerActvityPackageLPr( PackageParser.Package smsPackage = getPackageLPr(smsPackageName); messagingIntent, userId); if (smsPackage != null if (messagingPackage != null && doesPackageSupportRuntimePermissions(smsPackage)) { && doesPackageSupportRuntimePermissions(messagingPackage)) { grantRuntimePermissionsLPw(smsPackage, PHONE_PERMISSIONS, userId); grantRuntimePermissionsLPw(messagingPackage, PHONE_PERMISSIONS, userId); grantRuntimePermissionsLPw(smsPackage, CONTACTS_PERMISSIONS, userId); grantRuntimePermissionsLPw(messagingPackage, CONTACTS_PERMISSIONS, userId); grantRuntimePermissionsLPw(smsPackage, SMS_PERMISSIONS, userId); grantRuntimePermissionsLPw(messagingPackage, SMS_PERMISSIONS, userId); } } } } // Calendar // Calendar Intent calendarIntent = new Intent(Intent.ACTION_MAIN); Intent calendarIntent = new Intent(Intent.ACTION_MAIN); calendarIntent.addCategory(Intent.CATEGORY_APP_CALENDAR); calendarIntent.addCategory(Intent.CATEGORY_APP_CALENDAR); PackageParser.Package calendarPackage = getDefaultSystemHandlerActvityPackageLPr( PackageParser.Package calendarPackage = getDefaultSystemHandlerActivityPackageLPr( calendarIntent, userId); calendarIntent, userId); if (calendarPackage != null if (calendarPackage != null && doesPackageSupportRuntimePermissions(calendarPackage)) { && doesPackageSupportRuntimePermissions(calendarPackage)) { Loading @@ -348,7 +360,7 @@ final class DefaultPermissionGrantPolicy { // Contacts // Contacts Intent contactsIntent = new Intent(Intent.ACTION_MAIN); Intent contactsIntent = new Intent(Intent.ACTION_MAIN); contactsIntent.addCategory(Intent.CATEGORY_APP_CONTACTS); contactsIntent.addCategory(Intent.CATEGORY_APP_CONTACTS); PackageParser.Package contactsPackage = getDefaultSystemHandlerActvityPackageLPr( PackageParser.Package contactsPackage = getDefaultSystemHandlerActivityPackageLPr( contactsIntent, userId); contactsIntent, userId); if (contactsPackage != null if (contactsPackage != null && doesPackageSupportRuntimePermissions(contactsPackage)) { && doesPackageSupportRuntimePermissions(contactsPackage)) { Loading Loading @@ -379,7 +391,7 @@ final class DefaultPermissionGrantPolicy { // Maps // Maps Intent mapsIntent = new Intent(Intent.ACTION_MAIN); Intent mapsIntent = new Intent(Intent.ACTION_MAIN); mapsIntent.addCategory(Intent.CATEGORY_APP_MAPS); mapsIntent.addCategory(Intent.CATEGORY_APP_MAPS); PackageParser.Package mapsPackage = getDefaultSystemHandlerActvityPackageLPr( PackageParser.Package mapsPackage = getDefaultSystemHandlerActivityPackageLPr( mapsIntent, userId); mapsIntent, userId); if (mapsPackage != null if (mapsPackage != null && doesPackageSupportRuntimePermissions(mapsPackage)) { && doesPackageSupportRuntimePermissions(mapsPackage)) { Loading @@ -389,7 +401,7 @@ final class DefaultPermissionGrantPolicy { // Email // Email Intent emailIntent = new Intent(Intent.ACTION_MAIN); Intent emailIntent = new Intent(Intent.ACTION_MAIN); emailIntent.addCategory(Intent.CATEGORY_APP_EMAIL); emailIntent.addCategory(Intent.CATEGORY_APP_EMAIL); PackageParser.Package emailPackage = getDefaultSystemHandlerActvityPackageLPr( PackageParser.Package emailPackage = getDefaultSystemHandlerActivityPackageLPr( emailIntent, userId); emailIntent, userId); if (emailPackage != null if (emailPackage != null && doesPackageSupportRuntimePermissions(emailPackage)) { && doesPackageSupportRuntimePermissions(emailPackage)) { Loading @@ -397,10 +409,17 @@ final class DefaultPermissionGrantPolicy { } } // Browser // Browser 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); Intent browserIntent = new Intent(Intent.ACTION_MAIN); browserIntent.addCategory(Intent.CATEGORY_APP_BROWSER); browserIntent.addCategory(Intent.CATEGORY_APP_BROWSER); PackageParser.Package browserPackage = getDefaultSystemHandlerActvityPackageLPr( browserPackage = getDefaultSystemHandlerActivityPackageLPr( browserIntent, userId); browserIntent, userId); } if (browserPackage != null if (browserPackage != null && doesPackageSupportRuntimePermissions(browserPackage)) { && doesPackageSupportRuntimePermissions(browserPackage)) { grantRuntimePermissionsLPw(browserPackage, LOCATION_PERMISSIONS, userId); grantRuntimePermissionsLPw(browserPackage, LOCATION_PERMISSIONS, userId); Loading Loading @@ -459,9 +478,44 @@ final class DefaultPermissionGrantPolicy { } } } } // Carrier apps mService.mSettings.onDefaultRuntimePermissionsGrantedLPr(userId); if (carrierAppPackageNames != null) { } for (String packageName : carrierAppPackageNames) { } 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); PackageParser.Package carrierPackage = getSystemPackageLPr(packageName); if (carrierPackage != null if (carrierPackage != null && doesPackageSupportRuntimePermissions(carrierPackage)) { && doesPackageSupportRuntimePermissions(carrierPackage)) { Loading @@ -471,7 +525,15 @@ final class DefaultPermissionGrantPolicy { } } } } 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); } } } } Loading Loading @@ -505,7 +567,7 @@ final class DefaultPermissionGrantPolicy { return handlerPackages; return handlerPackages; } } private PackageParser.Package getDefaultSystemHandlerActvityPackageLPr( private PackageParser.Package getDefaultSystemHandlerActivityPackageLPr( Intent intent, int userId) { Intent intent, int userId) { List<ResolveInfo> handlers = mService.queryIntentActivities(intent, null, 0, userId); List<ResolveInfo> handlers = mService.queryIntentActivities(intent, null, 0, userId); final int handlerCount = handlers.size(); final int handlerCount = handlers.size(); Loading @@ -530,8 +592,12 @@ final class DefaultPermissionGrantPolicy { return null; return null; } } private PackageParser.Package getPackageLPr(String packageName) { return mService.mPackages.get(packageName); } private PackageParser.Package getSystemPackageLPr(String packageName) { private PackageParser.Package getSystemPackageLPr(String packageName) { PackageParser.Package pkg = mService.mPackages.get(packageName); PackageParser.Package pkg = getPackageLPr(packageName); if (pkg != null && pkg.isSystemApp()) { if (pkg != null && pkg.isSystemApp()) { return !isSysComponentOrPersistentPrivApp(pkg) ? pkg : null; return !isSysComponentOrPersistentPrivApp(pkg) ? pkg : null; } } Loading Loading
Android.mk +0 −1 Original line number Original line Diff line number Diff line Loading @@ -142,7 +142,6 @@ LOCAL_SRC_FILES += \ core/java/android/content/pm/IPackageManager.aidl \ core/java/android/content/pm/IPackageManager.aidl \ core/java/android/content/pm/IPackageMoveObserver.aidl \ core/java/android/content/pm/IPackageMoveObserver.aidl \ core/java/android/content/pm/IPackageStatsObserver.aidl \ core/java/android/content/pm/IPackageStatsObserver.aidl \ core/java/android/content/pm/IPackagesProvider.aidl \ core/java/android/content/pm/IOnPermissionsChangeListener.aidl \ core/java/android/content/pm/IOnPermissionsChangeListener.aidl \ core/java/android/database/IContentObserver.aidl \ core/java/android/database/IContentObserver.aidl \ core/java/android/hardware/ICameraService.aidl \ core/java/android/hardware/ICameraService.aidl \ Loading
core/java/android/content/pm/IPackageManager.aidl +2 −3 Original line number Original line Diff line number Diff line Loading @@ -31,7 +31,6 @@ import android.content.pm.IPackageDeleteObserver2; import android.content.pm.IPackageDataObserver; import android.content.pm.IPackageDataObserver; import android.content.pm.IPackageMoveObserver; import android.content.pm.IPackageMoveObserver; import android.content.pm.IPackageStatsObserver; import android.content.pm.IPackageStatsObserver; import android.content.pm.IPackagesProvider; import android.content.pm.IOnPermissionsChangeListener; import android.content.pm.IOnPermissionsChangeListener; import android.content.pm.IntentFilterVerificationInfo; import android.content.pm.IntentFilterVerificationInfo; import android.content.pm.InstrumentationInfo; import android.content.pm.InstrumentationInfo; Loading Loading @@ -504,7 +503,7 @@ interface IPackageManager { void addOnPermissionsChangeListener(in IOnPermissionsChangeListener listener); void addOnPermissionsChangeListener(in IOnPermissionsChangeListener listener); void removeOnPermissionsChangeListener(in IOnPermissionsChangeListener listener); void removeOnPermissionsChangeListener(in IOnPermissionsChangeListener listener); void grantDefaultPermissions(int userId); void setCarrierAppPackagesProvider(in IPackagesProvider provider); int getMountExternalMode(int uid); int getMountExternalMode(int uid); void grantDefaultPermissionsToEnabledCarrierApps(in String[] packageNames, int userId); } }
core/java/android/content/pm/IPackagesProvider.aidldeleted 100644 → 0 +0 −22 Original line number Original line Diff line number Diff line /* * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.content.pm; /** {@hide} */ interface IPackagesProvider { String[] getPackages(int userId); }
core/java/android/content/pm/PackageManagerInternal.java +26 −0 Original line number Original line Diff line number Diff line Loading @@ -55,4 +55,30 @@ public abstract class PackageManagerInternal { * @param provider The packages provider. * @param provider The packages provider. */ */ public abstract void setVoiceInteractionPackagesProvider(PackagesProvider provider); public abstract void setVoiceInteractionPackagesProvider(PackagesProvider provider); /** * Sets the SMS packages provider. * @param provider The packages provider. */ public abstract void setSmsAppPackagesProvider(PackagesProvider provider); /** * Sets the dialer packages provider. * @param provider The packages provider. */ public abstract void setDialerAppPackagesProvider(PackagesProvider provider); /** * Requests granting of the default permissions to the current default SMS app. * @param packageName The default SMS package name. * @param userId The user for which to grant the permissions. */ public abstract void grantDefaultPermissionsToDefaultSmsApp(String packageName, int userId); /** * Requests granting of the default permissions to the current default dialer app. * @param packageName The default dialer package name. * @param userId The user for which to grant the permissions. */ public abstract void grantDefaultPermissionsToDefaultDialerApp(String packageName, int userId); } }
services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java +119 −53 Original line number Original line Diff line number Diff line Loading @@ -143,7 +143,8 @@ final class DefaultPermissionGrantPolicy { private PackagesProvider mImePackagesProvider; private PackagesProvider mImePackagesProvider; private PackagesProvider mLocationPackagesProvider; private PackagesProvider mLocationPackagesProvider; private PackagesProvider mVoiceInteractionPackagesProvider; private PackagesProvider mVoiceInteractionPackagesProvider; private PackagesProvider mCarrierAppPackagesProvider; private PackagesProvider mSmsAppPackagesProvider; private PackagesProvider mDialerAppPackagesProvider; public DefaultPermissionGrantPolicy(PackageManagerService service) { public DefaultPermissionGrantPolicy(PackageManagerService service) { mService = service; mService = service; Loading @@ -161,8 +162,12 @@ final class DefaultPermissionGrantPolicy { mVoiceInteractionPackagesProvider = provider; mVoiceInteractionPackagesProvider = provider; } } public void setCarrierAppPackagesProviderLPw(PackagesProvider provider) { public void setSmsAppPackagesProviderLPw(PackagesProvider provider) { mCarrierAppPackagesProvider = provider; mSmsAppPackagesProvider = provider; } public void setDialerAppPackagesProviderLPw(PackagesProvider provider) { mDialerAppPackagesProvider = provider; } } public void grantDefaultPermissions(int userId) { public void grantDefaultPermissions(int userId) { Loading @@ -171,7 +176,7 @@ final class DefaultPermissionGrantPolicy { } } private void grantPermissionsToSysComponentsAndPrivApps(int userId) { 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) { synchronized (mService.mPackages) { for (PackageParser.Package pkg : mService.mPackages.values()) { for (PackageParser.Package pkg : mService.mPackages.values()) { Loading Loading @@ -203,18 +208,20 @@ final class DefaultPermissionGrantPolicy { } } private void grantDefaultSystemHandlerPermissions(int userId) { 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 imePackagesProvider; final PackagesProvider locationPackagesProvider; final PackagesProvider locationPackagesProvider; final PackagesProvider voiceInteractionPackagesProvider; final PackagesProvider voiceInteractionPackagesProvider; final PackagesProvider carrierAppPackagesProvider; final PackagesProvider smsAppPackagesProvider; final PackagesProvider dialerAppPackagesProvider; synchronized (mService.mPackages) { synchronized (mService.mPackages) { imePackagesProvider = mImePackagesProvider; imePackagesProvider = mImePackagesProvider; locationPackagesProvider = mLocationPackagesProvider; locationPackagesProvider = mLocationPackagesProvider; voiceInteractionPackagesProvider = mVoiceInteractionPackagesProvider; voiceInteractionPackagesProvider = mVoiceInteractionPackagesProvider; carrierAppPackagesProvider = mCarrierAppPackagesProvider; smsAppPackagesProvider = mSmsAppPackagesProvider; dialerAppPackagesProvider = mDialerAppPackagesProvider; } } String[] imePackageNames = (imePackagesProvider != null) String[] imePackageNames = (imePackagesProvider != null) Loading @@ -223,8 +230,10 @@ final class DefaultPermissionGrantPolicy { ? voiceInteractionPackagesProvider.getPackages(userId) : null; ? voiceInteractionPackagesProvider.getPackages(userId) : null; String[] locationPackageNames = (locationPackagesProvider != null) String[] locationPackageNames = (locationPackagesProvider != null) ? locationPackagesProvider.getPackages(userId) : null; ? locationPackagesProvider.getPackages(userId) : null; String[] carrierAppPackageNames = (carrierAppPackagesProvider != null) String[] smsAppPackageNames = (smsAppPackagesProvider != null) ? carrierAppPackagesProvider.getPackages(userId) : null; ? smsAppPackagesProvider.getPackages(userId) : null; String[] dialerAppPackageNames = (dialerAppPackagesProvider != null) ? dialerAppPackagesProvider.getPackages(userId) : null; synchronized (mService.mPackages) { synchronized (mService.mPackages) { // Installers // Installers Loading Loading @@ -256,7 +265,7 @@ final class DefaultPermissionGrantPolicy { // SetupWizard // SetupWizard Intent setupIntent = new Intent(Intent.ACTION_MAIN); Intent setupIntent = new Intent(Intent.ACTION_MAIN); setupIntent.addCategory(Intent.CATEGORY_HOME); setupIntent.addCategory(Intent.CATEGORY_HOME); PackageParser.Package setupPackage = getDefaultSystemHandlerActvityPackageLPr( PackageParser.Package setupPackage = getDefaultSystemHandlerActivityPackageLPr( setupIntent, userId); setupIntent, userId); if (setupPackage != null if (setupPackage != null && doesPackageSupportRuntimePermissions(setupPackage)) { && doesPackageSupportRuntimePermissions(setupPackage)) { Loading @@ -265,10 +274,10 @@ final class DefaultPermissionGrantPolicy { grantRuntimePermissionsLPw(setupPackage, SETTINGS_PERMISSIONS, userId); grantRuntimePermissionsLPw(setupPackage, SETTINGS_PERMISSIONS, userId); } } // Phone // Dialer Intent dialerIntent = new Intent(Intent.ACTION_DIAL); if (dialerAppPackageNames != null) { PackageParser.Package dialerPackage = getDefaultSystemHandlerActvityPackageLPr( for (String dialerAppPackageName : dialerAppPackageNames) { dialerIntent, userId); PackageParser.Package dialerPackage = getPackageLPr(dialerAppPackageName); if (dialerPackage != null if (dialerPackage != null && doesPackageSupportRuntimePermissions(dialerPackage)) { && doesPackageSupportRuntimePermissions(dialerPackage)) { grantRuntimePermissionsLPw(dialerPackage, PHONE_PERMISSIONS, userId); grantRuntimePermissionsLPw(dialerPackage, PHONE_PERMISSIONS, userId); Loading @@ -276,10 +285,12 @@ final class DefaultPermissionGrantPolicy { grantRuntimePermissionsLPw(dialerPackage, SMS_PERMISSIONS, userId); grantRuntimePermissionsLPw(dialerPackage, SMS_PERMISSIONS, userId); grantRuntimePermissionsLPw(dialerPackage, MICROPHONE_PERMISSIONS, userId); grantRuntimePermissionsLPw(dialerPackage, MICROPHONE_PERMISSIONS, userId); } } } } // Camera // Camera Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); PackageParser.Package cameraPackage = getDefaultSystemHandlerActvityPackageLPr( PackageParser.Package cameraPackage = getDefaultSystemHandlerActivityPackageLPr( cameraIntent, userId); cameraIntent, userId); if (cameraPackage != null if (cameraPackage != null && doesPackageSupportRuntimePermissions(cameraPackage)) { && doesPackageSupportRuntimePermissions(cameraPackage)) { Loading @@ -304,29 +315,30 @@ final class DefaultPermissionGrantPolicy { // Downloads UI // Downloads UI Intent downloadsUiIntent = new Intent(DownloadManager.ACTION_VIEW_DOWNLOADS); Intent downloadsUiIntent = new Intent(DownloadManager.ACTION_VIEW_DOWNLOADS); PackageParser.Package downloadsUiPackage = getDefaultSystemHandlerActvityPackageLPr( PackageParser.Package downloadsUiPackage = getDefaultSystemHandlerActivityPackageLPr( downloadsUiIntent, userId); downloadsUiIntent, userId); if (downloadsUiPackage != null if (downloadsUiPackage != null && doesPackageSupportRuntimePermissions(downloadsUiPackage)) { && doesPackageSupportRuntimePermissions(downloadsUiPackage)) { grantRuntimePermissionsLPw(downloadsUiPackage, STORAGE_PERMISSIONS, userId); grantRuntimePermissionsLPw(downloadsUiPackage, STORAGE_PERMISSIONS, userId); } } // Messaging // SMS Intent messagingIntent = new Intent(Intent.ACTION_MAIN); if (smsAppPackageNames != null) { messagingIntent.addCategory(Intent.CATEGORY_APP_MESSAGING); for (String smsPackageName : smsAppPackageNames) { PackageParser.Package messagingPackage = getDefaultSystemHandlerActvityPackageLPr( PackageParser.Package smsPackage = getPackageLPr(smsPackageName); messagingIntent, userId); if (smsPackage != null if (messagingPackage != null && doesPackageSupportRuntimePermissions(smsPackage)) { && doesPackageSupportRuntimePermissions(messagingPackage)) { grantRuntimePermissionsLPw(smsPackage, PHONE_PERMISSIONS, userId); grantRuntimePermissionsLPw(messagingPackage, PHONE_PERMISSIONS, userId); grantRuntimePermissionsLPw(smsPackage, CONTACTS_PERMISSIONS, userId); grantRuntimePermissionsLPw(messagingPackage, CONTACTS_PERMISSIONS, userId); grantRuntimePermissionsLPw(smsPackage, SMS_PERMISSIONS, userId); grantRuntimePermissionsLPw(messagingPackage, SMS_PERMISSIONS, userId); } } } } // Calendar // Calendar Intent calendarIntent = new Intent(Intent.ACTION_MAIN); Intent calendarIntent = new Intent(Intent.ACTION_MAIN); calendarIntent.addCategory(Intent.CATEGORY_APP_CALENDAR); calendarIntent.addCategory(Intent.CATEGORY_APP_CALENDAR); PackageParser.Package calendarPackage = getDefaultSystemHandlerActvityPackageLPr( PackageParser.Package calendarPackage = getDefaultSystemHandlerActivityPackageLPr( calendarIntent, userId); calendarIntent, userId); if (calendarPackage != null if (calendarPackage != null && doesPackageSupportRuntimePermissions(calendarPackage)) { && doesPackageSupportRuntimePermissions(calendarPackage)) { Loading @@ -348,7 +360,7 @@ final class DefaultPermissionGrantPolicy { // Contacts // Contacts Intent contactsIntent = new Intent(Intent.ACTION_MAIN); Intent contactsIntent = new Intent(Intent.ACTION_MAIN); contactsIntent.addCategory(Intent.CATEGORY_APP_CONTACTS); contactsIntent.addCategory(Intent.CATEGORY_APP_CONTACTS); PackageParser.Package contactsPackage = getDefaultSystemHandlerActvityPackageLPr( PackageParser.Package contactsPackage = getDefaultSystemHandlerActivityPackageLPr( contactsIntent, userId); contactsIntent, userId); if (contactsPackage != null if (contactsPackage != null && doesPackageSupportRuntimePermissions(contactsPackage)) { && doesPackageSupportRuntimePermissions(contactsPackage)) { Loading Loading @@ -379,7 +391,7 @@ final class DefaultPermissionGrantPolicy { // Maps // Maps Intent mapsIntent = new Intent(Intent.ACTION_MAIN); Intent mapsIntent = new Intent(Intent.ACTION_MAIN); mapsIntent.addCategory(Intent.CATEGORY_APP_MAPS); mapsIntent.addCategory(Intent.CATEGORY_APP_MAPS); PackageParser.Package mapsPackage = getDefaultSystemHandlerActvityPackageLPr( PackageParser.Package mapsPackage = getDefaultSystemHandlerActivityPackageLPr( mapsIntent, userId); mapsIntent, userId); if (mapsPackage != null if (mapsPackage != null && doesPackageSupportRuntimePermissions(mapsPackage)) { && doesPackageSupportRuntimePermissions(mapsPackage)) { Loading @@ -389,7 +401,7 @@ final class DefaultPermissionGrantPolicy { // Email // Email Intent emailIntent = new Intent(Intent.ACTION_MAIN); Intent emailIntent = new Intent(Intent.ACTION_MAIN); emailIntent.addCategory(Intent.CATEGORY_APP_EMAIL); emailIntent.addCategory(Intent.CATEGORY_APP_EMAIL); PackageParser.Package emailPackage = getDefaultSystemHandlerActvityPackageLPr( PackageParser.Package emailPackage = getDefaultSystemHandlerActivityPackageLPr( emailIntent, userId); emailIntent, userId); if (emailPackage != null if (emailPackage != null && doesPackageSupportRuntimePermissions(emailPackage)) { && doesPackageSupportRuntimePermissions(emailPackage)) { Loading @@ -397,10 +409,17 @@ final class DefaultPermissionGrantPolicy { } } // Browser // Browser 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); Intent browserIntent = new Intent(Intent.ACTION_MAIN); browserIntent.addCategory(Intent.CATEGORY_APP_BROWSER); browserIntent.addCategory(Intent.CATEGORY_APP_BROWSER); PackageParser.Package browserPackage = getDefaultSystemHandlerActvityPackageLPr( browserPackage = getDefaultSystemHandlerActivityPackageLPr( browserIntent, userId); browserIntent, userId); } if (browserPackage != null if (browserPackage != null && doesPackageSupportRuntimePermissions(browserPackage)) { && doesPackageSupportRuntimePermissions(browserPackage)) { grantRuntimePermissionsLPw(browserPackage, LOCATION_PERMISSIONS, userId); grantRuntimePermissionsLPw(browserPackage, LOCATION_PERMISSIONS, userId); Loading Loading @@ -459,9 +478,44 @@ final class DefaultPermissionGrantPolicy { } } } } // Carrier apps mService.mSettings.onDefaultRuntimePermissionsGrantedLPr(userId); if (carrierAppPackageNames != null) { } for (String packageName : carrierAppPackageNames) { } 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); PackageParser.Package carrierPackage = getSystemPackageLPr(packageName); if (carrierPackage != null if (carrierPackage != null && doesPackageSupportRuntimePermissions(carrierPackage)) { && doesPackageSupportRuntimePermissions(carrierPackage)) { Loading @@ -471,7 +525,15 @@ final class DefaultPermissionGrantPolicy { } } } } 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); } } } } Loading Loading @@ -505,7 +567,7 @@ final class DefaultPermissionGrantPolicy { return handlerPackages; return handlerPackages; } } private PackageParser.Package getDefaultSystemHandlerActvityPackageLPr( private PackageParser.Package getDefaultSystemHandlerActivityPackageLPr( Intent intent, int userId) { Intent intent, int userId) { List<ResolveInfo> handlers = mService.queryIntentActivities(intent, null, 0, userId); List<ResolveInfo> handlers = mService.queryIntentActivities(intent, null, 0, userId); final int handlerCount = handlers.size(); final int handlerCount = handlers.size(); Loading @@ -530,8 +592,12 @@ final class DefaultPermissionGrantPolicy { return null; return null; } } private PackageParser.Package getPackageLPr(String packageName) { return mService.mPackages.get(packageName); } private PackageParser.Package getSystemPackageLPr(String packageName) { private PackageParser.Package getSystemPackageLPr(String packageName) { PackageParser.Package pkg = mService.mPackages.get(packageName); PackageParser.Package pkg = getPackageLPr(packageName); if (pkg != null && pkg.isSystemApp()) { if (pkg != null && pkg.isSystemApp()) { return !isSysComponentOrPersistentPrivApp(pkg) ? pkg : null; return !isSysComponentOrPersistentPrivApp(pkg) ? pkg : null; } } Loading