Loading services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java +54 −25 Original line number Diff line number Diff line Loading @@ -287,20 +287,6 @@ final class DefaultPermissionGrantPolicy { grantRuntimePermissionsLPw(setupPackage, SETTINGS_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 = getDefaultSystemHandlerActivityPackageLPr( Loading Loading @@ -342,15 +328,37 @@ final class DefaultPermissionGrantPolicy { grantRuntimePermissionsLPw(storagePackage, STORAGE_PERMISSIONS, userId); } // Dialer if (dialerAppPackageNames == null) { Intent dialerIntent = new Intent(Intent.ACTION_DIAL); PackageParser.Package dialerPackage = getDefaultSystemHandlerActivityPackageLPr( dialerIntent, userId); if (dialerPackage != null) { grantDefaultPermissionsToDefaultSystemDialerAppLPr(dialerPackage, userId); } } else { for (String dialerAppPackageName : dialerAppPackageNames) { PackageParser.Package dialerPackage = getSystemPackageLPr(dialerAppPackageName); if (dialerPackage != null) { grantDefaultPermissionsToDefaultSystemDialerAppLPr(dialerPackage, userId); } } } // SMS if (smsAppPackageNames != null) { if (smsAppPackageNames == null) { Intent smsIntent = new Intent(Intent.ACTION_MAIN); smsIntent.addCategory(Intent.CATEGORY_APP_MESSAGING); PackageParser.Package smsPackage = getDefaultSystemHandlerActivityPackageLPr( smsIntent, userId); if (smsPackage != null) { grantDefaultPermissionsToDefaultSystemSmsAppLPr(smsPackage, userId); } } else { 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); PackageParser.Package smsPackage = getSystemPackageLPr(smsPackageName); if (smsPackage != null) { grantDefaultPermissionsToDefaultSystemSmsAppLPr(smsPackage, userId); } } } Loading Loading @@ -379,8 +387,8 @@ final class DefaultPermissionGrantPolicy { } // Calendar provider sync adapters List<PackageParser.Package> calendarSyncAdapters = getHeadlessSyncAdapterPackagesLPr(calendarSyncAdapterPackages, List<PackageParser.Package> calendarSyncAdapters = getHeadlessSyncAdapterPackagesLPr( calendarSyncAdapterPackages, userId); final int calendarSyncAdapterCount = calendarSyncAdapters.size(); for (int i = 0; i < calendarSyncAdapterCount; i++) { Loading @@ -403,8 +411,8 @@ final class DefaultPermissionGrantPolicy { } // Contacts provider sync adapters List<PackageParser.Package> contactsSyncAdapters = getHeadlessSyncAdapterPackagesLPr(contactsSyncAdapterPackages, List<PackageParser.Package> contactsSyncAdapters = getHeadlessSyncAdapterPackagesLPr( contactsSyncAdapterPackages, userId); final int contactsSyncAdapterCount = contactsSyncAdapters.size(); for (int i = 0; i < contactsSyncAdapterCount; i++) { Loading Loading @@ -541,6 +549,27 @@ final class DefaultPermissionGrantPolicy { } } private void grantDefaultPermissionsToDefaultSystemDialerAppLPr( PackageParser.Package dialerPackage, int userId) { if (doesPackageSupportRuntimePermissions(dialerPackage)) { grantRuntimePermissionsLPw(dialerPackage, PHONE_PERMISSIONS, userId); grantRuntimePermissionsLPw(dialerPackage, CONTACTS_PERMISSIONS, userId); grantRuntimePermissionsLPw(dialerPackage, SMS_PERMISSIONS, userId); grantRuntimePermissionsLPw(dialerPackage, MICROPHONE_PERMISSIONS, userId); } } private void grantDefaultPermissionsToDefaultSystemSmsAppLPr( PackageParser.Package smsPackage, int userId) { if (doesPackageSupportRuntimePermissions(smsPackage)) { grantRuntimePermissionsLPw(smsPackage, PHONE_PERMISSIONS, userId); grantRuntimePermissionsLPw(smsPackage, CONTACTS_PERMISSIONS, userId); grantRuntimePermissionsLPw(smsPackage, SMS_PERMISSIONS, userId); } } public void grantDefaultPermissionsToDefaultSmsAppLPr(String packageName, int userId) { Log.i(TAG, "Granting permissions to default sms app for user:" + userId); if (packageName == null) { Loading services/core/java/com/android/server/telecom/TelecomLoaderService.java +82 −13 Original line number Diff line number Diff line Loading @@ -31,8 +31,11 @@ import android.os.ServiceManager; import android.os.UserHandle; import android.provider.Settings; import android.telecom.DefaultDialerManager; import android.util.IntArray; import android.util.Slog; import android.util.SparseBooleanArray; import com.android.internal.annotations.GuardedBy; import com.android.internal.telephony.SmsApplication; import com.android.server.LocalServices; import com.android.server.SystemService; Loading @@ -59,6 +62,41 @@ public class TelecomLoaderService extends SystemService { }, 0); SmsApplication.getDefaultMmsApplication(mContext, false); ServiceManager.addService(Context.TELECOM_SERVICE, service); synchronized (mLock) { if (mDefaultSmsAppRequests != null || mDefaultDialerAppRequests != null) { final PackageManagerInternal packageManagerInternal = LocalServices .getService(PackageManagerInternal.class); if (mDefaultSmsAppRequests != null) { ComponentName smsComponent = SmsApplication.getDefaultSmsApplication( mContext, true); if (smsComponent != null) { final int requestCount = mDefaultSmsAppRequests.size(); for (int i = requestCount - 1; i >= 0; i--) { final int userid = mDefaultSmsAppRequests.get(i); mDefaultSmsAppRequests.remove(i); packageManagerInternal.grantDefaultPermissionsToDefaultSmsApp( smsComponent.getPackageName(), userid); } } } if (mDefaultDialerAppRequests != null) { String packageName = DefaultDialerManager.getDefaultDialerApplication( mContext); if (packageName != null) { final int requestCount = mDefaultDialerAppRequests.size(); for (int i = requestCount - 1; i >= 0; i--) { final int userId = mDefaultDialerAppRequests.get(i); mDefaultDialerAppRequests.remove(i); packageManagerInternal.grantDefaultPermissionsToDefaultDialerApp( packageName, userId); } } } } } } catch (RemoteException e) { Slog.w(TAG, "Failed linking to death."); } Loading @@ -76,7 +114,17 @@ public class TelecomLoaderService extends SystemService { private static final String SERVICE_ACTION = "com.android.ITelecomService"; private final Object mLock = new Object(); @GuardedBy("mLock") private IntArray mDefaultSmsAppRequests; @GuardedBy("mLock") private IntArray mDefaultDialerAppRequests; private final Context mContext; @GuardedBy("mLock") private TelecomServiceConnection mServiceConnection; public TelecomLoaderService(Context context) { Loading @@ -98,6 +146,7 @@ public class TelecomLoaderService extends SystemService { } private void connectToTelecom() { synchronized (mLock) { if (mServiceConnection != null) { // TODO: Is unbinding worth doing or wait for system to rebind? mContext.unbindService(mServiceConnection); Loading @@ -115,6 +164,8 @@ public class TelecomLoaderService extends SystemService { mServiceConnection = serviceConnection; } } } private void registerDefaultAppProviders() { final PackageManagerInternal packageManagerInternal = LocalServices.getService( Loading @@ -125,6 +176,15 @@ public class TelecomLoaderService extends SystemService { new PackageManagerInternal.PackagesProvider() { @Override public String[] getPackages(int userId) { synchronized (mLock) { if (mServiceConnection == null) { if (mDefaultSmsAppRequests == null) { mDefaultSmsAppRequests = new IntArray(); } mDefaultSmsAppRequests.add(userId); return null; } } ComponentName smsComponent = SmsApplication.getDefaultSmsApplication( mContext, true); if (smsComponent != null) { Loading @@ -139,6 +199,15 @@ public class TelecomLoaderService extends SystemService { new PackageManagerInternal.PackagesProvider() { @Override public String[] getPackages(int userId) { synchronized (mLock) { if (mServiceConnection == null) { if (mDefaultDialerAppRequests == null) { mDefaultDialerAppRequests = new IntArray(); } mDefaultDialerAppRequests.add(userId); return null; } } String packageName = DefaultDialerManager.getDefaultDialerApplication(mContext); if (packageName != null) { return new String[]{packageName}; Loading Loading
services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java +54 −25 Original line number Diff line number Diff line Loading @@ -287,20 +287,6 @@ final class DefaultPermissionGrantPolicy { grantRuntimePermissionsLPw(setupPackage, SETTINGS_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 = getDefaultSystemHandlerActivityPackageLPr( Loading Loading @@ -342,15 +328,37 @@ final class DefaultPermissionGrantPolicy { grantRuntimePermissionsLPw(storagePackage, STORAGE_PERMISSIONS, userId); } // Dialer if (dialerAppPackageNames == null) { Intent dialerIntent = new Intent(Intent.ACTION_DIAL); PackageParser.Package dialerPackage = getDefaultSystemHandlerActivityPackageLPr( dialerIntent, userId); if (dialerPackage != null) { grantDefaultPermissionsToDefaultSystemDialerAppLPr(dialerPackage, userId); } } else { for (String dialerAppPackageName : dialerAppPackageNames) { PackageParser.Package dialerPackage = getSystemPackageLPr(dialerAppPackageName); if (dialerPackage != null) { grantDefaultPermissionsToDefaultSystemDialerAppLPr(dialerPackage, userId); } } } // SMS if (smsAppPackageNames != null) { if (smsAppPackageNames == null) { Intent smsIntent = new Intent(Intent.ACTION_MAIN); smsIntent.addCategory(Intent.CATEGORY_APP_MESSAGING); PackageParser.Package smsPackage = getDefaultSystemHandlerActivityPackageLPr( smsIntent, userId); if (smsPackage != null) { grantDefaultPermissionsToDefaultSystemSmsAppLPr(smsPackage, userId); } } else { 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); PackageParser.Package smsPackage = getSystemPackageLPr(smsPackageName); if (smsPackage != null) { grantDefaultPermissionsToDefaultSystemSmsAppLPr(smsPackage, userId); } } } Loading Loading @@ -379,8 +387,8 @@ final class DefaultPermissionGrantPolicy { } // Calendar provider sync adapters List<PackageParser.Package> calendarSyncAdapters = getHeadlessSyncAdapterPackagesLPr(calendarSyncAdapterPackages, List<PackageParser.Package> calendarSyncAdapters = getHeadlessSyncAdapterPackagesLPr( calendarSyncAdapterPackages, userId); final int calendarSyncAdapterCount = calendarSyncAdapters.size(); for (int i = 0; i < calendarSyncAdapterCount; i++) { Loading @@ -403,8 +411,8 @@ final class DefaultPermissionGrantPolicy { } // Contacts provider sync adapters List<PackageParser.Package> contactsSyncAdapters = getHeadlessSyncAdapterPackagesLPr(contactsSyncAdapterPackages, List<PackageParser.Package> contactsSyncAdapters = getHeadlessSyncAdapterPackagesLPr( contactsSyncAdapterPackages, userId); final int contactsSyncAdapterCount = contactsSyncAdapters.size(); for (int i = 0; i < contactsSyncAdapterCount; i++) { Loading Loading @@ -541,6 +549,27 @@ final class DefaultPermissionGrantPolicy { } } private void grantDefaultPermissionsToDefaultSystemDialerAppLPr( PackageParser.Package dialerPackage, int userId) { if (doesPackageSupportRuntimePermissions(dialerPackage)) { grantRuntimePermissionsLPw(dialerPackage, PHONE_PERMISSIONS, userId); grantRuntimePermissionsLPw(dialerPackage, CONTACTS_PERMISSIONS, userId); grantRuntimePermissionsLPw(dialerPackage, SMS_PERMISSIONS, userId); grantRuntimePermissionsLPw(dialerPackage, MICROPHONE_PERMISSIONS, userId); } } private void grantDefaultPermissionsToDefaultSystemSmsAppLPr( PackageParser.Package smsPackage, int userId) { if (doesPackageSupportRuntimePermissions(smsPackage)) { grantRuntimePermissionsLPw(smsPackage, PHONE_PERMISSIONS, userId); grantRuntimePermissionsLPw(smsPackage, CONTACTS_PERMISSIONS, userId); grantRuntimePermissionsLPw(smsPackage, SMS_PERMISSIONS, userId); } } public void grantDefaultPermissionsToDefaultSmsAppLPr(String packageName, int userId) { Log.i(TAG, "Granting permissions to default sms app for user:" + userId); if (packageName == null) { Loading
services/core/java/com/android/server/telecom/TelecomLoaderService.java +82 −13 Original line number Diff line number Diff line Loading @@ -31,8 +31,11 @@ import android.os.ServiceManager; import android.os.UserHandle; import android.provider.Settings; import android.telecom.DefaultDialerManager; import android.util.IntArray; import android.util.Slog; import android.util.SparseBooleanArray; import com.android.internal.annotations.GuardedBy; import com.android.internal.telephony.SmsApplication; import com.android.server.LocalServices; import com.android.server.SystemService; Loading @@ -59,6 +62,41 @@ public class TelecomLoaderService extends SystemService { }, 0); SmsApplication.getDefaultMmsApplication(mContext, false); ServiceManager.addService(Context.TELECOM_SERVICE, service); synchronized (mLock) { if (mDefaultSmsAppRequests != null || mDefaultDialerAppRequests != null) { final PackageManagerInternal packageManagerInternal = LocalServices .getService(PackageManagerInternal.class); if (mDefaultSmsAppRequests != null) { ComponentName smsComponent = SmsApplication.getDefaultSmsApplication( mContext, true); if (smsComponent != null) { final int requestCount = mDefaultSmsAppRequests.size(); for (int i = requestCount - 1; i >= 0; i--) { final int userid = mDefaultSmsAppRequests.get(i); mDefaultSmsAppRequests.remove(i); packageManagerInternal.grantDefaultPermissionsToDefaultSmsApp( smsComponent.getPackageName(), userid); } } } if (mDefaultDialerAppRequests != null) { String packageName = DefaultDialerManager.getDefaultDialerApplication( mContext); if (packageName != null) { final int requestCount = mDefaultDialerAppRequests.size(); for (int i = requestCount - 1; i >= 0; i--) { final int userId = mDefaultDialerAppRequests.get(i); mDefaultDialerAppRequests.remove(i); packageManagerInternal.grantDefaultPermissionsToDefaultDialerApp( packageName, userId); } } } } } } catch (RemoteException e) { Slog.w(TAG, "Failed linking to death."); } Loading @@ -76,7 +114,17 @@ public class TelecomLoaderService extends SystemService { private static final String SERVICE_ACTION = "com.android.ITelecomService"; private final Object mLock = new Object(); @GuardedBy("mLock") private IntArray mDefaultSmsAppRequests; @GuardedBy("mLock") private IntArray mDefaultDialerAppRequests; private final Context mContext; @GuardedBy("mLock") private TelecomServiceConnection mServiceConnection; public TelecomLoaderService(Context context) { Loading @@ -98,6 +146,7 @@ public class TelecomLoaderService extends SystemService { } private void connectToTelecom() { synchronized (mLock) { if (mServiceConnection != null) { // TODO: Is unbinding worth doing or wait for system to rebind? mContext.unbindService(mServiceConnection); Loading @@ -115,6 +164,8 @@ public class TelecomLoaderService extends SystemService { mServiceConnection = serviceConnection; } } } private void registerDefaultAppProviders() { final PackageManagerInternal packageManagerInternal = LocalServices.getService( Loading @@ -125,6 +176,15 @@ public class TelecomLoaderService extends SystemService { new PackageManagerInternal.PackagesProvider() { @Override public String[] getPackages(int userId) { synchronized (mLock) { if (mServiceConnection == null) { if (mDefaultSmsAppRequests == null) { mDefaultSmsAppRequests = new IntArray(); } mDefaultSmsAppRequests.add(userId); return null; } } ComponentName smsComponent = SmsApplication.getDefaultSmsApplication( mContext, true); if (smsComponent != null) { Loading @@ -139,6 +199,15 @@ public class TelecomLoaderService extends SystemService { new PackageManagerInternal.PackagesProvider() { @Override public String[] getPackages(int userId) { synchronized (mLock) { if (mServiceConnection == null) { if (mDefaultDialerAppRequests == null) { mDefaultDialerAppRequests = new IntArray(); } mDefaultDialerAppRequests.add(userId); return null; } } String packageName = DefaultDialerManager.getDefaultDialerApplication(mContext); if (packageName != null) { return new String[]{packageName}; Loading