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