Set Visibility on ClockSwitch Animation

This sets the visibility of the clock frames to invisible when they
are removed from view by KeyguardClockSwitch. This does not cause a
visual change with the clock animation directly, but allows code to
use visibility checks of the frames to determine which size clock
is shown. There is an impact on the AOD positioning for the small
clock which was already checking parameters this way, and always
using the large clock positioning parameters as a result. This is
now corrected and KeyguardClockPositionAlgorithm will recieve the
correct parameters depending on whether the large or small clock
is shown.

Fixes: 261755021
Test: Manually checked a few devices
Change-Id: I2bdca38cc70df03dfd952c94559ae8f36e2dc80a
This commit is contained in:
Hawkwood Glazier
2022-12-08 20:58:17 +00:00
parent 1507da6b6b
commit f07b624784
3 changed files with 16 additions and 11 deletions

View File

@@ -183,6 +183,7 @@ public class KeyguardClockSwitch extends RelativeLayout {
if (!animate) {
out.setAlpha(0f);
out.setVisibility(INVISIBLE);
in.setAlpha(1f);
in.setVisibility(VISIBLE);
mStatusArea.setTranslationY(statusAreaYTranslation);
@@ -198,7 +199,10 @@ public class KeyguardClockSwitch extends RelativeLayout {
direction * -mClockSwitchYAmount));
mClockOutAnim.addListener(new AnimatorListenerAdapter() {
public void onAnimationEnd(Animator animation) {
mClockOutAnim = null;
if (mClockOutAnim == animation) {
out.setVisibility(INVISIBLE);
mClockOutAnim = null;
}
}
});
@@ -212,7 +216,9 @@ public class KeyguardClockSwitch extends RelativeLayout {
mClockInAnim.setStartDelay(CLOCK_OUT_MILLIS / 2);
mClockInAnim.addListener(new AnimatorListenerAdapter() {
public void onAnimationEnd(Animator animation) {
mClockInAnim = null;
if (mClockInAnim == animation) {
mClockInAnim = null;
}
}
});
@@ -225,7 +231,9 @@ public class KeyguardClockSwitch extends RelativeLayout {
mStatusAreaAnim.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
mStatusAreaAnim.addListener(new AnimatorListenerAdapter() {
public void onAnimationEnd(Animator animation) {
mStatusAreaAnim = null;
if (mStatusAreaAnim == animation) {
mStatusAreaAnim = null;
}
}
});
mStatusAreaAnim.start();

View File

@@ -337,10 +337,6 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS
int clockHeight = clock.getLargeClock().getView().getHeight();
return frameHeight / 2 + clockHeight / 2 + mKeyguardLargeClockTopMargin / -2;
} else {
// This is only called if we've never shown the large clock as the frame is inflated
// with 'gone', but then the visibility is never set when it is animated away by
// KeyguardClockSwitch, instead it is removed from the view hierarchy.
// TODO(b/261755021): Cleanup Large Frame Visibility
int clockHeight = clock.getSmallClock().getView().getHeight();
return clockHeight + statusBarHeaderHeight + mKeyguardSmallClockTopMargin;
}
@@ -358,15 +354,11 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS
if (mLargeClockFrame.getVisibility() == View.VISIBLE) {
return clock.getLargeClock().getView().getHeight();
} else {
// Is not called except in certain edge cases, see comment in getClockBottom
// TODO(b/261755021): Cleanup Large Frame Visibility
return clock.getSmallClock().getView().getHeight();
}
}
boolean isClockTopAligned() {
// Returns false except certain edge cases, see comment in getClockBottom
// TODO(b/261755021): Cleanup Large Frame Visibility
return mLargeClockFrame.getVisibility() != View.VISIBLE;
}

View File

@@ -16,6 +16,7 @@
package com.android.keyguard;
import static android.view.View.INVISIBLE;
import static android.view.View.VISIBLE;
import static com.android.keyguard.KeyguardClockSwitch.LARGE;
@@ -189,6 +190,7 @@ public class KeyguardClockSwitchTest extends SysuiTestCase {
assertThat(mLargeClockFrame.getAlpha()).isEqualTo(1);
assertThat(mLargeClockFrame.getVisibility()).isEqualTo(VISIBLE);
assertThat(mSmallClockFrame.getAlpha()).isEqualTo(0);
assertThat(mSmallClockFrame.getVisibility()).isEqualTo(INVISIBLE);
}
@Test
@@ -198,6 +200,7 @@ public class KeyguardClockSwitchTest extends SysuiTestCase {
assertThat(mLargeClockFrame.getAlpha()).isEqualTo(1);
assertThat(mLargeClockFrame.getVisibility()).isEqualTo(VISIBLE);
assertThat(mSmallClockFrame.getAlpha()).isEqualTo(0);
assertThat(mSmallClockFrame.getVisibility()).isEqualTo(INVISIBLE);
}
@Test
@@ -212,6 +215,7 @@ public class KeyguardClockSwitchTest extends SysuiTestCase {
// only big clock is removed at switch
assertThat(mLargeClockFrame.getParent()).isNull();
assertThat(mLargeClockFrame.getAlpha()).isEqualTo(0);
assertThat(mLargeClockFrame.getVisibility()).isEqualTo(INVISIBLE);
}
@Test
@@ -223,6 +227,7 @@ public class KeyguardClockSwitchTest extends SysuiTestCase {
// only big clock is removed at switch
assertThat(mLargeClockFrame.getParent()).isNull();
assertThat(mLargeClockFrame.getAlpha()).isEqualTo(0);
assertThat(mLargeClockFrame.getVisibility()).isEqualTo(INVISIBLE);
}
@Test