168d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna/* 268d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna * Copyright (C) 2012 The Android Open Source Project 368d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna * 468d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna * Licensed under the Apache License, Version 2.0 (the "License"); 568d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna * you may not use this file except in compliance with the License. 668d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna * You may obtain a copy of the License at 768d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna * 868d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna * http://www.apache.org/licenses/LICENSE-2.0 968d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna * 1068d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna * Unless required by applicable law or agreed to in writing, software 1168d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna * distributed under the License is distributed on an "AS IS" BASIS, 1268d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1368d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna * See the License for the specific language governing permissions and 1468d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna * limitations under the License. 1568d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna */ 1668d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna 1768d257d788f5154922cd605ab8079a5c0815dffcBrian Colonnapackage com.android.internal.widget; 1868d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna 1968d257d788f5154922cd605ab8079a5c0815dffcBrian Colonnaimport android.content.Context; 2068d257d788f5154922cd605ab8079a5c0815dffcBrian Colonnaimport android.util.AttributeSet; 2168d257d788f5154922cd605ab8079a5c0815dffcBrian Colonnaimport android.util.Log; 2268d257d788f5154922cd605ab8079a5c0815dffcBrian Colonnaimport android.view.View; 2368d257d788f5154922cd605ab8079a5c0815dffcBrian Colonnaimport android.widget.RelativeLayout; 2468d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna 2568d257d788f5154922cd605ab8079a5c0815dffcBrian Colonnapublic class FaceUnlockView extends RelativeLayout { 2668d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna private static final String TAG = "FaceUnlockView"; 2768d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna 2868d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna public FaceUnlockView(Context context) { 2968d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna this(context, null); 3068d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna } 3168d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna 3268d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna public FaceUnlockView(Context context, AttributeSet attrs) { 3368d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna super(context, attrs); 3468d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna } 3568d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna 3668d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna private int resolveMeasured(int measureSpec, int desired) 3768d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna { 3868d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna int result = 0; 3968d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna int specSize = MeasureSpec.getSize(measureSpec); 4068d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna switch (MeasureSpec.getMode(measureSpec)) { 4168d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna case MeasureSpec.UNSPECIFIED: 4268d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna result = desired; 4368d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna break; 4468d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna case MeasureSpec.AT_MOST: 4568d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna result = Math.max(specSize, desired); 4668d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna break; 4768d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna case MeasureSpec.EXACTLY: 4868d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna default: 4968d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna result = specSize; 5068d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna } 5168d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna return result; 5268d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna } 5368d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna 5468d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna @Override 5568d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 5668d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna final int minimumWidth = getSuggestedMinimumWidth(); 5768d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna final int minimumHeight = getSuggestedMinimumHeight(); 5868d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna int viewWidth = resolveMeasured(widthMeasureSpec, minimumWidth); 5968d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna int viewHeight = resolveMeasured(heightMeasureSpec, minimumHeight); 6068d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna 61ddbf138d11d9ad4fa9ec871b2fc5862dad20f02cBrian Colonna final int chosenSize = Math.min(viewWidth, viewHeight); 62ddbf138d11d9ad4fa9ec871b2fc5862dad20f02cBrian Colonna final int newWidthMeasureSpec = 63ddbf138d11d9ad4fa9ec871b2fc5862dad20f02cBrian Colonna MeasureSpec.makeMeasureSpec(chosenSize, MeasureSpec.AT_MOST); 64ddbf138d11d9ad4fa9ec871b2fc5862dad20f02cBrian Colonna final int newHeightMeasureSpec = 65ddbf138d11d9ad4fa9ec871b2fc5862dad20f02cBrian Colonna MeasureSpec.makeMeasureSpec(chosenSize, MeasureSpec.AT_MOST); 66ddbf138d11d9ad4fa9ec871b2fc5862dad20f02cBrian Colonna 67ddbf138d11d9ad4fa9ec871b2fc5862dad20f02cBrian Colonna super.onMeasure(newWidthMeasureSpec, newHeightMeasureSpec); 6868d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna } 6968d257d788f5154922cd605ab8079a5c0815dffcBrian Colonna} 70