AspectRatioDialogLayout.java revision db8f97582d09cd36eee8cfe4ed43182bff63f8bd
1db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu/* 2db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu * Copyright (C) 2014 The Android Open Source Project 3db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu * 4db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu * Licensed under the Apache License, Version 2.0 (the "License"); 5db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu * you may not use this file except in compliance with the License. 6db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu * You may obtain a copy of the License at 7db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu * 8db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu * http://www.apache.org/licenses/LICENSE-2.0 9db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu * 10db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu * Unless required by applicable law or agreed to in writing, software 11db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu * distributed under the License is distributed on an "AS IS" BASIS, 12db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu * See the License for the specific language governing permissions and 14db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu * limitations under the License. 15db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu */ 16db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu 17db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liupackage com.android.camera.widget; 18db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu 19db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liuimport android.content.Context; 20db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liuimport android.content.res.Configuration; 21db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liuimport android.util.AttributeSet; 22db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liuimport android.view.View; 23db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liuimport android.widget.FrameLayout; 24db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu 25db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liuimport com.android.camera2.R; 26db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu 27db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liupublic class AspectRatioDialogLayout extends FrameLayout { 28db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu private View mConfirmButton; 29db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu private AspectRatioSelector mAspectRatioSelector; 30db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu private int mLastOrientation; 31db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu private AspectRatioChangedListener mListener; 32db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu private String mText16x9; 33db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu private String mText4x3; 34db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu private boolean mInitialized; 35db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu private AspectRatioSelector.AspectRatio mAspectRatio; 36db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu 37db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu public interface AspectRatioChangedListener { 38db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu public void onAspectRatioChanged(AspectRatioSelector.AspectRatio aspectRatio); 39db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu } 40db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu 41db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu public AspectRatioDialogLayout(Context context, AttributeSet attrs) { 42db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu super(context, attrs); 43db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu mLastOrientation = getResources().getConfiguration().orientation; 44db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu } 45db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu 46db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu @Override 47db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu public void onFinishInflate() { 48db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu updateViewReference(); 49db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu } 50db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu 51db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu private void updateViewReference() { 52db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu mAspectRatioSelector = (AspectRatioSelector) findViewById(R.id.aspect_ratio_selector); 53db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu mConfirmButton = findViewById(R.id.confirm_button); 54db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu mConfirmButton.setOnClickListener(new OnClickListener() { 55db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu @Override 56db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu public void onClick(View v) { 57db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu if (mListener != null) { 58db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu mListener.onAspectRatioChanged(mAspectRatioSelector.getAspectRatio()); 59db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu } 60db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu } 61db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu }); 62db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu if (mInitialized) { 63db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu mAspectRatioSelector.setAspectRatio(mAspectRatio); 64db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu mAspectRatioSelector.setTexts(mText4x3, mText16x9); 65db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu } 66db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu } 67db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu 68db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu @Override 69db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu public void onConfigurationChanged(Configuration config) { 70db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu super.onConfigurationChanged(config); 71db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu if (config.orientation == mLastOrientation) { 72db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu return; 73db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu } 74db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu mLastOrientation = config.orientation; 75db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu mAspectRatio = mAspectRatioSelector.getAspectRatio(); 76db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu removeAllViews(); 77db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu inflate(getContext(), R.layout.aspect_ratio_dialog_content, this); 78db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu updateViewReference(); 79db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu } 80db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu 81db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu public void setAspectRatio(AspectRatioSelector.AspectRatio aspectRatio) { 82db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu mAspectRatioSelector.setAspectRatio(aspectRatio); 83db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu } 84db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu 85db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu public void initialize(AspectRatioChangedListener listener, String text4x3, String text16x9, 86db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu AspectRatioSelector.AspectRatio aspectRatio) { 87db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu mInitialized = true; 88db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu mListener = listener; 89db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu mText4x3 = text4x3; 90db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu mText16x9 = text16x9; 91db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu mAspectRatio = aspectRatio; 92db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu if (mAspectRatioSelector != null) { 93db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu mAspectRatioSelector.setAspectRatio(mAspectRatio); 94db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu mAspectRatioSelector.setTexts(mText4x3, mText16x9); 95db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu } 96db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu } 97db8f97582d09cd36eee8cfe4ed43182bff63f8bdDoris Liu} 98