Move providers to permission manager
Bug: 135279435 Test: atest PermissionUpdateListenerTest Test: atest android.content.pm.cts.PackageManagerTest Test: atest android.permission2.cts.RestrictedPermissionsTest Test: atest TeleServiceTests Test: atest DataConnectionTest Change-Id: Ife563589929b2662c60e1a0ab0ec8f6a2d7e4c12
This commit is contained in:
@@ -2049,7 +2049,7 @@ public class ApplicationPackageManager extends PackageManager {
|
||||
@Override
|
||||
public String getDefaultBrowserPackageNameAsUser(int userId) {
|
||||
try {
|
||||
return mPM.getDefaultBrowserPackageName(userId);
|
||||
return mPermissionManager.getDefaultBrowser(userId);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
@@ -2058,7 +2058,7 @@ public class ApplicationPackageManager extends PackageManager {
|
||||
@Override
|
||||
public boolean setDefaultBrowserPackageNameAsUser(String packageName, int userId) {
|
||||
try {
|
||||
return mPM.setDefaultBrowserPackageName(packageName, userId);
|
||||
return mPermissionManager.setDefaultBrowser(packageName, userId);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
|
||||
@@ -594,9 +594,6 @@ interface IPackageManager {
|
||||
ParceledListSlice getIntentFilterVerifications(String packageName);
|
||||
ParceledListSlice getAllIntentFilters(String packageName);
|
||||
|
||||
boolean setDefaultBrowserPackageName(String packageName, int userId);
|
||||
String getDefaultBrowserPackageName(int userId);
|
||||
|
||||
VerifierDeviceIdentity getVerifierDeviceIdentity();
|
||||
|
||||
boolean isFirstBoot();
|
||||
@@ -629,15 +626,6 @@ interface IPackageManager {
|
||||
boolean isPackageSignedByKeySet(String packageName, in KeySet ks);
|
||||
boolean isPackageSignedByKeySetExactly(String packageName, in KeySet ks);
|
||||
|
||||
void grantDefaultPermissionsToEnabledCarrierApps(in String[] packageNames, int userId);
|
||||
void grantDefaultPermissionsToEnabledImsServices(in String[] packageNames, int userId);
|
||||
void grantDefaultPermissionsToEnabledTelephonyDataServices(
|
||||
in String[] packageNames, int userId);
|
||||
void revokeDefaultPermissionsFromDisabledTelephonyDataServices(
|
||||
in String[] packageNames, int userId);
|
||||
void grantDefaultPermissionsToActiveLuiApp(in String packageName, int userId);
|
||||
void revokeDefaultPermissionsFromLuiApps(in String[] packageNames, int userId);
|
||||
|
||||
boolean isPermissionRevokedByPolicy(String permission, String packageName, int userId);
|
||||
|
||||
@UnsupportedAppUsage
|
||||
|
||||
@@ -83,139 +83,6 @@ public abstract class PackageManagerInternal {
|
||||
void onPackageRemoved(@NonNull String packageName, int uid);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provider for package names.
|
||||
*/
|
||||
public interface PackagesProvider {
|
||||
|
||||
/**
|
||||
* Gets the packages for a given user.
|
||||
* @param userId The user id.
|
||||
* @return The package names.
|
||||
*/
|
||||
public String[] getPackages(int userId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provider for package names.
|
||||
*/
|
||||
public interface SyncAdapterPackagesProvider {
|
||||
|
||||
/**
|
||||
* Gets the sync adapter packages for given authority and user.
|
||||
* @param authority The authority.
|
||||
* @param userId The user id.
|
||||
* @return The package names.
|
||||
*/
|
||||
public String[] getPackages(String authority, int userId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provider for default browser
|
||||
*/
|
||||
public interface DefaultBrowserProvider {
|
||||
|
||||
/**
|
||||
* Get the package name of the default browser.
|
||||
*
|
||||
* @param userId the user id
|
||||
*
|
||||
* @return the package name of the default browser, or {@code null} if none
|
||||
*/
|
||||
@Nullable
|
||||
String getDefaultBrowser(@UserIdInt int userId);
|
||||
|
||||
/**
|
||||
* Set the package name of the default browser.
|
||||
*
|
||||
* @param packageName package name of the default browser, or {@code null} to remove
|
||||
* @param userId the user id
|
||||
*
|
||||
* @return whether the default browser was successfully set.
|
||||
*/
|
||||
boolean setDefaultBrowser(@Nullable String packageName, @UserIdInt int userId);
|
||||
|
||||
/**
|
||||
* Set the package name of the default browser asynchronously.
|
||||
*
|
||||
* @param packageName package name of the default browser, or {@code null} to remove
|
||||
* @param userId the user id
|
||||
*/
|
||||
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
|
||||
*/
|
||||
public interface DefaultHomeProvider {
|
||||
|
||||
/**
|
||||
* Get the package name of the default home.
|
||||
*
|
||||
* @param userId the user id
|
||||
*
|
||||
* @return the package name of the default home, or {@code null} if none
|
||||
*/
|
||||
@Nullable
|
||||
String getDefaultHome(@UserIdInt int userId);
|
||||
|
||||
/**
|
||||
* Set the package name of the default home.
|
||||
*
|
||||
* @param packageName package name of the default home, or {@code null} to remove
|
||||
* @param userId the user id
|
||||
* @param callback the callback made after the default home as been updated
|
||||
*/
|
||||
void setDefaultHomeAsync(@Nullable String packageName, @UserIdInt int userId,
|
||||
@NonNull Consumer<Boolean> callback);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the location provider packages provider.
|
||||
* @param provider The packages provider.
|
||||
*/
|
||||
public abstract void setLocationPackagesProvider(PackagesProvider provider);
|
||||
|
||||
/**
|
||||
* Set the location extra packages provider.
|
||||
* @param provider The packages provider.
|
||||
*/
|
||||
public abstract void setLocationExtraPackagesProvider(PackagesProvider provider);
|
||||
|
||||
/**
|
||||
* Sets the voice interaction packages provider.
|
||||
* @param provider The packages provider.
|
||||
*/
|
||||
public abstract void setVoiceInteractionPackagesProvider(PackagesProvider provider);
|
||||
|
||||
/**
|
||||
* Sets the Use Open Wifi packages provider.
|
||||
* @param provider The packages provider.
|
||||
*/
|
||||
public abstract void setUseOpenWifiAppPackagesProvider(PackagesProvider provider);
|
||||
|
||||
/**
|
||||
* Sets the sync adapter packages provider.
|
||||
* @param provider The provider.
|
||||
*/
|
||||
public abstract void setSyncAdapterPackagesprovider(SyncAdapterPackagesProvider provider);
|
||||
|
||||
/**
|
||||
* Called when the package for the default SMS handler changed
|
||||
*
|
||||
@@ -232,14 +99,6 @@ public abstract class PackageManagerInternal {
|
||||
*/
|
||||
public void onDefaultSimCallManagerAppChanged(String packageName, int userId) {}
|
||||
|
||||
/**
|
||||
* Requests granting of the default permissions to the current default Use Open Wifi app.
|
||||
* @param packageName The default use open wifi package name.
|
||||
* @param userId The user for which to grant the permissions.
|
||||
*/
|
||||
public abstract void grantDefaultPermissionsToDefaultUseOpenWifiApp(String packageName,
|
||||
int userId);
|
||||
|
||||
/**
|
||||
* Sets a list of apps to keep in PM's internal data structures and as APKs even if no user has
|
||||
* currently installed it. The apps are not preloaded.
|
||||
@@ -871,27 +730,6 @@ public abstract class PackageManagerInternal {
|
||||
@Nullable
|
||||
public abstract String removeLegacyDefaultBrowserPackageName(int userId);
|
||||
|
||||
/**
|
||||
* Sets the default browser provider.
|
||||
*
|
||||
* @param provider the provider
|
||||
*/
|
||||
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.
|
||||
*
|
||||
* @param provider the provider
|
||||
*/
|
||||
public abstract void setDefaultHomeProvider(@NonNull DefaultHomeProvider provider);
|
||||
|
||||
/**
|
||||
* Returns {@code true} if given {@code packageName} is an apex package.
|
||||
*/
|
||||
@@ -909,15 +747,6 @@ public abstract class PackageManagerInternal {
|
||||
public abstract void uninstallApex(String packageName, long versionCode, int userId,
|
||||
IntentSender intentSender);
|
||||
|
||||
/**
|
||||
* Whether default permission grants have been performed for a user
|
||||
* since the device booted.
|
||||
*
|
||||
* @param userId The user id.
|
||||
* @return true if default permissions
|
||||
*/
|
||||
public abstract boolean wereDefaultPermissionsGrantedSinceBoot(int userId);
|
||||
|
||||
/**
|
||||
* Get fingerprint of build that updated the runtime permissions for a user.
|
||||
*
|
||||
@@ -960,4 +789,7 @@ public abstract class PackageManagerInternal {
|
||||
*/
|
||||
public abstract boolean isCallerInstallerOfRecord(
|
||||
@NonNull PackageParser.Package pkg, int callingUid);
|
||||
|
||||
/** Returns whether or not default runtime permissions are granted for the given user */
|
||||
public abstract boolean areDefaultRuntimePermissionsGranted(@UserIdInt int userId);
|
||||
}
|
||||
|
||||
@@ -70,4 +70,22 @@ interface IPermissionManager {
|
||||
void revokeRuntimePermission(String packageName, String permName, int userId);
|
||||
|
||||
void resetRuntimePermissions();
|
||||
|
||||
boolean setDefaultBrowser(String packageName, int userId);
|
||||
|
||||
String getDefaultBrowser(int userId);
|
||||
|
||||
void grantDefaultPermissionsToEnabledCarrierApps(in String[] packageNames, int userId);
|
||||
|
||||
void grantDefaultPermissionsToEnabledImsServices(in String[] packageNames, int userId);
|
||||
|
||||
void grantDefaultPermissionsToEnabledTelephonyDataServices(
|
||||
in String[] packageNames, int userId);
|
||||
|
||||
void revokeDefaultPermissionsFromDisabledTelephonyDataServices(
|
||||
in String[] packageNames, int userId);
|
||||
|
||||
void grantDefaultPermissionsToActiveLuiApp(in String packageName, int userId);
|
||||
|
||||
void revokeDefaultPermissionsFromLuiApps(in String[] packageNames, int userId);
|
||||
}
|
||||
|
||||
@@ -42,7 +42,6 @@ import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.PackageManager.NameNotFoundException;
|
||||
import android.content.pm.PackageManagerInternal;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.content.pm.Signature;
|
||||
import android.content.res.Resources;
|
||||
@@ -121,6 +120,7 @@ import com.android.server.location.LocationRequestStatistics.PackageStatistics;
|
||||
import com.android.server.location.MockProvider;
|
||||
import com.android.server.location.PassiveProvider;
|
||||
import com.android.server.location.RemoteListenerHelper;
|
||||
import com.android.server.pm.permission.PermissionManagerServiceInternal;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.FileDescriptor;
|
||||
@@ -282,12 +282,12 @@ public class LocationManagerService extends ILocationManager.Stub {
|
||||
|
||||
// Let the package manager query which are the default location
|
||||
// providers as they get certain permissions granted by default.
|
||||
PackageManagerInternal packageManagerInternal = LocalServices.getService(
|
||||
PackageManagerInternal.class);
|
||||
packageManagerInternal.setLocationPackagesProvider(
|
||||
PermissionManagerServiceInternal permissionManagerInternal = LocalServices.getService(
|
||||
PermissionManagerServiceInternal.class);
|
||||
permissionManagerInternal.setLocationPackagesProvider(
|
||||
userId -> mContext.getResources().getStringArray(
|
||||
com.android.internal.R.array.config_locationProviderPackageNames));
|
||||
packageManagerInternal.setLocationExtraPackagesProvider(
|
||||
permissionManagerInternal.setLocationExtraPackagesProvider(
|
||||
userId -> mContext.getResources().getStringArray(
|
||||
com.android.internal.R.array.config_locationExtraPackageNames));
|
||||
|
||||
|
||||
@@ -26,7 +26,6 @@ import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.ServiceConnection;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.PackageManagerInternal;
|
||||
import android.database.ContentObserver;
|
||||
import android.location.LocationManager;
|
||||
import android.net.INetworkRecommendationProvider;
|
||||
@@ -54,15 +53,14 @@ import android.provider.Settings.Global;
|
||||
import android.text.TextUtils;
|
||||
import android.util.ArrayMap;
|
||||
import android.util.ArraySet;
|
||||
import android.util.IntArray;
|
||||
import android.util.Log;
|
||||
|
||||
import com.android.internal.annotations.GuardedBy;
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.internal.content.PackageMonitor;
|
||||
import com.android.internal.os.TransferPipe;
|
||||
import com.android.internal.telephony.SmsApplication;
|
||||
import com.android.internal.util.DumpUtils;
|
||||
import com.android.server.pm.permission.PermissionManagerServiceInternal;
|
||||
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.IOException;
|
||||
@@ -294,7 +292,7 @@ public class NetworkScoreService extends INetworkScoreService.Stub {
|
||||
String useOpenWifiPackage = Global.getString(mContext.getContentResolver(),
|
||||
Global.USE_OPEN_WIFI_PACKAGE);
|
||||
if (!TextUtils.isEmpty(useOpenWifiPackage)) {
|
||||
LocalServices.getService(PackageManagerInternal.class)
|
||||
LocalServices.getService(PermissionManagerServiceInternal.class)
|
||||
.grantDefaultPermissionsToDefaultUseOpenWifiApp(useOpenWifiPackage,
|
||||
userId);
|
||||
}
|
||||
@@ -306,17 +304,14 @@ public class NetworkScoreService extends INetworkScoreService.Stub {
|
||||
false /*notifyForDescendants*/,
|
||||
mUseOpenWifiPackageObserver);
|
||||
// Set a callback for the package manager to query the use open wifi app.
|
||||
LocalServices.getService(PackageManagerInternal.class).setUseOpenWifiAppPackagesProvider(
|
||||
new PackageManagerInternal.PackagesProvider() {
|
||||
@Override
|
||||
public String[] getPackages(int userId) {
|
||||
String useOpenWifiPackage = Global.getString(mContext.getContentResolver(),
|
||||
Global.USE_OPEN_WIFI_PACKAGE);
|
||||
if (!TextUtils.isEmpty(useOpenWifiPackage)) {
|
||||
return new String[]{useOpenWifiPackage};
|
||||
}
|
||||
return null;
|
||||
LocalServices.getService(PermissionManagerServiceInternal.class)
|
||||
.setUseOpenWifiAppPackagesProvider((userId) -> {
|
||||
String useOpenWifiPackage = Global.getString(mContext.getContentResolver(),
|
||||
Global.USE_OPEN_WIFI_PACKAGE);
|
||||
if (!TextUtils.isEmpty(useOpenWifiPackage)) {
|
||||
return new String[]{useOpenWifiPackage};
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -40,7 +40,6 @@ import android.content.SyncInfo;
|
||||
import android.content.SyncRequest;
|
||||
import android.content.SyncStatusInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.PackageManagerInternal;
|
||||
import android.content.pm.ProviderInfo;
|
||||
import android.database.IContentObserver;
|
||||
import android.database.sqlite.SQLiteException;
|
||||
@@ -71,6 +70,7 @@ import com.android.internal.util.DumpUtils;
|
||||
import com.android.internal.util.IndentingPrintWriter;
|
||||
import com.android.server.LocalServices;
|
||||
import com.android.server.SystemService;
|
||||
import com.android.server.pm.permission.PermissionManagerServiceInternal;
|
||||
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.PrintWriter;
|
||||
@@ -280,15 +280,11 @@ public final class ContentService extends IContentService.Stub {
|
||||
|
||||
// Let the package manager query for the sync adapters for a given authority
|
||||
// as we grant default permissions to sync adapters for specific authorities.
|
||||
PackageManagerInternal packageManagerInternal = LocalServices.getService(
|
||||
PackageManagerInternal.class);
|
||||
packageManagerInternal.setSyncAdapterPackagesprovider(
|
||||
new PackageManagerInternal.SyncAdapterPackagesProvider() {
|
||||
@Override
|
||||
public String[] getPackages(String authority, int userId) {
|
||||
return getSyncAdapterPackagesForAuthorityAsUser(authority, userId);
|
||||
}
|
||||
});
|
||||
final PermissionManagerServiceInternal permissionManagerInternal =
|
||||
LocalServices.getService(PermissionManagerServiceInternal.class);
|
||||
permissionManagerInternal.setSyncAdapterPackagesProvider((authority, userId) -> {
|
||||
return getSyncAdapterPackagesForAuthorityAsUser(authority, userId);
|
||||
});
|
||||
|
||||
final IntentFilter packageFilter = new IntentFilter();
|
||||
packageFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
|
||||
|
||||
@@ -311,7 +311,6 @@ import com.android.server.pm.dex.DexoptOptions;
|
||||
import com.android.server.pm.dex.PackageDexUsage;
|
||||
import com.android.server.pm.dex.ViewCompiler;
|
||||
import com.android.server.pm.permission.BasePermission;
|
||||
import com.android.server.pm.permission.DefaultPermissionGrantPolicy;
|
||||
import com.android.server.pm.permission.PermissionManagerService;
|
||||
import com.android.server.pm.permission.PermissionManagerServiceInternal;
|
||||
import com.android.server.pm.permission.PermissionsState;
|
||||
@@ -948,8 +947,6 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
final SparseArray<IntentFilterVerificationState> mIntentFilterVerificationStates
|
||||
= new SparseArray<>();
|
||||
|
||||
// TODO remove this and go through mPermissonManager directly
|
||||
final DefaultPermissionGrantPolicy mDefaultPermissionPolicy;
|
||||
// Internal interface for permission manager
|
||||
private final PermissionManagerServiceInternal mPermissionManager;
|
||||
// Public interface for permission manager
|
||||
@@ -992,15 +989,6 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
void receiveVerificationResponse(int verificationId);
|
||||
}
|
||||
|
||||
@GuardedBy("mPackages")
|
||||
private PackageManagerInternal.DefaultBrowserProvider mDefaultBrowserProvider;
|
||||
|
||||
@GuardedBy("mPackages")
|
||||
private PackageManagerInternal.DefaultDialerProvider mDefaultDialerProvider;
|
||||
|
||||
@GuardedBy("mPackages")
|
||||
private PackageManagerInternal.DefaultHomeProvider mDefaultHomeProvider;
|
||||
|
||||
private class IntentVerifierProxy implements IntentFilterVerifier<ActivityIntentInfo> {
|
||||
private Context mContext;
|
||||
private ComponentName mIntentFilterVerifierComponent;
|
||||
@@ -1966,7 +1954,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
final PackageSetting pkgSetting = mSettings.mPackages.get(packageName);
|
||||
if (pkgSetting.getInstallReason(userId)
|
||||
!= PackageManager.INSTALL_REASON_DEVICE_RESTORE) {
|
||||
setDefaultBrowserAsyncLPw(null, userId);
|
||||
mPermissionManager.setDefaultBrowser(null, true, true, userId);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2348,7 +2336,6 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
mPackages /*externalLock*/);
|
||||
mPermissionManagerService =
|
||||
(IPermissionManager) ServiceManager.getService("permissionmgr");
|
||||
mDefaultPermissionPolicy = mPermissionManager.getDefaultPermissionGrantPolicy();
|
||||
mSettings = new Settings(Environment.getDataDirectory(),
|
||||
mPermissionManager.getPermissionSettings(), mPackages);
|
||||
}
|
||||
@@ -7286,7 +7273,8 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
} else {
|
||||
// Browser/generic handling case. If there's a default browser, go straight
|
||||
// to that (but only if there is no other higher-priority match).
|
||||
final String defaultBrowserPackageName = getDefaultBrowserPackageName(userId);
|
||||
final String defaultBrowserPackageName =
|
||||
mPermissionManager.getDefaultBrowser(userId);
|
||||
int maxMatchPrio = 0;
|
||||
ResolveInfo defaultBrowserMatch = null;
|
||||
final int numCandidates = matchAllList.size();
|
||||
@@ -12826,7 +12814,9 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
|
||||
@Override
|
||||
public void setSystemAppHiddenUntilInstalled(String packageName, boolean hidden) {
|
||||
enforceSystemOrPhoneCaller("setSystemAppHiddenUntilInstalled");
|
||||
final int callingUid = Binder.getCallingUid();
|
||||
PackageManagerServiceUtils
|
||||
.enforceSystemOrPhoneCaller("setSystemAppHiddenUntilInstalled", callingUid);
|
||||
synchronized (mPackages) {
|
||||
final PackageSetting pkgSetting = mSettings.mPackages.get(packageName);
|
||||
if (pkgSetting == null || !pkgSetting.isSystem()) {
|
||||
@@ -12849,7 +12839,9 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
|
||||
@Override
|
||||
public boolean setSystemAppInstallState(String packageName, boolean installed, int userId) {
|
||||
enforceSystemOrPhoneCaller("setSystemAppInstallState");
|
||||
final int callingUid = Binder.getCallingUid();
|
||||
PackageManagerServiceUtils
|
||||
.enforceSystemOrPhoneCaller("setSystemAppInstallState", callingUid);
|
||||
synchronized (mPackages) {
|
||||
final PackageSetting pkgSetting = mSettings.mPackages.get(packageName);
|
||||
// The target app should always be in system
|
||||
@@ -13421,7 +13413,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
final long callingId = Binder.clearCallingIdentity();
|
||||
try {
|
||||
final String activeLauncherPackageName = getActiveLauncherPackageName(userId);
|
||||
final String dialerPackageName = getDefaultDialerPackageName(userId);
|
||||
final String dialerPackageName = mPermissionManager.getDefaultDialer(userId);
|
||||
for (int i = 0; i < packageNames.length; i++) {
|
||||
canSuspend[i] = false;
|
||||
final String packageName = packageNames[i];
|
||||
@@ -13503,19 +13495,6 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
return resolveInfo == null ? null : resolveInfo.activityInfo.packageName;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private String getDefaultDialerPackageName(@UserIdInt int userId) {
|
||||
PackageManagerInternal.DefaultDialerProvider provider;
|
||||
synchronized (mPackages) {
|
||||
provider = mDefaultDialerProvider;
|
||||
}
|
||||
if (provider == null) {
|
||||
Slog.e(TAG, "mDefaultDialerProvider is null");
|
||||
return null;
|
||||
}
|
||||
return provider.getDefaultDialer(userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void verifyPendingInstall(int id, int verificationCode) throws RemoteException {
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
@@ -13874,75 +13853,6 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean setDefaultBrowserPackageName(String packageName, int userId) {
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.SET_PREFERRED_APPLICATIONS, null);
|
||||
if (UserHandle.getCallingUserId() != userId) {
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, null);
|
||||
}
|
||||
if (userId == UserHandle.USER_ALL) {
|
||||
return false;
|
||||
}
|
||||
PackageManagerInternal.DefaultBrowserProvider provider;
|
||||
synchronized (mPackages) {
|
||||
provider = mDefaultBrowserProvider;
|
||||
}
|
||||
if (provider == null) {
|
||||
Slog.e(TAG, "mDefaultBrowserProvider is null");
|
||||
return false;
|
||||
}
|
||||
boolean successful = provider.setDefaultBrowser(packageName, userId);
|
||||
if (!successful) {
|
||||
return false;
|
||||
}
|
||||
if (packageName != null) {
|
||||
synchronized (mPackages) {
|
||||
mDefaultPermissionPolicy.grantDefaultPermissionsToDefaultBrowser(packageName,
|
||||
userId);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void setDefaultBrowserAsyncLPw(@Nullable String packageName, @UserIdInt int userId) {
|
||||
if (userId == UserHandle.USER_ALL) {
|
||||
return;
|
||||
}
|
||||
if (mDefaultBrowserProvider == null) {
|
||||
Slog.e(TAG, "mDefaultBrowserProvider is null");
|
||||
return;
|
||||
}
|
||||
mDefaultBrowserProvider.setDefaultBrowserAsync(packageName, userId);
|
||||
if (packageName != null) {
|
||||
synchronized (mPackages) {
|
||||
mDefaultPermissionPolicy.grantDefaultPermissionsToDefaultBrowser(packageName,
|
||||
userId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDefaultBrowserPackageName(int userId) {
|
||||
if (UserHandle.getCallingUserId() != userId) {
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, null);
|
||||
}
|
||||
if (getInstantAppPackageName(Binder.getCallingUid()) != null) {
|
||||
return null;
|
||||
}
|
||||
PackageManagerInternal.DefaultBrowserProvider provider;
|
||||
synchronized (mPackages) {
|
||||
provider = mDefaultBrowserProvider;
|
||||
}
|
||||
if (provider == null) {
|
||||
Slog.e(TAG, "mDefaultBrowserProvider is null");
|
||||
return null;
|
||||
}
|
||||
return provider.getDefaultBrowser(userId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the "allow unknown sources" setting.
|
||||
*
|
||||
@@ -19688,10 +19598,10 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
}
|
||||
|
||||
private void clearDefaultBrowserIfNeededForUser(String packageName, int userId) {
|
||||
final String defaultBrowserPackageName = getDefaultBrowserPackageName(userId);
|
||||
final String defaultBrowserPackageName = mPermissionManager.getDefaultBrowser(userId);
|
||||
if (!TextUtils.isEmpty(defaultBrowserPackageName)) {
|
||||
if (packageName.equals(defaultBrowserPackageName)) {
|
||||
setDefaultBrowserPackageName(null, userId);
|
||||
mPermissionManager.setDefaultBrowser(null, true, true, userId);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -19719,7 +19629,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
// significant refactoring to keep all default apps in the package
|
||||
// manager (cleaner but more work) or have the services provide
|
||||
// callbacks to the package manager to request a default app reset.
|
||||
setDefaultBrowserPackageName(null, userId);
|
||||
mPermissionManager.setDefaultBrowser(null, true, true, userId);
|
||||
resetNetworkPolicies(userId);
|
||||
synchronized (mPackages) {
|
||||
scheduleWritePackageRestrictionsLocked(userId);
|
||||
@@ -19972,17 +19882,14 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
parser.setInput(new ByteArrayInputStream(backup), StandardCharsets.UTF_8.name());
|
||||
restoreFromXml(parser, userId, TAG_DEFAULT_APPS,
|
||||
(parser1, userId1) -> {
|
||||
String defaultBrowser;
|
||||
final String defaultBrowser;
|
||||
synchronized (mPackages) {
|
||||
mSettings.readDefaultAppsLPw(parser1, userId1);
|
||||
defaultBrowser = mSettings.removeDefaultBrowserPackageNameLPw(userId1);
|
||||
}
|
||||
if (defaultBrowser != null) {
|
||||
PackageManagerInternal.DefaultBrowserProvider provider;
|
||||
synchronized (mPackages) {
|
||||
provider = mDefaultBrowserProvider;
|
||||
}
|
||||
provider.setDefaultBrowser(defaultBrowser, userId1);
|
||||
mPermissionManager
|
||||
.setDefaultBrowser(defaultBrowser, false, false, userId1);
|
||||
}
|
||||
});
|
||||
} catch (Exception e) {
|
||||
@@ -20219,15 +20126,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
}
|
||||
allHomeCandidates.addAll(resolveInfos);
|
||||
|
||||
PackageManagerInternal.DefaultHomeProvider provider;
|
||||
synchronized (mPackages) {
|
||||
provider = mDefaultHomeProvider;
|
||||
}
|
||||
if (provider == null) {
|
||||
Slog.e(TAG, "mDefaultHomeProvider is null");
|
||||
return null;
|
||||
}
|
||||
String packageName = provider.getDefaultHome(userId);
|
||||
final String packageName = mPermissionManager.getDefaultHome(userId);
|
||||
if (packageName == null) {
|
||||
return null;
|
||||
}
|
||||
@@ -20280,15 +20179,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
final String packageName = preferredResolveInfo != null
|
||||
&& preferredResolveInfo.activityInfo != null
|
||||
? preferredResolveInfo.activityInfo.packageName : null;
|
||||
final PackageManagerInternal.DefaultHomeProvider provider;
|
||||
synchronized (mPackages) {
|
||||
provider = mDefaultHomeProvider;
|
||||
}
|
||||
if (provider == null) {
|
||||
Slog.e(TAG, "Default home provider has not been set");
|
||||
return false;
|
||||
}
|
||||
final String currentPackageName = provider.getDefaultHome(userId);
|
||||
final String currentPackageName = mPermissionManager.getDefaultHome(userId);
|
||||
if (TextUtils.equals(currentPackageName, packageName)) {
|
||||
return false;
|
||||
}
|
||||
@@ -20298,7 +20189,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
// PermissionController manages default home directly.
|
||||
return false;
|
||||
}
|
||||
provider.setDefaultHomeAsync(packageName, userId, (successful) -> {
|
||||
mPermissionManager.setDefaultHome(currentPackageName, userId, (successful) -> {
|
||||
if (successful) {
|
||||
postPreferredActivityChangedBroadcast(userId);
|
||||
}
|
||||
@@ -20854,7 +20745,8 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
// Disable any carrier apps. We do this very early in boot to prevent the apps from being
|
||||
// disabled after already being started.
|
||||
CarrierAppUtils.disableCarrierAppsUntilPrivileged(mContext.getOpPackageName(), this,
|
||||
mContext.getContentResolver(), UserHandle.USER_SYSTEM);
|
||||
mPermissionManagerService, mContext.getContentResolver(),
|
||||
UserHandle.USER_SYSTEM);
|
||||
|
||||
disableSkuSpecificApps();
|
||||
|
||||
@@ -20868,8 +20760,6 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
Log.d(TAG, "compatibility mode:" + compatibilityModeEnabled);
|
||||
}
|
||||
|
||||
int[] grantPermissionsUserIds = EMPTY_INT_ARRAY;
|
||||
|
||||
synchronized (mPackages) {
|
||||
// Verify that all of the preferred activity components actually
|
||||
// exist. It is possible for applications to be updated and at
|
||||
@@ -20899,27 +20789,9 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
mSettings.mPreferredActivities.keyAt(i));
|
||||
}
|
||||
}
|
||||
|
||||
for (int userId : UserManagerService.getInstance().getUserIds()) {
|
||||
if (!mSettings.areDefaultRuntimePermissionsGrantedLPr(userId)) {
|
||||
grantPermissionsUserIds = ArrayUtils.appendInt(
|
||||
grantPermissionsUserIds, userId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sUserManager.systemReady();
|
||||
// If we upgraded grant all default permissions before kicking off.
|
||||
for (int userId : grantPermissionsUserIds) {
|
||||
mDefaultPermissionPolicy.grantDefaultPermissions(userId);
|
||||
}
|
||||
|
||||
if (grantPermissionsUserIds == EMPTY_INT_ARRAY) {
|
||||
// If we did not grant default permissions, we preload from this the
|
||||
// default permission exceptions lazily to ensure we don't hit the
|
||||
// disk on a new user creation.
|
||||
mDefaultPermissionPolicy.scheduleReadDefaultPermissionExceptions();
|
||||
}
|
||||
|
||||
// Now that we've scanned all packages, and granted any default
|
||||
// permissions, ensure permissions are updated. Beware of dragons if you
|
||||
@@ -22943,11 +22815,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
}
|
||||
|
||||
void onNewUserCreated(final int userId) {
|
||||
mDefaultPermissionPolicy.grantDefaultPermissions(userId);
|
||||
synchronized(mPackages) {
|
||||
// NOTE: This adds UPDATE_PERMISSIONS_REPLACE_PKG
|
||||
mPermissionManager.updateAllPermissions(StorageManager.UUID_PRIVATE_INTERNAL, true);
|
||||
}
|
||||
mPermissionManager.onNewUserCreated(userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -23531,7 +23399,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
public String getKnownPackageName(int knownPackage, int userId) {
|
||||
switch(knownPackage) {
|
||||
case PackageManagerInternal.PACKAGE_BROWSER:
|
||||
return getDefaultBrowserPackageName(userId);
|
||||
return mPermissionManager.getDefaultBrowser(userId);
|
||||
case PackageManagerInternal.PACKAGE_INSTALLER:
|
||||
return mRequiredInstallerPackage;
|
||||
case PackageManagerInternal.PACKAGE_SETUP_WIZARD:
|
||||
@@ -23564,37 +23432,6 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
&& mResolveActivity.name.equals(component.name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLocationPackagesProvider(PackagesProvider provider) {
|
||||
mDefaultPermissionPolicy.setLocationPackagesProvider(provider);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLocationExtraPackagesProvider(PackagesProvider provider) {
|
||||
mDefaultPermissionPolicy.setLocationExtraPackagesProvider(provider);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVoiceInteractionPackagesProvider(PackagesProvider provider) {
|
||||
mDefaultPermissionPolicy.setVoiceInteractionPackagesProvider(provider);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUseOpenWifiAppPackagesProvider(PackagesProvider provider) {
|
||||
mDefaultPermissionPolicy.setUseOpenWifiAppPackagesProvider(provider);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSyncAdapterPackagesprovider(SyncAdapterPackagesProvider provider) {
|
||||
mDefaultPermissionPolicy.setSyncAdapterPackagesProvider(provider);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void grantDefaultPermissionsToDefaultUseOpenWifiApp(String packageName, int userId) {
|
||||
mDefaultPermissionPolicy.grantDefaultPermissionsToDefaultUseOpenWifiApp(
|
||||
packageName, userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setKeepUninstalledPackages(final List<String> packageList) {
|
||||
Preconditions.checkNotNull(packageList);
|
||||
@@ -24107,27 +23944,6 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDefaultBrowserProvider(@NonNull DefaultBrowserProvider provider) {
|
||||
synchronized (mPackages) {
|
||||
mDefaultBrowserProvider = provider;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDefaultDialerProvider(@NonNull DefaultDialerProvider provider) {
|
||||
synchronized (mPackages) {
|
||||
mDefaultDialerProvider = provider;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDefaultHomeProvider(@NonNull DefaultHomeProvider provider) {
|
||||
synchronized (mPackages) {
|
||||
mDefaultHomeProvider = provider;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isApexPackage(String packageName) {
|
||||
return PackageManagerService.this.mApexManager.isApexPackage(packageName);
|
||||
@@ -24173,13 +23989,6 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean wereDefaultPermissionsGrantedSinceBoot(int userId) {
|
||||
synchronized (mPackages) {
|
||||
return mDefaultPermissionPolicy.wereDefaultPermissionsGrantedSinceBoot(userId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRuntimePermissionsFingerPrint(@NonNull String fingerPrint,
|
||||
@UserIdInt int userId) {
|
||||
@@ -24266,6 +24075,13 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
&& UserHandle.isSameApp(installerPackageSetting.appId, callingUid);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean areDefaultRuntimePermissionsGranted(int userId) {
|
||||
synchronized (mPackages) {
|
||||
return mSettings.areDefaultRuntimePermissionsGrantedLPr(userId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@GuardedBy("mPackages")
|
||||
@@ -24334,83 +24150,6 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void grantDefaultPermissionsToEnabledCarrierApps(String[] packageNames, int userId) {
|
||||
enforceSystemOrPhoneCaller("grantPermissionsToEnabledCarrierApps");
|
||||
synchronized (mPackages) {
|
||||
final long identity = Binder.clearCallingIdentity();
|
||||
try {
|
||||
mDefaultPermissionPolicy.grantDefaultPermissionsToEnabledCarrierApps(
|
||||
packageNames, userId);
|
||||
} finally {
|
||||
Binder.restoreCallingIdentity(identity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void grantDefaultPermissionsToEnabledImsServices(String[] packageNames, int userId) {
|
||||
enforceSystemOrPhoneCaller("grantDefaultPermissionsToEnabledImsServices");
|
||||
synchronized (mPackages) {
|
||||
final long identity = Binder.clearCallingIdentity();
|
||||
try {
|
||||
mDefaultPermissionPolicy.grantDefaultPermissionsToEnabledImsServices(
|
||||
packageNames, userId);
|
||||
} finally {
|
||||
Binder.restoreCallingIdentity(identity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void grantDefaultPermissionsToEnabledTelephonyDataServices(
|
||||
String[] packageNames, int userId) {
|
||||
enforceSystemOrPhoneCaller("grantDefaultPermissionsToEnabledTelephonyDataServices");
|
||||
synchronized (mPackages) {
|
||||
Binder.withCleanCallingIdentity( () -> mDefaultPermissionPolicy.
|
||||
grantDefaultPermissionsToEnabledTelephonyDataServices(
|
||||
packageNames, userId));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void revokeDefaultPermissionsFromDisabledTelephonyDataServices(
|
||||
String[] packageNames, int userId) {
|
||||
enforceSystemOrPhoneCaller("revokeDefaultPermissionsFromDisabledTelephonyDataServices");
|
||||
synchronized (mPackages) {
|
||||
Binder.withCleanCallingIdentity( () -> mDefaultPermissionPolicy.
|
||||
revokeDefaultPermissionsFromDisabledTelephonyDataServices(
|
||||
packageNames, userId));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void grantDefaultPermissionsToActiveLuiApp(String packageName, int userId) {
|
||||
enforceSystemOrPhoneCaller("grantDefaultPermissionsToActiveLuiApp");
|
||||
synchronized (mPackages) {
|
||||
final long identity = Binder.clearCallingIdentity();
|
||||
try {
|
||||
mDefaultPermissionPolicy.grantDefaultPermissionsToActiveLuiApp(
|
||||
packageName, userId);
|
||||
} finally {
|
||||
Binder.restoreCallingIdentity(identity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void revokeDefaultPermissionsFromLuiApps(String[] packageNames, int userId) {
|
||||
enforceSystemOrPhoneCaller("revokeDefaultPermissionsFromLuiApps");
|
||||
synchronized (mPackages) {
|
||||
final long identity = Binder.clearCallingIdentity();
|
||||
try {
|
||||
mDefaultPermissionPolicy.revokeDefaultPermissionsFromLuiApps(packageNames, userId);
|
||||
} finally {
|
||||
Binder.restoreCallingIdentity(identity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void forEachPackage(Consumer<PackageParser.Package> actionLocked) {
|
||||
synchronized (mPackages) {
|
||||
int numPackages = mPackages.size();
|
||||
@@ -24435,14 +24174,6 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
}
|
||||
}
|
||||
|
||||
private static void enforceSystemOrPhoneCaller(String tag) {
|
||||
int callingUid = Binder.getCallingUid();
|
||||
if (callingUid != Process.PHONE_UID && callingUid != Process.SYSTEM_UID) {
|
||||
throw new SecurityException(
|
||||
"Cannot call " + tag + " from UID " + callingUid);
|
||||
}
|
||||
}
|
||||
|
||||
boolean isHistoricalPackageUsageAvailable() {
|
||||
return mPackageUsage.isHistoricalPackageUsageAvailable();
|
||||
}
|
||||
|
||||
@@ -389,6 +389,17 @@ public class PackageManagerServiceUtils {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Enforces that the caller must be either the system process or the phone process.
|
||||
* If not, throws a {@link SecurityException}.
|
||||
*/
|
||||
public static void enforceSystemOrPhoneCaller(String methodName, int callingUid) {
|
||||
if (callingUid != Process.PHONE_UID && callingUid != Process.SYSTEM_UID) {
|
||||
throw new SecurityException(
|
||||
"Cannot call " + methodName + " from UID " + callingUid);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Derive the value of the {@code cpuAbiOverride} based on the provided
|
||||
* value and an optional stored value from the package settings.
|
||||
|
||||
@@ -34,8 +34,6 @@ import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.PackageManager.NameNotFoundException;
|
||||
import android.content.pm.PackageManagerInternal;
|
||||
import android.content.pm.PackageManagerInternal.PackagesProvider;
|
||||
import android.content.pm.PackageManagerInternal.SyncAdapterPackagesProvider;
|
||||
import android.content.pm.PermissionInfo;
|
||||
import android.content.pm.ProviderInfo;
|
||||
import android.content.pm.ResolveInfo;
|
||||
@@ -69,6 +67,8 @@ import com.android.internal.annotations.GuardedBy;
|
||||
import com.android.internal.util.ArrayUtils;
|
||||
import com.android.internal.util.XmlUtils;
|
||||
import com.android.server.LocalServices;
|
||||
import com.android.server.pm.permission.PermissionManagerServiceInternal.PackagesProvider;
|
||||
import com.android.server.pm.permission.PermissionManagerServiceInternal.SyncAdapterPackagesProvider;
|
||||
|
||||
import org.xmlpull.v1.XmlPullParser;
|
||||
import org.xmlpull.v1.XmlPullParserException;
|
||||
|
||||
@@ -118,6 +118,9 @@ import com.android.server.pm.PackageManagerServiceUtils;
|
||||
import com.android.server.pm.PackageSetting;
|
||||
import com.android.server.pm.SharedUserSetting;
|
||||
import com.android.server.pm.UserManagerService;
|
||||
import com.android.server.pm.permission.PermissionManagerServiceInternal.DefaultBrowserProvider;
|
||||
import com.android.server.pm.permission.PermissionManagerServiceInternal.DefaultDialerProvider;
|
||||
import com.android.server.pm.permission.PermissionManagerServiceInternal.DefaultHomeProvider;
|
||||
import com.android.server.pm.permission.PermissionManagerServiceInternal.PermissionCallback;
|
||||
import com.android.server.pm.permission.PermissionsState.PermissionState;
|
||||
import com.android.server.policy.SoftRestrictedPermissionPolicy;
|
||||
@@ -250,6 +253,15 @@ public class PermissionManagerService extends IPermissionManager.Stub {
|
||||
@GuardedBy("mLock")
|
||||
private final OnPermissionChangeListeners mOnPermissionChangeListeners;
|
||||
|
||||
@GuardedBy("mLock")
|
||||
private DefaultBrowserProvider mDefaultBrowserProvider;
|
||||
|
||||
@GuardedBy("mLock")
|
||||
private DefaultDialerProvider mDefaultDialerProvider;
|
||||
|
||||
@GuardedBy("mLock")
|
||||
private DefaultHomeProvider mDefaultHomeProvider;
|
||||
|
||||
// TODO: Take a look at the methods defined in the callback.
|
||||
// The callback was initially created to support the split between permission
|
||||
// manager and the package manager. However, it's started to be used for other
|
||||
@@ -1609,6 +1621,127 @@ public class PermissionManagerService extends IPermissionManager.Stub {
|
||||
mPackageManagerInt.writePermissionSettings(asyncUpdatedUsers.toArray(), true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDefaultBrowser(int userId) {
|
||||
final int callingUid = Binder.getCallingUid();
|
||||
if (UserHandle.getUserId(callingUid) != userId) {
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, null);
|
||||
}
|
||||
if (mPackageManagerInt.getInstantAppPackageName(callingUid) != null) {
|
||||
return null;
|
||||
}
|
||||
synchronized (mLock) {
|
||||
return mDefaultBrowserProvider == null
|
||||
? null : mDefaultBrowserProvider.getDefaultBrowser(userId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean setDefaultBrowser(String packageName, int userId) {
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.SET_PREFERRED_APPLICATIONS, null);
|
||||
if (UserHandle.getCallingUserId() != userId) {
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, null);
|
||||
}
|
||||
return setDefaultBrowserInternal(packageName, false, true, userId);
|
||||
}
|
||||
|
||||
private boolean setDefaultBrowserInternal(String packageName, boolean async,
|
||||
boolean doGrant, int userId) {
|
||||
synchronized (mLock) {
|
||||
if (userId == UserHandle.USER_ALL) {
|
||||
return false;
|
||||
}
|
||||
if (mDefaultBrowserProvider == null) {
|
||||
return false;
|
||||
}
|
||||
if (async) {
|
||||
mDefaultBrowserProvider.setDefaultBrowserAsync(packageName, userId);
|
||||
} else {
|
||||
if (!mDefaultBrowserProvider.setDefaultBrowser(packageName, userId)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (doGrant && packageName != null) {
|
||||
mDefaultPermissionGrantPolicy
|
||||
.grantDefaultPermissionsToDefaultBrowser(packageName, userId);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void grantDefaultPermissionsToEnabledCarrierApps(String[] packageNames, int userId) {
|
||||
final int callingUid = Binder.getCallingUid();
|
||||
PackageManagerServiceUtils
|
||||
.enforceSystemOrPhoneCaller("grantPermissionsToEnabledCarrierApps", callingUid);
|
||||
synchronized (mLock) {
|
||||
Binder.withCleanCallingIdentity(() -> mDefaultPermissionGrantPolicy
|
||||
.grantDefaultPermissionsToEnabledCarrierApps(packageNames, userId));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void grantDefaultPermissionsToEnabledImsServices(String[] packageNames, int userId) {
|
||||
final int callingUid = Binder.getCallingUid();
|
||||
PackageManagerServiceUtils.enforceSystemOrPhoneCaller(
|
||||
"grantDefaultPermissionsToEnabledImsServices", callingUid);
|
||||
synchronized (mLock) {
|
||||
Binder.withCleanCallingIdentity(() -> mDefaultPermissionGrantPolicy
|
||||
.grantDefaultPermissionsToEnabledImsServices(packageNames, userId));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void grantDefaultPermissionsToEnabledTelephonyDataServices(
|
||||
String[] packageNames, int userId) {
|
||||
final int callingUid = Binder.getCallingUid();
|
||||
PackageManagerServiceUtils.enforceSystemOrPhoneCaller(
|
||||
"grantDefaultPermissionsToEnabledTelephonyDataServices", callingUid);
|
||||
synchronized (mLock) {
|
||||
Binder.withCleanCallingIdentity(() -> mDefaultPermissionGrantPolicy
|
||||
.grantDefaultPermissionsToEnabledTelephonyDataServices(
|
||||
packageNames, userId));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void revokeDefaultPermissionsFromDisabledTelephonyDataServices(
|
||||
String[] packageNames, int userId) {
|
||||
final int callingUid = Binder.getCallingUid();
|
||||
PackageManagerServiceUtils.enforceSystemOrPhoneCaller(
|
||||
"revokeDefaultPermissionsFromDisabledTelephonyDataServices", callingUid);
|
||||
synchronized (mLock) {
|
||||
Binder.withCleanCallingIdentity(() -> mDefaultPermissionGrantPolicy
|
||||
.revokeDefaultPermissionsFromDisabledTelephonyDataServices(
|
||||
packageNames, userId));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void grantDefaultPermissionsToActiveLuiApp(String packageName, int userId) {
|
||||
final int callingUid = Binder.getCallingUid();
|
||||
PackageManagerServiceUtils
|
||||
.enforceSystemOrPhoneCaller("grantDefaultPermissionsToActiveLuiApp", callingUid);
|
||||
synchronized (mLock) {
|
||||
Binder.withCleanCallingIdentity(() -> mDefaultPermissionGrantPolicy
|
||||
.grantDefaultPermissionsToActiveLuiApp(packageName, userId));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void revokeDefaultPermissionsFromLuiApps(String[] packageNames, int userId) {
|
||||
final int callingUid = Binder.getCallingUid();
|
||||
PackageManagerServiceUtils
|
||||
.enforceSystemOrPhoneCaller("revokeDefaultPermissionsFromLuiApps", callingUid);
|
||||
synchronized (mLock) {
|
||||
Binder.withCleanCallingIdentity(() -> mDefaultPermissionGrantPolicy
|
||||
.revokeDefaultPermissionsFromLuiApps(packageNames, userId));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the state of the runtime permissions as xml file.
|
||||
*
|
||||
@@ -3714,6 +3847,24 @@ public class PermissionManagerService extends IPermissionManager.Stub {
|
||||
}
|
||||
|
||||
mPermissionControllerManager = mContext.getSystemService(PermissionControllerManager.class);
|
||||
|
||||
int[] grantPermissionsUserIds = EMPTY_INT_ARRAY;
|
||||
for (int userId : UserManagerService.getInstance().getUserIds()) {
|
||||
if (!mPackageManagerInt.areDefaultRuntimePermissionsGranted(userId)) {
|
||||
grantPermissionsUserIds = ArrayUtils.appendInt(
|
||||
grantPermissionsUserIds, userId);
|
||||
}
|
||||
}
|
||||
// If we upgraded grant all default permissions before kicking off.
|
||||
for (int userId : grantPermissionsUserIds) {
|
||||
mDefaultPermissionGrantPolicy.grantDefaultPermissions(userId);
|
||||
}
|
||||
if (grantPermissionsUserIds == EMPTY_INT_ARRAY) {
|
||||
// If we did not grant default permissions, we preload from this the
|
||||
// default permission exceptions lazily to ensure we don't hit the
|
||||
// disk on a new user creation.
|
||||
mDefaultPermissionGrantPolicy.scheduleReadDefaultPermissionExceptions();
|
||||
}
|
||||
}
|
||||
|
||||
private static String getVolumeUuidForPackage(PackageParser.Package pkg) {
|
||||
@@ -3882,10 +4033,6 @@ public class PermissionManagerService extends IPermissionManager.Stub {
|
||||
return mSettings;
|
||||
}
|
||||
@Override
|
||||
public DefaultPermissionGrantPolicy getDefaultPermissionGrantPolicy() {
|
||||
return mDefaultPermissionGrantPolicy;
|
||||
}
|
||||
@Override
|
||||
public BasePermission getPermissionTEMP(String permName) {
|
||||
synchronized (PermissionManagerService.this.mLock) {
|
||||
return mSettings.getPermissionLocked(permName);
|
||||
@@ -3956,6 +4103,168 @@ public class PermissionManagerService extends IPermissionManager.Stub {
|
||||
mCheckPermissionDelegate = delegate;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDefaultBrowserProvider(@NonNull DefaultBrowserProvider provider) {
|
||||
synchronized (mLock) {
|
||||
mDefaultBrowserProvider = provider;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDefaultBrowser(String packageName, boolean async, boolean doGrant,
|
||||
int userId) {
|
||||
setDefaultBrowserInternal(packageName, async, doGrant, userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDefaultDialerProvider(@NonNull DefaultDialerProvider provider) {
|
||||
synchronized (mLock) {
|
||||
mDefaultDialerProvider = provider;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDefaultHomeProvider(@NonNull DefaultHomeProvider provider) {
|
||||
synchronized (mLock) {
|
||||
mDefaultHomeProvider = provider;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDefaultHome(String packageName, int userId, Consumer<Boolean> callback) {
|
||||
synchronized (mLock) {
|
||||
if (userId == UserHandle.USER_ALL) {
|
||||
return;
|
||||
}
|
||||
if (mDefaultHomeProvider == null) {
|
||||
return;
|
||||
}
|
||||
mDefaultHomeProvider.setDefaultHomeAsync(packageName, userId, callback);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDialerAppPackagesProvider(PackagesProvider provider) {
|
||||
synchronized (mLock) {
|
||||
mDefaultPermissionGrantPolicy.setDialerAppPackagesProvider(provider);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLocationExtraPackagesProvider(PackagesProvider provider) {
|
||||
synchronized (mLock) {
|
||||
mDefaultPermissionGrantPolicy.setLocationExtraPackagesProvider(provider);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLocationPackagesProvider(PackagesProvider provider) {
|
||||
synchronized (mLock) {
|
||||
mDefaultPermissionGrantPolicy.setLocationPackagesProvider(provider);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSimCallManagerPackagesProvider(PackagesProvider provider) {
|
||||
synchronized (mLock) {
|
||||
mDefaultPermissionGrantPolicy.setSimCallManagerPackagesProvider(provider);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSmsAppPackagesProvider(PackagesProvider provider) {
|
||||
synchronized (mLock) {
|
||||
mDefaultPermissionGrantPolicy.setSmsAppPackagesProvider(provider);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSyncAdapterPackagesProvider(SyncAdapterPackagesProvider provider) {
|
||||
synchronized (mLock) {
|
||||
mDefaultPermissionGrantPolicy.setSyncAdapterPackagesProvider(provider);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUseOpenWifiAppPackagesProvider(PackagesProvider provider) {
|
||||
synchronized (mLock) {
|
||||
mDefaultPermissionGrantPolicy.setUseOpenWifiAppPackagesProvider(provider);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVoiceInteractionPackagesProvider(PackagesProvider provider) {
|
||||
synchronized (mLock) {
|
||||
mDefaultPermissionGrantPolicy.setVoiceInteractionPackagesProvider(provider);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDefaultBrowser(int userId) {
|
||||
synchronized (mLock) {
|
||||
return mDefaultBrowserProvider == null
|
||||
? null : mDefaultBrowserProvider.getDefaultBrowser(userId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDefaultDialer(int userId) {
|
||||
synchronized (mLock) {
|
||||
return mDefaultDialerProvider == null
|
||||
? null : mDefaultDialerProvider.getDefaultDialer(userId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDefaultHome(int userId) {
|
||||
synchronized (mLock) {
|
||||
return mDefaultHomeProvider == null
|
||||
? null : mDefaultHomeProvider.getDefaultHome(userId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void grantDefaultPermissionsToDefaultSimCallManager(String packageName, int userId) {
|
||||
synchronized (mLock) {
|
||||
mDefaultPermissionGrantPolicy
|
||||
.grantDefaultPermissionsToDefaultSimCallManager(packageName, userId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void grantDefaultPermissionsToDefaultUseOpenWifiApp(String packageName, int userId) {
|
||||
synchronized (mLock) {
|
||||
mDefaultPermissionGrantPolicy
|
||||
.grantDefaultPermissionsToDefaultUseOpenWifiApp(packageName, userId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void grantDefaultPermissionsToDefaultBrowser(String packageName, int userId) {
|
||||
synchronized (mLock) {
|
||||
mDefaultPermissionGrantPolicy
|
||||
.grantDefaultPermissionsToDefaultBrowser(packageName, userId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean wereDefaultPermissionsGrantedSinceBoot(int userId) {
|
||||
synchronized (mLock) {
|
||||
return mDefaultPermissionGrantPolicy.wereDefaultPermissionsGrantedSinceBoot(userId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNewUserCreated(int userId) {
|
||||
synchronized (mLock) {
|
||||
mDefaultPermissionGrantPolicy.grantDefaultPermissions(userId);
|
||||
// NOTE: This adds UPDATE_PERMISSIONS_REPLACE_PKG
|
||||
PermissionManagerService.this.updateAllPermissions(
|
||||
StorageManager.UUID_PRIVATE_INTERNAL, true, mDefaultPermissionCallback);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notifyPermissionsChangedTEMP(int uid) {
|
||||
mOnPermissionChangeListeners.onPermissionsChanged(uid);
|
||||
|
||||
@@ -27,6 +27,7 @@ import android.permission.PermissionManagerInternal;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
* Internal interfaces services.
|
||||
@@ -34,6 +35,109 @@ import java.util.List;
|
||||
* TODO: Should be merged into PermissionManagerInternal, but currently uses internal classes.
|
||||
*/
|
||||
public abstract class PermissionManagerServiceInternal extends PermissionManagerInternal {
|
||||
/**
|
||||
* Provider for package names.
|
||||
*/
|
||||
public interface PackagesProvider {
|
||||
|
||||
/**
|
||||
* Gets the packages for a given user.
|
||||
* @param userId The user id.
|
||||
* @return The package names.
|
||||
*/
|
||||
String[] getPackages(int userId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provider for package names.
|
||||
*/
|
||||
public interface SyncAdapterPackagesProvider {
|
||||
|
||||
/**
|
||||
* Gets the sync adapter packages for given authority and user.
|
||||
* @param authority The authority.
|
||||
* @param userId The user id.
|
||||
* @return The package names.
|
||||
*/
|
||||
String[] getPackages(String authority, int userId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provider for default browser
|
||||
*/
|
||||
public interface DefaultBrowserProvider {
|
||||
|
||||
/**
|
||||
* Get the package name of the default browser.
|
||||
*
|
||||
* @param userId the user id
|
||||
*
|
||||
* @return the package name of the default browser, or {@code null} if none
|
||||
*/
|
||||
@Nullable
|
||||
String getDefaultBrowser(@UserIdInt int userId);
|
||||
|
||||
/**
|
||||
* Set the package name of the default browser.
|
||||
*
|
||||
* @param packageName package name of the default browser, or {@code null} to remove
|
||||
* @param userId the user id
|
||||
*
|
||||
* @return whether the default browser was successfully set.
|
||||
*/
|
||||
boolean setDefaultBrowser(@Nullable String packageName, @UserIdInt int userId);
|
||||
|
||||
/**
|
||||
* Set the package name of the default browser asynchronously.
|
||||
*
|
||||
* @param packageName package name of the default browser, or {@code null} to remove
|
||||
* @param userId the user id
|
||||
*/
|
||||
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
|
||||
*/
|
||||
public interface DefaultHomeProvider {
|
||||
|
||||
/**
|
||||
* Get the package name of the default home.
|
||||
*
|
||||
* @param userId the user id
|
||||
*
|
||||
* @return the package name of the default home, or {@code null} if none
|
||||
*/
|
||||
@Nullable
|
||||
String getDefaultHome(@UserIdInt int userId);
|
||||
|
||||
/**
|
||||
* Set the package name of the default home.
|
||||
*
|
||||
* @param packageName package name of the default home, or {@code null} to remove
|
||||
* @param userId the user id
|
||||
* @param callback the callback made after the default home as been updated
|
||||
*/
|
||||
void setDefaultHomeAsync(@Nullable String packageName, @UserIdInt int userId,
|
||||
@NonNull Consumer<Boolean> callback);
|
||||
}
|
||||
|
||||
/**
|
||||
* Callbacks invoked when interesting actions have been taken on a permission.
|
||||
* <p>
|
||||
@@ -189,7 +293,10 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager
|
||||
public abstract void enforceGrantRevokeRuntimePermissionPermissions(@NonNull String message);
|
||||
|
||||
public abstract @NonNull PermissionSettings getPermissionSettings();
|
||||
public abstract @NonNull DefaultPermissionGrantPolicy getDefaultPermissionGrantPolicy();
|
||||
|
||||
/** Grants default browser permissions to the given package */
|
||||
public abstract void grantDefaultPermissionsToDefaultBrowser(
|
||||
@NonNull String packageName, @UserIdInt int userId);
|
||||
|
||||
/** HACK HACK methods to allow for partial migration of data to the PermissionManager class */
|
||||
public abstract @Nullable BasePermission getPermissionTEMP(@NonNull String permName);
|
||||
@@ -214,4 +321,142 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager
|
||||
* @param delegate A delegate instance or {@code null} to clear.
|
||||
*/
|
||||
public abstract void setCheckPermissionDelegate(@Nullable CheckPermissionDelegate delegate);
|
||||
|
||||
/**
|
||||
* Sets the dialer application packages provider.
|
||||
* @param provider The provider.
|
||||
*/
|
||||
public abstract void setDialerAppPackagesProvider(PackagesProvider provider);
|
||||
|
||||
/**
|
||||
* Set the location extra packages provider.
|
||||
* @param provider The packages provider.
|
||||
*/
|
||||
public abstract void setLocationExtraPackagesProvider(PackagesProvider provider);
|
||||
|
||||
/**
|
||||
* Sets the location provider packages provider.
|
||||
* @param provider The packages provider.
|
||||
*/
|
||||
public abstract void setLocationPackagesProvider(PackagesProvider provider);
|
||||
|
||||
/**
|
||||
* Sets the SIM call manager packages provider.
|
||||
* @param provider The provider.
|
||||
*/
|
||||
public abstract void setSimCallManagerPackagesProvider(PackagesProvider provider);
|
||||
|
||||
/**
|
||||
* Sets the SMS application packages provider.
|
||||
* @param provider The provider.
|
||||
*/
|
||||
public abstract void setSmsAppPackagesProvider(PackagesProvider provider);
|
||||
|
||||
/**
|
||||
* Sets the sync adapter packages provider.
|
||||
* @param provider The provider.
|
||||
*/
|
||||
public abstract void setSyncAdapterPackagesProvider(SyncAdapterPackagesProvider provider);
|
||||
|
||||
/**
|
||||
* Sets the Use Open Wifi packages provider.
|
||||
* @param provider The packages provider.
|
||||
*/
|
||||
public abstract void setUseOpenWifiAppPackagesProvider(PackagesProvider provider);
|
||||
|
||||
/**
|
||||
* Sets the voice interaction packages provider.
|
||||
* @param provider The packages provider.
|
||||
*/
|
||||
public abstract void setVoiceInteractionPackagesProvider(PackagesProvider provider);
|
||||
|
||||
/**
|
||||
* Sets the default browser provider.
|
||||
*
|
||||
* @param provider the provider
|
||||
*/
|
||||
public abstract void setDefaultBrowserProvider(@NonNull DefaultBrowserProvider provider);
|
||||
|
||||
/**
|
||||
* Sets the package name of the default browser provider for the given user.
|
||||
*
|
||||
* @param packageName The package name of the default browser or {@code null}
|
||||
* to clear the default browser
|
||||
* @param async If {@code true}, set the default browser asynchronously,
|
||||
* otherwise set it synchronously
|
||||
* @param doGrant If {@code true} and if {@code packageName} is not {@code null},
|
||||
* perform default permission grants on the browser, otherwise skip the
|
||||
* default permission grants.
|
||||
* @param userId The user to set the default browser for.
|
||||
*/
|
||||
public abstract void setDefaultBrowser(@Nullable String packageName, boolean async,
|
||||
boolean doGrant, @UserIdInt int userId);
|
||||
|
||||
/**
|
||||
* Sets the default dialer provider.
|
||||
*
|
||||
* @param provider the provider
|
||||
*/
|
||||
public abstract void setDefaultDialerProvider(@NonNull DefaultDialerProvider provider);
|
||||
|
||||
/**
|
||||
* Sets the default home provider.
|
||||
*
|
||||
* @param provider the provider
|
||||
*/
|
||||
public abstract void setDefaultHomeProvider(@NonNull DefaultHomeProvider provider);
|
||||
|
||||
/**
|
||||
* Asynchronously sets the package name of the default home provider for the given user.
|
||||
*
|
||||
* @param packageName The package name of the default home or {@code null}
|
||||
* to clear the default browser
|
||||
* @param userId The user to set the default browser for
|
||||
* @param callback Invoked after the default home has been set
|
||||
*/
|
||||
public abstract void setDefaultHome(@Nullable String packageName, @UserIdInt int userId,
|
||||
@NonNull Consumer<Boolean> callback);
|
||||
|
||||
/**
|
||||
* Returns the default browser package name for the given user.
|
||||
*/
|
||||
@Nullable
|
||||
public abstract String getDefaultBrowser(@UserIdInt int userId);
|
||||
|
||||
/**
|
||||
* Returns the default dialer package name for the given user.
|
||||
*/
|
||||
@Nullable
|
||||
public abstract String getDefaultDialer(@UserIdInt int userId);
|
||||
|
||||
/**
|
||||
* Returns the default home package name for the given user.
|
||||
*/
|
||||
@Nullable
|
||||
public abstract String getDefaultHome(@UserIdInt int userId);
|
||||
|
||||
/**
|
||||
* Requests granting of the default permissions to the current default Use Open Wifi app.
|
||||
* @param packageName The default use open wifi package name.
|
||||
* @param userId The user for which to grant the permissions.
|
||||
*/
|
||||
public abstract void grantDefaultPermissionsToDefaultSimCallManager(
|
||||
@NonNull String packageName, @UserIdInt int userId);
|
||||
|
||||
/**
|
||||
* Requests granting of the default permissions to the current default Use Open Wifi app.
|
||||
* @param packageName The default use open wifi package name.
|
||||
* @param userId The user for which to grant the permissions.
|
||||
*/
|
||||
public abstract void grantDefaultPermissionsToDefaultUseOpenWifiApp(
|
||||
@NonNull String packageName, @UserIdInt int userId);
|
||||
|
||||
/**
|
||||
* Returns whether or not default permission grants have been performed for the given
|
||||
* user since the device booted.
|
||||
*/
|
||||
public abstract boolean wereDefaultPermissionsGrantedSinceBoot(@UserIdInt int userId);
|
||||
|
||||
/** Called when a new user has been created. */
|
||||
public abstract void onNewUserCreated(@UserIdInt int userId);
|
||||
}
|
||||
|
||||
@@ -260,9 +260,11 @@ public final class PermissionPolicyService extends SystemService {
|
||||
private void grantOrUpgradeDefaultRuntimePermissionsIfNeeded(@UserIdInt int userId) {
|
||||
if (DEBUG) Slog.i(LOG_TAG, "grantOrUpgradeDefaultPermsIfNeeded(" + userId + ")");
|
||||
|
||||
final PackageManagerInternal packageManagerInternal = LocalServices.getService(
|
||||
PackageManagerInternal.class);
|
||||
if (packageManagerInternal.wereDefaultPermissionsGrantedSinceBoot(userId)) {
|
||||
final PackageManagerInternal packageManagerInternal =
|
||||
LocalServices.getService(PackageManagerInternal.class);
|
||||
final PermissionManagerServiceInternal permissionManagerInternal =
|
||||
LocalServices.getService(PermissionManagerServiceInternal.class);
|
||||
if (permissionManagerInternal.wereDefaultPermissionsGrantedSinceBoot(userId)) {
|
||||
if (DEBUG) Slog.i(LOG_TAG, "defaultPermsWereGrantedSinceBoot(" + userId + ")");
|
||||
|
||||
// Now call into the permission controller to apply policy around permissions
|
||||
|
||||
@@ -49,7 +49,6 @@ import android.os.ResultReceiver;
|
||||
import android.os.ShellCallback;
|
||||
import android.os.UserHandle;
|
||||
import android.os.UserManagerInternal;
|
||||
import android.provider.Telephony;
|
||||
import android.service.sms.FinancialSmsService;
|
||||
import android.telephony.IFinancialSmsCallback;
|
||||
import android.text.TextUtils;
|
||||
@@ -74,6 +73,7 @@ import com.android.internal.util.function.pooled.PooledLambda;
|
||||
import com.android.server.FgThread;
|
||||
import com.android.server.LocalServices;
|
||||
import com.android.server.SystemService;
|
||||
import com.android.server.pm.permission.PermissionManagerServiceInternal;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.FileDescriptor;
|
||||
@@ -155,11 +155,11 @@ public class RoleManagerService extends SystemService implements RoleUserState.C
|
||||
|
||||
LocalServices.addService(RoleManagerInternal.class, new Internal());
|
||||
|
||||
PackageManagerInternal packageManagerInternal = LocalServices.getService(
|
||||
PackageManagerInternal.class);
|
||||
packageManagerInternal.setDefaultBrowserProvider(new DefaultBrowserProvider());
|
||||
packageManagerInternal.setDefaultDialerProvider(new DefaultDialerProvider());
|
||||
packageManagerInternal.setDefaultHomeProvider(new DefaultHomeProvider());
|
||||
PermissionManagerServiceInternal permissionManagerInternal =
|
||||
LocalServices.getService(PermissionManagerServiceInternal.class);
|
||||
permissionManagerInternal.setDefaultBrowserProvider(new DefaultBrowserProvider());
|
||||
permissionManagerInternal.setDefaultDialerProvider(new DefaultDialerProvider());
|
||||
permissionManagerInternal.setDefaultHomeProvider(new DefaultHomeProvider());
|
||||
|
||||
registerUserRemovedReceiver();
|
||||
}
|
||||
@@ -731,7 +731,8 @@ public class RoleManagerService extends SystemService implements RoleUserState.C
|
||||
}
|
||||
}
|
||||
|
||||
private class DefaultBrowserProvider implements PackageManagerInternal.DefaultBrowserProvider {
|
||||
private class DefaultBrowserProvider implements
|
||||
PermissionManagerServiceInternal.DefaultBrowserProvider {
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
@@ -785,7 +786,8 @@ public class RoleManagerService extends SystemService implements RoleUserState.C
|
||||
}
|
||||
}
|
||||
|
||||
private class DefaultDialerProvider implements PackageManagerInternal.DefaultDialerProvider {
|
||||
private class DefaultDialerProvider implements
|
||||
PermissionManagerServiceInternal.DefaultDialerProvider {
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
@@ -795,7 +797,8 @@ public class RoleManagerService extends SystemService implements RoleUserState.C
|
||||
}
|
||||
}
|
||||
|
||||
private class DefaultHomeProvider implements PackageManagerInternal.DefaultHomeProvider {
|
||||
private class DefaultHomeProvider implements
|
||||
PermissionManagerServiceInternal.DefaultHomeProvider {
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
|
||||
@@ -39,7 +39,6 @@ import com.android.internal.telephony.SmsApplication;
|
||||
import com.android.server.LocalServices;
|
||||
import com.android.server.SystemService;
|
||||
import com.android.server.pm.UserManagerService;
|
||||
import com.android.server.pm.permission.DefaultPermissionGrantPolicy;
|
||||
import com.android.server.pm.permission.PermissionManagerServiceInternal;
|
||||
|
||||
/**
|
||||
@@ -66,9 +65,9 @@ public class TelecomLoaderService extends SystemService {
|
||||
ServiceManager.addService(Context.TELECOM_SERVICE, service);
|
||||
|
||||
synchronized (mLock) {
|
||||
final PermissionManagerServiceInternal permissionManager =
|
||||
LocalServices.getService(PermissionManagerServiceInternal.class);
|
||||
if (mDefaultSimCallManagerRequests != null) {
|
||||
final DefaultPermissionGrantPolicy permissionPolicy =
|
||||
getDefaultPermissionGrantPolicy();
|
||||
if (mDefaultSimCallManagerRequests != null) {
|
||||
TelecomManager telecomManager =
|
||||
(TelecomManager) mContext.getSystemService(Context.TELECOM_SERVICE);
|
||||
@@ -80,7 +79,7 @@ public class TelecomLoaderService extends SystemService {
|
||||
for (int i = requestCount - 1; i >= 0; i--) {
|
||||
final int userId = mDefaultSimCallManagerRequests.get(i);
|
||||
mDefaultSimCallManagerRequests.remove(i);
|
||||
permissionPolicy
|
||||
permissionManager
|
||||
.grantDefaultPermissionsToDefaultSimCallManager(
|
||||
packageName, userId);
|
||||
}
|
||||
@@ -99,11 +98,6 @@ public class TelecomLoaderService extends SystemService {
|
||||
}
|
||||
}
|
||||
|
||||
private DefaultPermissionGrantPolicy getDefaultPermissionGrantPolicy() {
|
||||
return LocalServices.getService(PermissionManagerServiceInternal.class)
|
||||
.getDefaultPermissionGrantPolicy();
|
||||
}
|
||||
|
||||
private static final ComponentName SERVICE_COMPONENT = new ComponentName(
|
||||
"com.android.server.telecom",
|
||||
"com.android.server.telecom.components.TelecomService");
|
||||
@@ -162,10 +156,11 @@ public class TelecomLoaderService extends SystemService {
|
||||
|
||||
|
||||
private void registerDefaultAppProviders() {
|
||||
final DefaultPermissionGrantPolicy permissionPolicy = getDefaultPermissionGrantPolicy();
|
||||
final PermissionManagerServiceInternal permissionManager =
|
||||
LocalServices.getService(PermissionManagerServiceInternal.class);
|
||||
|
||||
// Set a callback for the permission grant policy to query the default sms app.
|
||||
permissionPolicy.setSmsAppPackagesProvider(userId -> {
|
||||
permissionManager.setSmsAppPackagesProvider(userId -> {
|
||||
synchronized (mLock) {
|
||||
if (mServiceConnection == null) {
|
||||
return null;
|
||||
@@ -180,7 +175,7 @@ public class TelecomLoaderService extends SystemService {
|
||||
});
|
||||
|
||||
// Set a callback for the permission grant policy to query the default dialer app.
|
||||
permissionPolicy.setDialerAppPackagesProvider(userId -> {
|
||||
permissionManager.setDialerAppPackagesProvider(userId -> {
|
||||
synchronized (mLock) {
|
||||
if (mServiceConnection == null) {
|
||||
return null;
|
||||
@@ -194,7 +189,7 @@ public class TelecomLoaderService extends SystemService {
|
||||
});
|
||||
|
||||
// Set a callback for the permission grant policy to query the default sim call manager.
|
||||
permissionPolicy.setSimCallManagerPackagesProvider(userId -> {
|
||||
permissionManager.setSimCallManagerPackagesProvider(userId -> {
|
||||
synchronized (mLock) {
|
||||
if (mServiceConnection == null) {
|
||||
if (mDefaultSimCallManagerRequests == null) {
|
||||
@@ -215,12 +210,11 @@ public class TelecomLoaderService extends SystemService {
|
||||
}
|
||||
|
||||
private void registerDefaultAppNotifier() {
|
||||
final DefaultPermissionGrantPolicy permissionPolicy = getDefaultPermissionGrantPolicy();
|
||||
// Notify the package manager on default app changes
|
||||
final RoleManager roleManager = mContext.getSystemService(RoleManager.class);
|
||||
roleManager.addOnRoleHoldersChangedListenerAsUser(mContext.getMainExecutor(),
|
||||
(roleName, user) -> updateSimCallManagerPermissions(permissionPolicy,
|
||||
user.getIdentifier()), UserHandle.ALL);
|
||||
(roleName, user) -> updateSimCallManagerPermissions(user.getIdentifier()),
|
||||
UserHandle.ALL);
|
||||
}
|
||||
|
||||
|
||||
@@ -230,7 +224,7 @@ public class TelecomLoaderService extends SystemService {
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
if (intent.getAction().equals(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED)) {
|
||||
for (int userId : UserManagerService.getInstance().getUserIds()) {
|
||||
updateSimCallManagerPermissions(getDefaultPermissionGrantPolicy(), userId);
|
||||
updateSimCallManagerPermissions(userId);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -240,16 +234,16 @@ public class TelecomLoaderService extends SystemService {
|
||||
new IntentFilter(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED), null, null);
|
||||
}
|
||||
|
||||
private void updateSimCallManagerPermissions(
|
||||
DefaultPermissionGrantPolicy permissionGrantPolicy, int userId) {
|
||||
private void updateSimCallManagerPermissions(int userId) {
|
||||
final PermissionManagerServiceInternal permissionManager =
|
||||
LocalServices.getService(PermissionManagerServiceInternal.class);
|
||||
TelecomManager telecomManager =
|
||||
(TelecomManager) mContext.getSystemService(Context.TELECOM_SERVICE);
|
||||
PhoneAccountHandle phoneAccount = telecomManager.getSimCallManager(userId);
|
||||
if (phoneAccount != null) {
|
||||
Slog.i(TAG, "updating sim call manager permissions for userId:" + userId);
|
||||
String packageName = phoneAccount.getComponentName().getPackageName();
|
||||
permissionGrantPolicy.grantDefaultPermissionsToDefaultSimCallManager(
|
||||
packageName, userId);
|
||||
permissionManager.grantDefaultPermissionsToDefaultSimCallManager(packageName, userId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,6 +72,7 @@ import androidx.test.filters.MediumTest;
|
||||
import androidx.test.runner.AndroidJUnit4;
|
||||
|
||||
import com.android.server.devicepolicy.MockUtils;
|
||||
import com.android.server.pm.permission.PermissionManagerServiceInternal;
|
||||
|
||||
import com.google.android.collect.Lists;
|
||||
|
||||
@@ -132,9 +133,10 @@ public class NetworkScoreServiceTest {
|
||||
@Mock private UnaryOperator<List<ScoredNetwork>> mScanResultsFilter;
|
||||
@Mock private WifiInfo mWifiInfo;
|
||||
@Mock private NetworkScoreService.ScoringServiceConnection mServiceConnection;
|
||||
@Mock private PackageManagerInternal mPackageManagerInternal;
|
||||
@Mock private PermissionManagerServiceInternal mPermissionManagerInternal;
|
||||
@Captor private ArgumentCaptor<List<ScoredNetwork>> mScoredNetworkCaptor;
|
||||
@Captor private ArgumentCaptor<PackageManagerInternal.PackagesProvider> mPackagesProviderCaptor;
|
||||
@Captor private
|
||||
ArgumentCaptor<PermissionManagerServiceInternal.PackagesProvider> mPackagesProviderCaptor;
|
||||
|
||||
private ContentResolver mContentResolver;
|
||||
private NetworkScoreService mNetworkScoreService;
|
||||
@@ -162,7 +164,8 @@ public class NetworkScoreServiceTest {
|
||||
when(mNetworkScorerAppManager.getActiveScorer()).thenReturn(NEW_SCORER);
|
||||
mHandlerThread = new HandlerThread("NetworkScoreServiceTest");
|
||||
mHandlerThread.start();
|
||||
LocalServices.addService(PackageManagerInternal.class, mPackageManagerInternal);
|
||||
LocalServices.addService(
|
||||
PermissionManagerServiceInternal.class, mPermissionManagerInternal);
|
||||
mNetworkScoreService = new NetworkScoreService(mContext, mNetworkScorerAppManager,
|
||||
networkScorerAppData -> mServiceConnection, mHandlerThread.getLooper());
|
||||
WifiConfiguration configuration = new WifiConfiguration();
|
||||
@@ -196,7 +199,7 @@ public class NetworkScoreServiceTest {
|
||||
Settings.Global.putString(mContentResolver,
|
||||
Settings.Global.USE_OPEN_WIFI_PACKAGE, "com.some.app");
|
||||
|
||||
verify(mPackageManagerInternal)
|
||||
verify(mPermissionManagerInternal)
|
||||
.setUseOpenWifiAppPackagesProvider(mPackagesProviderCaptor.capture());
|
||||
|
||||
String[] packages = mPackagesProviderCaptor.getValue().getPackages(0);
|
||||
@@ -209,7 +212,7 @@ public class NetworkScoreServiceTest {
|
||||
Settings.Global.putString(mContentResolver,
|
||||
Settings.Global.USE_OPEN_WIFI_PACKAGE, "com.some.other.app");
|
||||
|
||||
verify(mPackageManagerInternal, timeout(500))
|
||||
verify(mPermissionManagerInternal, timeout(500))
|
||||
.grantDefaultPermissionsToDefaultUseOpenWifiApp("com.some.other.app", 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -33,7 +33,6 @@ import android.content.pm.ActivityInfo;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.IPackageManager;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.PackageManagerInternal;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.content.pm.ServiceInfo;
|
||||
import android.content.pm.ShortcutServiceInternal;
|
||||
@@ -79,6 +78,7 @@ import com.android.server.FgThread;
|
||||
import com.android.server.LocalServices;
|
||||
import com.android.server.SystemService;
|
||||
import com.android.server.UiThread;
|
||||
import com.android.server.pm.permission.PermissionManagerServiceInternal;
|
||||
import com.android.server.soundtrigger.SoundTriggerInternal;
|
||||
import com.android.server.wm.ActivityTaskManagerInternal;
|
||||
|
||||
@@ -120,10 +120,10 @@ public class VoiceInteractionManagerService extends SystemService {
|
||||
mUserManager = Preconditions.checkNotNull(
|
||||
context.getSystemService(UserManager.class));
|
||||
|
||||
PackageManagerInternal packageManagerInternal = LocalServices.getService(
|
||||
PackageManagerInternal.class);
|
||||
packageManagerInternal.setVoiceInteractionPackagesProvider(
|
||||
new PackageManagerInternal.PackagesProvider() {
|
||||
PermissionManagerServiceInternal permissionManagerInternal = LocalServices.getService(
|
||||
PermissionManagerServiceInternal.class);
|
||||
permissionManagerInternal.setVoiceInteractionPackagesProvider(
|
||||
new PermissionManagerServiceInternal.PackagesProvider() {
|
||||
@Override
|
||||
public String[] getPackages(int userId) {
|
||||
mServiceStub.initForUser(userId);
|
||||
|
||||
@@ -22,6 +22,7 @@ import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.IPackageManager;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.RemoteException;
|
||||
import android.permission.IPermissionManager;
|
||||
import android.provider.Settings;
|
||||
import android.telephony.TelephonyManager;
|
||||
import android.util.ArrayMap;
|
||||
@@ -71,8 +72,8 @@ public final class CarrierAppUtils {
|
||||
* privileged apps may have changed.
|
||||
*/
|
||||
public synchronized static void disableCarrierAppsUntilPrivileged(String callingPackage,
|
||||
IPackageManager packageManager, TelephonyManager telephonyManager,
|
||||
ContentResolver contentResolver, int userId) {
|
||||
IPackageManager packageManager, IPermissionManager permissionManager,
|
||||
TelephonyManager telephonyManager, ContentResolver contentResolver, int userId) {
|
||||
if (DEBUG) {
|
||||
Slog.d(TAG, "disableCarrierAppsUntilPrivileged");
|
||||
}
|
||||
@@ -81,8 +82,8 @@ public final class CarrierAppUtils {
|
||||
config.getDisabledUntilUsedPreinstalledCarrierApps();
|
||||
ArrayMap<String, List<String>> systemCarrierAssociatedAppsDisabledUntilUsed =
|
||||
config.getDisabledUntilUsedPreinstalledCarrierAssociatedApps();
|
||||
disableCarrierAppsUntilPrivileged(callingPackage, packageManager, telephonyManager,
|
||||
contentResolver, userId, systemCarrierAppsDisabledUntilUsed,
|
||||
disableCarrierAppsUntilPrivileged(callingPackage, packageManager, permissionManager,
|
||||
telephonyManager, contentResolver, userId, systemCarrierAppsDisabledUntilUsed,
|
||||
systemCarrierAssociatedAppsDisabledUntilUsed);
|
||||
}
|
||||
|
||||
@@ -98,7 +99,8 @@ public final class CarrierAppUtils {
|
||||
* Manager can kill it, and this can lead to crashes as the app is in an unexpected state.
|
||||
*/
|
||||
public synchronized static void disableCarrierAppsUntilPrivileged(String callingPackage,
|
||||
IPackageManager packageManager, ContentResolver contentResolver, int userId) {
|
||||
IPackageManager packageManager, IPermissionManager permissionManager,
|
||||
ContentResolver contentResolver, int userId) {
|
||||
if (DEBUG) {
|
||||
Slog.d(TAG, "disableCarrierAppsUntilPrivileged");
|
||||
}
|
||||
@@ -109,7 +111,7 @@ public final class CarrierAppUtils {
|
||||
|
||||
ArrayMap<String, List<String>> systemCarrierAssociatedAppsDisabledUntilUsed =
|
||||
config.getDisabledUntilUsedPreinstalledCarrierAssociatedApps();
|
||||
disableCarrierAppsUntilPrivileged(callingPackage, packageManager,
|
||||
disableCarrierAppsUntilPrivileged(callingPackage, packageManager, permissionManager,
|
||||
null /* telephonyManager */, contentResolver, userId,
|
||||
systemCarrierAppsDisabledUntilUsed, systemCarrierAssociatedAppsDisabledUntilUsed);
|
||||
}
|
||||
@@ -117,7 +119,8 @@ public final class CarrierAppUtils {
|
||||
// Must be public b/c framework unit tests can't access package-private methods.
|
||||
@VisibleForTesting
|
||||
public static void disableCarrierAppsUntilPrivileged(String callingPackage,
|
||||
IPackageManager packageManager, @Nullable TelephonyManager telephonyManager,
|
||||
IPackageManager packageManager, IPermissionManager permissionManager,
|
||||
@Nullable TelephonyManager telephonyManager,
|
||||
ContentResolver contentResolver, int userId,
|
||||
ArraySet<String> systemCarrierAppsDisabledUntilUsed,
|
||||
ArrayMap<String, List<String>> systemCarrierAssociatedAppsDisabledUntilUsed) {
|
||||
@@ -256,7 +259,7 @@ public final class CarrierAppUtils {
|
||||
// apps.
|
||||
String[] packageNames = new String[enabledCarrierPackages.size()];
|
||||
enabledCarrierPackages.toArray(packageNames);
|
||||
packageManager.grantDefaultPermissionsToEnabledCarrierApps(packageNames, userId);
|
||||
permissionManager.grantDefaultPermissionsToEnabledCarrierApps(packageNames, userId);
|
||||
}
|
||||
} catch (RemoteException e) {
|
||||
Slog.w(TAG, "Could not reach PackageManager", e);
|
||||
|
||||
Reference in New Issue
Block a user