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

Commit f07b6247 authored by Hawkwood Glazier's avatar Hawkwood Glazier
Browse files

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
parent 1507da6b
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -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,8 +199,11 @@ public class KeyguardClockSwitch extends RelativeLayout {
                        direction * -mClockSwitchYAmount));
        mClockOutAnim.addListener(new AnimatorListenerAdapter() {
            public void onAnimationEnd(Animator animation) {
                if (mClockOutAnim == animation) {
                    out.setVisibility(INVISIBLE);
                    mClockOutAnim = null;
                }
            }
        });

        in.setAlpha(0);
@@ -212,8 +216,10 @@ public class KeyguardClockSwitch extends RelativeLayout {
        mClockInAnim.setStartDelay(CLOCK_OUT_MILLIS / 2);
        mClockInAnim.addListener(new AnimatorListenerAdapter() {
            public void onAnimationEnd(Animator animation) {
                if (mClockInAnim == animation) {
                    mClockInAnim = null;
                }
            }
        });

        mClockInAnim.start();
@@ -225,8 +231,10 @@ public class KeyguardClockSwitch extends RelativeLayout {
        mStatusAreaAnim.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
        mStatusAreaAnim.addListener(new AnimatorListenerAdapter() {
            public void onAnimationEnd(Animator animation) {
                if (mStatusAreaAnim == animation) {
                    mStatusAreaAnim = null;
                }
            }
        });
        mStatusAreaAnim.start();
    }
+0 −8
Original line number Diff line number Diff line
@@ -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;
    }

+5 −0
Original line number Diff line number Diff line
@@ -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