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

Commit 8f75cf99 authored by Dave Mankoff's avatar Dave Mankoff
Browse files

4/N Setup Controller fo KeyguardSecurityContainer.

Move the guts of KeyguardSecurityContainer into
KeyguardSecurityContainerController. This removes a lot of
Dependency#get calls, and is another step towards simplifying our
view inflation process.

CustomViews that previously implemented KeyguardSecurityView now
all extend KeyguardInputView, allowing them to be simultaneously
treated as one while also being recognized as a View (the interface
required a lot of casting back and forth to a View).

LockscreenUtil is made a Singleton in this CL.

Bug: 166448040
Test: atest SystemUITests && manual
Change-Id: I6fa05012c55f5e003ab551d2f8360891a62fa2a7
parent e1e67c57
Loading
Loading
Loading
Loading
+28 −2
Original line number Diff line number Diff line
@@ -33,9 +33,13 @@ import android.view.SurfaceView;
import android.view.ViewGroup;

import com.android.internal.annotations.VisibleForTesting;
import com.android.keyguard.dagger.KeyguardBouncerScope;
import com.android.systemui.dagger.qualifiers.Main;

import java.util.NoSuchElementException;

import javax.inject.Inject;

/**
 * Encapsulates all logic for secondary lockscreen state management.
 */
@@ -142,9 +146,9 @@ public class AdminSecondaryLockScreenController {
        }
    };

    public AdminSecondaryLockScreenController(Context context, ViewGroup parent,
    private AdminSecondaryLockScreenController(Context context, KeyguardSecurityContainer parent,
            KeyguardUpdateMonitor updateMonitor, KeyguardSecurityCallback callback,
            Handler handler) {
            @Main Handler handler) {
        mContext = context;
        mHandler = handler;
        mParent = parent;
@@ -234,4 +238,26 @@ public class AdminSecondaryLockScreenController {
            getHolder().removeCallback(mSurfaceHolderCallback);
        }
    }

    @KeyguardBouncerScope
    public static class Factory {
        private final Context mContext;
        private final KeyguardSecurityContainer mParent;
        private final KeyguardUpdateMonitor mUpdateMonitor;
        private final Handler mHandler;

        @Inject
        public Factory(Context context, KeyguardSecurityContainer parent,
                KeyguardUpdateMonitor updateMonitor, @Main Handler handler) {
            mContext = context;
            mParent = parent;
            mUpdateMonitor = updateMonitor;
            mHandler = handler;
        }

        public AdminSecondaryLockScreenController create(KeyguardSecurityCallback callback) {
            return new AdminSecondaryLockScreenController(mContext, mParent, mUpdateMonitor,
                    callback, mHandler);
        }
    }
}
+2 −3
Original line number Diff line number Diff line
@@ -28,7 +28,6 @@ import android.util.AttributeSet;
import android.view.HapticFeedbackConstants;
import android.view.KeyEvent;
import android.view.View;
import android.widget.LinearLayout;

import com.android.internal.util.LatencyTracker;
import com.android.internal.widget.LockPatternChecker;
@@ -40,8 +39,8 @@ import com.android.systemui.R;
/**
 * Base class for PIN and password unlock screens.
 */
public abstract class KeyguardAbsKeyInputView extends LinearLayout
        implements KeyguardSecurityView, EmergencyButton.EmergencyButtonCallback {
public abstract class KeyguardAbsKeyInputView extends KeyguardInputView
        implements EmergencyButton.EmergencyButtonCallback {
    protected KeyguardSecurityCallback mCallback;
    protected LockPatternUtils mLockPatternUtils;
    protected AsyncTask<?, ?, ?> mPendingLockCheck;
+1 −1
Original line number Diff line number Diff line
@@ -336,7 +336,7 @@ public class KeyguardHostViewController extends ViewController<KeyguardHostView>
    }

    public SecurityMode getCurrentSecurityMode() {
        return mKeyguardSecurityContainerController.getCurrentSecurityMode();
        return mKeyguardSecurityContainerController.getCurrentSecuritySelection();
    }

    public int getTop() {
+42 −0
Original line number Diff line number Diff line
@@ -16,43 +16,27 @@

package com.android.keyguard;

import android.view.View;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.LinearLayout;

import com.android.systemui.util.ViewController;
import androidx.annotation.Nullable;

import javax.inject.Inject;


/** Controller for a {@link KeyguardSecurityView}. */
public class KeyguardSecurityViewController extends ViewController<View> {

    private final KeyguardSecurityView mView;

    private KeyguardSecurityViewController(KeyguardSecurityView view) {
        super((View) view);
        // KeyguardSecurityView isn't actually a View, so we need to track it ourselves.
        mView = view;
    }

    @Override
    protected void onViewAttached() {

    }

    @Override
    protected void onViewDetached() {
/**
 * A Base class for all Keyguard password/pattern/pin related inputs.
 */
public abstract class KeyguardInputView extends LinearLayout implements KeyguardSecurityView {

    public KeyguardInputView(Context context) {
        super(context);
    }

    /** Factory for a {@link KeyguardSecurityViewController}. */
    public static class Factory {
        @Inject
        public Factory() {
    public KeyguardInputView(Context context,
            @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

        /** Create a new {@link KeyguardSecurityViewController}. */
        public KeyguardSecurityViewController create(KeyguardSecurityView view) {
            return new KeyguardSecurityViewController(view);
        }
    public KeyguardInputView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
}
+160 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.keyguard;

import android.content.res.ColorStateList;
import android.view.MotionEvent;

import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.KeyguardSecurityModel.SecurityMode;
import com.android.systemui.util.ViewController;

import javax.inject.Inject;


/** Controller for a {@link KeyguardSecurityView}. */
public class KeyguardInputViewController extends ViewController<KeyguardInputView>
        implements KeyguardSecurityView {

    private final SecurityMode mSecurityMode;
    private final LockPatternUtils mLockPatternUtils;

    private KeyguardInputViewController(KeyguardInputView view, SecurityMode securityMode,
            LockPatternUtils lockPatternUtils,
            KeyguardSecurityCallback keyguardSecurityCallback) {
        super(view);
        mSecurityMode = securityMode;
        mLockPatternUtils = lockPatternUtils;
        mView.setKeyguardCallback(keyguardSecurityCallback);
    }

    @Override
    public void init() {
        super.init();
        mView.reset();
    }

    @Override
    protected void onViewAttached() {
    }

    @Override
    protected void onViewDetached() {
    }

    SecurityMode getSecurityMode() {
        return mSecurityMode;
    }


    @Override
    public void setKeyguardCallback(KeyguardSecurityCallback callback) {
        mView.setKeyguardCallback(callback);
    }

    @Override
    public void setLockPatternUtils(LockPatternUtils utils) {
        mView.setLockPatternUtils(utils);
    }

    @Override
    public void reset() {
        mView.reset();
    }

    @Override
    public void onPause() {
        mView.onPause();
    }

    @Override
    public void onResume(int reason) {
        mView.onResume(reason);
    }

    @Override
    public boolean needsInput() {
        return mView.needsInput();
    }

    @Override
    public KeyguardSecurityCallback getCallback() {
        return mView.getCallback();
    }

    @Override
    public void showPromptReason(int reason) {
        mView.showPromptReason(reason);
    }

    @Override
    public void showMessage(CharSequence message, ColorStateList colorState) {
        mView.showMessage(message, colorState);
    }

    @Override
    public void showUsabilityHint() {
        mView.showUsabilityHint();
    }

    @Override
    public void startAppearAnimation() {
        mView.startAppearAnimation();
    }

    @Override
    public boolean startDisappearAnimation(Runnable finishRunnable) {
        return mView.startDisappearAnimation(finishRunnable);
    }

    @Override
    public CharSequence getTitle() {
        return mView.getTitle();
    }

    @Override
    public boolean disallowInterceptTouch(MotionEvent event) {
        return mView.disallowInterceptTouch(event);
    }

    @Override
    public void onStartingToHide() {
        mView.onStartingToHide();
    }

    public void showSelf() {
        KeyguardSecurityViewFlipper flipper = (KeyguardSecurityViewFlipper) mView.getParent();
        flipper.setDisplayedChild(flipper.indexOfChild(mView));
    }

    /** Factory for a {@link KeyguardInputViewController}. */
    public static class Factory {
        private final LockPatternUtils mLockPatternUtils;

        @Inject
        public Factory(LockPatternUtils lockPatternUtils) {
            mLockPatternUtils = lockPatternUtils;
        }

        /** Create a new {@link KeyguardInputViewController}. */
        public KeyguardInputViewController create(KeyguardInputView keyguardInputView,
                SecurityMode securityMode, KeyguardSecurityCallback keyguardSecurityCallback) {
            return new KeyguardInputViewController(keyguardInputView, securityMode,
                    mLockPatternUtils, keyguardSecurityCallback);
        }
    }
}
Loading