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

Commit fbc46dc3 authored by Jim Miller's avatar Jim Miller
Browse files

Fix 6028595: Fix reboot loop in AccountUnlock due to null callback

This fixes a bug where the device would get into a reboot loop due to having
a null callback.  The problem was that a recent change caused the callback
to be used indirectly by the constructor before being set.

The solution is to pass the callback to the KeyguardViewBase constructor
which ensures it's ready by the time we call getCallback().

Change-Id: I2598fc5338be99977980e4dea41a096fb2a7ef7e
parent 62f24df5
Loading
Loading
Loading
Loading
+2 −6
Original line number Diff line number Diff line
@@ -72,8 +72,9 @@ public abstract class KeyguardViewBase extends FrameLayout {
        }
    };

    public KeyguardViewBase(Context context) {
    public KeyguardViewBase(Context context, KeyguardViewCallback callback) {
        super(context);
        mCallback = callback;
        resetBackground();
    }

@@ -81,11 +82,6 @@ public abstract class KeyguardViewBase extends FrameLayout {
        setBackgroundDrawable(mBackgroundDrawable);
    }

    // used to inject callback
    void setCallback(KeyguardViewCallback callback) {
        mCallback = callback;
    }

    public KeyguardViewCallback getCallback() {
        return mCallback;
    }
+2 −2
Original line number Diff line number Diff line
@@ -158,9 +158,9 @@ public class KeyguardViewManager implements KeyguardWindowController {

        if (mKeyguardView == null) {
            if (DEBUG) Log.d(TAG, "keyguard view is null, creating it...");
            mKeyguardView = mKeyguardViewProperties.createKeyguardView(mContext, mUpdateMonitor, this);
            mKeyguardView = mKeyguardViewProperties.createKeyguardView(mContext, mCallback,
                    mUpdateMonitor, this);
            mKeyguardView.setId(R.id.lock_screen);
            mKeyguardView.setCallback(mCallback);

            final ViewGroup.LayoutParams lp = new FrameLayout.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
+3 −2
Original line number Diff line number Diff line
@@ -28,12 +28,13 @@ public interface KeyguardViewProperties {
    /**
     * Create a keyguard view.
     * @param context the context to use when creating the view.
     * @param callback keyguard callback object for pokewakelock(), etc.
     * @param updateMonitor configuration may be based on this.
     * @param controller for talking back with the containing window.
     * @return the view.
     */
    KeyguardViewBase createKeyguardView(Context context,
            KeyguardUpdateMonitor updateMonitor,
            KeyguardViewCallback mCallback, KeyguardUpdateMonitor updateMonitor,
            KeyguardWindowController controller);

    /**
+4 −5
Original line number Diff line number Diff line
@@ -291,17 +291,16 @@ public class LockPatternKeyguardView extends KeyguardViewBase implements Handler

    /**
     * @param context Used to inflate, and create views.
     * @param callback Keyguard callback object for pokewakelock(), etc.
     * @param updateMonitor Knows the state of the world, and passed along to each
     *   screen so they can use the knowledge, and also register for callbacks
     *   on dynamic information.
     * @param lockPatternUtils Used to look up state of lock pattern.
     */
    public LockPatternKeyguardView(
            Context context,
            KeyguardUpdateMonitor updateMonitor,
            LockPatternUtils lockPatternUtils,
            KeyguardWindowController controller) {
        super(context);
            Context context, KeyguardViewCallback callback, KeyguardUpdateMonitor updateMonitor,
            LockPatternUtils lockPatternUtils, KeyguardWindowController controller) {
        super(context, callback);

        mHandler = new Handler(this);
        mConfiguration = context.getResources().getConfiguration();
+2 −1
Original line number Diff line number Diff line
@@ -43,9 +43,10 @@ public class LockPatternKeyguardViewProperties implements KeyguardViewProperties
    }

    public KeyguardViewBase createKeyguardView(Context context,
            KeyguardViewCallback callback,
            KeyguardUpdateMonitor updateMonitor,
            KeyguardWindowController controller) {
        return new LockPatternKeyguardView(context, updateMonitor,
        return new LockPatternKeyguardView(context, callback, updateMonitor,
                mLockPatternUtils, controller);
    }

Loading