summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSvetoslav <svetoslavganov@google.com>2015-06-25 19:07:31 -0700
committerSvet Ganov <svetoslavganov@google.com>2015-06-29 17:44:19 -0700
commitcdfd230a392d0f0557a3a5bada221b7a05113392 (patch)
tree0b5b561cedbc66c60324cde03fee280ce7d1f678
parente3fc5415ed65ee7ad451069022b5405361aeb2e7 (diff)
downloadframeworks_base-cdfd230a392d0f0557a3a5bada221b7a05113392.zip
frameworks_base-cdfd230a392d0f0557a3a5bada221b7a05113392.tar.gz
frameworks_base-cdfd230a392d0f0557a3a5bada221b7a05113392.tar.bz2
Grant default permissons to the default SMS, Phone, Browser app.
The default SMS, Phone, Browser are selected in the UI and we grant default permissions to these. We do this regardless if they are on the system image as the user has made an explicit choice in the UI and the permission we grant are considered essential for such type of a core app to operate properly. bug:22104986 Change-Id: Ide8caeb524b43dde11a20460666cf34c4d35f84b
-rw-r--r--Android.mk1
-rw-r--r--core/java/android/content/pm/IPackageManager.aidl5
-rw-r--r--core/java/android/content/pm/IPackagesProvider.aidl22
-rw-r--r--core/java/android/content/pm/PackageManagerInternal.java26
-rw-r--r--services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java174
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java82
-rw-r--r--services/core/java/com/android/server/pm/Settings.java4
-rw-r--r--services/core/java/com/android/server/telecom/TelecomLoaderService.java83
8 files changed, 275 insertions, 122 deletions
diff --git a/Android.mk b/Android.mk
index a02b326..e96a932 100644
--- a/Android.mk
+++ b/Android.mk
@@ -142,7 +142,6 @@ LOCAL_SRC_FILES += \
core/java/android/content/pm/IPackageManager.aidl \
core/java/android/content/pm/IPackageMoveObserver.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/database/IContentObserver.aidl \
core/java/android/hardware/ICameraService.aidl \
diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl
index cea6e99..2b83d86 100644
--- a/core/java/android/content/pm/IPackageManager.aidl
+++ b/core/java/android/content/pm/IPackageManager.aidl
@@ -31,7 +31,6 @@ import android.content.pm.IPackageDeleteObserver2;
import android.content.pm.IPackageDataObserver;
import android.content.pm.IPackageMoveObserver;
import android.content.pm.IPackageStatsObserver;
-import android.content.pm.IPackagesProvider;
import android.content.pm.IOnPermissionsChangeListener;
import android.content.pm.IntentFilterVerificationInfo;
import android.content.pm.InstrumentationInfo;
@@ -504,7 +503,7 @@ interface IPackageManager {
void addOnPermissionsChangeListener(in IOnPermissionsChangeListener listener);
void removeOnPermissionsChangeListener(in IOnPermissionsChangeListener listener);
- void grantDefaultPermissions(int userId);
- void setCarrierAppPackagesProvider(in IPackagesProvider provider);
int getMountExternalMode(int uid);
+
+ void grantDefaultPermissionsToEnabledCarrierApps(in String[] packageNames, int userId);
}
diff --git a/core/java/android/content/pm/IPackagesProvider.aidl b/core/java/android/content/pm/IPackagesProvider.aidl
deleted file mode 100644
index 7d76c88..0000000
--- a/core/java/android/content/pm/IPackagesProvider.aidl
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * 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);
-}
diff --git a/core/java/android/content/pm/PackageManagerInternal.java b/core/java/android/content/pm/PackageManagerInternal.java
index 7599bd6..dbaba49 100644
--- a/core/java/android/content/pm/PackageManagerInternal.java
+++ b/core/java/android/content/pm/PackageManagerInternal.java
@@ -55,4 +55,30 @@ public abstract class PackageManagerInternal {
* @param provider The packages 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);
}
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;
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 43f80d4..9d7650d 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -102,7 +102,6 @@ import android.content.pm.IPackageInstaller;
import android.content.pm.IPackageManager;
import android.content.pm.IPackageMoveObserver;
import android.content.pm.IPackageStatsObserver;
-import android.content.pm.IPackagesProvider;
import android.content.pm.InstrumentationInfo;
import android.content.pm.IntentFilterVerificationInfo;
import android.content.pm.KeySet;
@@ -9711,6 +9710,8 @@ public class PackageManagerService extends IPackageManager.Stub {
result |= updateIntentVerificationStatus(packageName,
PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS,
UserHandle.myUserId());
+ mDefaultPermissionPolicy.grantDefaultPermissionsToDefaultBrowserLPr(
+ packageName, userId);
}
return result;
}
@@ -13026,7 +13027,7 @@ public class PackageManagerService extends IPackageManager.Stub {
* @param flags The flags that is going to be reset.
*/
private void revokeRuntimePermissionsAndClearFlagsLocked(
- PermissionsState permissionsState, int userId, int flags) {
+ PermissionsState permissionsState, final int userId, int flags) {
boolean needsWrite = false;
for (PermissionState state : permissionsState.getRuntimePermissionStates(userId)) {
@@ -13039,7 +13040,12 @@ public class PackageManagerService extends IPackageManager.Stub {
}
// Ensure default permissions are never cleared.
- mDefaultPermissionPolicy.grantDefaultPermissions(userId);
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mDefaultPermissionPolicy.grantDefaultPermissions(userId);
+ }
+ });
if (needsWrite) {
mSettings.writeRuntimePermissionsForUserLPr(userId, true);
@@ -15943,48 +15949,44 @@ public class PackageManagerService extends IPackageManager.Stub {
mDefaultPermissionPolicy.setVoiceInteractionPackagesProviderLPw(provider);
}
}
- }
- @Override
- public void grantDefaultPermissions(final int userId) {
- enforceSystemOrPhoneCaller("grantDefaultPermissions");
- long token = Binder.clearCallingIdentity();
- try {
- // We cannot grant the default permissions with a lock held as
- // we query providers from other components for default handlers
- // such as enabled IMEs, etc.
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- mDefaultPermissionPolicy.grantDefaultPermissions(userId);
- }
- });
- } finally {
- Binder.restoreCallingIdentity(token);
+ @Override
+ public void setSmsAppPackagesProvider(PackagesProvider provider) {
+ synchronized (mPackages) {
+ mDefaultPermissionPolicy.setSmsAppPackagesProviderLPw(provider);
+ }
}
- }
- @Override
- public void setCarrierAppPackagesProvider(final IPackagesProvider provider) {
- enforceSystemOrPhoneCaller("setCarrierAppPackagesProvider");
- long token = Binder.clearCallingIdentity();
- try {
- PackageManagerInternal.PackagesProvider wrapper =
- new PackageManagerInternal.PackagesProvider() {
- @Override
- public String[] getPackages(int userId) {
- try {
- return provider.getPackages(userId);
- } catch (RemoteException e) {
- return null;
- }
- }
- };
+ @Override
+ public void setDialerAppPackagesProvider(PackagesProvider provider) {
synchronized (mPackages) {
- mDefaultPermissionPolicy.setCarrierAppPackagesProviderLPw(wrapper);
+ mDefaultPermissionPolicy.setDialerAppPackagesProviderLPw(provider);
}
- } finally {
- Binder.restoreCallingIdentity(token);
+ }
+
+ @Override
+ public void grantDefaultPermissionsToDefaultSmsApp(String packageName, int userId) {
+ synchronized (mPackages) {
+ mDefaultPermissionPolicy.grantDefaultPermissionsToDefaultSmsAppLPr(
+ packageName, userId);
+ }
+ }
+
+ @Override
+ public void grantDefaultPermissionsToDefaultDialerApp(String packageName, int userId) {
+ synchronized (mPackages) {
+ mDefaultPermissionPolicy.grantDefaultPermissionsToDefaultDialerAppLPr(
+ packageName, userId);
+ }
+ }
+ }
+
+ @Override
+ public void grantDefaultPermissionsToEnabledCarrierApps(String[] packageNames, int userId) {
+ enforceSystemOrPhoneCaller("grantPermissionsToEnabledCarrierApps");
+ synchronized (mPackages) {
+ mDefaultPermissionPolicy.grantDefaultPermissionsToEnabledCarrierAppsLPr(
+ packageNames, userId);
}
}
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index 51ac81d..0ad2b4a 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -4487,7 +4487,9 @@ final class Settings {
serializer.startTag(null, TAG_RUNTIME_PERMISSIONS);
String fingerprint = mFingerprints.get(userId);
- serializer.attribute(null, ATTR_FINGERPRINT, fingerprint);
+ if (fingerprint != null) {
+ serializer.attribute(null, ATTR_FINGERPRINT, fingerprint);
+ }
final int packageCount = permissionsForPackage.size();
for (int i = 0; i < packageCount; i++) {
diff --git a/services/core/java/com/android/server/telecom/TelecomLoaderService.java b/services/core/java/com/android/server/telecom/TelecomLoaderService.java
index 9abdf21..b165b42 100644
--- a/services/core/java/com/android/server/telecom/TelecomLoaderService.java
+++ b/services/core/java/com/android/server/telecom/TelecomLoaderService.java
@@ -20,12 +20,21 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
+import android.content.pm.PackageManagerInternal;
+import android.database.ContentObserver;
+import android.net.Uri;
+import android.os.Handler;
import android.os.IBinder;
+import android.os.Looper;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
+import android.provider.Settings;
+import android.telecom.DefaultDialerManager;
import android.util.Slog;
+import com.android.internal.telephony.SmsApplication;
+import com.android.server.LocalServices;
import com.android.server.SystemService;
/**
@@ -48,7 +57,7 @@ public class TelecomLoaderService extends SystemService {
connectToTelecom();
}
}, 0);
-
+ SmsApplication.getDefaultMmsApplication(mContext, false);
ServiceManager.addService(Context.TELECOM_SERVICE, service);
} catch (RemoteException e) {
Slog.w(TAG, "Failed linking to death.");
@@ -73,6 +82,7 @@ public class TelecomLoaderService extends SystemService {
public TelecomLoaderService(Context context) {
super(context);
mContext = context;
+ registerDefaultAppProviders();
}
@Override
@@ -82,6 +92,7 @@ public class TelecomLoaderService extends SystemService {
@Override
public void onBootPhase(int phase) {
if (phase == PHASE_ACTIVITY_MANAGER_READY) {
+ registerDefaultAppNotifier();
connectToTelecom();
}
}
@@ -104,4 +115,74 @@ public class TelecomLoaderService extends SystemService {
mServiceConnection = serviceConnection;
}
}
+
+ private void registerDefaultAppProviders() {
+ final PackageManagerInternal packageManagerInternal = LocalServices.getService(
+ PackageManagerInternal.class);
+
+ // Set a callback for the package manager to query the default sms app.
+ packageManagerInternal.setSmsAppPackagesProvider(
+ new PackageManagerInternal.PackagesProvider() {
+ @Override
+ public String[] getPackages(int userId) {
+ ComponentName smsComponent = SmsApplication.getDefaultSmsApplication(
+ mContext, true);
+ if (smsComponent != null) {
+ return new String[]{smsComponent.getPackageName()};
+ }
+ return null;
+ }
+ });
+
+ // Set a callback for the package manager to query the default dialer app.
+ packageManagerInternal.setDialerAppPackagesProvider(
+ new PackageManagerInternal.PackagesProvider() {
+ @Override
+ public String[] getPackages(int userId) {
+ String packageName = DefaultDialerManager.getDefaultDialerApplication(mContext);
+ if (packageName != null) {
+ return new String[]{packageName};
+ }
+ return null;
+ }
+ });
+ }
+
+ private void registerDefaultAppNotifier() {
+ final PackageManagerInternal packageManagerInternal = LocalServices.getService(
+ PackageManagerInternal.class);
+
+ // Notify the package manager on default app changes
+ final Uri defaultSmsAppUri = Settings.Secure.getUriFor(
+ Settings.Secure.SMS_DEFAULT_APPLICATION);
+ final Uri defaultDialerAppUri = Settings.Secure.getUriFor(
+ Settings.Secure.DIALER_DEFAULT_APPLICATION);
+
+ ContentObserver contentObserver = new ContentObserver(
+ new Handler(Looper.getMainLooper())) {
+ @Override
+ public void onChange(boolean selfChange, Uri uri, int userId) {
+ if (defaultSmsAppUri.equals(uri)) {
+ ComponentName smsComponent = SmsApplication.getDefaultSmsApplication(
+ mContext, true);
+ if (smsComponent != null) {
+ packageManagerInternal.grantDefaultPermissionsToDefaultSmsApp(
+ smsComponent.getPackageName(), userId);
+ }
+ } else if (defaultDialerAppUri.equals(uri)) {
+ String packageName = DefaultDialerManager.getDefaultDialerApplication(
+ mContext);
+ if (packageName != null) {
+ packageManagerInternal.grantDefaultPermissionsToDefaultDialerApp(
+ packageName, userId);
+ }
+ }
+ }
+ };
+
+ mContext.getContentResolver().registerContentObserver(defaultSmsAppUri,
+ false, contentObserver, UserHandle.USER_ALL);
+ mContext.getContentResolver().registerContentObserver(defaultDialerAppUri,
+ false, contentObserver, UserHandle.USER_ALL);
+ }
}