Merge "Update views in (Q)QS footer when shade opens" into sc-v2-dev am: 5170817dea
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16132670 Change-Id: I7a551b0a595f9d21eb046ee5a71e4c77995a1606
This commit is contained in:
@@ -72,12 +72,6 @@ class FooterActionsController @Inject constructor(
|
|||||||
private var listening: Boolean = false
|
private var listening: Boolean = false
|
||||||
|
|
||||||
var expanded = false
|
var expanded = false
|
||||||
set(value) {
|
|
||||||
if (field != value) {
|
|
||||||
field = value
|
|
||||||
updateView()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private val settingsButton: SettingsButton = view.findViewById(R.id.settings_button)
|
private val settingsButton: SettingsButton = view.findViewById(R.id.settings_button)
|
||||||
private val settingsButtonContainer: View? = view.findViewById(R.id.settings_button_container)
|
private val settingsButtonContainer: View? = view.findViewById(R.id.settings_button_container)
|
||||||
@@ -176,8 +170,7 @@ class FooterActionsController @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun updateView() {
|
private fun updateView() {
|
||||||
mView.updateEverything(buttonsVisible(), isTunerEnabled(),
|
mView.updateEverything(isTunerEnabled(), multiUserSwitchController.isMultiUserEnabled)
|
||||||
multiUserSwitchController.isMultiUserEnabled)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onViewDetached() {
|
override fun onViewDetached() {
|
||||||
@@ -191,14 +184,14 @@ class FooterActionsController @Inject constructor(
|
|||||||
this.listening = listening
|
this.listening = listening
|
||||||
if (this.listening) {
|
if (this.listening) {
|
||||||
userInfoController.addCallback(onUserInfoChangedListener)
|
userInfoController.addCallback(onUserInfoChangedListener)
|
||||||
|
updateView()
|
||||||
} else {
|
} else {
|
||||||
userInfoController.removeCallback(onUserInfoChangedListener)
|
userInfoController.removeCallback(onUserInfoChangedListener)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun disable(state2: Int) {
|
fun disable(state2: Int) {
|
||||||
mView.disable(buttonsVisible(), state2, isTunerEnabled(),
|
mView.disable(state2, isTunerEnabled(), multiUserSwitchController.isMultiUserEnabled)
|
||||||
multiUserSwitchController.isMultiUserEnabled)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setExpansion(headerExpansionFraction: Float) {
|
fun setExpansion(headerExpansionFraction: Float) {
|
||||||
|
|||||||
@@ -107,7 +107,6 @@ class FooterActionsView(context: Context?, attrs: AttributeSet?) : LinearLayout(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun disable(
|
fun disable(
|
||||||
buttonsVisible: Boolean,
|
|
||||||
state2: Int,
|
state2: Int,
|
||||||
isTunerEnabled: Boolean,
|
isTunerEnabled: Boolean,
|
||||||
multiUserEnabled: Boolean
|
multiUserEnabled: Boolean
|
||||||
@@ -115,16 +114,15 @@ class FooterActionsView(context: Context?, attrs: AttributeSet?) : LinearLayout(
|
|||||||
val disabled = state2 and StatusBarManager.DISABLE2_QUICK_SETTINGS != 0
|
val disabled = state2 and StatusBarManager.DISABLE2_QUICK_SETTINGS != 0
|
||||||
if (disabled == qsDisabled) return
|
if (disabled == qsDisabled) return
|
||||||
qsDisabled = disabled
|
qsDisabled = disabled
|
||||||
updateEverything(buttonsVisible, isTunerEnabled, multiUserEnabled)
|
updateEverything(isTunerEnabled, multiUserEnabled)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateEverything(
|
fun updateEverything(
|
||||||
buttonsVisible: Boolean,
|
|
||||||
isTunerEnabled: Boolean,
|
isTunerEnabled: Boolean,
|
||||||
multiUserEnabled: Boolean
|
multiUserEnabled: Boolean
|
||||||
) {
|
) {
|
||||||
post {
|
post {
|
||||||
updateVisibilities(buttonsVisible, isTunerEnabled, multiUserEnabled)
|
updateVisibilities(isTunerEnabled, multiUserEnabled)
|
||||||
updateClickabilities()
|
updateClickabilities()
|
||||||
isClickable = false
|
isClickable = false
|
||||||
}
|
}
|
||||||
@@ -137,15 +135,14 @@ class FooterActionsView(context: Context?, attrs: AttributeSet?) : LinearLayout(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun updateVisibilities(
|
private fun updateVisibilities(
|
||||||
buttonsVisible: Boolean,
|
|
||||||
isTunerEnabled: Boolean,
|
isTunerEnabled: Boolean,
|
||||||
multiUserEnabled: Boolean
|
multiUserEnabled: Boolean
|
||||||
) {
|
) {
|
||||||
settingsContainer.visibility = if (qsDisabled) GONE else VISIBLE
|
settingsContainer.visibility = if (qsDisabled) GONE else VISIBLE
|
||||||
tunerIcon.visibility = if (isTunerEnabled) VISIBLE else INVISIBLE
|
tunerIcon.visibility = if (isTunerEnabled) VISIBLE else INVISIBLE
|
||||||
multiUserSwitch.visibility = if (buttonsVisible && multiUserEnabled) VISIBLE else GONE
|
multiUserSwitch.visibility = if (multiUserEnabled) VISIBLE else GONE
|
||||||
val isDemo = UserManager.isDeviceInDemoMode(context)
|
val isDemo = UserManager.isDeviceInDemoMode(context)
|
||||||
settingsButton.visibility = if (isDemo || !buttonsVisible) INVISIBLE else VISIBLE
|
settingsButton.visibility = if (isDemo) INVISIBLE else VISIBLE
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onUserInfoChanged(picture: Drawable?, isGuestUser: Boolean) {
|
fun onUserInfoChanged(picture: Drawable?, isGuestUser: Boolean) {
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
package com.android.systemui.qs
|
package com.android.systemui.qs
|
||||||
|
|
||||||
import com.android.systemui.R
|
|
||||||
import android.os.UserManager
|
import android.os.UserManager
|
||||||
|
import android.testing.AndroidTestingRunner
|
||||||
|
import android.testing.TestableLooper
|
||||||
|
import android.testing.ViewUtils
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.test.filters.SmallTest
|
import androidx.test.filters.SmallTest
|
||||||
@@ -9,6 +11,7 @@ import com.android.internal.logging.MetricsLogger
|
|||||||
import com.android.internal.logging.UiEventLogger
|
import com.android.internal.logging.UiEventLogger
|
||||||
import com.android.internal.logging.testing.FakeMetricsLogger
|
import com.android.internal.logging.testing.FakeMetricsLogger
|
||||||
import com.android.systemui.Dependency
|
import com.android.systemui.Dependency
|
||||||
|
import com.android.systemui.R
|
||||||
import com.android.systemui.classifier.FalsingManagerFake
|
import com.android.systemui.classifier.FalsingManagerFake
|
||||||
import com.android.systemui.globalactions.GlobalActionsDialogLite
|
import com.android.systemui.globalactions.GlobalActionsDialogLite
|
||||||
import com.android.systemui.plugins.ActivityStarter
|
import com.android.systemui.plugins.ActivityStarter
|
||||||
@@ -19,8 +22,11 @@ import com.android.systemui.statusbar.policy.UserInfoController
|
|||||||
import com.android.systemui.tuner.TunerService
|
import com.android.systemui.tuner.TunerService
|
||||||
import com.android.systemui.utils.leaks.FakeTunerService
|
import com.android.systemui.utils.leaks.FakeTunerService
|
||||||
import com.android.systemui.utils.leaks.LeakCheckedTest
|
import com.android.systemui.utils.leaks.LeakCheckedTest
|
||||||
|
import com.google.common.truth.Truth.assertThat
|
||||||
|
import org.junit.After
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
import org.junit.runner.RunWith
|
||||||
import org.mockito.ArgumentMatchers.any
|
import org.mockito.ArgumentMatchers.any
|
||||||
import org.mockito.ArgumentMatchers.anyBoolean
|
import org.mockito.ArgumentMatchers.anyBoolean
|
||||||
import org.mockito.Mock
|
import org.mockito.Mock
|
||||||
@@ -30,6 +36,8 @@ import org.mockito.MockitoAnnotations
|
|||||||
import org.mockito.Mockito.`when` as whenever
|
import org.mockito.Mockito.`when` as whenever
|
||||||
|
|
||||||
@SmallTest
|
@SmallTest
|
||||||
|
@TestableLooper.RunWithLooper
|
||||||
|
@RunWith(AndroidTestingRunner::class)
|
||||||
class FooterActionsControllerTest : LeakCheckedTest() {
|
class FooterActionsControllerTest : LeakCheckedTest() {
|
||||||
@Mock
|
@Mock
|
||||||
private lateinit var userManager: UserManager
|
private lateinit var userManager: UserManager
|
||||||
@@ -53,10 +61,12 @@ class FooterActionsControllerTest : LeakCheckedTest() {
|
|||||||
private val metricsLogger: MetricsLogger = FakeMetricsLogger()
|
private val metricsLogger: MetricsLogger = FakeMetricsLogger()
|
||||||
private lateinit var view: FooterActionsView
|
private lateinit var view: FooterActionsView
|
||||||
private val falsingManager: FalsingManagerFake = FalsingManagerFake()
|
private val falsingManager: FalsingManagerFake = FalsingManagerFake()
|
||||||
|
private lateinit var testableLooper: TestableLooper
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
fun setUp() {
|
fun setUp() {
|
||||||
MockitoAnnotations.initMocks(this)
|
MockitoAnnotations.initMocks(this)
|
||||||
|
testableLooper = TestableLooper.get(this)
|
||||||
injectLeakCheckedDependencies(*LeakCheckedTest.ALL_SUPPORTED_CLASSES)
|
injectLeakCheckedDependencies(*LeakCheckedTest.ALL_SUPPORTED_CLASSES)
|
||||||
val fakeTunerService = Dependency.get(TunerService::class.java) as FakeTunerService
|
val fakeTunerService = Dependency.get(TunerService::class.java) as FakeTunerService
|
||||||
|
|
||||||
@@ -69,7 +79,14 @@ class FooterActionsControllerTest : LeakCheckedTest() {
|
|||||||
globalActionsDialog, uiEventLogger, showPMLiteButton = true,
|
globalActionsDialog, uiEventLogger, showPMLiteButton = true,
|
||||||
buttonsVisibleState = ExpansionState.EXPANDED)
|
buttonsVisibleState = ExpansionState.EXPANDED)
|
||||||
controller.init()
|
controller.init()
|
||||||
controller.onViewAttached()
|
ViewUtils.attachView(view)
|
||||||
|
// View looper is the testable looper associated with the test
|
||||||
|
testableLooper.processAllMessages()
|
||||||
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
fun tearDown() {
|
||||||
|
ViewUtils.detachView(view)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -90,4 +107,19 @@ class FooterActionsControllerTest : LeakCheckedTest() {
|
|||||||
// Verify Settings wasn't launched.
|
// Verify Settings wasn't launched.
|
||||||
verify<ActivityStarter>(activityStarter, Mockito.never()).startActivity(any(), anyBoolean())
|
verify<ActivityStarter>(activityStarter, Mockito.never()).startActivity(any(), anyBoolean())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testMultiUserSwitchUpdatedWhenExpansionStarts() {
|
||||||
|
// When expansion starts, listening is set to true
|
||||||
|
val multiUserSwitch = view.requireViewById<View>(R.id.multi_user_switch)
|
||||||
|
|
||||||
|
assertThat(multiUserSwitch.visibility).isNotEqualTo(View.VISIBLE)
|
||||||
|
|
||||||
|
whenever(multiUserSwitchController.isMultiUserEnabled).thenReturn(true)
|
||||||
|
|
||||||
|
controller.setListening(true)
|
||||||
|
testableLooper.processAllMessages()
|
||||||
|
|
||||||
|
assertThat(multiUserSwitch.visibility).isEqualTo(View.VISIBLE)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user