summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Colonna <bcolonna@google.com>2012-10-30 14:48:55 -0400
committerBrian Colonna <bcolonna@google.com>2012-10-30 14:48:55 -0400
commit68d257d788f5154922cd605ab8079a5c0815dffc (patch)
tree9566124af5afd50ee4d54f61c5a3f61625600319
parent70aa528b73fc54fe7896ac1ae349569d83caba59 (diff)
downloadframeworks_base-68d257d788f5154922cd605ab8079a5c0815dffc.zip
frameworks_base-68d257d788f5154922cd605ab8079a5c0815dffc.tar.gz
frameworks_base-68d257d788f5154922cd605ab8079a5c0815dffc.tar.bz2
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
-rw-r--r--core/java/com/android/internal/widget/FaceUnlockView.java67
-rw-r--r--core/res/res/layout/keyguard_face_unlock_view.xml7
2 files changed, 70 insertions, 4 deletions
diff --git a/core/java/com/android/internal/widget/FaceUnlockView.java b/core/java/com/android/internal/widget/FaceUnlockView.java
new file mode 100644
index 0000000..c8d65fc
--- /dev/null
+++ b/core/java/com/android/internal/widget/FaceUnlockView.java
@@ -0,0 +1,67 @@
+/*
+ * 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);
+ }
+}
diff --git a/core/res/res/layout/keyguard_face_unlock_view.xml b/core/res/res/layout/keyguard_face_unlock_view.xml
index ae7984c..976d0c6 100644
--- a/core/res/res/layout/keyguard_face_unlock_view.xml
+++ b/core/res/res/layout/keyguard_face_unlock_view.xml
@@ -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"