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

Commit 70ca5486 authored by Jorge Gil's avatar Jorge Gil
Browse files

Update the current user again after registering UserChangeListener

Active user change event may not be caught by DesktopUserRepositories if
it happens between init and onInit() call.

Bug: 403685486
Flag: com.android.window.flags.enable_multiple_desktops_backend
Test: manual - check current user id in DesktopUserRepositories
Change-Id: If05494258ac9426e685f654fdc44f740587bf06a
parent 25ef3aab
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1112,6 +1112,7 @@ class DesktopRepository(
    internal fun dump(pw: PrintWriter, prefix: String) {
        val innerPrefix = "$prefix  "
        pw.println("${prefix}DesktopRepository")
        pw.println("${innerPrefix}userId=$userId")
        dumpDesktopTaskData(pw, innerPrefix)
        pw.println("${innerPrefix}activeTasksListeners=${activeTasksListeners.size}")
        pw.println("${innerPrefix}visibleTasksListeners=${visibleTasksListeners.size}")
+16 −5
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.content.Context
import android.content.pm.UserInfo
import android.os.UserManager
import android.util.SparseArray
import android.window.DesktopExperienceFlags
import android.window.DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_HSUM
import androidx.core.util.forEach
import com.android.internal.protolog.ProtoLog
@@ -68,7 +69,10 @@ class DesktopUserRepositories(
        if (DesktopModeStatus.canEnterDesktopMode(context)) {
            shellInit.addInitCallback(::onInit, this)
        }
        if (ENABLE_DESKTOP_WINDOWING_HSUM.isTrue()) {
        if (
            ENABLE_DESKTOP_WINDOWING_HSUM.isTrue() &&
                !DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue
        ) {
            userIdToProfileIdsMap[userId] = userManager.getProfiles(userId).map { it.id }
        }
    }
@@ -76,6 +80,13 @@ class DesktopUserRepositories(
    private fun onInit() {
        repositoryInitializer.initialize(this)
        shellController.addUserChangeListener(this)
        if (
            ENABLE_DESKTOP_WINDOWING_HSUM.isTrue() &&
                DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue
        ) {
            userId = ActivityManager.getCurrentUser()
            userIdToProfileIdsMap[userId] = userManager.getProfiles(userId).map { it.id }
        }
    }

    /** Returns [DesktopRepository] for the parent user id. */
@@ -97,10 +108,10 @@ class DesktopUserRepositories(

    /** Dumps [DesktopRepository] for each user. */
    fun dump(pw: PrintWriter, prefix: String) {
        desktopRepoByUserId.forEach { key, value ->
            pw.println("${prefix}userId=$key")
            value.dump(pw, prefix)
        }
        val innerPrefix = "$prefix    "
        pw.println("${prefix}DesktopUserRepositories:")
        pw.println("${innerPrefix}currentUserId=$userId")
        desktopRepoByUserId.forEach { key, value -> value.dump(pw, innerPrefix) }
    }

    override fun onUserChanged(newUserId: Int, userContext: Context) {