From c15819748a78963f0dbfbb06300419daf3d2f5f6 Mon Sep 17 00:00:00 2001 From: Jorim Jaggi Date: Thu, 7 Aug 2014 22:15:48 +0200 Subject: [PATCH] New lock pattern assets and animations Also removes the arrows. Bug: 16196240 Bug: 13735707 Change-Id: I5a6606d916192fff594c7e6211e80b73ccd30456 --- .../internal/widget/LockPatternView.java | 367 ++++++++---------- .../btn_code_lock_default_mtrl_alpha.png | Bin 948 -> 0 bytes .../btn_code_lock_touched_mtrl_alpha.png | Bin 952 -> 0 bytes ...code_lock_drag_direction_up_mtrl_alpha.png | Bin 424 -> 0 bytes ...ode_lock_point_area_default_mtrl_alpha.png | Bin 728 -> 0 bytes ...icator_code_lock_point_area_mtrl_alpha.png | Bin 4095 -> 0 bytes .../btn_code_lock_default_mtrl_alpha.png | Bin 745 -> 0 bytes .../btn_code_lock_touched_mtrl_alpha.png | Bin 768 -> 0 bytes ...code_lock_drag_direction_up_mtrl_alpha.png | Bin 366 -> 0 bytes ...ode_lock_point_area_default_mtrl_alpha.png | Bin 591 -> 0 bytes ...icator_code_lock_point_area_mtrl_alpha.png | Bin 2352 -> 0 bytes .../btn_code_lock_default_mtrl_alpha.png | Bin 1285 -> 0 bytes .../btn_code_lock_touched_mtrl_alpha.png | Bin 1189 -> 0 bytes ...code_lock_drag_direction_up_mtrl_alpha.png | Bin 403 -> 0 bytes ...ode_lock_point_area_default_mtrl_alpha.png | Bin 953 -> 0 bytes ...icator_code_lock_point_area_mtrl_alpha.png | Bin 5601 -> 0 bytes .../btn_code_lock_default_mtrl_alpha.png | Bin 2258 -> 0 bytes .../btn_code_lock_touched_mtrl_alpha.png | Bin 1979 -> 0 bytes ...code_lock_drag_direction_up_mtrl_alpha.png | Bin 435 -> 0 bytes ...ode_lock_point_area_default_mtrl_alpha.png | Bin 1957 -> 0 bytes ...icator_code_lock_point_area_mtrl_alpha.png | Bin 7165 -> 0 bytes ...code_lock_drag_direction_up_mtrl_alpha.png | Bin 1105 -> 0 bytes core/res/res/values/dimens.xml | 4 + core/res/res/values/symbols.xml | 8 +- 24 files changed, 171 insertions(+), 208 deletions(-) delete mode 100644 core/res/res/drawable-hdpi/btn_code_lock_default_mtrl_alpha.png delete mode 100644 core/res/res/drawable-hdpi/btn_code_lock_touched_mtrl_alpha.png delete mode 100644 core/res/res/drawable-hdpi/indicator_code_lock_drag_direction_up_mtrl_alpha.png delete mode 100644 core/res/res/drawable-hdpi/indicator_code_lock_point_area_default_mtrl_alpha.png delete mode 100644 core/res/res/drawable-hdpi/indicator_code_lock_point_area_mtrl_alpha.png delete mode 100644 core/res/res/drawable-mdpi/btn_code_lock_default_mtrl_alpha.png delete mode 100644 core/res/res/drawable-mdpi/btn_code_lock_touched_mtrl_alpha.png delete mode 100644 core/res/res/drawable-mdpi/indicator_code_lock_drag_direction_up_mtrl_alpha.png delete mode 100644 core/res/res/drawable-mdpi/indicator_code_lock_point_area_default_mtrl_alpha.png delete mode 100644 core/res/res/drawable-mdpi/indicator_code_lock_point_area_mtrl_alpha.png delete mode 100644 core/res/res/drawable-xhdpi/btn_code_lock_default_mtrl_alpha.png delete mode 100644 core/res/res/drawable-xhdpi/btn_code_lock_touched_mtrl_alpha.png delete mode 100644 core/res/res/drawable-xhdpi/indicator_code_lock_drag_direction_up_mtrl_alpha.png delete mode 100644 core/res/res/drawable-xhdpi/indicator_code_lock_point_area_default_mtrl_alpha.png delete mode 100644 core/res/res/drawable-xhdpi/indicator_code_lock_point_area_mtrl_alpha.png delete mode 100755 core/res/res/drawable-xxhdpi/btn_code_lock_default_mtrl_alpha.png delete mode 100755 core/res/res/drawable-xxhdpi/btn_code_lock_touched_mtrl_alpha.png delete mode 100644 core/res/res/drawable-xxhdpi/indicator_code_lock_drag_direction_up_mtrl_alpha.png delete mode 100644 core/res/res/drawable-xxhdpi/indicator_code_lock_point_area_default_mtrl_alpha.png delete mode 100644 core/res/res/drawable-xxhdpi/indicator_code_lock_point_area_mtrl_alpha.png delete mode 100644 core/res/res/drawable-xxxhdpi/indicator_code_lock_drag_direction_up_mtrl_alpha.png diff --git a/core/java/com/android/internal/widget/LockPatternView.java b/core/java/com/android/internal/widget/LockPatternView.java index 60e649b5f07d7..9fa6882f7b800 100644 --- a/core/java/com/android/internal/widget/LockPatternView.java +++ b/core/java/com/android/internal/widget/LockPatternView.java @@ -17,17 +17,14 @@ package com.android.internal.widget; +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ValueAnimator; import android.content.Context; import android.content.res.TypedArray; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.graphics.Canvas; -import android.graphics.ColorFilter; -import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Path; -import android.graphics.PorterDuff; -import android.graphics.PorterDuffColorFilter; import android.graphics.Rect; import android.os.Debug; import android.os.Parcel; @@ -38,6 +35,8 @@ import android.view.HapticFeedbackConstants; import android.view.MotionEvent; import android.view.View; import android.view.accessibility.AccessibilityManager; +import android.view.animation.AnimationUtils; +import android.view.animation.Interpolator; import com.android.internal.R; @@ -59,6 +58,11 @@ public class LockPatternView extends View { private static final boolean PROFILE_DRAWING = false; private final CellState[][] mCellStates; + + private final int mDotSize; + private final int mDotSizeActivated; + private final int mPathWidth; + private boolean mDrawingProfilingStarted = false; private Paint mPaint = new Paint(); @@ -104,33 +108,22 @@ public class LockPatternView extends View { private boolean mEnableHapticFeedback = true; private boolean mPatternInProgress = false; - private float mDiameterFactor = 0.10f; // TODO: move to attrs - private final int mStrokeAlpha = 128; private float mHitFactor = 0.6f; private float mSquareWidth; private float mSquareHeight; - private final Bitmap mBitmapBtnDefault; - private final Bitmap mBitmapBtnTouched; - private final Bitmap mBitmapCircleDefault; - private final Bitmap mBitmapCircleAlpha; - private final Bitmap mBitmapArrowAlphaUp; - private final Path mCurrentPath = new Path(); private final Rect mInvalidate = new Rect(); private final Rect mTmpInvalidateRect = new Rect(); - private int mBitmapWidth; - private int mBitmapHeight; - private int mAspect; - private final Matrix mArrowMatrix = new Matrix(); - private final Matrix mCircleMatrix = new Matrix(); - private final PorterDuffColorFilter mRegularColorFilter; - private final PorterDuffColorFilter mErrorColorFilter; - private final PorterDuffColorFilter mSuccessColorFilter; + private int mRegularColor; + private int mErrorColor; + private int mSuccessColor; + private Interpolator mFastOutSlowInInterpolator; + private Interpolator mLinearOutSlowInInterpolator; /** * Represents a cell in the 3 X 3 matrix of the unlock pattern view. @@ -194,6 +187,10 @@ public class LockPatternView extends View { public float scale = 1.0f; public float translateY = 0.0f; public float alpha = 1.0f; + public float size; + public float lineEndX = Float.MIN_VALUE; + public float lineEndY = Float.MIN_VALUE; + public ValueAnimator lineAnimator; } /** @@ -272,63 +269,48 @@ public class LockPatternView extends View { mPathPaint.setAntiAlias(true); mPathPaint.setDither(true); - int regularColor = getResources().getColor(R.color.lock_pattern_view_regular_color); - int errorColor = getResources().getColor(R.color.lock_pattern_view_error_color); - int successColor = getResources().getColor(R.color.lock_pattern_view_success_color); - regularColor = a.getColor(R.styleable.LockPatternView_regularColor, regularColor); - errorColor = a.getColor(R.styleable.LockPatternView_errorColor, errorColor); - successColor = a.getColor(R.styleable.LockPatternView_successColor, successColor); - mRegularColorFilter = new PorterDuffColorFilter(regularColor, PorterDuff.Mode.SRC_ATOP); - mErrorColorFilter = new PorterDuffColorFilter(errorColor, PorterDuff.Mode.SRC_ATOP); - mSuccessColorFilter = new PorterDuffColorFilter(successColor, PorterDuff.Mode.SRC_ATOP); + mRegularColor = getResources().getColor(R.color.lock_pattern_view_regular_color); + mErrorColor = getResources().getColor(R.color.lock_pattern_view_error_color); + mSuccessColor = getResources().getColor(R.color.lock_pattern_view_success_color); + mRegularColor = a.getColor(R.styleable.LockPatternView_regularColor, mRegularColor); + mErrorColor = a.getColor(R.styleable.LockPatternView_errorColor, mErrorColor); + mSuccessColor = a.getColor(R.styleable.LockPatternView_successColor, mSuccessColor); - int pathColor = a.getColor(R.styleable.LockPatternView_pathColor, regularColor); + int pathColor = a.getColor(R.styleable.LockPatternView_pathColor, mRegularColor); mPathPaint.setColor(pathColor); - mPathPaint.setAlpha(mStrokeAlpha); mPathPaint.setStyle(Paint.Style.STROKE); mPathPaint.setStrokeJoin(Paint.Join.ROUND); mPathPaint.setStrokeCap(Paint.Cap.ROUND); - // lot's of bitmaps! - // TODO: those bitmaps are hardcoded to the Material Theme which should not be the case! - mBitmapBtnDefault = getBitmapFor(R.drawable.btn_code_lock_default_mtrl_alpha); - mBitmapBtnTouched = getBitmapFor(R.drawable.btn_code_lock_touched_mtrl_alpha); - mBitmapCircleDefault = getBitmapFor( - R.drawable.indicator_code_lock_point_area_default_mtrl_alpha); - mBitmapCircleAlpha = getBitmapFor(R.drawable.indicator_code_lock_point_area_mtrl_alpha); - mBitmapArrowAlphaUp = getBitmapFor( - R.drawable.indicator_code_lock_drag_direction_up_mtrl_alpha); + mPathWidth = getResources().getDimensionPixelSize(R.dimen.lock_pattern_dot_line_width); + mPathPaint.setStrokeWidth(mPathWidth); - // bitmaps have the size of the largest bitmap in this group - final Bitmap bitmaps[] = { mBitmapBtnDefault, mBitmapBtnTouched, mBitmapCircleDefault, - mBitmapCircleAlpha}; - - for (Bitmap bitmap : bitmaps) { - mBitmapWidth = Math.max(mBitmapWidth, bitmap.getWidth()); - mBitmapHeight = Math.max(mBitmapHeight, bitmap.getHeight()); - } + mDotSize = getResources().getDimensionPixelSize(R.dimen.lock_pattern_dot_size); + mDotSizeActivated = getResources().getDimensionPixelSize( + R.dimen.lock_pattern_dot_size_activated); mPaint.setAntiAlias(true); mPaint.setDither(true); - mPaint.setFilterBitmap(true); mCellStates = new CellState[3][3]; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { mCellStates[i][j] = new CellState(); + mCellStates[i][j].size = mDotSize; } } + + mFastOutSlowInInterpolator = + AnimationUtils.loadInterpolator(context, android.R.interpolator.fast_out_slow_in); + mLinearOutSlowInInterpolator = + AnimationUtils.loadInterpolator(context, android.R.interpolator.linear_out_slow_in); } public CellState[][] getCellStates() { return mCellStates; } - private Bitmap getBitmapFor(int resId) { - return BitmapFactory.decodeResource(getContext().getResources(), resId); - } - /** * @return Whether the view is in stealth mode. */ @@ -509,18 +491,6 @@ public class LockPatternView extends View { return result; } - @Override - protected int getSuggestedMinimumWidth() { - // View should be large enough to contain 3 side-by-side target bitmaps - return 3 * mBitmapWidth; - } - - @Override - protected int getSuggestedMinimumHeight() { - // View should be large enough to contain 3 side-by-side target bitmaps - return 3 * mBitmapWidth; - } - @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { final int minimumWidth = getSuggestedMinimumWidth(); @@ -594,9 +564,73 @@ public class LockPatternView extends View { private void addCellToPattern(Cell newCell) { mPatternDrawLookup[newCell.getRow()][newCell.getColumn()] = true; mPattern.add(newCell); + if (!mInStealthMode) { + startCellActivatedAnimation(newCell); + } notifyCellAdded(); } + private void startCellActivatedAnimation(Cell cell) { + final CellState cellState = mCellStates[cell.row][cell.column]; + startSizeAnimation(mDotSize, mDotSizeActivated, 96, mLinearOutSlowInInterpolator, + cellState, new Runnable() { + @Override + public void run() { + startSizeAnimation(mDotSizeActivated, mDotSize, 192, mFastOutSlowInInterpolator, + cellState, null); + } + }); + startLineEndAnimation(cellState, mInProgressX, mInProgressY, + getCenterXForColumn(cell.column), getCenterYForRow(cell.row)); + } + + private void startLineEndAnimation(final CellState state, + final float startX, final float startY, final float targetX, final float targetY) { + ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1); + valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + float t = (float) animation.getAnimatedValue(); + state.lineEndX = (1 - t) * startX + t * targetX; + state.lineEndY = (1 - t) * startY + t * targetY; + invalidate(); + } + }); + valueAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + state.lineAnimator = null; + } + }); + valueAnimator.setInterpolator(mFastOutSlowInInterpolator); + valueAnimator.setDuration(100); + valueAnimator.start(); + state.lineAnimator = valueAnimator; + } + + private void startSizeAnimation(float start, float end, long duration, Interpolator interpolator, + final CellState state, final Runnable endRunnable) { + ValueAnimator valueAnimator = ValueAnimator.ofFloat(start, end); + valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + state.size = (float) animation.getAnimatedValue(); + invalidate(); + } + }); + if (endRunnable != null) { + valueAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + endRunnable.run(); + } + }); + } + valueAnimator.setInterpolator(interpolator); + valueAnimator.setDuration(duration); + valueAnimator.start(); + } + // helper method to find which cell a point maps to private Cell checkForNewHit(float x, float y) { @@ -713,7 +747,7 @@ public class LockPatternView extends View { private void handleActionMove(MotionEvent event) { // Handle all recent motion events so we don't skip any cells even when the device // is busy... - final float radius = (mSquareWidth * mDiameterFactor * 0.5f); + final float radius = mPathWidth; final int historySize = event.getHistorySize(); mTmpInvalidateRect.setEmpty(); boolean invalidateNow = false; @@ -782,6 +816,7 @@ public class LockPatternView extends View { // report pattern detected if (!mPattern.isEmpty()) { mPatternInProgress = false; + cancelLineAnimations(); notifyPatternDetected(); invalidate(); } @@ -793,6 +828,18 @@ public class LockPatternView extends View { } } + private void cancelLineAnimations() { + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + CellState state = mCellStates[i][j]; + if (state.lineAnimator != null) { + state.lineAnimator.cancel(); + state.lineEndX = Float.MIN_VALUE; + state.lineEndY = Float.MIN_VALUE; + } + } + } + } private void handleActionDown(MotionEvent event) { resetPattern(); final float x = event.getX(); @@ -882,62 +929,33 @@ public class LockPatternView extends View { invalidate(); } - final float squareWidth = mSquareWidth; - final float squareHeight = mSquareHeight; - - float radius = (squareWidth * mDiameterFactor * 0.5f); - mPathPaint.setStrokeWidth(radius); - final Path currentPath = mCurrentPath; currentPath.rewind(); // draw the circles - final int paddingTop = mPaddingTop; - final int paddingLeft = mPaddingLeft; - for (int i = 0; i < 3; i++) { - float topY = paddingTop + i * squareHeight; - //float centerY = mPaddingTop + i * mSquareHeight + (mSquareHeight / 2); + float centerY = getCenterYForRow(i); for (int j = 0; j < 3; j++) { - float leftX = paddingLeft + j * squareWidth; - float scale = mCellStates[i][j].scale; - mPaint.setAlpha((int) (mCellStates[i][j].alpha * 255)); - float translationY = mCellStates[i][j].translateY; - drawCircle(canvas, (int) leftX, (int) topY + translationY, scale, drawLookup[i][j]); + CellState cellState = mCellStates[i][j]; + float centerX = getCenterXForColumn(j); + float size = cellState.size * cellState.scale; + float translationY = cellState.translateY; + drawCircle(canvas, (int) centerX, (int) centerY + translationY, + size, drawLookup[i][j], cellState.alpha); } } - // Reset the alpha to draw normally - mPaint.setAlpha(255); - // TODO: the path should be created and cached every time we hit-detect a cell // only the last segment of the path should be computed here // draw the path of the pattern (unless we are in stealth mode) final boolean drawPath = !mInStealthMode; - // draw the arrows associated with the path (unless we are in stealth mode) if (drawPath) { - for (int i = 0; i < count - 1; i++) { - Cell cell = pattern.get(i); - Cell next = pattern.get(i + 1); + mPathPaint.setColor(getCurrentColor(true /* partOfPattern */)); - // only draw the part of the pattern stored in - // the lookup table (this is only different in the case - // of animation). - if (!drawLookup[next.row][next.column]) { - break; - } - - float leftX = paddingLeft + cell.column * squareWidth; - float topY = paddingTop + cell.row * squareHeight - + mCellStates[cell.row][cell.column].translateY; - - drawArrow(canvas, leftX, topY, cell, next); - } - } - - if (drawPath) { boolean anyCircles = false; + float lastX = 0f; + float lastY = 0f; for (int i = 0; i < count; i++) { Cell cell = pattern.get(i); @@ -951,123 +969,66 @@ public class LockPatternView extends View { float centerX = getCenterXForColumn(cell.column); float centerY = getCenterYForRow(cell.row); - - // Respect translation in animation - centerY += mCellStates[cell.row][cell.column].translateY; - if (i == 0) { - currentPath.moveTo(centerX, centerY); - } else { - currentPath.lineTo(centerX, centerY); + if (i != 0) { + CellState state = mCellStates[cell.row][cell.column]; + currentPath.rewind(); + currentPath.moveTo(lastX, lastY); + if (state.lineEndX != Float.MIN_VALUE && state.lineEndY != Float.MIN_VALUE) { + currentPath.lineTo(state.lineEndX, state.lineEndY); + } else { + currentPath.lineTo(centerX, centerY); + } + canvas.drawPath(currentPath, mPathPaint); } + lastX = centerX; + lastY = centerY; } - // add last in progress section + // draw last in progress section if ((mPatternInProgress || mPatternDisplayMode == DisplayMode.Animate) && anyCircles) { + currentPath.rewind(); + currentPath.moveTo(lastX, lastY); currentPath.lineTo(mInProgressX, mInProgressY); + + mPathPaint.setAlpha((int) (calculateLastSegmentAlpha( + mInProgressX, mInProgressY, lastX, lastY) * 255f)); + canvas.drawPath(currentPath, mPathPaint); } - canvas.drawPath(currentPath, mPathPaint); } } - private void drawArrow(Canvas canvas, float leftX, float topY, Cell start, Cell end) { - if (mPatternInProgress) { - mPaint.setColorFilter(mRegularColorFilter); - } else { - boolean success = mPatternDisplayMode != DisplayMode.Wrong; - mPaint.setColorFilter(success ? mSuccessColorFilter : mErrorColorFilter); - } - - final int endRow = end.row; - final int startRow = start.row; - final int endColumn = end.column; - final int startColumn = start.column; - - // offsets for centering the bitmap in the cell - final int offsetX = ((int) mSquareWidth - mBitmapWidth) / 2; - final int offsetY = ((int) mSquareHeight - mBitmapHeight) / 2; - - // compute transform to place arrow bitmaps at correct angle inside circle. - // This assumes that the arrow image is drawn at 12:00 with it's top edge - // coincident with the circle bitmap's top edge. - final int cellWidth = mBitmapWidth; - final int cellHeight = mBitmapHeight; - - // the up arrow bitmap is at 12:00, so find the rotation from x axis and add 90 degrees. - final float theta = (float) Math.atan2( - (double) (endRow - startRow), (double) (endColumn - startColumn)); - final float angle = (float) Math.toDegrees(theta) + 90.0f; - - // compose matrix - float sx = Math.min(mSquareWidth / mBitmapWidth, 1.0f); - float sy = Math.min(mSquareHeight / mBitmapHeight, 1.0f); - mArrowMatrix.setTranslate(leftX + offsetX, topY + offsetY); // transform to cell position - mArrowMatrix.preTranslate(mBitmapWidth/2, mBitmapHeight/2); - mArrowMatrix.preScale(sx, sy); - mArrowMatrix.preTranslate(-mBitmapWidth/2, -mBitmapHeight/2); - mArrowMatrix.preRotate(angle, cellWidth / 2.0f, cellHeight / 2.0f); // rotate about cell center - mArrowMatrix.preTranslate((cellWidth - mBitmapArrowAlphaUp.getWidth()) / 2.0f, 0.0f); // translate to 12:00 pos - canvas.drawBitmap(mBitmapArrowAlphaUp, mArrowMatrix, mPaint); + private float calculateLastSegmentAlpha(float x, float y, float lastX, float lastY) { + float diffX = x - lastX; + float diffY = y - lastY; + float dist = (float) Math.sqrt(diffX*diffX + diffY*diffY); + float frac = dist/mSquareWidth; + return Math.min(1f, Math.max(0f, (frac - 0.3f) * 4f)); } - /** - * @param canvas - * @param leftX - * @param topY - * @param partOfPattern Whether this circle is part of the pattern. - */ - private void drawCircle(Canvas canvas, float leftX, float topY, float scale, - boolean partOfPattern) { - Bitmap outerCircle; - Bitmap innerCircle; - ColorFilter outerFilter; - if (!partOfPattern || mInStealthMode) { + private int getCurrentColor(boolean partOfPattern) { + if (!partOfPattern || mInStealthMode || mPatternInProgress) { // unselected circle - outerCircle = mBitmapCircleDefault; - innerCircle = mBitmapBtnDefault; - outerFilter = mRegularColorFilter; - } else if (mPatternInProgress) { - // user is in middle of drawing a pattern - outerCircle = mBitmapCircleAlpha; - innerCircle = mBitmapBtnTouched; - outerFilter = mRegularColorFilter; + return mRegularColor; } else if (mPatternDisplayMode == DisplayMode.Wrong) { // the pattern is wrong - outerCircle = mBitmapCircleAlpha; - innerCircle = mBitmapBtnDefault; - outerFilter = mErrorColorFilter; + return mErrorColor; } else if (mPatternDisplayMode == DisplayMode.Correct || mPatternDisplayMode == DisplayMode.Animate) { - // the pattern is correct - outerCircle = mBitmapCircleAlpha; - innerCircle = mBitmapBtnDefault; - outerFilter = mSuccessColorFilter; + return mSuccessColor; } else { throw new IllegalStateException("unknown display mode " + mPatternDisplayMode); } + } - final int width = mBitmapWidth; - final int height = mBitmapHeight; - - final float squareWidth = mSquareWidth; - final float squareHeight = mSquareHeight; - - int offsetX = (int) ((squareWidth - width) / 2f); - int offsetY = (int) ((squareHeight - height) / 2f); - - // Allow circles to shrink if the view is too small to hold them. - float sx = Math.min(mSquareWidth / mBitmapWidth, 1.0f); - float sy = Math.min(mSquareHeight / mBitmapHeight, 1.0f); - - mCircleMatrix.setTranslate(leftX + offsetX, topY + offsetY); - mCircleMatrix.preTranslate(mBitmapWidth/2, mBitmapHeight/2); - mCircleMatrix.preScale(sx * scale, sy * scale); - mCircleMatrix.preTranslate(-mBitmapWidth/2, -mBitmapHeight/2); - - mPaint.setColorFilter(outerFilter); - canvas.drawBitmap(outerCircle, mCircleMatrix, mPaint); - mPaint.setColorFilter(mRegularColorFilter); - canvas.drawBitmap(innerCircle, mCircleMatrix, mPaint); + /** + * @param partOfPattern Whether this circle is part of the pattern. + */ + private void drawCircle(Canvas canvas, float centerX, float centerY, float size, + boolean partOfPattern, float alpha) { + mPaint.setColor(getCurrentColor(partOfPattern)); + mPaint.setAlpha((int) (alpha * 255)); + canvas.drawCircle(centerX, centerY, size/2, mPaint); } @Override diff --git a/core/res/res/drawable-hdpi/btn_code_lock_default_mtrl_alpha.png b/core/res/res/drawable-hdpi/btn_code_lock_default_mtrl_alpha.png deleted file mode 100644 index 7cc3c1121dc99865a731b464ce6dd7105778b42a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 948 zcmeAS@N?(olHy`uVBq!ia0vp^bs)^a1|%OTFYN$QEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YPV z+ueoXKL{?^yL>WGgtNdSvKUBvfU(=jY&!-9rWQ{Z$B>F!Z*Tc#3p+|2_*g&bm1ScS zYrI`U0Jp24?Tgs_R|oY&_f%h=EWgk_-a*q#zp3Ke(dV-4QBqC7pTI1LJ1#(JBC1>s?yVMQKxrZJHc1QC0 zzx?N4eOBFJtFpB4mlJFG@35>(xy}DTc*Fer?(M9cbyJlV-K~m@>+0z3xY2pcVEc(( zy>Eiw8NW{S@twN7Sa5^h**ANc_b{zvWIrJGLG^bGdmgiRWB!5Q2hJPUZ?2o?;$oiu zwzuQQRO4#n`@({A?{sur&FOx#d)n8#o9l(nY=Cc+T)pRuk=zat#51oGC2L*Wc4@h z1Bxd5Zy(M7p1AF8dVB->@%AdcN!aX`OA#<^D0JHY~H~tM`HOSuuaB&s;sf{87;T zbAP6GREP=gPM&w}ZQAWqC+s%M9lH`zt>s@KXU~wwIDPY5^$!!DealUpcl^5LswegZ ze&O#=aQ%DkM@%Z16ta2$e!sLIFT;eGfeBN!#5JNMC9x#cD!C{XNHG{07@FuBnCcoE zgculGnOIsGo9Y^vTNxPWe!n{%MMG|WN@iLmNQ1GifrYM-QHY_1m8qGPu^B`|>DQ-) xKn;>08-nxGO3D+9QW+dm@{>{(JaZG%Q-e|yQz{Ejrh;-0gQu&X%Q~loCIA#blrjJS diff --git a/core/res/res/drawable-hdpi/btn_code_lock_touched_mtrl_alpha.png b/core/res/res/drawable-hdpi/btn_code_lock_touched_mtrl_alpha.png deleted file mode 100644 index 70397d21dfb97ce9246576d20f4f1ccd23e57f10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 952 zcmeAS@N?(olHy`uVBq!ia0vp^bs)^a1|%OTFYN$QEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YPV z+ueoXKL{?^yL>WGgtNdSvKUBvfU(=jY&!-9rVdXR$B>F!Z*T3-5_J@5_?Z9wn2D#3 zkm&0LQ=_`(Msz$#?#Qij)N%cw`o&OZi-5Q8Rj&;j1r5d2GM(PVc3U3KJ0!YUf%E&5 z-v`BJ&Xp`HdiG}iOzuf4oW8MBREf9};Ni4A8i zXRUBN`9s!gLVw@x#XfDOUdQa0_%vt^>z&D~0OsvF2S&|FvJo_3rEgdo^aK?76y}yCx;w_oDTbgg(!k zeMW_O-(zQe>|RjU=iA_WD*E?~DY=WzrhPG#zFDW3!c$|)7$zaV!>Tasg}mg;6uv(q zHx|e5v0SHj>y4|tW-3n&?;VjJUXd##rGGrluulDRB$DGLlYIVzuh;%f`&4W9EzF+v z-q+Y=)kmIl*X(J$9{ol7fo*Eyvj-AqUn`wse^5Hbw{~?rgYV@lYt|=MyG3@#Km8E& zHXwFqbnht)x7$D3!r6B|j-u!8128JvAsbF{QHbWGW~JF?hQAxvXNn{1`8He?g7tc%WTj8X5 z!zsLD-5ag~-&oUXrwI-xSH3W5Y?)Ml_O#Evxt=c>LUufoj9e--;X={@>rJi`Z#-zd zI^Fcyvo8!;HXCkiKC!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YPV z+ueoXKL{?^yL>WGgtNdSvKUBvfU(=jY&)RwD?D8sLn>~)y}8j(%u$5xLVl}L^Os9E zA~TYb@)tH9YYYD{wSrx~DIzOBy{UC>Z<&aPf#Xk|8&1AGOh0dKsP@}*_T8P6bN9|X z`Noe4Xf6(LN8s=k&Y0=jJd4y%{#D_hd`DWo*7K9%$>l2Qhd1AGi}YNb8T;r^Ay&$@1{+kQ9q_qw;4|KFA5Y`$Gq`)be5rftr* z=Wb)qJ^w2|JsHUAj^IsS`8MqK-~T$l)*ro}zuUC*-|CX=S1e(vb2i@gocAoLdS+tJ z&3T{K%+GyTysx=_Udm^ojk7)H_12!bG>3ct#3zn=-=7-wY?Kb>PYQh&^W&>Z`Fer< zmfsA$i}n6|SBYOQP;Ua^6i({*tm?ecxA8bs>137sBD-S!R~jd8Z{*LDy8n^;>G``& zKg0JYg+>688)E}2x+`BD(dyVhh_oWeMioPAM{ImE^om~Bd*15--aReR% zLxJ#LmYo|mFN~clR0&k1TH+c}l9E`GYL#4+3Zxi}3=BDSr1<%~X^wgl##FWaylc}H-#^CAd=d#Wzp$PzhY8wCm diff --git a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_mtrl_alpha.png b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_mtrl_alpha.png deleted file mode 100644 index a038a13bd445da5f4c93132da5e16d8e44387c71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4095 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 diff --git a/core/res/res/drawable-mdpi/btn_code_lock_touched_mtrl_alpha.png b/core/res/res/drawable-mdpi/btn_code_lock_touched_mtrl_alpha.png deleted file mode 100644 index 9cfbdf9470db6e1a8eaa64917d29a0ef1405d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768 zcmeAS@N?(olHy`uVBq!ia0vp^At21b1|(&&1r7o!mUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG z?e4H3o*Y56v-CriQ} z7=D;wwzSsBJmd0Do(iK?zQ#+%pXDvkUK)@cdtqKbe}nshadS?L^=_ZWZw&kmhmEVG7d=ZTdi%zR z_15({`Hiu+zUW@RqT6`-K-`tS^>bsFIUN6Mv-IzcF9G2jbsyhIys~6>d&t=fYPk$$ z8QzP(9}p`r-L}?Z8}FXZTPBw|JLR5zxcq1zdnxOV(!C8<`)MX5lF z!N|bSMAyJn*VrJ$z}U*f(#qIW*TCG$z(Du=-RUSAa`RI%(<(t4jCBnxbd8Kc3@xlo z&8&>gAR0=)J}m@lkObKfoS#-wo>-L1;Fyx1l&avFo0y&&l$w}QS$HxPloA;{UHx3v IIVCg!01Nv)umAu6 diff --git a/core/res/res/drawable-mdpi/indicator_code_lock_drag_direction_up_mtrl_alpha.png b/core/res/res/drawable-mdpi/indicator_code_lock_drag_direction_up_mtrl_alpha.png deleted file mode 100644 index 2fb1325216faa925265fdc481500dc7223718fc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^AT}!p8<4C?sm%aVEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YPV z+ueoXKL{?^yL>WGgtNdSvKUBvfU(=jY&#&s&eO#)gyVYc*@K)71_CY@bro_>pS+vp z%vBK=c42|tjN9#Uo{l|ILC~_VV`5I;M-?yC(nJylpMe zB-Ikvh?11Vl2ohYqEsNoU}RuuqHAEPYitl=U}9xpU}b2kYhVs!#O1btoQ}|to1c=I zR*9m)*viz>%FqC!q1SSfAy9)P$cEtjw370~qErUQl>DSr1<%~X^wgl##FWaylc^wo OGkCiCxvXNS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG z?e4&0~LF5sM&r^vBUh`5N6*G+%df*_Is_ z7OOPN7B$bx_3GxX_1$zwar+vu@N$*QvPG9?T~%{v;7-{0&}r6npX;UHnJ=)b9Z=rz zZ`+B|xxNi`*KPk_`ZPc2l#?-8X1KcT3DHySs9x_G?adQS_sr239=zLKdq!Zu_%?nF(p4KRlzeiF+DXX XH8G{K@MJ0|Vi`PL{an^LB{Ts5Y(&^| diff --git a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_mtrl_alpha.png b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_mtrl_alpha.png deleted file mode 100644 index ea8c2b4ed8a5244e29dbd7ee9f46fa95cddf167a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2352 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 anDJ~1o5{*fQ?WO{BLMq_`quiKyzmdq_A)jA diff --git a/core/res/res/drawable-xhdpi/btn_code_lock_touched_mtrl_alpha.png b/core/res/res/drawable-xhdpi/btn_code_lock_touched_mtrl_alpha.png deleted file mode 100644 index 020d699fa6e83ad3bdc712ee3349147c9f1ad1c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1189 zcmeAS@N?(olHy`uVBq!ia0vp^D?pfo4M>)FFWmy9SkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpaffz zx4R3&e-K=-cll(X2xoyuWHFHT0Ash4*>(&J%%z?#jv*Dd-rnBdEtAS{{NeeuKt(m7 zfWX-e393pn4moWQwZ0f8k|QFWdnxiadq%dZ#0Ft&&*c1t0xX6cWmy5;Ke&a8w~HAc z&NVCFUA?nepi)laUD>z0<?uC#1 z{x|HtD01p(lHuxSZ|fJFU-dI0EqTJt`G(^2nm7Abu8AwHj>_`( zemJN1c3x?G>AI?IRg0<$bUs&qb^aRqwX}4t;*#z{;Y+%iOLf<@6jyz8`kM9C$2nlV z{$BId?{YbwnO|*v^(af$Y1d4#TM4RjOj|zQZ7Z0!;$J4mot%|tk}~g~Y`gc(>8qo2 z#&RR4U5(dnCd^;>_wTExug$7^RF zimcxJXZ2O>tGAP5Z`E=0-8VgUuXt9YePr#PFTXbAZm*I0;8vQs%3Ht6!2M&|Wr_b) zrK@&bd@FlnbKApzDPM1S-IZ~0xIVk>oBOKg(rPZZd0w;6>@T%3zh?P$65vJ+;2k-muPG`aJ*nu2J ziS>1>dz@z%?dATqMsb03&-7XALjIT89R8TI=5?3#95dkyUzZi1^XAQddtCIw>*Tqo z?;o^dDcQTSdv{Fj{SAEeQyg@q@|1SkJK6qoM%wa&_T-}cJ}G5TTK?tYW|YhhgXtj5`5`R>;@4?Nu6y7aW; z<)1H{uUcR2<~{t)@9>!#t|xmEjZD`6Td{A2-I}`SRfqR3h`!(yZS`Pd|MJz-S1n)F zF5UJ~s_lRL>ipH`Z|`36q_E%ll2`kN^N-~(_XS^FeD&|+*ZWt;OEpz_S3bNmZ<^JT zsaNMm9-gqb*x_Sk_4DP2*;_sbY`G?=d-l`!>Wp(bvLvK$28Msz|1pc-ITku|v(ay$ zM%5D6h?11Vl2ohYqEsNoU}RuuqHAEPYitl=U~FY#X=QAxYhZ3=V4(Z`?sOClx%nxX zX_X)i#<~U;x<*DJh89+)W>&^#5DleYpB4f&NP=t#&QB{TPb^Aha7@WhN>%X8O-xS> YN=;0uEIgSCDlQm2UHx3vIVCg!0MZ%;3jhEB diff --git a/core/res/res/drawable-xhdpi/indicator_code_lock_drag_direction_up_mtrl_alpha.png b/core/res/res/drawable-xhdpi/indicator_code_lock_drag_direction_up_mtrl_alpha.png deleted file mode 100644 index fda5e37f67434a869690ac380c024ee24bf336c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 403 zcmeAS@N?(olHy`uVBq!ia0vp^B0$W=!3HF^gw{O+QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tD z$=lt9;Xep2*t>i(P=vFl_cLed8xprV zzbEv*a%X8O-xS>N=;0uEIgSC3LFMcS3j3^P6)FFWmy9SkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpaffz zx4R3&e-K=-cll(X2xoyuWHFHT0Ash4*>(&JOr4%Cjv*Dd-rnBZ6`Lx-`e3WN^27%U zj*3D~91#(0Ynvi`lPBNeK5?~zQ8Q@y2d?o=T3_8{Ny-^fAXH`Pu_m~wBA!r<)_uja?iSX%T{{7pZULWTjuYu+tIoE zbAE4G|E)x(ID1WG)$ci}xy!eO-@2Fg+xzxmxwi!})zxdht~GPV6SG;ZAHh)`fSyR!zFF7eO5mj>MCTx?=wa@$gLgZ=9%Zn#&MO3XTeV}r7 z^VBDkRi=kcD9udC)wR816>y<)o$AeVS#{H9yItG5v^|QQ%j*1B74h&H<%KClEUa^% z-&J`IDniEiawj$eSX1ajTbh%J;N$}{}w=$B~IEa`s{75Pv3$Cpa0BANpG#R z_NC#5QQ<|d}62BjvZ UR2H601!W-yPgg&ebxsLQ0D59}Q~&?~ diff --git a/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_mtrl_alpha.png b/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_mtrl_alpha.png deleted file mode 100644 index 225799b4400013e4980cc1ebf69814c7e5d4facf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5601 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 PD?ne{SgS?DDfWK=A0(VB diff --git a/core/res/res/drawable-xxhdpi/btn_code_lock_default_mtrl_alpha.png b/core/res/res/drawable-xxhdpi/btn_code_lock_default_mtrl_alpha.png deleted file mode 100755 index 1b6c9b573df585751d202217c343372473286249..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2258 zcmbtW2~ZPf6pmMAbQD{u6{NU^sr5>-n?NoSF$Y1c5sGm@3eh#$gb3MHnURbakK>G|u2u-5JmLNcc5!NHo z2&}a(yN-xxv>`f!Dwc><&J}7fBNO)cFiE3{LeprXP|^fzk`Mw|g6IvXm|mZMi4GXF zVtP!l5>%RGNTOl34M*nN=BYHcB#l5z51k2!NFhaFLjFu~UwWyVto=6ZTA&X_PSeOC-h(y1iKFy;z|PM_>ZORT!4s*8x$97=f7+F%ux09}FmAjREzn zJ=@chtsKD(sfbpAV@9C6zCyzQ`U)ve0YSVVkk^y9lq(R(_z=iZa5zB{Hjmzm)&8HF zv8Z5Jp62M+EPW=b13iy#TAy0H86E_sCI+WQBVc<=4vjW!aD-f*H;XU8+t!+A;zUcF{1;C(+E8(ewyaL9E z0CHBt>gquSL(+y1_3kkYXq?qBfTss4`6s-GZ|%FB{Y2gh^)q?}^r^pN93%SR7#Amo zJWn&iT)W0v@)SyUI-1(jMe0X6JDrT?AESH8ygIi_6OjEpu7IOH;6Cec{`6hw z#w+d$YsbRUiitbQS~A>it)<&=zo?D%{$&pr<;ON`Dl6#>m(^i6X1x9??gIbzOYfrW z$2E%&PkP0=*_@^qb=)_NpZN4axI5MlPcU06m-4&p8?9C4zo+R>jcYnv-Uzq0&-1=m z`tU>olT=uybXkHYI7?On_U+2!%VPpsj-)v2o75IE9srfQnuDWt^d*V$zep}U#<=I8v)6v2e z8J)`?cb+_D3t{TW+-nb(wxQlR2TzpdGb$7f&2{djZE^OBJl6^1(8#ivs^YHZv&RZE zjDe($o4^RIU-k_vE_XB41-G`pV&-KAoC&_w?debzyTxeIMWn*Z;Se9q_{>)6%E>Tt zCRLK0bCu*;-<1>ASG(>jCP*C5;1K=cJ3FpYxjsxj?eCpil5)25+^J4D)9ndavF};q zot;N`9@ zF3X{kI(6jptq#Zsc1+AvtImvX z{CUH-_{Gi$fhF>Be5X~AZ9h{^PEj{( zJaZG%Q-e|yQz{EjrrIztFsEgPM3hAM`dB6B=jtVb)aX^@765fKFxc2v6eK2Rr0UTq__OB&@Hb09I0xZL0)vRD^GUf^&XRs)DJWfo`&anSp|tp`M|! ziMhGCj)IYap@F`Ek-njkuA#Y=v5}R5fdUjL0c|TvNwW%aaf8|g1^l#~=$>Fbx5 zm+O@q>*W`v>l<2HT7t|lGSUUA&@HaaD@m--%_~-hnc$LIoLrPyP?DLSrvNfBF)6>a z#8wIDQivCF3w(Xy2Imz+0}2>q`W1-<`i6Q2`nkCve}PpOmjtCEoPkw!aY$uBs(w&v zaeir0GB7^Ulwq2IVTa!$kV2qqto(~IfsvA!bTzOrG&Og% zv~YGdFtIc? z$S+WE4mMTrO-#4v9N^wDE}0@C(PbCwuQc)wt( zMjeZ^U{f#0qP1re)th`hgcm6+*&w)SUvqFohs)l(H}6);Rm^rMOL%bn-QSZbD>G+t z2DArnV_@OukQ1;`sBrku@PP3ka}zs60IQ%v1s0Vctr*%N0*hSGHxE_5GXTig#bWKVGwaYt!=h zuq3%7IeI^KeV$Qm=)NuD!(vOLBo>RClLOD^~ho_{#;CwhGov zwF}#2*0lc8Zm<$BcK>&x5#{T`SuVhD@ z)yZ$ObH#0*?s@fM-EXC5OW(?wwMXkWRhO;`RB{Mz3e#cv)DS@ z^Vh|8KX^Iui~XatpBJkq_J7=5lWTM7a_~!)+a)`m{{ORjrMuz!+@%jB&%ORtaw65L z`P~xtpr!g(mYly?ZhMG(-oshXcGp?;=b1i>`Swv A1poj5 diff --git a/core/res/res/drawable-xxhdpi/indicator_code_lock_drag_direction_up_mtrl_alpha.png b/core/res/res/drawable-xxhdpi/indicator_code_lock_drag_direction_up_mtrl_alpha.png deleted file mode 100644 index d3e80be41aa508e98dde5ab52aff471e861f2dd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 435 zcmeAS@N?(olHy`uVBq!ia0vp^azM<_!3HEh@2Z~zq*&4&eH|GXHuiJ>Nn{1`8Hp8Wbd0=U-qwlPxB@ z(75Enu0vZ4n>;=}-^{Le$Kp(bpD1(F64f~K=Xc^h`)OWb*4}V@Gt)o)7YFw)*0y1M z%U%D(_pI6P_DuQDPAhnAjMwLW^SW$Stehda$1p#(Ecvp{=W`dzEd(~4pM7hpEzcx1 z&&^9VzP$WAw?}8LN_`7w^P=AlK}E(hTQy=%(O}r4aQccmR5!a5DmSSlMI0xBtbR==ckpFCl;kL jIHu$$r7C#lCZ?wbr6#6S7M@H61s;Q^tDnm{r-UW|kzS64 diff --git a/core/res/res/drawable-xxhdpi/indicator_code_lock_point_area_default_mtrl_alpha.png b/core/res/res/drawable-xxhdpi/indicator_code_lock_point_area_default_mtrl_alpha.png deleted file mode 100644 index a11b6ddfdcafe8e33bbbb5bd338e3d657b6f4f2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1957 zcmb_deM}Q)7_X5`FfoYni?PV%j9L8X$6Y_JJzKRO6ss1rtrHg}UawcErFY%kK@Xf@ zScbAhO)z6F(`AWqn2{j(hg)r;!Geg8xtUCK%EV=8G7zhL3=$%Hk5X|C{bSqZ?!EVY z?)g2x=Y8JaldIXDlf7X6+w&z7$pYJEivzqT#3%VJFghDL3c)L#&&uPSjF%4)EG02| z7&isk0z@I@pa@UdhaHq&BAM&;x$^it`!<|p0y0AMkqLnyKuaY0jY5zh{S*(msX`xZ zfS*Jz!;sHofOo0w3VYB@75O%ovy`(u$3>R=Nu3AYxB=1&I0z7+cmfgv#WaTt26!qi z4(6g+4ntEeyx#!FlghJihs+F1L28*&N-7Wp(r9FeO0Cf#>mXEtpmGJcHBv-{t2H=^ zLDLru*jSGjcUY{`TwrB@i+DbW%jKa^NETAc7`9N3=yW{@&Z59IzzQ{a253aSC zOj#<87BQg;Fd{|`qBI*ZM4?rfP}HbO#F!1M$ih@w)QAA24neX|lMzMDm`YnPIN8=)0OoXmC)UdeRzO zv0Mmel>RyB=q^bqil${ts^%r7Ca+kihlEYBgS~TF=Ee=P8W-wk@f4x|fX5B5#GLW^ zc!p@k2$&P>e={bf{^uOEO{b53ozjUkAZw9FWKLb>WZKYbFXnyMdt-<6!kNbYlULmM zQVx5#C#7PMZmb>2byuu6wJ0;`tNOz_?%L#}`e8+vGJCa9-ERq-?|*S~(Be6&5@|H{jO^K(7tb0Rcard zKOH($U(mV4eJ;GL1$%65>uESz5F7TN`E77&(w~1ilJ?Q@9QDNvP{e}b`x!k)dcPbF z|J0Lw$rf1>x?DO@RbR0F$e=Z5znEUZ&$FhjEzY*+{Pmf-(eb`c<&d<}Flxpp zqH9vuY`pi({cI#JBz$}AL16TI#yL<`-&l{_H4NO5MPjvIUDvlR3XN6&zA$@L*Y4I0 ziz2=0brbi-CJZA_7oXF~x`(%wwGpxi_L9*~^{wLtr=DVZuH~2w9<%oK z4y|l%Y|Y<1`8ZkEWh=;8 diff --git a/core/res/res/drawable-xxhdpi/indicator_code_lock_point_area_mtrl_alpha.png b/core/res/res/drawable-xxhdpi/indicator_code_lock_point_area_mtrl_alpha.png deleted file mode 100644 index eae7ea89513104ec83ed81751464324757b045a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7165 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 N1E`T+t*#^bzW^l$U)%ry diff --git a/core/res/res/drawable-xxxhdpi/indicator_code_lock_drag_direction_up_mtrl_alpha.png b/core/res/res/drawable-xxxhdpi/indicator_code_lock_drag_direction_up_mtrl_alpha.png deleted file mode 100644 index 23214fa188d7e77f677f72b7b7f55c3ef00c4d32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1105 zcmbVL%WKp?7?0LxwV+ZTRnU-nuxK8W$L=O{ExVhnU36<*7hOC#o6NRhn@mim?zX;) zcqw?We}YhY>_HH!Jt%l8dQkBJDv0#tMNeMUNxNG;6b}ZHZ@$U*`+e`};h|Gqod-J^ zhUqE{nk6ca(YJfs7W(~_zqLq353wrbJg$)j3=xxYa22ry500P`g3iR1CDhL_9d)-{ zA(i48!^WNfV;iCA1r*IN{R7Pa+I2+ODjIS9H1~b+3CFrln!BhKrDBjnqwe5jh|W(A zmF>y8tvlSnNw&XfPy!DT$Tqz(KQfwWZiUyN=lELW*cB5}Pjjn5Rf@xG4u^=<1dX>P z8L&xR0Gg@;aDtU3pol;cWt|7WP?H8ou&sxq-a@Bll+1j~7uC|-C?SC%ij77?Xea^> zM?|3Ox+uw_Ec4WYk0yKqo4g}J}H=Kj{XrG*D(}Hwq#YwS}9phqyV5Ile1D8OVSiwlGHZGdf0?wDypVsOv}mv zU@0jRs994@C?KEI5}8CBTksRv6*>73d+bVq4R@UYpbm8>S(SN^Ow@R_hEyKPRh4&YNv&1` zS`}(Zu7!90r*I+-NQ@`suZd}2(J_pVYx7T)wGBc(U7L{ZNB2?b9^I|$1v67_et7Zj zW9O8#v*YFVpN${Sk00vTjTdLVjrZ}F{;TKSZo2zs@!39QSNWB4`@_ShnVAcz1F!dN z&0JcZn>oDDH@n|I@OAo7c5?ag%7MWDnXYH^%Qt6sE}T8O^L diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml index afe180f54c55b..bacdc3ffb7c0d 100644 --- a/core/res/res/values/dimens.xml +++ b/core/res/res/values/dimens.xml @@ -389,4 +389,8 @@ used on circular displays. In the case where there is no "chin", this will default to 0 --> 0px + + 3dp + 12dp + 28dp diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 641d5457d10ff..fe7b4bc893e4d 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -1041,14 +1041,12 @@ - - - - - + + +