diff options
| author | 2021-10-28 02:14:40 +0000 | |
|---|---|---|
| committer | 2021-10-28 02:14:40 +0000 | |
| commit | 8484e652ebf9dddc8ef9ad425e8464dbb62c65fe (patch) | |
| tree | 1e784b75131f577fecda3e2ff4eb66ecf1295d03 | |
| parent | 25cd194f419e477c526dd064f6b4b1b22661a5a3 (diff) | |
| parent | 85fb35ed55ecc7da496f148d50d10dbc028f6297 (diff) | |
Merge "Do not relayout when expanding shade" into sc-v2-dev am: c8209cacc4 am: 85fb35ed55
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16118490
Change-Id: Ic88a8ce44dae5e5beeb75f6aab852a8c9b08c3ba
2 files changed, 111 insertions, 6 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SplitShadeHeaderController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SplitShadeHeaderController.kt index a7ecd0619d26..873289130139 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SplitShadeHeaderController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SplitShadeHeaderController.kt @@ -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) diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SplitShadeHeaderControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SplitShadeHeaderControllerTest.kt new file mode 100644 index 000000000000..a9e8164e8b87 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SplitShadeHeaderControllerTest.kt @@ -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)) +    } +}
\ No newline at end of file  |