Loading services/core/java/com/android/server/pm/SuspendPackageHelper.java +8 −8 Original line number Diff line number Diff line Loading @@ -33,7 +33,6 @@ import android.os.PersistableBundle; import android.os.Process; import android.os.UserHandle; import android.os.UserManager; import android.provider.DeviceConfig; import android.util.ArrayMap; import android.util.ArraySet; import android.util.IntArray; Loading Loading @@ -504,10 +503,6 @@ public final class SuspendPackageHelper { final String requiredPermissionControllerPackage = getKnownPackageName(snapshot, KnownPackages.PACKAGE_PERMISSION_CONTROLLER, userId); final AppOpsManager appOpsManager = mInjector.getSystemService(AppOpsManager.class); final boolean isSystemExemptFlagEnabled = DeviceConfig.getBoolean( DeviceConfig.NAMESPACE_PACKAGE_MANAGER_SERVICE, SYSTEM_EXEMPT_FROM_SUSPENSION, /* defaultValue= */ true); for (int i = 0; i < packageNames.length; i++) { canSuspend[i] = false; final String packageName = packageNames[i]; Loading Loading @@ -581,9 +576,7 @@ public final class SuspendPackageHelper { + pkg.getStaticSharedLibraryName()); continue; } if (isSystemExemptFlagEnabled && appOpsManager.checkOpNoThrow( AppOpsManager.OP_SYSTEM_EXEMPT_FROM_SUSPENSION, uid, packageName) == AppOpsManager.MODE_ALLOWED) { if (exemptFromSuspensionByAppOp(uid, packageName)) { Slog.w(TAG, "Cannot suspend package \"" + packageName + "\": has OP_SYSTEM_EXEMPT_FROM_SUSPENSION set"); continue; Loading @@ -601,6 +594,13 @@ public final class SuspendPackageHelper { return canSuspend; } private boolean exemptFromSuspensionByAppOp(int uid, String packageName) { final AppOpsManager appOpsManager = mInjector.getSystemService(AppOpsManager.class); return appOpsManager.checkOpNoThrow( AppOpsManager.OP_SYSTEM_EXEMPT_FROM_SUSPENSION, uid, packageName) == AppOpsManager.MODE_ALLOWED; } /** * Suspends packages on behalf of an admin. * Loading services/tests/mockingservicestests/src/com/android/server/pm/DistractingPackageHelperTest.kt +6 −0 Original line number Diff line number Diff line Loading @@ -16,12 +16,14 @@ package com.android.server.pm import android.app.AppOpsManager import android.content.Intent import android.content.pm.PackageManager import android.os.Binder import com.android.server.testutils.any import com.android.server.testutils.eq import com.android.server.testutils.nullable import com.android.server.testutils.whenever import com.google.common.truth.Truth.assertThat import org.junit.Test import org.junit.runner.RunWith Loading @@ -31,6 +33,7 @@ import org.mockito.Mockito.clearInvocations import org.mockito.Mockito.never import org.mockito.Mockito.verify @RunWith(JUnit4::class) class DistractingPackageHelperTest : PackageHelperTestBase() { Loading @@ -40,6 +43,9 @@ class DistractingPackageHelperTest : PackageHelperTestBase() { super.setup() distractingPackageHelper = DistractingPackageHelper( pms, broadcastHelper, suspendPackageHelper) whenever(rule.mocks().appOpsManager.checkOpNoThrow( eq(AppOpsManager.OP_SYSTEM_EXEMPT_FROM_SUSPENSION), any(), any())) .thenReturn(AppOpsManager.MODE_DEFAULT) } @Test Loading services/tests/mockingservicestests/src/com/android/server/pm/MockSystem.kt +4 −1 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ */ package com.android.server.pm import android.app.AppOpsManager import android.app.PropertyInvalidatedCache import android.content.Context import android.content.Intent Loading Loading @@ -151,7 +152,7 @@ class MockSystem(withSession: (StaticMockitoSessionBuilder) -> Unit = {}) { .mockStatic(EventLog::class.java) .mockStatic(LocalServices::class.java) .mockStatic(LocalManagerRegistry::class.java) .mockStatic(DeviceConfig::class.java) .mockStatic(DeviceConfig::class.java, Mockito.CALLS_REAL_METHODS) .mockStatic(HexEncoding::class.java) .apply(withSession) session = apply.startMocking() Loading Loading @@ -192,6 +193,7 @@ class MockSystem(withSession: (StaticMockitoSessionBuilder) -> Unit = {}) { val userManagerService: UserManagerService = mock() val componentResolver: ComponentResolver = mock() val permissionManagerInternal: PermissionManagerServiceInternal = mock() val appOpsManager: AppOpsManager = mock() val incrementalManager: IncrementalManager = mock() val platformCompat: PlatformCompat = mock() val settings: Settings = mock() Loading Loading @@ -304,6 +306,7 @@ class MockSystem(withSession: (StaticMockitoSessionBuilder) -> Unit = {}) { whenever(mocks.injector.defaultAppProvider) { mocks.defaultAppProvider } whenever(mocks.injector.backgroundHandler) { mocks.backgroundHandler } whenever(mocks.injector.updateOwnershipHelper) { mocks.updateOwnershipHelper } whenever(mocks.injector.getSystemService(AppOpsManager::class.java)) { mocks.appOpsManager } wheneverStatic { SystemConfig.getInstance() }.thenReturn(mocks.systemConfig) whenever(mocks.systemConfig.availableFeatures).thenReturn(DEFAULT_AVAILABLE_FEATURES_MAP) whenever(mocks.systemConfig.sharedLibraries).thenReturn(DEFAULT_SHARED_LIBRARIES_LIST) Loading services/tests/mockingservicestests/src/com/android/server/pm/SuspendPackageHelperTest.kt +8 −0 Original line number Diff line number Diff line Loading @@ -16,12 +16,14 @@ package com.android.server.pm import android.app.AppOpsManager import android.content.Intent import android.content.pm.SuspendDialogInfo import android.os.Binder import android.os.PersistableBundle import com.android.server.testutils.any import com.android.server.testutils.eq import com.android.server.testutils.whenever import com.google.common.truth.Truth.assertThat import org.junit.Test import org.junit.runner.RunWith Loading @@ -32,6 +34,12 @@ import org.mockito.Mockito.verify @RunWith(JUnit4::class) class SuspendPackageHelperTest : PackageHelperTestBase() { override fun setup() { super.setup() whenever(rule.mocks().appOpsManager.checkOpNoThrow( eq(AppOpsManager.OP_SYSTEM_EXEMPT_FROM_SUSPENSION), any(), any())) .thenReturn(AppOpsManager.MODE_DEFAULT) } @Test fun setPackagesSuspended() { Loading Loading
services/core/java/com/android/server/pm/SuspendPackageHelper.java +8 −8 Original line number Diff line number Diff line Loading @@ -33,7 +33,6 @@ import android.os.PersistableBundle; import android.os.Process; import android.os.UserHandle; import android.os.UserManager; import android.provider.DeviceConfig; import android.util.ArrayMap; import android.util.ArraySet; import android.util.IntArray; Loading Loading @@ -504,10 +503,6 @@ public final class SuspendPackageHelper { final String requiredPermissionControllerPackage = getKnownPackageName(snapshot, KnownPackages.PACKAGE_PERMISSION_CONTROLLER, userId); final AppOpsManager appOpsManager = mInjector.getSystemService(AppOpsManager.class); final boolean isSystemExemptFlagEnabled = DeviceConfig.getBoolean( DeviceConfig.NAMESPACE_PACKAGE_MANAGER_SERVICE, SYSTEM_EXEMPT_FROM_SUSPENSION, /* defaultValue= */ true); for (int i = 0; i < packageNames.length; i++) { canSuspend[i] = false; final String packageName = packageNames[i]; Loading Loading @@ -581,9 +576,7 @@ public final class SuspendPackageHelper { + pkg.getStaticSharedLibraryName()); continue; } if (isSystemExemptFlagEnabled && appOpsManager.checkOpNoThrow( AppOpsManager.OP_SYSTEM_EXEMPT_FROM_SUSPENSION, uid, packageName) == AppOpsManager.MODE_ALLOWED) { if (exemptFromSuspensionByAppOp(uid, packageName)) { Slog.w(TAG, "Cannot suspend package \"" + packageName + "\": has OP_SYSTEM_EXEMPT_FROM_SUSPENSION set"); continue; Loading @@ -601,6 +594,13 @@ public final class SuspendPackageHelper { return canSuspend; } private boolean exemptFromSuspensionByAppOp(int uid, String packageName) { final AppOpsManager appOpsManager = mInjector.getSystemService(AppOpsManager.class); return appOpsManager.checkOpNoThrow( AppOpsManager.OP_SYSTEM_EXEMPT_FROM_SUSPENSION, uid, packageName) == AppOpsManager.MODE_ALLOWED; } /** * Suspends packages on behalf of an admin. * Loading
services/tests/mockingservicestests/src/com/android/server/pm/DistractingPackageHelperTest.kt +6 −0 Original line number Diff line number Diff line Loading @@ -16,12 +16,14 @@ package com.android.server.pm import android.app.AppOpsManager import android.content.Intent import android.content.pm.PackageManager import android.os.Binder import com.android.server.testutils.any import com.android.server.testutils.eq import com.android.server.testutils.nullable import com.android.server.testutils.whenever import com.google.common.truth.Truth.assertThat import org.junit.Test import org.junit.runner.RunWith Loading @@ -31,6 +33,7 @@ import org.mockito.Mockito.clearInvocations import org.mockito.Mockito.never import org.mockito.Mockito.verify @RunWith(JUnit4::class) class DistractingPackageHelperTest : PackageHelperTestBase() { Loading @@ -40,6 +43,9 @@ class DistractingPackageHelperTest : PackageHelperTestBase() { super.setup() distractingPackageHelper = DistractingPackageHelper( pms, broadcastHelper, suspendPackageHelper) whenever(rule.mocks().appOpsManager.checkOpNoThrow( eq(AppOpsManager.OP_SYSTEM_EXEMPT_FROM_SUSPENSION), any(), any())) .thenReturn(AppOpsManager.MODE_DEFAULT) } @Test Loading
services/tests/mockingservicestests/src/com/android/server/pm/MockSystem.kt +4 −1 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ */ package com.android.server.pm import android.app.AppOpsManager import android.app.PropertyInvalidatedCache import android.content.Context import android.content.Intent Loading Loading @@ -151,7 +152,7 @@ class MockSystem(withSession: (StaticMockitoSessionBuilder) -> Unit = {}) { .mockStatic(EventLog::class.java) .mockStatic(LocalServices::class.java) .mockStatic(LocalManagerRegistry::class.java) .mockStatic(DeviceConfig::class.java) .mockStatic(DeviceConfig::class.java, Mockito.CALLS_REAL_METHODS) .mockStatic(HexEncoding::class.java) .apply(withSession) session = apply.startMocking() Loading Loading @@ -192,6 +193,7 @@ class MockSystem(withSession: (StaticMockitoSessionBuilder) -> Unit = {}) { val userManagerService: UserManagerService = mock() val componentResolver: ComponentResolver = mock() val permissionManagerInternal: PermissionManagerServiceInternal = mock() val appOpsManager: AppOpsManager = mock() val incrementalManager: IncrementalManager = mock() val platformCompat: PlatformCompat = mock() val settings: Settings = mock() Loading Loading @@ -304,6 +306,7 @@ class MockSystem(withSession: (StaticMockitoSessionBuilder) -> Unit = {}) { whenever(mocks.injector.defaultAppProvider) { mocks.defaultAppProvider } whenever(mocks.injector.backgroundHandler) { mocks.backgroundHandler } whenever(mocks.injector.updateOwnershipHelper) { mocks.updateOwnershipHelper } whenever(mocks.injector.getSystemService(AppOpsManager::class.java)) { mocks.appOpsManager } wheneverStatic { SystemConfig.getInstance() }.thenReturn(mocks.systemConfig) whenever(mocks.systemConfig.availableFeatures).thenReturn(DEFAULT_AVAILABLE_FEATURES_MAP) whenever(mocks.systemConfig.sharedLibraries).thenReturn(DEFAULT_SHARED_LIBRARIES_LIST) Loading
services/tests/mockingservicestests/src/com/android/server/pm/SuspendPackageHelperTest.kt +8 −0 Original line number Diff line number Diff line Loading @@ -16,12 +16,14 @@ package com.android.server.pm import android.app.AppOpsManager import android.content.Intent import android.content.pm.SuspendDialogInfo import android.os.Binder import android.os.PersistableBundle import com.android.server.testutils.any import com.android.server.testutils.eq import com.android.server.testutils.whenever import com.google.common.truth.Truth.assertThat import org.junit.Test import org.junit.runner.RunWith Loading @@ -32,6 +34,12 @@ import org.mockito.Mockito.verify @RunWith(JUnit4::class) class SuspendPackageHelperTest : PackageHelperTestBase() { override fun setup() { super.setup() whenever(rule.mocks().appOpsManager.checkOpNoThrow( eq(AppOpsManager.OP_SYSTEM_EXEMPT_FROM_SUSPENSION), any(), any())) .thenReturn(AppOpsManager.MODE_DEFAULT) } @Test fun setPackagesSuspended() { Loading