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

Commit bf1259b8 authored by Jim Miller's avatar Jim Miller
Browse files

Fix 2538826: Allow aspect of LockPatternView to be customized.

This fixes a problem where the pattern unlock area shrank on
mdpi devices.

This change is required since some devices (mdpi) don't have
enough vertical room to show a square LockPatternView and shrink
the area to match the minimum of width and height. To fix the
problem and minimize changes to existing platforms, the parameter
is configurable and has a default in values/donottranslate that
emulates the old behavior.  New behavior for mdpi devices is
specified in values-port-mdpi/donottranslate, which is the
only place we currently see the problem.

Tested:
mdpi device in both orientations
hdpi device in both orientations
hdpi device in both orientations with keyboard open/closed

Change-Id: I3b9a5ef1d9b5e70f7b1823c9f48a3938f52cc7a4
parent af8c900a
Loading
Loading
Loading
Loading
+44 −8
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import com.android.internal.R;

import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
@@ -50,6 +51,11 @@ import java.util.List;
 * "correct" states.
 */
public class LockPatternView extends View {
    // Aspect to use when rendering this view
    private static final int ASPECT_SQUARE = 0; // View will be the minimum of width/height
    private static final int ASPECT_LOCK_WIDTH = 1; // Fixed width; height will be minimum of (w,h)
    private static final int ASPECT_LOCK_HEIGHT = 2; // Fixed height; width will be minimum of (w,h)

    // Vibrator pattern for creating a tactile bump
    private static final long[] DEFAULT_VIBE_PATTERN = {0, 1, 40, 41};

@@ -122,6 +128,8 @@ public class LockPatternView extends View {

    private long[] mVibePattern;

    private int mAspect;

    /**
     * Represents a cell in the 3 X 3 matrix of the unlock pattern view.
     */
@@ -237,6 +245,20 @@ public class LockPatternView extends View {
        super(context, attrs);
        vibe = new Vibrator();

        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.LockPatternView);

        final String aspect = a.getString(R.styleable.LockPatternView_aspect);

        if ("square".equals(aspect)) {
            mAspect = ASPECT_SQUARE;
        } else if ("lock_width".equals(aspect)) {
            mAspect = ASPECT_LOCK_WIDTH;
        } else if ("lock_height".equals(aspect)) {
            mAspect = ASPECT_LOCK_HEIGHT;
        } else {
            mAspect = ASPECT_SQUARE;
        }

        setClickable(true);

        mPathPaint.setAntiAlias(true);
@@ -425,8 +447,22 @@ public class LockPatternView extends View {
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        final int width = MeasureSpec.getSize(widthMeasureSpec);
        final int height = MeasureSpec.getSize(heightMeasureSpec);
        final int squareSide = Math.min(width, height);
        setMeasuredDimension(squareSide, squareSide);
        int viewWidth = width;
        int viewHeight = height;
        switch (mAspect) {
            case ASPECT_SQUARE:
                viewWidth = viewHeight = Math.min(width, height);
                break;
            case ASPECT_LOCK_WIDTH:
                viewWidth = width;
                viewHeight = Math.min(width, height);
                break;
            case ASPECT_LOCK_HEIGHT:
                viewWidth = Math.min(width, height);
                viewHeight = height;
                break;
        }
        setMeasuredDimension(viewWidth, viewHeight);
    }

    /**
+1 −0
Original line number Diff line number Diff line
@@ -154,6 +154,7 @@
        android:layout_height="0dip"
        android:layout_weight="1"
        android:layout_marginTop="2dip"
        android:aspect="@string/lock_pattern_view_aspect"
         />

    <!-- footer -->
+23 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!--
/* //device/apps/common/assets/res/any/strings.xml
**
** Copyright 2009, 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.
*/
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <!-- @hide DO NOT TRANSLATE. There isn't enough room on mdpi devices, allow height to vary -->
    <string name="lock_pattern_view_aspect">lock_width</string>
</resources>
+12 −1
Original line number Diff line number Diff line
@@ -3624,6 +3624,17 @@
        <attr name="orientation" />
    </declare-styleable>

    <!-- =============================== -->
    <!-- LockPatternView class attributes -->
    <!-- =============================== -->
    <eat-comment />

    <declare-styleable name="LockPatternView">
        <!-- Aspect to use when drawing LockPatternView. Choices are "square"(default), "lock_width"
             or "lock_height" -->
        <attr name="aspect" format="string" />
    </declare-styleable>

    <!-- Use <code>recognition-service</code> as the root tag of the XML resource that
         describes a {@link android.speech.RecognitionService}, which is reference from
         its {@link android.speech.RecognitionService#SERVICE_META_DATA} meta-data entry.
+2 −0
Original line number Diff line number Diff line
@@ -22,4 +22,6 @@
    <string name="default_text_encoding">Latin-1</string>
    <!-- @hide DO NOT TRANSLATE. Workaround for resource race condition in lockscreen. -->
    <bool name="lockscreen_isPortrait">true</bool>
    <!-- @hide DO NOT TRANSLATE. Control aspect ratio of lock pattern -->
    <string name="lock_pattern_view_aspect">square</string>
</resources>