From caf95109233ffaecdceceb6ca540b4a1efd2fc28 Mon Sep 17 00:00:00 2001 From: Charles He Date: Fri, 18 Aug 2017 17:35:27 +0100 Subject: [PATCH 1/2] Clear "Wrong pattern" prompt automatically. When the user enters a wrong pattern/pin/password, a "Wrong pattern/pin/password" text shows up on ConfirmLockPattern or ConfirmLockPassword screen. In ConfirmLockPassword, it disappears automatically after 3 seconds, whereas it doesn't in ConfirmLockPattern. In this change, we make the prompt in ConfirmLockPattern disappear automatically as well. Bug: 64781905 Test: manual Test: make RunSettingsRoboTests Change-Id: I53a25576413671ced4197064d51fbcc397733265 --- .../password/ConfirmDeviceCredentialBaseFragment.java | 3 +++ .../android/settings/password/ConfirmLockPassword.java | 3 +-- src/com/android/settings/password/ConfirmLockPattern.java | 8 +++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/com/android/settings/password/ConfirmDeviceCredentialBaseFragment.java b/src/com/android/settings/password/ConfirmDeviceCredentialBaseFragment.java index 64f3a6fd04c..a67184a8ae3 100644 --- a/src/com/android/settings/password/ConfirmDeviceCredentialBaseFragment.java +++ b/src/com/android/settings/password/ConfirmDeviceCredentialBaseFragment.java @@ -77,6 +77,9 @@ public abstract class ConfirmDeviceCredentialBaseFragment extends OptionsMenuFra protected static final int USER_TYPE_MANAGED_PROFILE = 2; protected static final int USER_TYPE_SECONDARY = 3; + /** Time we wait before clearing a wrong input attempt (e.g. pattern) and the error message. */ + protected static final long CLEAR_WRONG_ATTEMPT_TIMEOUT_MS = 3000; + private FingerprintUiHelper mFingerprintHelper; protected boolean mReturnCredentials = false; protected Button mCancelButton; diff --git a/src/com/android/settings/password/ConfirmLockPassword.java b/src/com/android/settings/password/ConfirmLockPassword.java index dcb7b66992f..20182cbd92a 100644 --- a/src/com/android/settings/password/ConfirmLockPassword.java +++ b/src/com/android/settings/password/ConfirmLockPassword.java @@ -93,7 +93,6 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity { public static class ConfirmLockPasswordFragment extends ConfirmDeviceCredentialBaseFragment implements OnClickListener, OnEditorActionListener, CredentialCheckResultTracker.Listener { - private static final long ERROR_MESSAGE_TIMEOUT = 3000; private static final String FRAGMENT_TAG_CHECK_LOCK_RESULT = "check_lock_result"; private ImeAwareEditText mPasswordEntry; private TextViewInputDisabler mPasswordEntryInputDisabler; @@ -460,7 +459,7 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity { effectiveUserId, timeoutMs); handleAttemptLockout(deadline); } else { - showError(getErrorMessage(), ERROR_MESSAGE_TIMEOUT); + showError(getErrorMessage(), CLEAR_WRONG_ATTEMPT_TIMEOUT_MS); } if (newResult) { reportFailedAttempt(); diff --git a/src/com/android/settings/password/ConfirmLockPattern.java b/src/com/android/settings/password/ConfirmLockPattern.java index 60d5a01b3c1..1e881505027 100644 --- a/src/com/android/settings/password/ConfirmLockPattern.java +++ b/src/com/android/settings/password/ConfirmLockPattern.java @@ -79,9 +79,6 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity { public static class ConfirmLockPatternFragment extends ConfirmDeviceCredentialBaseFragment implements AppearAnimationCreator, CredentialCheckResultTracker.Listener { - // how long we wait to clear a wrong pattern - private static final int WRONG_PATTERN_CLEAR_TIMEOUT_MS = 2000; - private static final String FRAGMENT_TAG_CHECK_LOCK_RESULT = "check_lock_result"; private LockPatternView mLockPatternView; @@ -315,7 +312,8 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity { mLockPatternView.clearPattern(); break; case NeedToUnlockWrong: - mErrorTextView.setText(R.string.lockpattern_need_to_unlock_wrong); + showError(R.string.lockpattern_need_to_unlock_wrong, + CLEAR_WRONG_ATTEMPT_TIMEOUT_MS); mLockPatternView.setDisplayMode(LockPatternView.DisplayMode.Wrong); mLockPatternView.setEnabled(true); @@ -349,7 +347,7 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity { // already private void postClearPatternRunnable() { mLockPatternView.removeCallbacks(mClearPatternRunnable); - mLockPatternView.postDelayed(mClearPatternRunnable, WRONG_PATTERN_CLEAR_TIMEOUT_MS); + mLockPatternView.postDelayed(mClearPatternRunnable, CLEAR_WRONG_ATTEMPT_TIMEOUT_MS); } @Override From 4fb3e719d2eb619b10f7c771c10949cbf1d9bbad Mon Sep 17 00:00:00 2001 From: Roozbeh Pournader Date: Thu, 17 Aug 2017 16:07:52 -0700 Subject: [PATCH 2/2] Set the bidi flags on Paints in DonutView Previously, DonutView used Canvas.drawText with a Paint with default bidi directions, which is LTR. This meant that even in RTL locales, text was displayed assuming the direction of the paragraph the text was appearing in was LTR. This caused an incorrect display of Arabic percentages. Now we set the Paint bidiFlags according to the Locale's direction. Change-Id: Ic10228b8a23dc49de60246c37adfbaf7f8fd4e9e Fixes: 63767043 Test: Manual (tested in ar-EG, ar-MA, fa-IR, ur-PK, and he-IL locales) --- src/com/android/settings/widget/DonutView.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/com/android/settings/widget/DonutView.java b/src/com/android/settings/widget/DonutView.java index 629e35e2f63..330249b28a4 100644 --- a/src/com/android/settings/widget/DonutView.java +++ b/src/com/android/settings/widget/DonutView.java @@ -26,11 +26,15 @@ import android.graphics.PorterDuffColorFilter; import android.graphics.Typeface; import android.support.annotation.ColorRes; import android.text.TextPaint; +import android.text.TextUtils; import android.util.AttributeSet; import android.view.View; + import com.android.settings.R; import com.android.settings.Utils; +import java.util.Locale; + /** * DonutView represents a donut graph. It visualizes a certain percentage of fullness with a * corresponding label with the fullness on the inside (i.e. "50%" inside of the donut). @@ -101,12 +105,19 @@ public class DonutView extends View { mFilledArc.setColorFilter(mAccentColorFilter); } + final Locale locale = resources.getConfiguration().locale; + final int layoutDirection = TextUtils.getLayoutDirectionFromLocale(locale); + final int bidiFlags = (layoutDirection == LAYOUT_DIRECTION_LTR) + ? Paint.BIDI_LTR + : Paint.BIDI_RTL; + mTextPaint = new TextPaint(); mTextPaint.setColor(Utils.getColorAccent(getContext())); mTextPaint.setAntiAlias(true); mTextPaint.setTextSize( resources.getDimension(R.dimen.storage_donut_view_label_text_size)); mTextPaint.setTextAlign(Paint.Align.CENTER); + mTextPaint.setBidiFlags(bidiFlags); mBigNumberPaint = new TextPaint(); mBigNumberPaint.setColor(Utils.getColorAccent(getContext())); @@ -117,6 +128,7 @@ public class DonutView extends View { mBigNumberPaint.setTypeface(Typeface.create( context.getString(com.android.internal.R.string.config_headlineFontFamily), Typeface.NORMAL)); + mBigNumberPaint.setBidiFlags(bidiFlags); } @Override