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

Commit 7f7d6185 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Move binder calls off of the main thread"

parents 936c9bc5 41568351
Loading
Loading
Loading
Loading
+30 −14
Original line number Original line Diff line number Diff line
@@ -19,12 +19,19 @@ package com.android.systemui.statusbar.phone.userswitcher
import android.graphics.drawable.Drawable
import android.graphics.drawable.Drawable
import android.os.UserManager
import android.os.UserManager


import com.android.systemui.DejankUtils.whitelistIpcs
import com.android.systemui.Dumpable
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.dump.DumpManager
import com.android.systemui.statusbar.policy.CallbackController
import com.android.systemui.statusbar.policy.CallbackController
import com.android.systemui.statusbar.policy.UserInfoController
import com.android.systemui.statusbar.policy.UserInfoController
import com.android.systemui.statusbar.policy.UserInfoController.OnUserInfoChangedListener
import com.android.systemui.statusbar.policy.UserInfoController.OnUserInfoChangedListener


import java.io.FileDescriptor
import java.io.PrintWriter
import java.util.concurrent.Executor

import javax.inject.Inject
import javax.inject.Inject


/**
/**
@@ -34,8 +41,11 @@ import javax.inject.Inject
@SysUISingleton
@SysUISingleton
class StatusBarUserInfoTracker @Inject constructor(
class StatusBarUserInfoTracker @Inject constructor(
    private val userInfoController: UserInfoController,
    private val userInfoController: UserInfoController,
    private val userManager: UserManager
    private val userManager: UserManager,
) : CallbackController<CurrentUserChipInfoUpdatedListener> {
    private val dumpManager: DumpManager,
    @Main private val mainExecutor: Executor,
    @Background private val backgroundExecutor: Executor
) : CallbackController<CurrentUserChipInfoUpdatedListener>, Dumpable {
    var currentUserName: String? = null
    var currentUserName: String? = null
        private set
        private set
    var currentUserAvatar: Drawable? = null
    var currentUserAvatar: Drawable? = null
@@ -53,7 +63,7 @@ class StatusBarUserInfoTracker @Inject constructor(
    }
    }


    init {
    init {
        startListening()
        dumpManager.registerDumpable(TAG, this)
    }
    }


    override fun addCallback(listener: CurrentUserChipInfoUpdatedListener) {
    override fun addCallback(listener: CurrentUserChipInfoUpdatedListener) {
@@ -96,27 +106,33 @@ class StatusBarUserInfoTracker @Inject constructor(
        userInfoController.removeCallback(userInfoChangedListener)
        userInfoController.removeCallback(userInfoChangedListener)
    }
    }


    private fun checkUserSwitcherEnabled() {
        whitelistIpcs {
            userSwitcherEnabled = userManager.isUserSwitcherEnabled
        }
    }

    /**
    /**
     * Force a check to [UserManager.isUserSwitcherEnabled], and update listeners if the value has
     * Force a check to [UserManager.isUserSwitcherEnabled], and update listeners if the value has
     * changed
     * changed
     */
     */
    fun checkEnabled() {
    fun checkEnabled() {
        backgroundExecutor.execute {
            // Check on a background thread to avoid main thread Binder calls
            val wasEnabled = userSwitcherEnabled
            val wasEnabled = userSwitcherEnabled
        checkUserSwitcherEnabled()
            userSwitcherEnabled = userManager.isUserSwitcherEnabled


            if (wasEnabled != userSwitcherEnabled) {
            if (wasEnabled != userSwitcherEnabled) {
                mainExecutor.execute {
                    notifyListenersSettingChanged()
                    notifyListenersSettingChanged()
                }
                }
            }
            }
        }
        }
    }

    override fun dump(fd: FileDescriptor, pw: PrintWriter, args: Array<out String>) {
        pw.println("  userSwitcherEnabled=$userSwitcherEnabled")
        pw.println("  listening=$listening")
    }
}


interface CurrentUserChipInfoUpdatedListener {
interface CurrentUserChipInfoUpdatedListener {
    fun onCurrentUserChipInfoUpdated()
    fun onCurrentUserChipInfoUpdated()
    fun onStatusBarUserSwitcherSettingChanged(enabled: Boolean) {}
    fun onStatusBarUserSwitcherSettingChanged(enabled: Boolean) {}
}
}

private const val TAG = "StatusBarUserInfoTracker"