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

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

Merge "Do not relayout when expanding shade" into sc-v2-dev

parents 1679d92e b43685b7
Loading
Loading
Loading
Loading
+24 −6
Original line number Diff line number Diff line
@@ -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)
+87 −0
Original line number Diff line number Diff line
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