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

Commit 82588a8d authored by Sumedh Sen's avatar Sumedh Sen
Browse files

Simplify how we compute strings for uninstalling from profiles and other users

This removed redundancy in code and makes it easier to understand how
string resources are selected for different uninstall scenarios

Bug: 274120822
Test: Follow Pia Manual Test Plan
Flag: android.content.pm.use_pia_v2
Change-Id: I923c868b57fa9a417759cf756c224d94c3887d38
parent 21f3cf1b
Loading
Loading
Loading
Loading
+59 −76
Original line number Diff line number Diff line
@@ -238,10 +238,6 @@ class UninstallRepository(private val context: Context) {
        val myUserHandle = Process.myUserHandle()
        val isSingleUserOnDevice = isSingleUserOnDevice()

        if (isArchive) {
            positiveButtonText = context.getString(R.string.button_archive)
        }

        if (isUpdatedSystemApp) {
            dialogTitle = context.getString(R.string.title_uninstall_updates_system_app)
            positiveButtonText = context.getString(R.string.button_uninstall_updates_system_app)
@@ -264,77 +260,70 @@ class UninstallRepository(private val context: Context) {
                dialogTitle = context.getString(R.string.title_uninstall_all_users)
            }
            messageBuilder.append(messageString)
        } else if (uninstalledUser != myUserHandle) {
            // Uninstalling user is issuing uninstall for another user
            val customUserManager = context.createContextAsUser(uninstalledUser!!, 0)
        } else if (myUserHandle == UserHandle.SYSTEM &&
            hasClonedInstance(targetAppInfo!!.packageName)
        ) {
            dialogTitle = context.getString(R.string.title_uninstall)
            messageBuilder.append(context.getString(R.string.message_uninstall_with_clone_instance))
        } else {
            val isCrossUserUninstalledRequest = myUserHandle != uninstalledUser
            val isSameProfileGroup =
                userManager!!.isSameProfileGroup(myUserHandle, uninstalledUser!!)
            val isTargetUserAProfile = isCrossUserUninstalledRequest && isSameProfileGroup

            val userManagerForTargetUser = context.createContextAsUser(uninstalledUser!!, 0)
                .getSystemService(UserManager::class.java)
            val userName = customUserManager!!.userName

            var messageString: String
            if (isArchive) {
                messageString = context.getString(R.string.message_archive_other_user, userName)
                dialogTitle = context.getString(R.string.title_archive_other_user)
            } else {
                messageString = context.getString(R.string.message_uninstall_other_user, userName)
                dialogTitle = context.getString(R.string.title_uninstall_other_user)
            }
            val isPrivateSpaceFeatureEnabled = Flags.allowPrivateProfile()
                    && MultiuserFlags.enablePrivateSpaceFeatures()

            if (userManager!!.isSameProfileGroup(myUserHandle, uninstalledUser!!)) {
                if (customUserManager.isManagedProfile) {
            var messageString = ""
            if ((isPrivateSpaceFeatureEnabled)
                && (userManager.isPrivateProfile
                        || (isTargetUserAProfile && userManagerForTargetUser.isPrivateProfile))) {
                if (isArchive) {
                        messageString = context.getString(R.string.message_archive_work_profile)
                    messageString = context.getString(R.string.message_archive_private_space)
                    dialogTitle = context.getString(R.string.title_archive)
                } else {
                        messageString = context.getString(R.string.message_uninstall_work_profile)
                    messageString = context.getString(R.string.message_uninstall_private_space)
                    dialogTitle = context.getString(R.string.title_uninstall)
                }
                } else if (customUserManager.isCloneProfile) {
                    isClonedApp = true
                    messageString = context.getString(
                            R.string.message_delete_clone_app, targetAppLabel
                    )
                    dialogTitle = context.getString(R.string.title_uninstall_clone)
                } else if (Flags.allowPrivateProfile()
                        && MultiuserFlags.enablePrivateSpaceFeatures()
                        && customUserManager.isPrivateProfile
                ) {
                    // TODO(b/324244123): Get these Strings from a User Property API.
            } else if (userManager.isManagedProfile
                    || (isTargetUserAProfile && userManagerForTargetUser.isManagedProfile)) {
                if (isArchive) {
                        messageString = context.getString(R.string.message_archive_private_space)
                    messageString = context.getString(R.string.message_archive_work_profile)
                    dialogTitle = context.getString(R.string.title_archive)
                } else {
                        messageString = context.getString(R.string.message_uninstall_private_space)
                    messageString = context.getString(R.string.message_uninstall_work_profile)
                    dialogTitle = context.getString(R.string.title_uninstall)
                }
                }
            }
            messageBuilder.append(messageString)
        } else if (isCloneProfile(uninstalledUser!!)) {
            } else if (userManager.isCloneProfile
                    || (isTargetUserAProfile && userManagerForTargetUser.isCloneProfile)) {
                isClonedApp = true
                messageString = context.getString(R.string.message_delete_clone_app,
                    targetAppLabel)
                dialogTitle = context.getString(R.string.title_uninstall_clone)
            messageBuilder.append(
                context.getString(
                    R.string.message_delete_clone_app, targetAppLabel
                )
            )
        } else if (isPrivateSpace(uninstalledUser!!)) {
            var messageString: String
            } else if (isCrossUserUninstalledRequest && !isTargetUserAProfile) {
                // App is being uninstalled from a different, but non-profile user
                val userName = userManagerForTargetUser!!.userName
                if (isArchive) {
                messageString = context.getString(R.string.message_archive_private_space)
                dialogTitle = context.getString(R.string.title_archive)
                    messageString = context.getString(R.string.message_archive_other_user,
                        userName)
                    dialogTitle = context.getString(R.string.title_archive_other_user)
                } else {
                messageString = context.getString(R.string.message_uninstall_private_space)
                dialogTitle = context.getString(R.string.title_uninstall)
                    messageString =
                        context.getString(R.string.message_uninstall_other_user, userName)
                    dialogTitle = context.getString(R.string.title_uninstall_other_user)
                }
            messageBuilder.append(messageString)
        } else if (myUserHandle == UserHandle.SYSTEM &&
            hasClonedInstance(targetAppInfo!!.packageName)
        ) {
            dialogTitle = context.getString(R.string.title_uninstall)
            messageBuilder.append(context.getString(R.string.message_uninstall_with_clone_instance))
            } else if (isArchive) {
                dialogTitle = context.getString(R.string.title_archive)
            messageBuilder.append(context.getString(R.string.message_archive))
                positiveButtonText = context.getString(R.string.button_archive)
                messageString = context.getString(R.string.message_archive)
            }

            if (messageString.isNotEmpty()) {
                messageBuilder.append(messageString)
            }
        }

        val message = if (messageBuilder.isNotEmpty()) {
@@ -417,12 +406,6 @@ class UninstallRepository(private val context: Context) {
        return customUserManager!!.isUserOfType(UserManager.USER_TYPE_PROFILE_CLONE)
    }

    private fun isPrivateSpace(userHandle: UserHandle): Boolean {
        val customUserManager = context.createContextAsUser(userHandle, 0)
            .getSystemService(UserManager::class.java)
        return customUserManager!!.isUserOfType(UserManager.USER_TYPE_PROFILE_PRIVATE)
    }

    /**
     * Get number of bytes of the app data of the package.
     *