Merge "Do not relayout when expanding shade" into sc-v2-dev am: c8209cacc4
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16118490 Change-Id: I862a8a10a5f5b58336d3241dd4180d0a2c95f2be
This commit is contained in:
@@ -41,15 +41,28 @@ class SplitShadeHeaderController @Inject constructor(
|
||||
private val iconManager: StatusBarIconController.IconManager
|
||||
private val qsCarrierGroupController: QSCarrierGroupController
|
||||
private var visible = false
|
||||
set(value) {
|
||||
if (field == value) {
|
||||
return
|
||||
}
|
||||
field = value
|
||||
updateListeners()
|
||||
}
|
||||
|
||||
var shadeExpanded = false
|
||||
set(value) {
|
||||
if (field == value) {
|
||||
return
|
||||
}
|
||||
field = value
|
||||
updateVisibility()
|
||||
}
|
||||
|
||||
var splitShadeMode = false
|
||||
set(value) {
|
||||
if (field == value) {
|
||||
return
|
||||
}
|
||||
field = value
|
||||
updateVisibility()
|
||||
}
|
||||
@@ -78,15 +91,20 @@ class SplitShadeHeaderController @Inject constructor(
|
||||
}
|
||||
|
||||
private fun updateVisibility() {
|
||||
val shouldBeVisible = shadeExpanded && splitShadeMode
|
||||
if (visible != shouldBeVisible) {
|
||||
visible = shouldBeVisible
|
||||
statusBar.visibility = if (shouldBeVisible) View.VISIBLE else View.GONE
|
||||
updateListeners(shouldBeVisible)
|
||||
val visibility = if (!splitShadeMode) {
|
||||
View.GONE
|
||||
} else if (shadeExpanded) {
|
||||
View.VISIBLE
|
||||
} else {
|
||||
View.INVISIBLE
|
||||
}
|
||||
if (statusBar.visibility != visibility) {
|
||||
statusBar.visibility = visibility
|
||||
visible = visibility == View.VISIBLE
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateListeners(visible: Boolean) {
|
||||
private fun updateListeners() {
|
||||
qsCarrierGroupController.setListening(visible)
|
||||
if (visible) {
|
||||
statusBarIconController.addIconGroup(iconManager)
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
package com.android.systemui.statusbar.phone
|
||||
|
||||
import android.content.Context
|
||||
import android.content.res.Resources
|
||||
import android.test.suitebuilder.annotation.SmallTest
|
||||
import android.view.View
|
||||
import com.android.systemui.R
|
||||
import com.android.systemui.SysuiTestCase
|
||||
import com.android.systemui.animation.ShadeInterpolation
|
||||
import com.android.systemui.battery.BatteryMeterView
|
||||
import com.android.systemui.battery.BatteryMeterViewController
|
||||
import com.android.systemui.flags.FeatureFlags
|
||||
import com.android.systemui.qs.carrier.QSCarrierGroupController
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import org.junit.Before
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.mockito.ArgumentMatchers.any
|
||||
import org.mockito.ArgumentMatchers.anyInt
|
||||
import org.mockito.Mock
|
||||
import org.mockito.Mockito.`when` as whenever
|
||||
import org.mockito.Mockito.verify
|
||||
import org.mockito.junit.MockitoJUnit
|
||||
|
||||
@SmallTest
|
||||
class SplitShadeHeaderControllerTest : SysuiTestCase() {
|
||||
|
||||
@Mock private lateinit var view: View
|
||||
@Mock private lateinit var statusIcons: StatusIconContainer
|
||||
@Mock private lateinit var statusBarIconController: StatusBarIconController
|
||||
@Mock private lateinit var qsCarrierGroupController: QSCarrierGroupController
|
||||
@Mock private lateinit var qsCarrierGroupControllerBuilder: QSCarrierGroupController.Builder
|
||||
@Mock private lateinit var featureFlags: FeatureFlags
|
||||
@Mock private lateinit var batteryMeterView: BatteryMeterView
|
||||
@Mock private lateinit var batteryMeterViewController: BatteryMeterViewController
|
||||
@Mock private lateinit var resources: Resources
|
||||
@Mock private lateinit var context: Context
|
||||
@JvmField @Rule val mockitoRule = MockitoJUnit.rule()
|
||||
var viewVisibility = View.GONE
|
||||
|
||||
private lateinit var splitShadeHeaderController: SplitShadeHeaderController
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
whenever<BatteryMeterView>(view.findViewById(R.id.batteryRemainingIcon))
|
||||
.thenReturn(batteryMeterView)
|
||||
whenever<StatusIconContainer>(view.findViewById(R.id.statusIcons)).thenReturn(statusIcons)
|
||||
whenever(statusIcons.context).thenReturn(context)
|
||||
whenever(context.resources).thenReturn(resources)
|
||||
whenever(qsCarrierGroupControllerBuilder.setQSCarrierGroup(any()))
|
||||
.thenReturn(qsCarrierGroupControllerBuilder)
|
||||
whenever(qsCarrierGroupControllerBuilder.build()).thenReturn(qsCarrierGroupController)
|
||||
whenever(view.setVisibility(anyInt())).then {
|
||||
viewVisibility = it.arguments[0] as Int
|
||||
null
|
||||
}
|
||||
whenever(view.visibility).thenAnswer { _ -> viewVisibility }
|
||||
splitShadeHeaderController = SplitShadeHeaderController(view, statusBarIconController,
|
||||
qsCarrierGroupControllerBuilder, featureFlags, batteryMeterViewController)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun setVisible_onlyInSplitShade() {
|
||||
splitShadeHeaderController.splitShadeMode = true
|
||||
splitShadeHeaderController.shadeExpanded = true
|
||||
assertThat(viewVisibility).isEqualTo(View.VISIBLE)
|
||||
|
||||
splitShadeHeaderController.splitShadeMode = false
|
||||
assertThat(viewVisibility).isEqualTo(View.GONE)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun updateListeners_registersWhenVisible() {
|
||||
splitShadeHeaderController.splitShadeMode = true
|
||||
splitShadeHeaderController.shadeExpanded = true
|
||||
verify(qsCarrierGroupController).setListening(true)
|
||||
verify(statusBarIconController).addIconGroup(any())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun shadeExpandedFraction_updatesAlpha() {
|
||||
splitShadeHeaderController.splitShadeMode = true
|
||||
splitShadeHeaderController.shadeExpanded = true
|
||||
splitShadeHeaderController.shadeExpandedFraction = 0.5f
|
||||
verify(view).setAlpha(ShadeInterpolation.getContentAlpha(0.5f))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user