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 Diff line number Diff line
@@ -19,12 +19,19 @@ package com.android.systemui.statusbar.phone.userswitcher
import android.graphics.drawable.Drawable
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.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.UserInfoController
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

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

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

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

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

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

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

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

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

private const val TAG = "StatusBarUserInfoTracker"