Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 49d3e348 authored by Adam Bookatz's avatar Adam Bookatz
Browse files

Expand uninstallForAll to Admins

Currently, user 0 can uninstall other users' apps. It really has that
ability by virtue of it being an Admin user. But non-user-0 Admins don't
currently have this ability, so we expand that here. This also allows
this ability on HSUM, where human Admin users aren't user 0.

Bug: 384514936
Test: manual confirmation that overflow appears on HSUM device
Test: atest SettingsSpaUnitTests:com.android.settings.spa.app.appinfo.AppInfoSettingsMoreOptionsTest
Flag: EXEMPT bugfix
Change-Id: I976bb63ecced3c128f8109c63c85067f4a0cdf9b
parent b345f4b0
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -572,7 +572,7 @@ public class AppInfoDashboardFragment extends DashboardFragment
            showIt = false;
        } else if (mPackageInfo == null || mDpm.packageHasActiveAdmins(mPackageInfo.packageName)) {
            showIt = false;
        } else if (UserHandle.myUserId() != 0) {
        } else if (!mUserManager.isAdminUser()) {
            showIt = false;
        } else if (mUserManager.getUsers().size() < 2) {
            showIt = false;
+1 −1
Original line number Diff line number Diff line
@@ -167,7 +167,7 @@ private fun ApplicationInfo.isShowUninstallUpdates(context: Context): Boolean =
private fun ApplicationInfo.isShowUninstallForAllUsers(
    userManager: UserManager,
    packageManagers: IPackageManagers,
): Boolean = userId == 0 && !isSystemApp && !isInstantApp &&
): Boolean = userManager.isUserAdmin(userId) && !isSystemApp && !isInstantApp &&
    isOtherUserHasInstallPackage(userManager, packageManagers)

private fun ApplicationInfo.isOtherUserHasInstallPackage(
+20 −0
Original line number Diff line number Diff line
@@ -159,6 +159,7 @@ class AppInfoSettingsMoreOptionsTest {
            packageName = PACKAGE_NAME
            uid = UID
        }
        whenever(userManager.isUserAdmin(app.userId)).thenReturn(true)
        whenever(userManager.aliveUsers).thenReturn(listOf(OTHER_USER))
        whenever(packageManagers.isPackageInstalledAsUser(PACKAGE_NAME, OTHER_USER_ID))
            .thenReturn(true)
@@ -171,12 +172,30 @@ class AppInfoSettingsMoreOptionsTest {
        )
    }

    @Test
    fun uninstallForAllUsers_NotAdminUser_notDisplayed() {
        val app = ApplicationInfo().apply {
            packageName = PACKAGE_NAME
            uid = UID
        }
        whenever(userManager.isUserAdmin(app.userId)).thenReturn(false)
        whenever(userManager.aliveUsers).thenReturn(listOf(OTHER_USER))
        whenever(packageManagers.isPackageInstalledAsUser(PACKAGE_NAME, OTHER_USER_ID))
            .thenReturn(true)

        setContent(app)
        composeTestRule.onRoot().performClick()

        composeTestRule.onRoot().assertIsNotDisplayed()
    }

    @Test
    fun uninstallForAllUsers_appHiddenNotInQuietModeAndPrimaryUser_displayed() {
        val app = ApplicationInfo().apply {
            packageName = PACKAGE_NAME
            uid = UID
        }
        whenever(userManager.isUserAdmin(app.userId)).thenReturn(true)
        whenever(userManager.aliveUsers).thenReturn(listOf(OTHER_USER))
        whenever(packageManagers
                .isPackageInstalledAsUser(PACKAGE_NAME, OTHER_USER_ID))
@@ -198,6 +217,7 @@ class AppInfoSettingsMoreOptionsTest {
            packageName = PACKAGE_NAME
            uid = UID
        }
        whenever(userManager.isUserAdmin(app.userId)).thenReturn(true)
        whenever(userManager.aliveUsers).thenReturn(listOf(OTHER_USER))
        whenever(packageManagers
                .isPackageInstalledAsUser(PACKAGE_NAME, OTHER_USER_ID))