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

Commit 84861549 authored by Fabian Kozynski's avatar Fabian Kozynski Committed by Android (Google) Code Review
Browse files

Merge "Make the header INVISIBLE when alpha is 0" into tm-qpr-dev

parents b6fe5484 6d4e7a81
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.Toolbar;
@@ -74,8 +75,8 @@ public class QSCustomizer extends LinearLayout {
        toolbar.setNavigationIcon(
                getResources().getDrawable(value.resourceId, mContext.getTheme()));

        toolbar.getMenu().add(Menu.NONE, MENU_RESET, 0,
                mContext.getString(com.android.internal.R.string.reset));
        toolbar.getMenu().add(Menu.NONE, MENU_RESET, 0, com.android.internal.R.string.reset)
                .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
        toolbar.setTitle(R.string.qs_edit);
        mRecyclerView = findViewById(android.R.id.list);
        mTransparentView = findViewById(R.id.customizer_transparent_view);
+6 −2
Original line number Diff line number Diff line
@@ -175,9 +175,10 @@ class LargeScreenShadeHeaderController @Inject constructor(
     */
    var shadeExpandedFraction = -1f
        set(value) {
            if (visible && field != value) {
            if (field != value) {
                header.alpha = ShadeInterpolation.getContentAlpha(value)
                field = value
                updateVisibility()
            }
        }

@@ -331,6 +332,9 @@ class LargeScreenShadeHeaderController @Inject constructor(
                .setDuration(duration)
                .alpha(if (show) 0f else 1f)
                .setInterpolator(if (show) Interpolators.ALPHA_OUT else Interpolators.ALPHA_IN)
                .setUpdateListener {
                    updateVisibility()
                }
                .start()
    }

@@ -414,7 +418,7 @@ class LargeScreenShadeHeaderController @Inject constructor(
    private fun updateVisibility() {
        val visibility = if (!largeScreenActive && !combinedHeaders || qsDisabled) {
            View.GONE
        } else if (qsVisible) {
        } else if (qsVisible && header.alpha > 0f) {
            View.VISIBLE
        } else {
            View.INVISIBLE
+1 −0
Original line number Diff line number Diff line
@@ -182,6 +182,7 @@ class LargeScreenShadeHeaderControllerCombinedTest : SysuiTestCase() {
            null
        }
        whenever(view.visibility).thenAnswer { _ -> viewVisibility }
        whenever(view.alpha).thenReturn(1f)

        whenever(iconManagerFactory.create(any(), any())).thenReturn(iconManager)

+54 −0
Original line number Diff line number Diff line
package com.android.systemui.shade

import android.animation.ValueAnimator
import android.app.StatusBarManager
import android.content.Context
import android.testing.AndroidTestingRunner
@@ -30,6 +31,7 @@ import com.android.systemui.statusbar.policy.VariableDateViewController
import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.argumentCaptor
import com.android.systemui.util.mockito.capture
import com.android.systemui.util.mockito.mock
import com.google.common.truth.Truth.assertThat
import org.junit.After
import org.junit.Before
@@ -37,6 +39,7 @@ import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Answers
import org.mockito.ArgumentMatchers.anyFloat
import org.mockito.ArgumentMatchers.anyInt
import org.mockito.Mock
import org.mockito.Mockito.mock
@@ -75,6 +78,7 @@ class LargeScreenShadeHeaderControllerTest : SysuiTestCase() {

    @JvmField @Rule val mockitoRule = MockitoJUnit.rule()
    var viewVisibility = View.GONE
    var viewAlpha = 1f

    private lateinit var mLargeScreenShadeHeaderController: LargeScreenShadeHeaderController
    private lateinit var carrierIconSlots: List<String>
@@ -101,6 +105,13 @@ class LargeScreenShadeHeaderControllerTest : SysuiTestCase() {
            null
        }
        whenever(view.visibility).thenAnswer { _ -> viewVisibility }

        whenever(view.setAlpha(anyFloat())).then {
            viewAlpha = it.arguments[0] as Float
            null
        }
        whenever(view.alpha).thenAnswer { _ -> viewAlpha }

        whenever(variableDateViewControllerFactory.create(any()))
            .thenReturn(variableDateViewController)
        whenever(iconManagerFactory.create(any(), any())).thenReturn(iconManager)
@@ -154,6 +165,16 @@ class LargeScreenShadeHeaderControllerTest : SysuiTestCase() {
        verify(view).setAlpha(ShadeInterpolation.getContentAlpha(0.5f))
    }

    @Test
    fun alphaChangesUpdateVisibility() {
        makeShadeVisible()
        mLargeScreenShadeHeaderController.shadeExpandedFraction = 0f
        assertThat(viewVisibility).isEqualTo(View.INVISIBLE)

        mLargeScreenShadeHeaderController.shadeExpandedFraction = 1f
        assertThat(viewVisibility).isEqualTo(View.VISIBLE)
    }

    @Test
    fun singleCarrier_enablesCarrierIconsInStatusIcons() {
        whenever(qsCarrierGroupController.isSingleCarrier).thenReturn(true)
@@ -238,6 +259,39 @@ class LargeScreenShadeHeaderControllerTest : SysuiTestCase() {
        verify(animator).start()
    }

    @Test
    fun testShadeExpanded_true_alpha_zero_invisible() {
        view.alpha = 0f
        mLargeScreenShadeHeaderController.largeScreenActive = true
        mLargeScreenShadeHeaderController.qsVisible = true

        assertThat(viewVisibility).isEqualTo(View.INVISIBLE)
    }

    @Test
    fun animatorCallsUpdateVisibilityOnUpdate() {
        val animator = mock(ViewPropertyAnimator::class.java, Answers.RETURNS_SELF)
        whenever(view.animate()).thenReturn(animator)

        mLargeScreenShadeHeaderController.startCustomizingAnimation(show = false, 0L)

        val updateCaptor = argumentCaptor<ValueAnimator.AnimatorUpdateListener>()
        verify(animator).setUpdateListener(capture(updateCaptor))

        mLargeScreenShadeHeaderController.largeScreenActive = true
        mLargeScreenShadeHeaderController.qsVisible = true

        view.alpha = 1f
        updateCaptor.value.onAnimationUpdate(mock())

        assertThat(viewVisibility).isEqualTo(View.VISIBLE)

        view.alpha = 0f
        updateCaptor.value.onAnimationUpdate(mock())

        assertThat(viewVisibility).isEqualTo(View.INVISIBLE)
    }

    @Test
    fun demoMode_attachDemoMode() {
        val cb = argumentCaptor<DemoMode>()