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

Commit 8c47c2d3 authored by John Spurlock's avatar John Spurlock Committed by Android Git Automerger
Browse files

am b4119441: am 1ef6398e: am 3dcb3628: am 34c4fe52: Fix remaining jank in...

am b4119441: am 1ef6398e: am 3dcb3628: am 34c4fe52: Fix remaining jank in secure add-widget transition.

* commit 'b4119441':
  Fix remaining jank in secure add-widget transition.
parents 069d5ee9 b4119441
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3899,7 +3899,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    }

    public void dismissKeyguardLw() {
        if (!mKeyguardMediator.isSecure()) {
        if (mKeyguardMediator.isDismissable()) {
            if (mKeyguardMediator.isShowing()) {
                mHandler.post(new Runnable() {
                    public void run() {
+0 −10
Original line number Diff line number Diff line
@@ -188,16 +188,6 @@ public class CameraWidgetFrame extends KeyguardWidgetFrame implements View.OnCli
        return iv;
    }

    @Override
    public void setPivotX(float pivotX) {
        // don't pivot me
    }

    @Override
    public void setPivotY(float pivotY) {
        // don't pivot me
    }

    public void render() {
        final Throwable[] thrown = new Throwable[1];
        final Bitmap[] offscreen = new Bitmap[1];
+15 −6
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import android.provider.MediaStore;
import android.util.Log;
import android.view.WindowManager;

import com.android.internal.policy.impl.keyguard.KeyguardSecurityCallback.OnDismissAction;
import com.android.internal.widget.LockPatternUtils;

import java.util.List;
@@ -160,10 +161,8 @@ public abstract class KeyguardActivityLauncher {
                | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        boolean isSecure = lockPatternUtils.isSecure();
        if (!isSecure || showsWhileLocked) {
            if (!isSecure) try {
                ActivityManagerNative.getDefault().dismissKeyguardOnNextActivity();
            } catch (RemoteException e) {
                Log.w(TAG, "can't dismiss keyguard on launch");
            if (!isSecure) {
                dismissKeyguardOnNextActivity();
            }
            try {
                if (DEBUG) Log.d(TAG, String.format("Starting activity for intent %s at %s",
@@ -176,16 +175,26 @@ public abstract class KeyguardActivityLauncher {
            // Create a runnable to start the activity and ask the user to enter their
            // credentials.
            KeyguardSecurityCallback callback = getCallback();
            callback.setOnDismissRunnable(new Runnable() {
            callback.setOnDismissAction(new OnDismissAction() {
                @Override
                public void run() {
                public boolean onDismiss() {
                    dismissKeyguardOnNextActivity();
                    startActivityForCurrentUser(intent, animation, worker, onStarted);
                    return true;
                }
            });
            callback.dismiss(false);
        }
    }

    private void dismissKeyguardOnNextActivity() {
        try {
            ActivityManagerNative.getDefault().dismissKeyguardOnNextActivity();
        } catch (RemoteException e) {
            Log.w(TAG, "can't dismiss keyguard on launch");
        }
    }

    private void startActivityForCurrentUser(final Intent intent, final Bundle options,
            Handler worker, final Runnable onStarted) {
        final UserHandle user = new UserHandle(UserHandle.USER_CURRENT);
+28 −21
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ import android.view.animation.AnimationUtils;
import android.widget.RemoteViews.OnClickHandler;

import com.android.internal.R;
import com.android.internal.policy.impl.keyguard.KeyguardSecurityCallback.OnDismissAction;
import com.android.internal.policy.impl.keyguard.KeyguardSecurityModel.SecurityMode;
import com.android.internal.widget.LockPatternUtils;

@@ -79,7 +80,7 @@ public class KeyguardHostView extends KeyguardViewBase {
    private boolean mBootCompleted = false;
    private boolean mCheckAppWidgetConsistencyOnBootCompleted = false;

    protected Runnable mLaunchRunnable;
    protected OnDismissAction mDismissAction;

    protected int mFailedAttempts;
    private LockPatternUtils mLockPatternUtils;
@@ -364,8 +365,8 @@ public class KeyguardHostView extends KeyguardViewBase {
        }

        @Override
        public void setOnDismissRunnable(Runnable runnable) {
            KeyguardHostView.this.setOnDismissRunnable(runnable);
        public void setOnDismissAction(OnDismissAction action) {
            KeyguardHostView.this.setOnDismissAction(action);
        }

    };
@@ -569,13 +570,18 @@ public class KeyguardHostView extends KeyguardViewBase {

            // If there's a pending runnable because the user interacted with a widget
            // and we're leaving keyguard, then run it.
            if (mLaunchRunnable != null) {
                mLaunchRunnable.run();
                mLaunchRunnable = null;
            boolean deferKeyguardDone = false;
            if (mDismissAction != null) {
                deferKeyguardDone = mDismissAction.onDismiss();
                mDismissAction = null;
            }
            if (mViewMediatorCallback != null) {
                if (deferKeyguardDone) {
                    mViewMediatorCallback.keyguardDonePending();
                } else {
                    mViewMediatorCallback.keyguardDone(true);
                }
            }
        } else {
            mViewStateManager.showBouncer(true);
        }
@@ -587,8 +593,8 @@ public class KeyguardHostView extends KeyguardViewBase {
                final android.app.PendingIntent pendingIntent,
                final Intent fillInIntent) {
            if (pendingIntent.isActivity()) {
                setOnDismissRunnable(new Runnable() {
                    public void run() {
                setOnDismissAction(new OnDismissAction() {
                    public boolean onDismiss() {
                        try {
                              // TODO: Unregister this handler if PendingIntent.FLAG_ONE_SHOT?
                              Context context = view.getContext();
@@ -605,6 +611,7 @@ public class KeyguardHostView extends KeyguardViewBase {
                            android.util.Log.e(TAG, "Cannot send pending intent due to " +
                                    "unknown exception: ", e);
                        }
                        return false;
                    }
                });

@@ -633,7 +640,7 @@ public class KeyguardHostView extends KeyguardViewBase {
        }

        @Override
        public void setOnDismissRunnable(Runnable runnable) {
        public void setOnDismissAction(OnDismissAction action) {
        }

        @Override
@@ -668,11 +675,11 @@ public class KeyguardHostView extends KeyguardViewBase {
    }

    /**
     *  Sets a runnable to run when keyguard is dismissed
     * @param runnable
     * Sets an action to perform when keyguard is dismissed.
     * @param action
     */
    protected void setOnDismissRunnable(Runnable runnable) {
        mLaunchRunnable = runnable;
    protected void setOnDismissAction(OnDismissAction action) {
        mDismissAction = action;
    }

    private KeyguardSecurityView getSecurityView(SecurityMode securityMode) {
@@ -757,7 +764,7 @@ public class KeyguardHostView extends KeyguardViewBase {

        if (securityMode == SecurityMode.None) {
            // Discard current runnable if we're switching back to the selector view
            setOnDismissRunnable(null);
            setOnDismissAction(null);
        }
        mCurrentSecuritySelection = securityMode;
    }
+9 −3
Original line number Diff line number Diff line
@@ -17,6 +17,12 @@ package com.android.internal.policy.impl.keyguard;

public interface KeyguardSecurityCallback {

    /*package*/ interface OnDismissAction {

        /* returns true if the dismiss should be deferred */
        boolean onDismiss();
    }

    /**
     * Dismiss the given security screen.
     * @param securityVerified true if the user correctly entered credentials for the given screen.
@@ -58,9 +64,9 @@ public interface KeyguardSecurityCallback {
    void showBackupSecurity();

    /**
     * Sets a runnable to launch after the user successfully enters their credentials.
     * @param runnable
     * Sets an action to perform after the user successfully enters their credentials.
     * @param action
     */
    void setOnDismissRunnable(Runnable runnable);
    void setOnDismissAction(OnDismissAction action);

}
Loading