Fix weather clock clipped when swiping in Lockscreen
The cause is that layer will be clipped to the bound when alpha < 1.0 Test: atest KeyguardClockSwitchControllerTest, KeyguardStatusViewTest Bug: 279487893 Change-Id: I38929ee87c1025a2b863b2092e5cab41c6f9419f
This commit is contained in:
@@ -178,6 +178,20 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set alpha directly to mView will clip clock, so we set alpha to clock face instead
|
||||
*/
|
||||
public void setAlpha(float alpha) {
|
||||
ClockController clock = getClock();
|
||||
if (clock != null) {
|
||||
clock.getLargeClock().getView().setAlpha(alpha);
|
||||
clock.getSmallClock().getView().setAlpha(alpha);
|
||||
}
|
||||
if (mStatusArea != null) {
|
||||
mStatusArea.setAlpha(alpha);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Attach the controller to the view it relates to.
|
||||
*/
|
||||
|
||||
@@ -135,4 +135,29 @@ public class KeyguardStatusView extends GridLayout {
|
||||
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
||||
Trace.endSection();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Clock content will be clipped when goes beyond bounds,
|
||||
* so we setAlpha for all views except clock
|
||||
*/
|
||||
public void setAlpha(float alpha, boolean excludeClock) {
|
||||
if (!excludeClock) {
|
||||
setAlpha(alpha);
|
||||
return;
|
||||
}
|
||||
for (int i = 0; i < getChildCount(); i++) {
|
||||
View child = getChildAt(i);
|
||||
if (child == mStatusViewContainer) {
|
||||
for (int j = 0; j < mStatusViewContainer.getChildCount(); j++) {
|
||||
View innerChild = mStatusViewContainer.getChildAt(j);
|
||||
if (innerChild != mClockView) {
|
||||
innerChild.setAlpha(alpha);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
child.setAlpha(alpha);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -180,7 +180,8 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV
|
||||
*/
|
||||
public void setAlpha(float alpha) {
|
||||
if (!mKeyguardVisibilityHelper.isVisibilityAnimating()) {
|
||||
mView.setAlpha(alpha);
|
||||
mView.setAlpha(alpha, true);
|
||||
mKeyguardClockSwitchController.setAlpha(alpha);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -134,6 +134,7 @@ public class KeyguardClockSwitchControllerTest extends SysuiTestCase {
|
||||
|
||||
private KeyguardClockSwitchController mController;
|
||||
private View mSliceView;
|
||||
private LinearLayout mStatusArea;
|
||||
private FakeExecutor mExecutor;
|
||||
|
||||
@Before
|
||||
@@ -195,8 +196,8 @@ public class KeyguardClockSwitchControllerTest extends SysuiTestCase {
|
||||
|
||||
mSliceView = new View(getContext());
|
||||
when(mView.findViewById(R.id.keyguard_slice_view)).thenReturn(mSliceView);
|
||||
when(mView.findViewById(R.id.keyguard_status_area)).thenReturn(
|
||||
new LinearLayout(getContext()));
|
||||
mStatusArea = new LinearLayout(getContext());
|
||||
when(mView.findViewById(R.id.keyguard_status_area)).thenReturn(mStatusArea);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -401,6 +402,15 @@ public class KeyguardClockSwitchControllerTest extends SysuiTestCase {
|
||||
assertNull(mController.getClock());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetAlpha_setClockAlphaForCLockFace() {
|
||||
mController.onViewAttached();
|
||||
mController.setAlpha(0.5f);
|
||||
verify(mLargeClockView).setAlpha(0.5f);
|
||||
verify(mSmallClockView).setAlpha(0.5f);
|
||||
assertEquals(0.5f, mStatusArea.getAlpha(), 0.0f);
|
||||
}
|
||||
|
||||
private void verifyAttachment(VerificationMode times) {
|
||||
verify(mClockRegistry, times).registerClockChangeListener(
|
||||
any(ClockRegistry.ClockChangeListener.class));
|
||||
|
||||
@@ -24,6 +24,8 @@ class KeyguardStatusViewTest : SysuiTestCase() {
|
||||
get() = keyguardStatusView.findViewById(R.id.status_view_media_container)
|
||||
private val statusViewContainer: ViewGroup
|
||||
get() = keyguardStatusView.findViewById(R.id.status_view_container)
|
||||
private val clockView: ViewGroup
|
||||
get() = keyguardStatusView.findViewById(R.id.keyguard_clock_container)
|
||||
private val childrenExcludingMedia
|
||||
get() = statusViewContainer.children.filter { it != mediaView }
|
||||
|
||||
@@ -56,4 +58,12 @@ class KeyguardStatusViewTest : SysuiTestCase() {
|
||||
assertThat(it.translationY).isEqualTo(translationY)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun setAlphaExcludeClock() {
|
||||
keyguardStatusView.setAlpha(0.5f, /* excludeClock= */true)
|
||||
assertThat(statusViewContainer.alpha).isNotEqualTo(0.5f)
|
||||
assertThat(mediaView.alpha).isEqualTo(0.5f)
|
||||
assertThat(clockView.alpha).isNotEqualTo(0.5f)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user