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