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

Commit 6a8fb02a authored by Jerry Chang's avatar Jerry Chang
Browse files

Support showing alignment hint based on aligniment state of dock

Bug: 141984730
Test: atest SystemUITests:KeyguardIndicationControllerTest
Change-Id: Ic0911683725a0e54406df06b948169c4dde94764
parent 31e0679d
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -986,6 +986,12 @@
    <!-- Message shown when face authentication fails and the pin pad is visible. [CHAR LIMIT=60] -->
    <string name="keyguard_retry">Swipe up to try again</string>

    <!-- Indication when device is slow charging due to misalignment on the dock. [CHAR LIMIT=60] -->
    <string name="dock_alignment_slow_charging" product="default">Realign phone for faster charging</string>

    <!-- Indication when device is not charging due to bad placement on the dock. [CHAR LIMIT=60] -->
    <string name="dock_alignment_not_charging" product="default">Realign phone to charge wirelessly</string>

    <!-- Text on keyguard screen and in Quick Settings footer indicating that the device is enterprise-managed by a Device Owner [CHAR LIMIT=60] -->
    <string name="do_disclosure_generic">This device is managed by your organization</string>

+48 −7
Original line number Diff line number Diff line
@@ -17,12 +17,12 @@
package com.android.systemui.dock;

/**
 * Allows an app to handle dock events
 * Allows an app to handle dock events.
 */
public interface DockManager {

    /**
     * Uninitialized / undocking dock states
     * Uninitialized / undocking dock states.
     */
    int STATE_NONE = 0;
    /**
@@ -30,24 +30,53 @@ public interface DockManager {
     */
    int STATE_DOCKED = 1;
    /**
     * The state for docking without showing UI
     * The state for docking without showing UI.
     */
    int STATE_DOCKED_HIDE = 2;

    /**
     * Add a dock event listener into manager
     * Indicates there's no alignment issue.
     */
    int ALIGN_STATE_GOOD = 0;

    /**
     * Indicates it's slightly not aligned with dock.
     */
    int ALIGN_STATE_POOR = 1;

    /**
     * Indicates it's not aligned with dock.
     */
    int ALIGN_STATE_TERRIBLE = 2;

    /**
     * Adds a dock event listener into manager.
     *
     * @param callback A {@link DockEventListener} which want to add
     */
    void addListener(DockEventListener callback);

    /**
     * Remove the added listener from dock manager
     * Removes the added listener from dock manager
     *
     * @param callback A {@link DockEventListener} which want to remove
     */
    void removeListener(DockEventListener callback);

    /**
     * Adds a alignment listener into manager.
     *
     * @param listener A {@link AlignmentStateListener} which want to add
     */
    void addAlignmentStateListener(AlignmentStateListener listener);

    /**
     * Removes the added alignment listener from dock manager.
     *
     * @param listener A {@link AlignmentStateListener} which want to remove
     */
    void removeAlignmentStateListener(AlignmentStateListener listener);

    /**
    * Returns true if the device is in docking state.
    */
@@ -58,11 +87,23 @@ public interface DockManager {
     */
    boolean isHidden();

    /** Callback for receiving dock events */
    /**
     * Listens to dock events.
     */
    interface DockEventListener {
        /**
         * Override to handle dock events
         * Override to handle dock events.
         */
        void onEvent(int event);
    }

    /**
     * Listens to dock alignment state changed.
     */
    interface AlignmentStateListener {
        /**
         * Override to handle alignment state changes.
         */
        void onAlignmentStateChanged(int alignState);
    }
}
+8 −0
Original line number Diff line number Diff line
@@ -34,6 +34,14 @@ public class DockManagerImpl implements DockManager {
    public void removeListener(DockEventListener callback) {
    }

    @Override
    public void addAlignmentStateListener(AlignmentStateListener listener) {
    }

    @Override
    public void removeAlignmentStateListener(AlignmentStateListener listener) {
    }

    @Override
    public boolean isDocked() {
        return false;
+31 −3
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ import com.android.settingslib.Utils;
import com.android.systemui.Dependency;
import com.android.systemui.Interpolators;
import com.android.systemui.R;
import com.android.systemui.dock.DockManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener;
import com.android.systemui.statusbar.phone.KeyguardIndicationTextView;
@@ -95,6 +96,7 @@ public class KeyguardIndicationController implements StateListener,
    private final IBatteryStats mBatteryInfo;
    private final SettableWakeLock mWakeLock;
    private final LockPatternUtils mLockPatternUtils;
    private final DockManager mDockManager;

    private final int mSlowThreshold;
    private final int mFastThreshold;
@@ -103,6 +105,7 @@ public class KeyguardIndicationController implements StateListener,
    private LockscreenGestureLogger mLockscreenGestureLogger = new LockscreenGestureLogger();

    private String mRestingIndication;
    private String mAlignmentIndication;
    private CharSequence mTransientIndication;
    private ColorStateList mTransientTextColorState;
    private ColorStateList mInitialTextColorState;
@@ -140,7 +143,8 @@ public class KeyguardIndicationController implements StateListener,
                Dependency.get(AccessibilityController.class),
                Dependency.get(KeyguardStateController.class),
                Dependency.get(StatusBarStateController.class),
                Dependency.get(KeyguardUpdateMonitor.class));
                Dependency.get(KeyguardUpdateMonitor.class),
                Dependency.get(DockManager.class));
    }

    /**
@@ -152,7 +156,8 @@ public class KeyguardIndicationController implements StateListener,
            AccessibilityController accessibilityController,
            KeyguardStateController keyguardStateController,
            StatusBarStateController statusBarStateController,
            KeyguardUpdateMonitor keyguardUpdateMonitor) {
            KeyguardUpdateMonitor keyguardUpdateMonitor,
            DockManager dockManager) {
        mContext = context;
        mLockIcon = lockIcon;
        mShadeController = shadeController;
@@ -160,6 +165,8 @@ public class KeyguardIndicationController implements StateListener,
        mKeyguardStateController = keyguardStateController;
        mStatusBarStateController = statusBarStateController;
        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
        mDockManager = dockManager;
        mDockManager.addAlignmentStateListener(this::handleAlignStateChanged);
        // lock icon is not used on all form factors.
        if (mLockIcon != null) {
            mLockIcon.setOnLongClickListener(this::handleLockLongClick);
@@ -211,6 +218,21 @@ public class KeyguardIndicationController implements StateListener,
        mShadeController.animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE, true /* force */);
    }

    private void handleAlignStateChanged(int alignState) {
        String alignmentIndication = "";
        if (alignState == DockManager.ALIGN_STATE_POOR) {
            alignmentIndication =
                    mContext.getResources().getString(R.string.dock_alignment_slow_charging);
        } else if (alignState == DockManager.ALIGN_STATE_TERRIBLE) {
            alignmentIndication =
                    mContext.getResources().getString(R.string.dock_alignment_not_charging);
        }
        if (!alignmentIndication.equals(mAlignmentIndication)) {
            mAlignmentIndication = alignmentIndication;
            updateIndication(false);
        }
    }

    /**
     * Gets the {@link KeyguardUpdateMonitorCallback} instance associated with this
     * {@link KeyguardIndicationController}.
@@ -345,6 +367,9 @@ public class KeyguardIndicationController implements StateListener,
                mTextView.setTextColor(Color.WHITE);
                if (!TextUtils.isEmpty(mTransientIndication)) {
                    mTextView.switchIndication(mTransientIndication);
                } else if (!TextUtils.isEmpty(mAlignmentIndication)) {
                    mTextView.switchIndication(mAlignmentIndication);
                    mTextView.setTextColor(Utils.getColorError(mContext));
                } else if (mPowerPluggedIn) {
                    String indication = computePowerIndication();
                    if (animate) {
@@ -373,6 +398,9 @@ public class KeyguardIndicationController implements StateListener,
                    && mKeyguardUpdateMonitor.getUserHasTrust(userId)) {
                mTextView.switchIndication(trustGrantedIndication);
                mTextView.setTextColor(mInitialTextColorState);
            } else if (!TextUtils.isEmpty(mAlignmentIndication)) {
                mTextView.switchIndication(mAlignmentIndication);
                mTextView.setTextColor(Utils.getColorError(mContext));
            } else if (mPowerPluggedIn) {
                String indication = computePowerIndication();
                if (DEBUG_CHARGING_SPEED) {
+11 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ package com.android.systemui.dock;
 */
public class DockManagerFake implements DockManager {
    DockEventListener mCallback;
    AlignmentStateListener mAlignmentListener;

    @Override
    public void addListener(DockEventListener callback) {
@@ -32,6 +33,16 @@ public class DockManagerFake implements DockManager {
        this.mCallback = null;
    }

    @Override
    public void addAlignmentStateListener(AlignmentStateListener listener) {
        mAlignmentListener = listener;
    }

    @Override
    public void removeAlignmentStateListener(AlignmentStateListener listener) {
        mAlignmentListener = listener;
    }

    @Override
    public boolean isDocked() {
        return false;
Loading