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

Commit 558eb39f authored by Selim Cinek's avatar Selim Cinek Committed by Android Git Automerger
Browse files

am 90c4a299: am e2389908: am 24232396: Merge "Fixed accessibility for the pin...

am 90c4a299: am e2389908: am 24232396: Merge "Fixed accessibility for the pin input view on keyguard." into lmp-mr1-dev

* commit '90c4a299':
  Fixed accessibility for the pin input view on keyguard.
parents c3c22399 90c4a299
Loading
Loading
Loading
Loading
+47 −20
Original line number Diff line number Diff line
@@ -17,7 +17,11 @@
package com.android.keyguard;

import android.content.Context;
import android.database.ContentObserver;
import android.graphics.Rect;
import android.os.Handler;
import android.os.UserHandle;
import android.provider.Settings;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.View;
@@ -28,19 +32,39 @@ import android.view.View;
public abstract class KeyguardPinBasedInputView extends KeyguardAbsKeyInputView
        implements View.OnKeyListener {

    private final android.database.ContentObserver mSpeakPasswordObserver
            = new ContentObserver(new Handler()) {
        @Override
        public void onChange(boolean selfChange) {
            super.onChange(selfChange);
            // Ensure that it's not called too early
            if (mButton0 != null) {
                mButton0.updateContentDescription();
                mButton1.updateContentDescription();
                mButton2.updateContentDescription();
                mButton3.updateContentDescription();
                mButton4.updateContentDescription();
                mButton5.updateContentDescription();
                mButton6.updateContentDescription();
                mButton7.updateContentDescription();
                mButton8.updateContentDescription();
                mButton9.updateContentDescription();
            }
        }
    };
    protected PasswordTextView mPasswordEntry;
    private View mOkButton;
    private View mDeleteButton;
    private View mButton0;
    private View mButton1;
    private View mButton2;
    private View mButton3;
    private View mButton4;
    private View mButton5;
    private View mButton6;
    private View mButton7;
    private View mButton8;
    private View mButton9;
    private NumPadKey mButton0;
    private NumPadKey mButton1;
    private NumPadKey mButton2;
    private NumPadKey mButton3;
    private NumPadKey mButton4;
    private NumPadKey mButton5;
    private NumPadKey mButton6;
    private NumPadKey mButton7;
    private NumPadKey mButton8;
    private NumPadKey mButton9;

    public KeyguardPinBasedInputView(Context context) {
        this(context, null);
@@ -48,6 +72,9 @@ public abstract class KeyguardPinBasedInputView extends KeyguardAbsKeyInputView

    public KeyguardPinBasedInputView(Context context, AttributeSet attrs) {
        super(context, attrs);
        context.getContentResolver().registerContentObserver(
                Settings.Secure.getUriFor(Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD), true,
                mSpeakPasswordObserver, UserHandle.USER_ALL);
    }

    @Override
@@ -188,16 +215,16 @@ public abstract class KeyguardPinBasedInputView extends KeyguardAbsKeyInputView
            }
        });

        mButton0 = findViewById(R.id.key0);
        mButton1 = findViewById(R.id.key1);
        mButton2 = findViewById(R.id.key2);
        mButton3 = findViewById(R.id.key3);
        mButton4 = findViewById(R.id.key4);
        mButton5 = findViewById(R.id.key5);
        mButton6 = findViewById(R.id.key6);
        mButton7 = findViewById(R.id.key7);
        mButton8 = findViewById(R.id.key8);
        mButton9 = findViewById(R.id.key9);
        mButton0 = (NumPadKey) findViewById(R.id.key0);
        mButton1 = (NumPadKey) findViewById(R.id.key1);
        mButton2 = (NumPadKey) findViewById(R.id.key2);
        mButton3 = (NumPadKey) findViewById(R.id.key3);
        mButton4 = (NumPadKey) findViewById(R.id.key4);
        mButton5 = (NumPadKey) findViewById(R.id.key5);
        mButton6 = (NumPadKey) findViewById(R.id.key6);
        mButton7 = (NumPadKey) findViewById(R.id.key7);
        mButton8 = (NumPadKey) findViewById(R.id.key8);
        mButton9 = (NumPadKey) findViewById(R.id.key9);

        mPasswordEntry.requestFocus();
        super.onFinishInflate();
+22 −1
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@ import android.graphics.drawable.Drawable;
import android.os.Debug;
import android.os.PowerManager;
import android.os.SystemClock;
import android.os.UserHandle;
import android.provider.Settings;
import android.util.AttributeSet;
import android.view.HapticFeedbackConstants;
import android.view.KeyEvent;
@@ -118,7 +120,17 @@ public class NumPadKey extends ViewGroup {
        }

        setBackground(mContext.getDrawable(R.drawable.ripple_drawable));
        setContentDescription(mDigitText.getText().toString() + mKlondikeText.getText().toString());
        updateContentDescription();
    }

    public void updateContentDescription() {
        if (shouldSpeakPasswordsForAccessibility()) {
            setContentDescription(
                    mDigitText.getText().toString() + mKlondikeText.getText().toString());
        } else {
            setContentDescription(getContext().getString(
                    com.android.internal.R.string.keyboard_password_character_no_headset));
        }
    }

    @Override
@@ -152,6 +164,15 @@ public class NumPadKey extends ViewGroup {
        mKlondikeText.layout(left, top, left + mKlondikeText.getMeasuredWidth(), bottom);
    }

    /**
     * @return true if the user has explicitly allowed accessibility services
     * to speak passwords.
     */
    private boolean shouldSpeakPasswordsForAccessibility() {
        return (Settings.Secure.getIntForUser(mContext.getContentResolver(),
                Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD, 0, UserHandle.USER_CURRENT) == 1);
    }

    @Override
    public boolean hasOverlappingRendering() {
        return false;