Merge "Make the header INVISIBLE when alpha is 0" into tm-qpr-dev am: 8486154984
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20873142 Change-Id: I9b1a4fb4305316699effe9a723670226867ee834 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -24,6 +24,7 @@ import android.util.AttributeSet;
|
|||||||
import android.util.TypedValue;
|
import android.util.TypedValue;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.Toolbar;
|
import android.widget.Toolbar;
|
||||||
@@ -74,8 +75,8 @@ public class QSCustomizer extends LinearLayout {
|
|||||||
toolbar.setNavigationIcon(
|
toolbar.setNavigationIcon(
|
||||||
getResources().getDrawable(value.resourceId, mContext.getTheme()));
|
getResources().getDrawable(value.resourceId, mContext.getTheme()));
|
||||||
|
|
||||||
toolbar.getMenu().add(Menu.NONE, MENU_RESET, 0,
|
toolbar.getMenu().add(Menu.NONE, MENU_RESET, 0, com.android.internal.R.string.reset)
|
||||||
mContext.getString(com.android.internal.R.string.reset));
|
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
|
||||||
toolbar.setTitle(R.string.qs_edit);
|
toolbar.setTitle(R.string.qs_edit);
|
||||||
mRecyclerView = findViewById(android.R.id.list);
|
mRecyclerView = findViewById(android.R.id.list);
|
||||||
mTransparentView = findViewById(R.id.customizer_transparent_view);
|
mTransparentView = findViewById(R.id.customizer_transparent_view);
|
||||||
|
|||||||
@@ -175,9 +175,10 @@ class LargeScreenShadeHeaderController @Inject constructor(
|
|||||||
*/
|
*/
|
||||||
var shadeExpandedFraction = -1f
|
var shadeExpandedFraction = -1f
|
||||||
set(value) {
|
set(value) {
|
||||||
if (visible && field != value) {
|
if (field != value) {
|
||||||
header.alpha = ShadeInterpolation.getContentAlpha(value)
|
header.alpha = ShadeInterpolation.getContentAlpha(value)
|
||||||
field = value
|
field = value
|
||||||
|
updateVisibility()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -331,6 +332,9 @@ class LargeScreenShadeHeaderController @Inject constructor(
|
|||||||
.setDuration(duration)
|
.setDuration(duration)
|
||||||
.alpha(if (show) 0f else 1f)
|
.alpha(if (show) 0f else 1f)
|
||||||
.setInterpolator(if (show) Interpolators.ALPHA_OUT else Interpolators.ALPHA_IN)
|
.setInterpolator(if (show) Interpolators.ALPHA_OUT else Interpolators.ALPHA_IN)
|
||||||
|
.setUpdateListener {
|
||||||
|
updateVisibility()
|
||||||
|
}
|
||||||
.start()
|
.start()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -414,7 +418,7 @@ class LargeScreenShadeHeaderController @Inject constructor(
|
|||||||
private fun updateVisibility() {
|
private fun updateVisibility() {
|
||||||
val visibility = if (!largeScreenActive && !combinedHeaders || qsDisabled) {
|
val visibility = if (!largeScreenActive && !combinedHeaders || qsDisabled) {
|
||||||
View.GONE
|
View.GONE
|
||||||
} else if (qsVisible) {
|
} else if (qsVisible && header.alpha > 0f) {
|
||||||
View.VISIBLE
|
View.VISIBLE
|
||||||
} else {
|
} else {
|
||||||
View.INVISIBLE
|
View.INVISIBLE
|
||||||
|
|||||||
@@ -182,6 +182,7 @@ class LargeScreenShadeHeaderControllerCombinedTest : SysuiTestCase() {
|
|||||||
null
|
null
|
||||||
}
|
}
|
||||||
whenever(view.visibility).thenAnswer { _ -> viewVisibility }
|
whenever(view.visibility).thenAnswer { _ -> viewVisibility }
|
||||||
|
whenever(view.alpha).thenReturn(1f)
|
||||||
|
|
||||||
whenever(iconManagerFactory.create(any(), any())).thenReturn(iconManager)
|
whenever(iconManagerFactory.create(any(), any())).thenReturn(iconManager)
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.android.systemui.shade
|
package com.android.systemui.shade
|
||||||
|
|
||||||
|
import android.animation.ValueAnimator
|
||||||
import android.app.StatusBarManager
|
import android.app.StatusBarManager
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.testing.AndroidTestingRunner
|
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.any
|
||||||
import com.android.systemui.util.mockito.argumentCaptor
|
import com.android.systemui.util.mockito.argumentCaptor
|
||||||
import com.android.systemui.util.mockito.capture
|
import com.android.systemui.util.mockito.capture
|
||||||
|
import com.android.systemui.util.mockito.mock
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import org.junit.After
|
import org.junit.After
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
@@ -37,6 +39,7 @@ import org.junit.Rule
|
|||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
import org.mockito.Answers
|
import org.mockito.Answers
|
||||||
|
import org.mockito.ArgumentMatchers.anyFloat
|
||||||
import org.mockito.ArgumentMatchers.anyInt
|
import org.mockito.ArgumentMatchers.anyInt
|
||||||
import org.mockito.Mock
|
import org.mockito.Mock
|
||||||
import org.mockito.Mockito.mock
|
import org.mockito.Mockito.mock
|
||||||
@@ -75,6 +78,7 @@ class LargeScreenShadeHeaderControllerTest : SysuiTestCase() {
|
|||||||
|
|
||||||
@JvmField @Rule val mockitoRule = MockitoJUnit.rule()
|
@JvmField @Rule val mockitoRule = MockitoJUnit.rule()
|
||||||
var viewVisibility = View.GONE
|
var viewVisibility = View.GONE
|
||||||
|
var viewAlpha = 1f
|
||||||
|
|
||||||
private lateinit var mLargeScreenShadeHeaderController: LargeScreenShadeHeaderController
|
private lateinit var mLargeScreenShadeHeaderController: LargeScreenShadeHeaderController
|
||||||
private lateinit var carrierIconSlots: List<String>
|
private lateinit var carrierIconSlots: List<String>
|
||||||
@@ -101,6 +105,13 @@ class LargeScreenShadeHeaderControllerTest : SysuiTestCase() {
|
|||||||
null
|
null
|
||||||
}
|
}
|
||||||
whenever(view.visibility).thenAnswer { _ -> viewVisibility }
|
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()))
|
whenever(variableDateViewControllerFactory.create(any()))
|
||||||
.thenReturn(variableDateViewController)
|
.thenReturn(variableDateViewController)
|
||||||
whenever(iconManagerFactory.create(any(), any())).thenReturn(iconManager)
|
whenever(iconManagerFactory.create(any(), any())).thenReturn(iconManager)
|
||||||
@@ -154,6 +165,16 @@ class LargeScreenShadeHeaderControllerTest : SysuiTestCase() {
|
|||||||
verify(view).setAlpha(ShadeInterpolation.getContentAlpha(0.5f))
|
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
|
@Test
|
||||||
fun singleCarrier_enablesCarrierIconsInStatusIcons() {
|
fun singleCarrier_enablesCarrierIconsInStatusIcons() {
|
||||||
whenever(qsCarrierGroupController.isSingleCarrier).thenReturn(true)
|
whenever(qsCarrierGroupController.isSingleCarrier).thenReturn(true)
|
||||||
@@ -238,6 +259,39 @@ class LargeScreenShadeHeaderControllerTest : SysuiTestCase() {
|
|||||||
verify(animator).start()
|
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
|
@Test
|
||||||
fun demoMode_attachDemoMode() {
|
fun demoMode_attachDemoMode() {
|
||||||
val cb = argumentCaptor<DemoMode>()
|
val cb = argumentCaptor<DemoMode>()
|
||||||
|
|||||||
Reference in New Issue
Block a user