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

Commit 68d257d7 authored by Brian Colonna's avatar Brian Colonna
Browse files

FUL uses square aspect ratio for all layouts fixes b/7426399

When the referenced bug was filed, face unlock was only showing as a
tiny sliver on tablet layouts.  Due to other changes in the lockscreen
branch, it was no longer a sliver, but was still an incorrect layout,
with a width much greater than height.  This change makes face unlock
square for all layouts.

The face unlock RelativeLayout was replaced with a custom
FaceUnlockView derived from RelativeLayout.  The new view forces a
square layout using the same technique used by LockPatternView.

Note that there is still a bug where the pattern view covers the widget
area on portrait tablet layouts.  The face unlock view has this same
issue, but may resolve itself when the pattern bug is fixed.

Also note there are two other Face Unlock tablet bugs that existed
before this change (and therefore are not caused by this change):
 - flash during transition from spotlight animation to camera preview
 - PIN backup is upper-left instead of centered

Change-Id: I550eccfa3924f230a9dc43f0a9b59f1ea55a9273
parent 70aa528b
Loading
Loading
Loading
Loading
+67 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2012 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.
 */

package com.android.internal.widget;

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.RelativeLayout;

public class FaceUnlockView extends RelativeLayout {
    private static final String TAG = "FaceUnlockView";

    public FaceUnlockView(Context context) {
        this(context, null);
    }

    public FaceUnlockView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    private int resolveMeasured(int measureSpec, int desired)
    {
        int result = 0;
        int specSize = MeasureSpec.getSize(measureSpec);
        switch (MeasureSpec.getMode(measureSpec)) {
            case MeasureSpec.UNSPECIFIED:
                result = desired;
                break;
            case MeasureSpec.AT_MOST:
                result = Math.max(specSize, desired);
                break;
            case MeasureSpec.EXACTLY:
            default:
                result = specSize;
        }
        return result;
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        final int minimumWidth = getSuggestedMinimumWidth();
        final int minimumHeight = getSuggestedMinimumHeight();
        int viewWidth = resolveMeasured(widthMeasureSpec, minimumWidth);
        int viewHeight = resolveMeasured(heightMeasureSpec, minimumHeight);

        viewWidth = viewHeight = Math.min(viewWidth, viewHeight);
        Log.v(TAG, "FaceUnlockView dimensions: " + viewWidth + "x" + viewHeight);
        setMeasuredDimension(viewWidth, viewHeight);
    }
}
+3 −4
Original line number Diff line number Diff line
@@ -30,10 +30,10 @@
        android:layout_height="wrap_content"
        />

    <RelativeLayout
    <com.android.internal.widget.FaceUnlockView
        android:id="@+id/face_unlock_area_view"
        android:layout_width="match_parent"
        android:layout_height="@*android:dimen/face_unlock_height"
        android:layout_height="0dp"
        android:background="@*android:drawable/intro_bg"
        android:gravity="center"
        android:layout_weight="1">
@@ -55,8 +55,7 @@
            android:background="#00000000"
            android:src="@*android:drawable/ic_facial_backup"
        />

    </RelativeLayout>
    </com.android.internal.widget.FaceUnlockView>

    <include layout="@layout/keyguard_emergency_carrier_area"
        android:id="@+id/keyguard_selector_fade_container"