Merge "Move DefaultPermissionGrantPolicy out of PermissionManagerService."

This commit is contained in:
Hai Zhang
2020-12-06 13:41:54 +00:00
committed by Android (Google) Code Review
14 changed files with 449 additions and 287 deletions

View File

@@ -59,7 +59,7 @@ import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.content.PackageMonitor;
import com.android.internal.util.DumpUtils;
import com.android.server.pm.permission.PermissionManagerServiceInternal;
import com.android.server.pm.permission.LegacyPermissionManagerInternal;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -290,7 +290,7 @@ public class NetworkScoreService extends INetworkScoreService.Stub {
String useOpenWifiPackage = Global.getString(mContext.getContentResolver(),
Global.USE_OPEN_WIFI_PACKAGE);
if (!TextUtils.isEmpty(useOpenWifiPackage)) {
LocalServices.getService(PermissionManagerServiceInternal.class)
LocalServices.getService(LegacyPermissionManagerInternal.class)
.grantDefaultPermissionsToDefaultUseOpenWifiApp(useOpenWifiPackage,
userId);
}
@@ -302,7 +302,7 @@ 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(PermissionManagerServiceInternal.class)
LocalServices.getService(LegacyPermissionManagerInternal.class)
.setUseOpenWifiAppPackagesProvider((userId) -> {
String useOpenWifiPackage = Global.getString(mContext.getContentResolver(),
Global.USE_OPEN_WIFI_PACKAGE);

View File

@@ -76,8 +76,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.SystemService.TargetUser;
import com.android.server.pm.permission.PermissionManagerServiceInternal;
import com.android.server.pm.permission.LegacyPermissionManagerInternal;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -296,8 +295,8 @@ 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.
final PermissionManagerServiceInternal permissionManagerInternal =
LocalServices.getService(PermissionManagerServiceInternal.class);
final LegacyPermissionManagerInternal permissionManagerInternal =
LocalServices.getService(LegacyPermissionManagerInternal.class);
permissionManagerInternal.setSyncAdapterPackagesProvider((authority, userId) -> {
return getSyncAdapterPackagesForAuthorityAsUser(authority, userId);
});

View File

@@ -113,7 +113,7 @@ import com.android.server.location.provider.MockLocationProvider;
import com.android.server.location.provider.PassiveLocationProvider;
import com.android.server.location.provider.PassiveLocationProviderManager;
import com.android.server.location.provider.proxy.ProxyLocationProvider;
import com.android.server.pm.permission.PermissionManagerServiceInternal;
import com.android.server.pm.permission.LegacyPermissionManagerInternal;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -261,8 +261,8 @@ 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.
PermissionManagerServiceInternal permissionManagerInternal = LocalServices.getService(
PermissionManagerServiceInternal.class);
LegacyPermissionManagerInternal permissionManagerInternal = LocalServices.getService(
LegacyPermissionManagerInternal.class);
permissionManagerInternal.setLocationPackagesProvider(
userId -> mContext.getResources().getStringArray(
com.android.internal.R.array.config_locationProviderPackageNames));

View File

@@ -27,7 +27,6 @@ import android.util.Slog;
import com.android.internal.infra.AndroidFuture;
import com.android.internal.util.CollectionUtils;
import com.android.server.FgThread;
import com.android.server.pm.permission.PermissionManagerServiceInternal;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executor;
@@ -42,19 +41,14 @@ import java.util.function.Supplier;
public class DefaultAppProvider {
@NonNull
private final Supplier<RoleManager> mRoleManagerSupplier;
@NonNull
private final PermissionManagerServiceInternal mPermissionManager;
/**
* Create a new instance of this class
*
* @param roleManagerSupplier the supplier for {@link RoleManager}
* @param permissionManager the {@link PermissionManagerServiceInternal}
*/
public DefaultAppProvider(@NonNull Supplier<RoleManager> roleManagerSupplier, @NonNull
PermissionManagerServiceInternal permissionManager) {
public DefaultAppProvider(@NonNull Supplier<RoleManager> roleManagerSupplier) {
mRoleManagerSupplier = roleManagerSupplier;
mPermissionManager = permissionManager;
}
/**
@@ -73,11 +67,10 @@ public class DefaultAppProvider {
*
* @param packageName package name of the default browser, or {@code null} to unset
* @param async whether the operation should be asynchronous
* @param doGrant whether to grant default permissions
* @param userId the user ID
* @return whether the default browser was successfully set.
*/
public boolean setDefaultBrowser(@Nullable String packageName, boolean async, boolean doGrant,
public boolean setDefaultBrowser(@Nullable String packageName, boolean async,
@UserIdInt int userId) {
if (userId == UserHandle.USER_ALL) {
return false;
@@ -114,9 +107,6 @@ public class DefaultAppProvider {
return false;
}
}
if (doGrant && packageName != null) {
mPermissionManager.grantDefaultPermissionsToDefaultBrowser(packageName, userId);
}
} finally {
Binder.restoreCallingIdentity(identity);
}

View File

@@ -380,6 +380,8 @@ import com.android.server.pm.parsing.pkg.AndroidPackage;
import com.android.server.pm.parsing.pkg.AndroidPackageUtils;
import com.android.server.pm.parsing.pkg.PackageImpl;
import com.android.server.pm.parsing.pkg.ParsedPackage;
import com.android.server.pm.permission.LegacyPermissionManagerInternal;
import com.android.server.pm.permission.LegacyPermissionManagerService;
import com.android.server.pm.permission.Permission;
import com.android.server.pm.permission.PermissionManagerService;
import com.android.server.pm.permission.PermissionManagerServiceInternal;
@@ -961,6 +963,8 @@ public class PackageManagerService extends IPackageManager.Stub
private final Singleton<PackageInstallerService> mPackageInstallerServiceProducer;
private final ProducerWithArgument<InstantAppResolverConnection, ComponentName>
mInstantAppResolverConnectionProducer;
private final Singleton<LegacyPermissionManagerInternal>
mLegacyPermissionManagerInternalProducer;
private final SystemWrapper mSystemWrapper;
private final ServiceProducer mGetLocalServiceProducer;
private final ServiceProducer mGetSystemServiceProducer;
@@ -993,6 +997,7 @@ public class PackageManagerService extends IPackageManager.Stub
ProducerWithArgument<InstantAppResolverConnection, ComponentName>
instantAppResolverConnectionProducer,
Producer<ModuleInfoProvider> moduleInfoProviderProducer,
Producer<LegacyPermissionManagerInternal> legacyPermissionManagerInternalProducer,
SystemWrapper systemWrapper,
ServiceProducer getLocalServiceProducer,
ServiceProducer getSystemServiceProducer) {
@@ -1026,6 +1031,8 @@ public class PackageManagerService extends IPackageManager.Stub
mPackageInstallerServiceProducer = new Singleton<>(packageInstallerServiceProducer);
mInstantAppResolverConnectionProducer = instantAppResolverConnectionProducer;
mModuleInfoProviderProducer = new Singleton<>(moduleInfoProviderProducer);
mLegacyPermissionManagerInternalProducer = new Singleton<>(
legacyPermissionManagerInternalProducer);
mSystemWrapper = systemWrapper;
mGetLocalServiceProducer = getLocalServiceProducer;
mGetSystemServiceProducer = getSystemServiceProducer;
@@ -1174,6 +1181,10 @@ public class PackageManagerService extends IPackageManager.Stub
public ModuleInfoProvider getModuleInfoProvider() {
return mModuleInfoProviderProducer.get(this, mPackageManager);
}
public LegacyPermissionManagerInternal getLegacyPermissionManagerInternal() {
return mLegacyPermissionManagerInternalProducer.get(this, mPackageManager);
}
}
/** Provides an abstraction to static access to system state. */
@@ -1232,6 +1243,7 @@ public class PackageManagerService extends IPackageManager.Stub
public boolean isPreNupgrade;
public boolean isPreQupgrade;
public boolean isUpgrade;
public LegacyPermissionManagerInternal legacyPermissionManagerInternal;
public DisplayMetrics Metrics;
public ModuleInfoProvider moduleInfoProvider;
public MoveCallbacks moveCallbacks;
@@ -1375,6 +1387,8 @@ public class PackageManagerService extends IPackageManager.Stub
private final DefaultAppProvider mDefaultAppProvider;
private final LegacyPermissionManagerInternal mLegacyPermissionManager;
private final PackageProperty mPackageProperty = new PackageProperty();
private static class IFVerificationParams {
@@ -2838,8 +2852,8 @@ public class PackageManagerService extends IPackageManager.Stub
(i, pm) -> new ViewCompiler(i.getInstallLock(), i.getInstaller()),
(i, pm) -> (IncrementalManager)
i.getContext().getSystemService(Context.INCREMENTAL_SERVICE),
(i, pm) -> new DefaultAppProvider(() -> context.getSystemService(RoleManager.class),
i.getPermissionManagerServiceInternal()),
(i, pm) -> new DefaultAppProvider(() -> context.getSystemService(
RoleManager.class)),
(i, pm) -> new DisplayMetrics(),
(i, pm) -> new PackageParser2(pm.mSeparateProcesses, pm.mOnlyCore,
i.getDisplayMetrics(), pm.mCacheDir,
@@ -2856,6 +2870,7 @@ public class PackageManagerService extends IPackageManager.Stub
(i, pm, cn) -> new InstantAppResolverConnection(
i.getContext(), cn, Intent.ACTION_RESOLVE_INSTANT_APP_PACKAGE),
(i, pm) -> new ModuleInfoProvider(i.getContext(), pm),
(i, pm) -> LegacyPermissionManagerService.create(i.getContext()),
new DefaultSystemWrapper(),
LocalServices::getService,
context::getSystemService);
@@ -3032,6 +3047,7 @@ public class PackageManagerService extends IPackageManager.Stub
mAvailableFeatures = testParams.availableFeatures;
mDefParseFlags = testParams.defParseFlags;
mDefaultAppProvider = testParams.defaultAppProvider;
mLegacyPermissionManager = testParams.legacyPermissionManagerInternal;
mDexManager = testParams.dexManager;
mDirsToScanAsSystem = testParams.dirsToScanAsSystem;
mFactoryTest = testParams.factoryTest;
@@ -3136,6 +3152,7 @@ public class PackageManagerService extends IPackageManager.Stub
mPermissionManagerService = injector.getPermissionManagerService();
mIncrementalManager = mInjector.getIncrementalManager();
mDefaultAppProvider = mInjector.getDefaultAppProvider();
mLegacyPermissionManager = mInjector.getLegacyPermissionManagerInternal();
PlatformCompat platformCompat = mInjector.getCompatibility();
mPackageParserCallback = new PackageParser2.Callback() {
@Override
@@ -20702,7 +20719,7 @@ public class PackageManagerService extends IPackageManager.Stub
final String defaultBrowserPackageName = mDefaultAppProvider.getDefaultBrowser(userId);
if (!TextUtils.isEmpty(defaultBrowserPackageName)) {
if (packageName.equals(defaultBrowserPackageName)) {
mDefaultAppProvider.setDefaultBrowser(null, true, true, userId);
mDefaultAppProvider.setDefaultBrowser(null, true, userId);
}
}
}
@@ -20717,7 +20734,7 @@ public class PackageManagerService extends IPackageManager.Stub
// If this browser is restored from user's backup, do not clear
// default-browser state for this user
if (installReason != PackageManager.INSTALL_REASON_DEVICE_RESTORE) {
mDefaultAppProvider.setDefaultBrowser(null, true, true, userId);
mDefaultAppProvider.setDefaultBrowser(null, true, userId);
}
}
@@ -20755,7 +20772,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.
mDefaultAppProvider.setDefaultBrowser(null, true, true, userId);
mDefaultAppProvider.setDefaultBrowser(null, true, userId);
resetNetworkPolicies(userId);
synchronized (mLock) {
scheduleWritePackageRestrictionsLocked(userId);
@@ -20989,8 +21006,7 @@ public class PackageManagerService extends IPackageManager.Stub
defaultBrowser = mSettings.removeDefaultBrowserPackageNameLPw(userId1);
}
if (defaultBrowser != null) {
mDefaultAppProvider.setDefaultBrowser(defaultBrowser, false, false,
userId1);
mDefaultAppProvider.setDefaultBrowser(defaultBrowser, false, userId1);
}
});
} catch (Exception e) {
@@ -22250,6 +22266,24 @@ public class PackageManagerService extends IPackageManager.Stub
mPermissionManager.systemReady();
int[] grantPermissionsUserIds = EMPTY_INT_ARRAY;
for (int userId : UserManagerService.getInstance().getUserIds()) {
if (mPmInternal.isPermissionUpgradeNeeded(userId)) {
grantPermissionsUserIds = ArrayUtils.appendInt(
grantPermissionsUserIds, userId);
}
}
// If we upgraded grant all default permissions before kicking off.
for (int userId : grantPermissionsUserIds) {
mLegacyPermissionManager.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.
mLegacyPermissionManager.scheduleReadDefaultPermissionExceptions();
}
if (mInstantAppResolverConnection != null) {
mContext.registerReceiver(new BroadcastReceiver() {
@Override
@@ -24331,14 +24365,9 @@ public class PackageManagerService extends IPackageManager.Stub
Slog.d(TAG, "onNewUserCreated(id=" + userId
+ ", convertedFromPreCreated=" + convertedFromPreCreated + ")");
}
if (!convertedFromPreCreated) {
mPermissionManager.onUserCreated(userId);
return;
}
if (!readPermissionStateForUser(userId)) {
// Could not read the existing permissions, re-grant them.
Slog.i(TAG, "re-granting permissions for pre-created user " + userId);
if (!convertedFromPreCreated || !readPermissionStateForUser(userId)) {
mPermissionManager.onUserCreated(userId);
mLegacyPermissionManager.grantDefaultPermissions(userId);
}
}

View File

@@ -41,8 +41,9 @@ import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.os.Handler;
import android.os.Looper;
import android.os.HandlerThread;
import android.os.Message;
import android.os.Process;
import android.os.UserHandle;
import android.os.storage.StorageManager;
import android.permission.PermissionManager;
@@ -67,8 +68,9 @@ import com.android.internal.R;
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 com.android.server.ServiceThread;
import com.android.server.pm.permission.LegacyPermissionManagerInternal.PackagesProvider;
import com.android.server.pm.permission.LegacyPermissionManagerInternal.SyncAdapterPackagesProvider;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
@@ -96,7 +98,7 @@ import java.util.Set;
* to have an interface defined in the package manager but have the impl next to other
* policy stuff like PhoneWindowManager
*/
public final class DefaultPermissionGrantPolicy {
final class DefaultPermissionGrantPolicy {
private static final String TAG = "DefaultPermGrantPolicy"; // must be <= 23 chars
private static final boolean DEBUG = false;
@@ -291,9 +293,12 @@ public final class DefaultPermissionGrantPolicy {
}
};
DefaultPermissionGrantPolicy(Context context, Looper looper) {
DefaultPermissionGrantPolicy(@NonNull Context context) {
mContext = context;
mHandler = new Handler(looper) {
HandlerThread handlerThread = new ServiceThread(TAG,
Process.THREAD_PRIORITY_BACKGROUND, true /*allowIo*/);
handlerThread.start();
mHandler = new Handler(handlerThread.getLooper()) {
@Override
public void handleMessage(Message msg) {
if (msg.what == MSG_READ_DEFAULT_PERMISSION_EXCEPTIONS) {
@@ -998,12 +1003,6 @@ public final class DefaultPermissionGrantPolicy {
}
}
public void grantDefaultPermissionsToDefaultBrowser(String packageName, int userId) {
Log.i(TAG, "Granting permissions to default browser for user:" + userId);
grantPermissionsToSystemPackage(NO_PM_CACHE, packageName, userId,
FOREGROUND_LOCATION_PERMISSIONS);
}
private String getDefaultSystemHandlerActivityPackage(PackageManagerWrapper pm,
String intentAction, int userId) {
return getDefaultSystemHandlerActivityPackage(pm, new Intent(intentAction), userId);

View File

@@ -0,0 +1,172 @@
/*
* Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.server.pm.permission;
import android.annotation.NonNull;
import android.annotation.UserIdInt;
/**
* The internal interface for {@link LegacyPermissionManagerService}.
*/
public interface LegacyPermissionManagerInternal {
/**
* Sets the dialer application packages provider.
* @param provider The provider.
*/
void setDialerAppPackagesProvider(PackagesProvider provider);
/**
* Set the location extra packages provider.
* @param provider The packages provider.
*/
void setLocationExtraPackagesProvider(PackagesProvider provider);
/**
* Sets the location provider packages provider.
* @param provider The packages provider.
*/
void setLocationPackagesProvider(PackagesProvider provider);
/**
* Sets the SIM call manager packages provider.
* @param provider The provider.
*/
void setSimCallManagerPackagesProvider(PackagesProvider provider);
/**
* Sets the SMS application packages provider.
* @param provider The provider.
*/
void setSmsAppPackagesProvider(PackagesProvider provider);
/**
* Sets the sync adapter packages provider.
* @param provider The provider.
*/
void setSyncAdapterPackagesProvider(SyncAdapterPackagesProvider provider);
/**
* Sets the Use Open Wifi packages provider.
* @param provider The packages provider.
*/
void setUseOpenWifiAppPackagesProvider(PackagesProvider provider);
/**
* Sets the voice interaction packages provider.
* @param provider The packages provider.
*/
void setVoiceInteractionPackagesProvider(PackagesProvider provider);
/**
* 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.
*/
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.
*/
void grantDefaultPermissionsToDefaultUseOpenWifiApp(@NonNull String packageName,
@UserIdInt int userId);
/**
* Grant the default permissions for a user.
*
* @param userId the user ID
*/
void grantDefaultPermissions(@UserIdInt int userId);
/**
* Schedule reading the default permission exceptions file.
*/
void scheduleReadDefaultPermissionExceptions();
// TODO(zhanghai): The following methods should be moved to a new AIDL to support
// the legacy PermissionManager directly in a later CL.
/**
* Grant default permissions to currently active LUI app
* @param packageName The package name for the LUI app
* @param userId The user ID
*/
void grantDefaultPermissionsToActiveLuiApp(String packageName, int userId);
/**
* Revoke default permissions to currently active LUI app
* @param packageNames The package names for the LUI apps
* @param userId The user ID
*/
void revokeDefaultPermissionsFromLuiApps(String[] packageNames, int userId);
/**
* Grant default permissions to currently active Ims services
* @param packageNames The package names for the Ims services
* @param userId The user ID
*/
void grantDefaultPermissionsToEnabledImsServices(String[] packageNames, int userId);
/**
* Grant default permissions to currently enabled telephony data services
* @param packageNames The package name for the services
* @param userId The user ID
*/
void grantDefaultPermissionsToEnabledTelephonyDataServices(String[] packageNames, int userId);
/**
* Revoke default permissions to currently active telephony data services
* @param packageNames The package name for the services
* @param userId The IDhandle
*/
void revokeDefaultPermissionsFromDisabledTelephonyDataServices(String[] packageNames,
int userId);
/**
* Grant default permissions to currently enabled carrier apps
* @param packageNames Package names of the apps to be granted permissions
* @param userId The user ID
*/
void grantDefaultPermissionsToEnabledCarrierApps(String[] packageNames, int userId);
/**
* Provider for package names.
*/
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.
*/
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);
}
}

View File

@@ -0,0 +1,181 @@
/*
* Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.server.pm.permission;
import android.annotation.NonNull;
import android.content.Context;
import android.os.Binder;
import com.android.server.LocalServices;
import com.android.server.pm.PackageManagerServiceUtils;
/**
* Legacy permission manager service.
*/
public class LegacyPermissionManagerService {
@NonNull
private final DefaultPermissionGrantPolicy mDefaultPermissionGrantPolicy;
/**
* Get or create an instance of this class for use by other components.
* <p>
* This method is not thread-safe.
*
* @param context the {@link Context}
* @return the internal instance
*/
@NonNull
public static LegacyPermissionManagerInternal create(@NonNull Context context) {
LegacyPermissionManagerInternal legacyPermissionManagerInternal = LocalServices.getService(
LegacyPermissionManagerInternal.class);
if (legacyPermissionManagerInternal == null) {
new LegacyPermissionManagerService(context);
legacyPermissionManagerInternal = LocalServices.getService(
LegacyPermissionManagerInternal.class);
}
return legacyPermissionManagerInternal;
}
private LegacyPermissionManagerService(@NonNull Context context) {
mDefaultPermissionGrantPolicy = new DefaultPermissionGrantPolicy(context);
LocalServices.addService(LegacyPermissionManagerInternal.class, new Internal());
}
private class Internal implements LegacyPermissionManagerInternal {
@Override
public void setDialerAppPackagesProvider(PackagesProvider provider) {
mDefaultPermissionGrantPolicy.setDialerAppPackagesProvider(provider);
}
@Override
public void setLocationExtraPackagesProvider(PackagesProvider provider) {
mDefaultPermissionGrantPolicy.setLocationExtraPackagesProvider(provider);
}
@Override
public void setLocationPackagesProvider(PackagesProvider provider) {
mDefaultPermissionGrantPolicy.setLocationPackagesProvider(provider);
}
@Override
public void setSimCallManagerPackagesProvider(PackagesProvider provider) {
mDefaultPermissionGrantPolicy.setSimCallManagerPackagesProvider(provider);
}
@Override
public void setSmsAppPackagesProvider(PackagesProvider provider) {
mDefaultPermissionGrantPolicy.setSmsAppPackagesProvider(provider);
}
@Override
public void setSyncAdapterPackagesProvider(SyncAdapterPackagesProvider provider) {
mDefaultPermissionGrantPolicy.setSyncAdapterPackagesProvider(provider);
}
@Override
public void setUseOpenWifiAppPackagesProvider(PackagesProvider provider) {
mDefaultPermissionGrantPolicy.setUseOpenWifiAppPackagesProvider(provider);
}
@Override
public void setVoiceInteractionPackagesProvider(PackagesProvider provider) {
mDefaultPermissionGrantPolicy.setVoiceInteractionPackagesProvider(provider);
}
@Override
public void grantDefaultPermissionsToDefaultSimCallManager(String packageName, int userId) {
mDefaultPermissionGrantPolicy.grantDefaultPermissionsToDefaultSimCallManager(
packageName, userId);
}
@Override
public void grantDefaultPermissionsToDefaultUseOpenWifiApp(String packageName, int userId) {
mDefaultPermissionGrantPolicy.grantDefaultPermissionsToDefaultUseOpenWifiApp(
packageName, userId);
}
@Override
public void grantDefaultPermissions(int userId) {
mDefaultPermissionGrantPolicy.grantDefaultPermissions(userId);
}
@Override
public void scheduleReadDefaultPermissionExceptions() {
mDefaultPermissionGrantPolicy.scheduleReadDefaultPermissionExceptions();
}
// TODO(zhanghai): The following methods should be moved to a new AIDL to support
// the legacy PermissionManager directly in a later CL.
@Override
public void grantDefaultPermissionsToActiveLuiApp(String packageName, int userId) {
final int callingUid = Binder.getCallingUid();
PackageManagerServiceUtils.enforceSystemOrPhoneCaller(
"grantDefaultPermissionsToActiveLuiApp", callingUid);
Binder.withCleanCallingIdentity(() -> mDefaultPermissionGrantPolicy
.grantDefaultPermissionsToActiveLuiApp(packageName, userId));
}
@Override
public void revokeDefaultPermissionsFromLuiApps(String[] packageNames, int userId) {
final int callingUid = Binder.getCallingUid();
PackageManagerServiceUtils.enforceSystemOrPhoneCaller(
"revokeDefaultPermissionsFromLuiApps", callingUid);
Binder.withCleanCallingIdentity(() -> mDefaultPermissionGrantPolicy
.revokeDefaultPermissionsFromLuiApps(packageNames, userId));
}
@Override
public void grantDefaultPermissionsToEnabledImsServices(String[] packageNames, int userId) {
final int callingUid = Binder.getCallingUid();
PackageManagerServiceUtils.enforceSystemOrPhoneCaller(
"grantDefaultPermissionsToEnabledImsServices", callingUid);
Binder.withCleanCallingIdentity(() -> mDefaultPermissionGrantPolicy
.grantDefaultPermissionsToEnabledImsServices(packageNames, userId));
}
@Override
public void grantDefaultPermissionsToEnabledTelephonyDataServices(
String[] packageNames, int userId) {
final int callingUid = Binder.getCallingUid();
PackageManagerServiceUtils.enforceSystemOrPhoneCaller(
"grantDefaultPermissionsToEnabledTelephonyDataServices", callingUid);
Binder.withCleanCallingIdentity(() -> mDefaultPermissionGrantPolicy
.grantDefaultPermissionsToEnabledTelephonyDataServices(packageNames, userId));
}
@Override
public void revokeDefaultPermissionsFromDisabledTelephonyDataServices(
String[] packageNames, int userId) {
final int callingUid = Binder.getCallingUid();
PackageManagerServiceUtils.enforceSystemOrPhoneCaller(
"revokeDefaultPermissionsFromDisabledTelephonyDataServices", callingUid);
Binder.withCleanCallingIdentity(() -> mDefaultPermissionGrantPolicy
.revokeDefaultPermissionsFromDisabledTelephonyDataServices(packageNames,
userId));
}
@Override
public void grantDefaultPermissionsToEnabledCarrierApps(String[] packageNames, int userId) {
final int callingUid = Binder.getCallingUid();
PackageManagerServiceUtils.enforceSystemOrPhoneCaller(
"grantPermissionsToEnabledCarrierApps", callingUid);
Binder.withCleanCallingIdentity(() -> mDefaultPermissionGrantPolicy
.grantDefaultPermissionsToEnabledCarrierApps(packageNames, userId));
}
}
}

View File

@@ -144,7 +144,6 @@ import com.android.server.ServiceThread;
import com.android.server.SystemConfig;
import com.android.server.Watchdog;
import com.android.server.pm.ApexManager;
import com.android.server.pm.PackageManagerServiceUtils;
import com.android.server.pm.PackageSetting;
import com.android.server.pm.UserManagerInternal;
import com.android.server.pm.UserManagerService;
@@ -239,9 +238,6 @@ public class PermissionManagerService extends IPermissionManager.Stub {
private final SparseArray<OneTimePermissionUserManager> mOneTimePermissionUserManagers =
new SparseArray<>();
/** Default permission policy to provide proper behaviour out-of-the-box */
private final DefaultPermissionGrantPolicy mDefaultPermissionGrantPolicy;
/** App ops manager */
private final AppOpsManager mAppOpsManager;
@@ -390,8 +386,6 @@ public class PermissionManagerService extends IPermissionManager.Stub {
mHandler = new Handler(mHandlerThread.getLooper());
Watchdog.getInstance().addThread(mHandler);
mDefaultPermissionGrantPolicy = new DefaultPermissionGrantPolicy(
context, mHandlerThread.getLooper());
SystemConfig systemConfig = SystemConfig.getInstance();
mSystemPermissions = systemConfig.getSystemPermissions();
mGlobalGids = systemConfig.getGlobalGids();
@@ -2007,58 +2001,40 @@ public class PermissionManagerService extends IPermissionManager.Stub {
@Override
public void grantDefaultPermissionsToEnabledCarrierApps(String[] packageNames, int userId) {
final int callingUid = Binder.getCallingUid();
PackageManagerServiceUtils
.enforceSystemOrPhoneCaller("grantPermissionsToEnabledCarrierApps", callingUid);
Binder.withCleanCallingIdentity(() -> mDefaultPermissionGrantPolicy
.grantDefaultPermissionsToEnabledCarrierApps(packageNames, userId));
LocalServices.getService(LegacyPermissionManagerInternal.class)
.grantDefaultPermissionsToEnabledCarrierApps(packageNames, userId);
}
@Override
public void grantDefaultPermissionsToEnabledImsServices(String[] packageNames, int userId) {
final int callingUid = Binder.getCallingUid();
PackageManagerServiceUtils.enforceSystemOrPhoneCaller(
"grantDefaultPermissionsToEnabledImsServices", callingUid);
Binder.withCleanCallingIdentity(() -> mDefaultPermissionGrantPolicy
.grantDefaultPermissionsToEnabledImsServices(packageNames, userId));
LocalServices.getService(LegacyPermissionManagerInternal.class)
.grantDefaultPermissionsToEnabledImsServices(packageNames, userId);
}
@Override
public void grantDefaultPermissionsToEnabledTelephonyDataServices(
String[] packageNames, int userId) {
final int callingUid = Binder.getCallingUid();
PackageManagerServiceUtils.enforceSystemOrPhoneCaller(
"grantDefaultPermissionsToEnabledTelephonyDataServices", callingUid);
Binder.withCleanCallingIdentity(() -> mDefaultPermissionGrantPolicy
.grantDefaultPermissionsToEnabledTelephonyDataServices(packageNames, userId));
LocalServices.getService(LegacyPermissionManagerInternal.class)
.grantDefaultPermissionsToEnabledTelephonyDataServices(packageNames, userId);
}
@Override
public void revokeDefaultPermissionsFromDisabledTelephonyDataServices(
String[] packageNames, int userId) {
final int callingUid = Binder.getCallingUid();
PackageManagerServiceUtils.enforceSystemOrPhoneCaller(
"revokeDefaultPermissionsFromDisabledTelephonyDataServices", callingUid);
Binder.withCleanCallingIdentity(() -> mDefaultPermissionGrantPolicy
.revokeDefaultPermissionsFromDisabledTelephonyDataServices(packageNames, userId));
LocalServices.getService(LegacyPermissionManagerInternal.class)
.revokeDefaultPermissionsFromDisabledTelephonyDataServices(packageNames, userId);
}
@Override
public void grantDefaultPermissionsToActiveLuiApp(String packageName, int userId) {
final int callingUid = Binder.getCallingUid();
PackageManagerServiceUtils
.enforceSystemOrPhoneCaller("grantDefaultPermissionsToActiveLuiApp", callingUid);
Binder.withCleanCallingIdentity(() -> mDefaultPermissionGrantPolicy
.grantDefaultPermissionsToActiveLuiApp(packageName, userId));
LocalServices.getService(LegacyPermissionManagerInternal.class)
.grantDefaultPermissionsToActiveLuiApp(packageName, userId);
}
@Override
public void revokeDefaultPermissionsFromLuiApps(String[] packageNames, int userId) {
final int callingUid = Binder.getCallingUid();
PackageManagerServiceUtils
.enforceSystemOrPhoneCaller("revokeDefaultPermissionsFromLuiApps", callingUid);
Binder.withCleanCallingIdentity(() -> mDefaultPermissionGrantPolicy
.revokeDefaultPermissionsFromLuiApps(packageNames, userId));
LocalServices.getService(LegacyPermissionManagerInternal.class)
.revokeDefaultPermissionsFromLuiApps(packageNames, userId);
}
/**
@@ -4551,24 +4527,6 @@ public class PermissionManagerService extends IPermissionManager.Stub {
mPermissionControllerManager = mContext.getSystemService(PermissionControllerManager.class);
mPermissionPolicyInternal = LocalServices.getService(PermissionPolicyInternal.class);
int[] grantPermissionsUserIds = EMPTY_INT_ARRAY;
for (int userId : UserManagerService.getInstance().getUserIds()) {
if (mPackageManagerInt.isPermissionUpgradeNeeded(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(AndroidPackage pkg) {
@@ -5181,72 +5139,12 @@ public class PermissionManagerService extends IPermissionManager.Stub {
stopShellPermissionIdentityDelegationInternal();
}
@Override
public void setDialerAppPackagesProvider(PackagesProvider provider) {
mDefaultPermissionGrantPolicy.setDialerAppPackagesProvider(provider);
}
@Override
public void setLocationExtraPackagesProvider(PackagesProvider provider) {
mDefaultPermissionGrantPolicy.setLocationExtraPackagesProvider(provider);
}
@Override
public void setLocationPackagesProvider(PackagesProvider provider) {
mDefaultPermissionGrantPolicy.setLocationPackagesProvider(provider);
}
@Override
public void setSimCallManagerPackagesProvider(PackagesProvider provider) {
mDefaultPermissionGrantPolicy.setSimCallManagerPackagesProvider(provider);
}
@Override
public void setSmsAppPackagesProvider(PackagesProvider provider) {
mDefaultPermissionGrantPolicy.setSmsAppPackagesProvider(provider);
}
@Override
public void setSyncAdapterPackagesProvider(SyncAdapterPackagesProvider provider) {
mDefaultPermissionGrantPolicy.setSyncAdapterPackagesProvider(provider);
}
@Override
public void setUseOpenWifiAppPackagesProvider(PackagesProvider provider) {
mDefaultPermissionGrantPolicy.setUseOpenWifiAppPackagesProvider(provider);
}
@Override
public void setVoiceInteractionPackagesProvider(PackagesProvider provider) {
mDefaultPermissionGrantPolicy.setVoiceInteractionPackagesProvider(provider);
}
@Override
public void grantDefaultPermissionsToDefaultBrowser(@NonNull String packageName,
@UserIdInt int userId) {
mDefaultPermissionGrantPolicy.grantDefaultPermissionsToDefaultBrowser(packageName,
userId);
}
@Override
public void grantDefaultPermissionsToDefaultSimCallManager(String packageName, int userId) {
mDefaultPermissionGrantPolicy.grantDefaultPermissionsToDefaultSimCallManager(
packageName, userId);
}
@Override
public void grantDefaultPermissionsToDefaultUseOpenWifiApp(String packageName, int userId) {
mDefaultPermissionGrantPolicy.grantDefaultPermissionsToDefaultUseOpenWifiApp(
packageName, userId);
}
@Override
public void onUserCreated(@UserIdInt int userId) {
Preconditions.checkArgumentNonNegative(userId, "userId");
// NOTE: This adds UPDATE_PERMISSIONS_REPLACE_PKG
PermissionManagerService.this.updateAllPermissions(StorageManager.UUID_PRIVATE_INTERNAL,
true, mDefaultPermissionCallback);
mDefaultPermissionGrantPolicy.grantDefaultPermissions(userId);
}
@Override

View File

@@ -38,33 +38,6 @@ import java.util.Set;
*/
public interface PermissionManagerServiceInternal extends PermissionManagerInternal,
LegacyPermissionDataProvider {
/**
* Provider for package names.
*/
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.
*/
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);
}
/**
* Adds a listener for runtime permission state (permissions or flags) changes.
*
@@ -210,78 +183,6 @@ public interface PermissionManagerServiceInternal extends PermissionManagerInter
//@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
void stopShellPermissionIdentityDelegation();
/**
* Sets the dialer application packages provider.
* @param provider The provider.
*/
void setDialerAppPackagesProvider(PackagesProvider provider);
/**
* Set the location extra packages provider.
* @param provider The packages provider.
*/
void setLocationExtraPackagesProvider(PackagesProvider provider);
/**
* Sets the location provider packages provider.
* @param provider The packages provider.
*/
void setLocationPackagesProvider(PackagesProvider provider);
/**
* Sets the SIM call manager packages provider.
* @param provider The provider.
*/
void setSimCallManagerPackagesProvider(PackagesProvider provider);
/**
* Sets the SMS application packages provider.
* @param provider The provider.
*/
void setSmsAppPackagesProvider(PackagesProvider provider);
/**
* Sets the sync adapter packages provider.
* @param provider The provider.
*/
void setSyncAdapterPackagesProvider(SyncAdapterPackagesProvider provider);
/**
* Sets the Use Open Wifi packages provider.
* @param provider The packages provider.
*/
void setUseOpenWifiAppPackagesProvider(PackagesProvider provider);
/**
* Sets the voice interaction packages provider.
* @param provider The packages provider.
*/
void setVoiceInteractionPackagesProvider(PackagesProvider provider);
/**
* Requests granting of the default permissions to the current default browser.
* @param packageName The default browser package name.
* @param userId The user for which to grant the permissions.
*/
void grantDefaultPermissionsToDefaultBrowser(@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.
*/
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.
*/
void grantDefaultPermissionsToDefaultUseOpenWifiApp(@NonNull String packageName,
@UserIdInt int userId);
/**
* Removes invalid permissions which are not {@link PermissionInfo#FLAG_HARD_RESTRICTED} or
* {@link PermissionInfo#FLAG_SOFT_RESTRICTED} from the input.

View File

@@ -71,7 +71,6 @@ import com.android.server.FgThread;
import com.android.server.LocalServices;
import com.android.server.SystemService;
import com.android.server.pm.UserManagerInternal;
import com.android.server.pm.permission.PermissionManagerServiceInternal;
import java.io.ByteArrayOutputStream;
import java.io.FileDescriptor;
@@ -709,12 +708,6 @@ public class RoleManagerService extends SystemService implements RoleUserState.C
Slog.e(LOG_TAG, "Exception while setting default browser: " + packageName, e);
return false;
}
if (packageName != null) {
final PermissionManagerServiceInternal permissionManager =
LocalServices.getService(PermissionManagerServiceInternal.class);
permissionManager.grantDefaultPermissionsToDefaultBrowser(packageName, userId);
}
} finally {
Binder.restoreCallingIdentity(identity);
}

View File

@@ -42,7 +42,7 @@ import com.android.server.DeviceIdleInternal;
import com.android.server.LocalServices;
import com.android.server.SystemService;
import com.android.server.pm.UserManagerService;
import com.android.server.pm.permission.PermissionManagerServiceInternal;
import com.android.server.pm.permission.LegacyPermissionManagerInternal;
/**
* Starts the telecom component by binding to its ITelecomService implementation. Telecom is setup
@@ -65,8 +65,8 @@ public class TelecomLoaderService extends SystemService {
ServiceManager.addService(Context.TELECOM_SERVICE, telecomService.asBinder());
synchronized (mLock) {
final PermissionManagerServiceInternal permissionManager =
LocalServices.getService(PermissionManagerServiceInternal.class);
final LegacyPermissionManagerInternal permissionManager =
LocalServices.getService(LegacyPermissionManagerInternal.class);
if (mDefaultSimCallManagerRequests != null) {
if (mDefaultSimCallManagerRequests != null) {
TelecomManager telecomManager =
@@ -165,8 +165,8 @@ public class TelecomLoaderService extends SystemService {
private void registerDefaultAppProviders() {
final PermissionManagerServiceInternal permissionManager =
LocalServices.getService(PermissionManagerServiceInternal.class);
final LegacyPermissionManagerInternal permissionManager =
LocalServices.getService(LegacyPermissionManagerInternal.class);
// Set a callback for the permission grant policy to query the default sms app.
permissionManager.setSmsAppPackagesProvider(userId -> {
@@ -244,15 +244,16 @@ public class TelecomLoaderService extends SystemService {
}
private void updateSimCallManagerPermissions(int userId) {
final PermissionManagerServiceInternal permissionManager =
LocalServices.getService(PermissionManagerServiceInternal.class);
final LegacyPermissionManagerInternal permissionManager =
LocalServices.getService(LegacyPermissionManagerInternal.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();
permissionManager.grantDefaultPermissionsToDefaultSimCallManager(packageName, userId);
permissionManager.grantDefaultPermissionsToDefaultSimCallManager(packageName,
userId);
}
}
}

View File

@@ -72,7 +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.android.server.pm.permission.LegacyPermissionManagerInternal;
import com.google.android.collect.Lists;
@@ -133,10 +133,10 @@ public class NetworkScoreServiceTest {
@Mock private UnaryOperator<List<ScoredNetwork>> mScanResultsFilter;
@Mock private WifiInfo mWifiInfo;
@Mock private NetworkScoreService.ScoringServiceConnection mServiceConnection;
@Mock private PermissionManagerServiceInternal mPermissionManagerInternal;
@Mock private LegacyPermissionManagerInternal mPermissionManagerInternal;
@Captor private ArgumentCaptor<List<ScoredNetwork>> mScoredNetworkCaptor;
@Captor private
ArgumentCaptor<PermissionManagerServiceInternal.PackagesProvider> mPackagesProviderCaptor;
@Captor private ArgumentCaptor<LegacyPermissionManagerInternal.PackagesProvider>
mPackagesProviderCaptor;
private ContentResolver mContentResolver;
private NetworkScoreService mNetworkScoreService;
@@ -165,7 +165,7 @@ public class NetworkScoreServiceTest {
mHandlerThread = new HandlerThread("NetworkScoreServiceTest");
mHandlerThread.start();
LocalServices.addService(
PermissionManagerServiceInternal.class, mPermissionManagerInternal);
LegacyPermissionManagerInternal.class, mPermissionManagerInternal);
mNetworkScoreService = new NetworkScoreService(mContext, mNetworkScorerAppManager,
networkScorerAppData -> mServiceConnection, mHandlerThread.getLooper());
WifiConfiguration configuration = new WifiConfiguration();
@@ -191,7 +191,7 @@ public class NetworkScoreServiceTest {
@After
public void tearDown() throws Exception {
mHandlerThread.quitSafely();
LocalServices.removeServiceForTest(PermissionManagerServiceInternal.class);
LocalServices.removeServiceForTest(LegacyPermissionManagerInternal.class);
}
@Test

View File

@@ -49,7 +49,6 @@ import android.hardware.soundtrigger.SoundTrigger.ModelParamRange;
import android.hardware.soundtrigger.SoundTrigger.ModuleProperties;
import android.hardware.soundtrigger.SoundTrigger.RecognitionConfig;
import android.media.permission.Identity;
import android.media.permission.IdentityContext;
import android.media.permission.PermissionUtil;
import android.media.permission.SafeCloseable;
import android.os.Binder;
@@ -92,7 +91,7 @@ import com.android.server.LocalServices;
import com.android.server.SystemService;
import com.android.server.UiThread;
import com.android.server.pm.UserManagerInternal;
import com.android.server.pm.permission.PermissionManagerServiceInternal;
import com.android.server.pm.permission.LegacyPermissionManagerInternal;
import com.android.server.soundtrigger.SoundTriggerInternal;
import com.android.server.utils.TimingsTraceAndSlog;
import com.android.server.wm.ActivityTaskManagerInternal;
@@ -141,10 +140,10 @@ public class VoiceInteractionManagerService extends SystemService {
mUserManagerInternal = Objects.requireNonNull(
LocalServices.getService(UserManagerInternal.class));
PermissionManagerServiceInternal permissionManagerInternal = LocalServices.getService(
PermissionManagerServiceInternal.class);
LegacyPermissionManagerInternal permissionManagerInternal = LocalServices.getService(
LegacyPermissionManagerInternal.class);
permissionManagerInternal.setVoiceInteractionPackagesProvider(
new PermissionManagerServiceInternal.PackagesProvider() {
new LegacyPermissionManagerInternal.PackagesProvider() {
@Override
public String[] getPackages(int userId) {
mServiceStub.initForUser(userId);