Merge "Remove default app permission granting from DefaultPermissionGrantPolicy." into qt-dev am: 8e1c4a0916
am: fcc7e14d24
Change-Id: Id0c53cf209fc51bbc104245adc777e5f3992b2c5
This commit is contained in:
@@ -173,6 +173,22 @@ public abstract class PackageManagerInternal {
|
||||
void setDefaultBrowserAsync(@Nullable String packageName, @UserIdInt int userId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provider for default dialer
|
||||
*/
|
||||
public interface DefaultDialerProvider {
|
||||
|
||||
/**
|
||||
* Get the package name of the default dialer.
|
||||
*
|
||||
* @param userId the user id
|
||||
*
|
||||
* @return the package name of the default dialer, or {@code null} if none
|
||||
*/
|
||||
@Nullable
|
||||
String getDefaultDialer(@UserIdInt int userId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provider for default home
|
||||
*/
|
||||
@@ -229,14 +245,6 @@ public abstract class PackageManagerInternal {
|
||||
*/
|
||||
public abstract void setSyncAdapterPackagesprovider(SyncAdapterPackagesProvider provider);
|
||||
|
||||
/**
|
||||
* Called when the package for the default dialer changed
|
||||
*
|
||||
* @param packageName the new dialer package
|
||||
* @param userId user for which the change was made
|
||||
*/
|
||||
public void onDefaultDialerAppChanged(String packageName, int userId) {}
|
||||
|
||||
/**
|
||||
* Called when the package for the default SMS handler changed
|
||||
*
|
||||
@@ -931,6 +939,13 @@ public abstract class PackageManagerInternal {
|
||||
*/
|
||||
public abstract void setDefaultBrowserProvider(@NonNull DefaultBrowserProvider provider);
|
||||
|
||||
/**
|
||||
* Sets the default dialer provider.
|
||||
*
|
||||
* @param provider the provider
|
||||
*/
|
||||
public abstract void setDefaultDialerProvider(@NonNull DefaultDialerProvider provider);
|
||||
|
||||
/**
|
||||
* Sets the default home provider.
|
||||
*
|
||||
|
||||
@@ -1008,6 +1008,9 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
@GuardedBy("mPackages")
|
||||
private PackageManagerInternal.DefaultBrowserProvider mDefaultBrowserProvider;
|
||||
|
||||
@GuardedBy("mPackages")
|
||||
private PackageManagerInternal.DefaultDialerProvider mDefaultDialerProvider;
|
||||
|
||||
@GuardedBy("mPackages")
|
||||
private PackageManagerInternal.DefaultHomeProvider mDefaultHomeProvider;
|
||||
|
||||
@@ -13982,10 +13985,17 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
return resolveInfo == null ? null : resolveInfo.activityInfo.packageName;
|
||||
}
|
||||
|
||||
private String getDefaultDialerPackageName(int userId) {
|
||||
@Nullable
|
||||
private String getDefaultDialerPackageName(@UserIdInt int userId) {
|
||||
PackageManagerInternal.DefaultDialerProvider provider;
|
||||
synchronized (mPackages) {
|
||||
return mSettings.getDefaultDialerPackageNameLPw(userId);
|
||||
provider = mDefaultDialerProvider;
|
||||
}
|
||||
if (provider == null) {
|
||||
Slog.e(TAG, "mDefaultDialerProvider is null");
|
||||
return null;
|
||||
}
|
||||
return provider.getDefaultDialer(userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -24215,13 +24225,6 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
mDefaultPermissionPolicy.setSyncAdapterPackagesProvider(provider);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDefaultDialerAppChanged(String packageName, int userId) {
|
||||
synchronized (mPackages) {
|
||||
mSettings.setDefaultDialerPackageNameLPw(packageName, userId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void grantDefaultPermissionsToDefaultUseOpenWifiApp(String packageName, int userId) {
|
||||
mDefaultPermissionPolicy.grantDefaultPermissionsToDefaultUseOpenWifiApp(
|
||||
@@ -24767,6 +24770,13 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDefaultDialerProvider(@NonNull DefaultDialerProvider provider) {
|
||||
synchronized (mPackages) {
|
||||
mDefaultDialerProvider = provider;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDefaultHomeProvider(@NonNull DefaultHomeProvider provider) {
|
||||
synchronized (mPackages) {
|
||||
|
||||
@@ -362,9 +362,6 @@ public final class Settings {
|
||||
// For every user, it is used to find the package name of the default Browser App.
|
||||
final SparseArray<String> mDefaultBrowserApp = new SparseArray<String>();
|
||||
|
||||
// For every user, a record of the package name of the default Dialer App.
|
||||
final SparseArray<String> mDefaultDialerApp = new SparseArray<String>();
|
||||
|
||||
// App-link priority tracking, per-user
|
||||
final SparseIntArray mNextAppLinkGeneration = new SparseIntArray();
|
||||
|
||||
@@ -1270,19 +1267,6 @@ public final class Settings {
|
||||
return (userId == UserHandle.USER_ALL) ? null : mDefaultBrowserApp.removeReturnOld(userId);
|
||||
}
|
||||
|
||||
boolean setDefaultDialerPackageNameLPw(String packageName, int userId) {
|
||||
if (userId == UserHandle.USER_ALL) {
|
||||
return false;
|
||||
}
|
||||
mDefaultDialerApp.put(userId, packageName);
|
||||
writePackageRestrictionsLPr(userId);
|
||||
return true;
|
||||
}
|
||||
|
||||
String getDefaultDialerPackageNameLPw(int userId) {
|
||||
return (userId == UserHandle.USER_ALL) ? null : mDefaultDialerApp.get(userId);
|
||||
}
|
||||
|
||||
private File getUserPackagesStateFile(int userId) {
|
||||
// TODO: Implement a cleaner solution when adding tests.
|
||||
// This instead of Environment.getUserSystemDirectory(userId) to support testing.
|
||||
@@ -1482,8 +1466,7 @@ public final class Settings {
|
||||
String packageName = parser.getAttributeValue(null, ATTR_PACKAGE_NAME);
|
||||
mDefaultBrowserApp.put(userId, packageName);
|
||||
} else if (tagName.equals(TAG_DEFAULT_DIALER)) {
|
||||
String packageName = parser.getAttributeValue(null, ATTR_PACKAGE_NAME);
|
||||
mDefaultDialerApp.put(userId, packageName);
|
||||
// Ignored.
|
||||
} else {
|
||||
String msg = "Unknown element under " + TAG_DEFAULT_APPS + ": " +
|
||||
parser.getName();
|
||||
@@ -1938,12 +1921,6 @@ public final class Settings {
|
||||
serializer.attribute(null, ATTR_PACKAGE_NAME, defaultBrowser);
|
||||
serializer.endTag(null, TAG_DEFAULT_BROWSER);
|
||||
}
|
||||
String defaultDialer = mDefaultDialerApp.get(userId);
|
||||
if (!TextUtils.isEmpty(defaultDialer)) {
|
||||
serializer.startTag(null, TAG_DEFAULT_DIALER);
|
||||
serializer.attribute(null, ATTR_PACKAGE_NAME, defaultDialer);
|
||||
serializer.endTag(null, TAG_DEFAULT_DIALER);
|
||||
}
|
||||
serializer.endTag(null, TAG_DEFAULT_APPS);
|
||||
}
|
||||
|
||||
|
||||
@@ -849,21 +849,6 @@ public final class DefaultPermissionGrantPolicy {
|
||||
grantPermissionsToSystemPackage(useOpenWifiPackage, userId, ALWAYS_LOCATION_PERMISSIONS);
|
||||
}
|
||||
|
||||
public void grantDefaultPermissionsToDefaultSmsApp(String packageName, int userId) {
|
||||
Log.i(TAG, "Granting permissions to default sms app for user:" + userId);
|
||||
grantIgnoringSystemPackage(packageName, userId,
|
||||
PHONE_PERMISSIONS, CONTACTS_PERMISSIONS, SMS_PERMISSIONS, STORAGE_PERMISSIONS,
|
||||
MICROPHONE_PERMISSIONS, CAMERA_PERMISSIONS);
|
||||
}
|
||||
|
||||
public void grantDefaultPermissionsToDefaultDialerApp(String packageName, int userId) {
|
||||
mServiceInternal.onDefaultDialerAppChanged(packageName, userId);
|
||||
Log.i(TAG, "Granting permissions to default dialer app for user:" + userId);
|
||||
grantIgnoringSystemPackage(packageName, userId,
|
||||
PHONE_PERMISSIONS, CONTACTS_PERMISSIONS, SMS_PERMISSIONS,
|
||||
MICROPHONE_PERMISSIONS, CAMERA_PERMISSIONS);
|
||||
}
|
||||
|
||||
public void grantDefaultPermissionsToDefaultUseOpenWifiApp(String packageName, int userId) {
|
||||
Log.i(TAG, "Granting permissions to default Use Open WiFi app for user:" + userId);
|
||||
grantIgnoringSystemPackage(packageName, userId, ALWAYS_LOCATION_PERMISSIONS);
|
||||
|
||||
@@ -156,6 +156,7 @@ public class RoleManagerService extends SystemService implements RoleUserState.C
|
||||
PackageManagerInternal packageManagerInternal = LocalServices.getService(
|
||||
PackageManagerInternal.class);
|
||||
packageManagerInternal.setDefaultBrowserProvider(new DefaultBrowserProvider());
|
||||
packageManagerInternal.setDefaultDialerProvider(new DefaultDialerProvider());
|
||||
packageManagerInternal.setDefaultHomeProvider(new DefaultHomeProvider());
|
||||
|
||||
registerUserRemovedReceiver();
|
||||
@@ -772,6 +773,16 @@ public class RoleManagerService extends SystemService implements RoleUserState.C
|
||||
}
|
||||
}
|
||||
|
||||
private class DefaultDialerProvider implements PackageManagerInternal.DefaultDialerProvider {
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public String getDefaultDialer(@UserIdInt int userId) {
|
||||
return CollectionUtils.firstOrNull(getOrCreateUserState(userId).getRoleHolders(
|
||||
RoleManager.ROLE_DIALER));
|
||||
}
|
||||
}
|
||||
|
||||
private class DefaultHomeProvider implements PackageManagerInternal.DefaultHomeProvider {
|
||||
|
||||
@Nullable
|
||||
|
||||
@@ -70,38 +70,9 @@ public class TelecomLoaderService extends SystemService {
|
||||
ServiceManager.addService(Context.TELECOM_SERVICE, service);
|
||||
|
||||
synchronized (mLock) {
|
||||
if (mDefaultSmsAppRequests != null || mDefaultDialerAppRequests != null
|
||||
|| mDefaultSimCallManagerRequests != null) {
|
||||
if (mDefaultSimCallManagerRequests != null) {
|
||||
final DefaultPermissionGrantPolicy permissionPolicy =
|
||||
getDefaultPermissionGrantPolicy();
|
||||
|
||||
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);
|
||||
permissionPolicy.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);
|
||||
permissionPolicy.grantDefaultPermissionsToDefaultDialerApp(
|
||||
packageName, userId);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (mDefaultSimCallManagerRequests != null) {
|
||||
TelecomManager telecomManager =
|
||||
(TelecomManager) mContext.getSystemService(Context.TELECOM_SERVICE);
|
||||
@@ -145,12 +116,6 @@ public class TelecomLoaderService extends SystemService {
|
||||
|
||||
private final Object mLock = new Object();
|
||||
|
||||
@GuardedBy("mLock")
|
||||
private IntArray mDefaultSmsAppRequests;
|
||||
|
||||
@GuardedBy("mLock")
|
||||
private IntArray mDefaultDialerAppRequests;
|
||||
|
||||
@GuardedBy("mLock")
|
||||
private IntArray mDefaultSimCallManagerRequests;
|
||||
|
||||
@@ -207,10 +172,6 @@ public class TelecomLoaderService extends SystemService {
|
||||
permissionPolicy.setSmsAppPackagesProvider(userId -> {
|
||||
synchronized (mLock) {
|
||||
if (mServiceConnection == null) {
|
||||
if (mDefaultSmsAppRequests == null) {
|
||||
mDefaultSmsAppRequests = new IntArray();
|
||||
}
|
||||
mDefaultSmsAppRequests.add(userId);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -226,10 +187,6 @@ public class TelecomLoaderService extends SystemService {
|
||||
permissionPolicy.setDialerAppPackagesProvider(userId -> {
|
||||
synchronized (mLock) {
|
||||
if (mServiceConnection == null) {
|
||||
if (mDefaultDialerAppRequests == null) {
|
||||
mDefaultDialerAppRequests = new IntArray();
|
||||
}
|
||||
mDefaultDialerAppRequests.add(userId);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -263,38 +220,18 @@ public class TelecomLoaderService extends SystemService {
|
||||
|
||||
private void registerDefaultAppNotifier() {
|
||||
final DefaultPermissionGrantPolicy permissionPolicy = getDefaultPermissionGrantPolicy();
|
||||
|
||||
// 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) {
|
||||
permissionPolicy.grantDefaultPermissionsToDefaultSmsApp(
|
||||
smsComponent.getPackageName(), userId);
|
||||
}
|
||||
} else if (defaultDialerAppUri.equals(uri)) {
|
||||
String packageName = DefaultDialerManager.getDefaultDialerApplication(
|
||||
mContext);
|
||||
if (packageName != null) {
|
||||
permissionPolicy.grantDefaultPermissionsToDefaultDialerApp(
|
||||
packageName, userId);
|
||||
}
|
||||
if (defaultDialerAppUri.equals(uri)) {
|
||||
updateSimCallManagerPermissions(permissionPolicy, 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