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

Commit 731d0c41 authored by Michal Brzezinski's avatar Michal Brzezinski
Browse files

Fixing smartspace position on lockscreen with big clock visible on large screens

Smartspace position when big clock appears should be updated by translating smartspace view. However, calculation sometimes was done before views were laid out and then using methods like getTop() would always return 0 and it would result in incorrect translation value. The solution is to check if views were laid out and if not, schedule repositioning only after that's done.

Fixes: 201548045
Test: manual
Change-Id: Id2494c1d6e4835765550d2abe58cc678dae641c1
parent c4c480ab
Loading
Loading
Loading
Loading
+24 −2
Original line number Original line Diff line number Diff line
@@ -11,6 +11,7 @@ import android.util.AttributeSet;
import android.util.TypedValue;
import android.util.TypedValue;
import android.view.View;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup;
import android.view.ViewTreeObserver.OnPreDrawListener;
import android.widget.FrameLayout;
import android.widget.FrameLayout;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout;


@@ -93,6 +94,7 @@ public class KeyguardClockSwitch extends RelativeLayout {
    private int[] mColorPalette;
    private int[] mColorPalette;


    private int mClockSwitchYAmount;
    private int mClockSwitchYAmount;
    @VisibleForTesting boolean mChildrenAreLaidOut = false;


    public KeyguardClockSwitch(Context context, AttributeSet attrs) {
    public KeyguardClockSwitch(Context context, AttributeSet attrs) {
        super(context, attrs);
        super(context, attrs);
@@ -284,11 +286,31 @@ public class KeyguardClockSwitch extends RelativeLayout {
        if (mDisplayedClockSize != null && clockSize == mDisplayedClockSize) {
        if (mDisplayedClockSize != null && clockSize == mDisplayedClockSize) {
            return false;
            return false;
        }
        }

        // let's make sure clock is changed only after all views were laid out so we can
        // translate them properly
        if (mChildrenAreLaidOut) {
            animateClockChange(clockSize == LARGE);
            animateClockChange(clockSize == LARGE);
            mDisplayedClockSize = clockSize;
            mDisplayedClockSize = clockSize;
        } else {
            getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener() {
                @Override
                public boolean onPreDraw() {
                    switchToClock(clockSize);
                    getViewTreeObserver().removeOnPreDrawListener(this);
                    return true;
                }
            });
        }
        return true;
        return true;
    }
    }


    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);
        mChildrenAreLaidOut = true;
    }

    public Paint getPaint() {
    public Paint getPaint() {
        return mClockView.getPaint();
        return mClockView.getPaint();
    }
    }
+1 −0
Original line number Original line Diff line number Diff line
@@ -97,6 +97,7 @@ public class KeyguardClockSwitchTest extends SysuiTestCase {
        mLargeClockFrame = mKeyguardClockSwitch.findViewById(R.id.lockscreen_clock_view_large);
        mLargeClockFrame = mKeyguardClockSwitch.findViewById(R.id.lockscreen_clock_view_large);
        mLargeClockView = mKeyguardClockSwitch.findViewById(R.id.animatable_clock_view_large);
        mLargeClockView = mKeyguardClockSwitch.findViewById(R.id.animatable_clock_view_large);
        mBigClock = new TextClock(getContext());
        mBigClock = new TextClock(getContext());
        mKeyguardClockSwitch.mChildrenAreLaidOut = true;
        MockitoAnnotations.initMocks(this);
        MockitoAnnotations.initMocks(this);
    }
    }