Merge "Grant default permissons to the default SMS, Phone, Browser app." into mnc-dev
This commit is contained in:
@@ -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 \
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -143,7 +143,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;
|
||||
@@ -161,8 +162,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) {
|
||||
@@ -171,7 +176,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()) {
|
||||
@@ -203,18 +208,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)
|
||||
@@ -223,8 +230,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
|
||||
@@ -256,7 +265,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)) {
|
||||
@@ -265,21 +274,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)) {
|
||||
@@ -304,29 +315,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)) {
|
||||
@@ -348,7 +360,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)) {
|
||||
@@ -379,7 +391,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)) {
|
||||
@@ -389,7 +401,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)) {
|
||||
@@ -397,10 +409,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);
|
||||
@@ -459,22 +478,65 @@ 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
private List<PackageParser.Package> getPrivilegedHandlerReceiverPackagesLPr(
|
||||
Intent intent, int userId) {
|
||||
List<ResolveInfo> handlers = mService.queryIntentReceivers(
|
||||
@@ -505,7 +567,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();
|
||||
@@ -530,8 +592,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;
|
||||
}
|
||||
|
||||
@@ -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 setDialerAppPackagesProvider(PackagesProvider provider) {
|
||||
synchronized (mPackages) {
|
||||
mDefaultPermissionPolicy.setDialerAppPackagesProviderLPw(provider);
|
||||
}
|
||||
}
|
||||
|
||||
@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 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;
|
||||
}
|
||||
}
|
||||
};
|
||||
synchronized (mPackages) {
|
||||
mDefaultPermissionPolicy.setCarrierAppPackagesProviderLPw(wrapper);
|
||||
}
|
||||
} finally {
|
||||
Binder.restoreCallingIdentity(token);
|
||||
public void grantDefaultPermissionsToEnabledCarrierApps(String[] packageNames, int userId) {
|
||||
enforceSystemOrPhoneCaller("grantPermissionsToEnabledCarrierApps");
|
||||
synchronized (mPackages) {
|
||||
mDefaultPermissionPolicy.grantDefaultPermissionsToEnabledCarrierAppsLPr(
|
||||
packageNames, userId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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++) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user