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

Commit d6f8960b authored by Adam Cohen's avatar Adam Cohen
Browse files

Making sure the sticky widget logic works with music

-> Also, ensure that subsequent calls to showAppropriateWidget
   don't blow away your current page.

Change-Id: I7195e35f306526c371b9546ab48bc408868eff51
parent 85a08f1b
Loading
Loading
Loading
Loading
+39 −13
Original line number Diff line number Diff line
@@ -84,6 +84,9 @@ public class KeyguardHostView extends KeyguardViewBase {
    private KeyguardSecurityModel mSecurityModel;
    private KeyguardViewStateManager mViewStateManager;

    int mLocalStickyWidget = -1;
    boolean mPersitentStickyWidgetLoaded = false;

    private Rect mTempRect = new Rect();

    /*package*/ interface TransportCallback {
@@ -111,7 +114,7 @@ public class KeyguardHostView extends KeyguardViewBase {
        mAppWidgetManager = AppWidgetManager.getInstance(mContext);
        mSecurityModel = new KeyguardSecurityModel(context);

        mViewStateManager = new KeyguardViewStateManager();
        mViewStateManager = new KeyguardViewStateManager(this);
    }

    @Override
@@ -1206,6 +1209,37 @@ public class KeyguardHostView extends KeyguardViewBase {
        return v != null && v.getId() == R.id.keyguard_add_widget;
    }

    private boolean isMusicPage(int pageIndex) {
        return pageIndex >= 0 && pageIndex == getWidgetPosition(R.id.keyguard_transport_control);
    }

    private int getStickyWidget() {
        // The first time we query the persistent state. From that point, we use a locally updated
        // notion of the sticky widget page.
        if (!mPersitentStickyWidgetLoaded) {
            mLocalStickyWidget = mLockPatternUtils.getStickyAppWidgetIndex();
            mPersitentStickyWidgetLoaded = true;
        }
        return mLocalStickyWidget;
    }

    public void updateStickyWidget(int index) {
        if (index < 0 || index >= mAppWidgetContainer.getChildCount()) {
            return;
        }
        if (isAddPage(index)) {
            return;
        }
        if (isCameraPage(index)) {
            return;
        }
        if (isMusicPage(index)) {
            return;
        }

        mLocalStickyWidget = index;
    }

    private int getAppropriateWidgetPage(boolean isMusicPlaying) {
        // assumes at least one widget (besides camera + add)

@@ -1216,7 +1250,7 @@ public class KeyguardHostView extends KeyguardViewBase {
        }

        // if we have a valid sticky widget, show it
        int stickyWidgetIndex = mLockPatternUtils.getStickyAppWidgetIndex();
        int stickyWidgetIndex = getStickyWidget();
        if (stickyWidgetIndex > -1
                && stickyWidgetIndex < mAppWidgetContainer.getChildCount()
                && !isAddPage(stickyWidgetIndex)
@@ -1235,18 +1269,10 @@ public class KeyguardHostView extends KeyguardViewBase {
    }

    private void saveStickyWidgetIndex() {
        int stickyWidgetIndex = mAppWidgetContainer.getCurrentPage();
        if (isAddPage(stickyWidgetIndex)) {
            stickyWidgetIndex++;
        }
        if (isCameraPage(stickyWidgetIndex)) {
            stickyWidgetIndex--;
        }
        if (stickyWidgetIndex < 0 || stickyWidgetIndex >= mAppWidgetContainer.getChildCount()) {
            stickyWidgetIndex = -1;
        if (DEBUG) Log.d(TAG, "saveStickyWidgetIndex: " + mLocalStickyWidget);
        if (mPersitentStickyWidgetLoaded && mLocalStickyWidget >= 0) {
            mLockPatternUtils.setStickyAppWidgetIndex(mLocalStickyWidget);
        }
        if (DEBUG) Log.d(TAG, "saveStickyWidgetIndex: " + stickyWidgetIndex);
        mLockPatternUtils.setStickyAppWidgetIndex(stickyWidgetIndex);
    }

    private void enableUserSelectorIfNecessary() {
+7 −1
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ public class KeyguardViewStateManager implements SlidingChallengeLayout.OnChalle

    private KeyguardWidgetPager mKeyguardWidgetPager;
    private ChallengeLayout mChallengeLayout;
    private KeyguardHostView mKeyguardHostView;
    private int[] mTmpPoint = new int[2];
    private int[] mTmpLoc = new int[2];

@@ -47,7 +48,8 @@ public class KeyguardViewStateManager implements SlidingChallengeLayout.OnChalle

    int mChallengeTop = 0;

    public KeyguardViewStateManager() {
    public KeyguardViewStateManager(KeyguardHostView hostView) {
        mKeyguardHostView = hostView;
    }

    public void setPagedView(KeyguardWidgetPager pagedView) {
@@ -143,6 +145,10 @@ public class KeyguardViewStateManager implements SlidingChallengeLayout.OnChalle
        // We only modify the page state if it is not currently under control by the slider.
        // This prevents conflicts.

        if (mKeyguardHostView != null) {
            mKeyguardHostView.updateStickyWidget(newPageIndex);
        }

        // If the page hasn't switched, don't bother with any of this
        if (mCurrentPage == newPageIndex) return;