1ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong/*
2ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong * Copyright (C) 2011 The Android Open Source Project
3ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong *
4ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong * Licensed under the Apache License, Version 2.0 (the "License");
5ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong * you may not use this file except in compliance with the License.
6ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong * You may obtain a copy of the License at
7ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong *
8ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong *      http://www.apache.org/licenses/LICENSE-2.0
9ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong *
10ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong * Unless required by applicable law or agreed to in writing, software
11ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong * distributed under the License is distributed on an "AS IS" BASIS,
12ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong * See the License for the specific language governing permissions and
14ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong * limitations under the License.
15ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong */
16ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong
17ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kongpackage com.android.camera;
18ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong
19ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kongimport com.android.camera.ui.Rotatable;
20ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kongimport com.android.camera.ui.RotateLayout;
21ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong
22ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kongimport android.app.Activity;
23ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kongimport android.view.LayoutInflater;
24ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kongimport android.view.View;
25ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kongimport android.view.ViewGroup;
26ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kongimport android.view.animation.Animation;
27ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kongimport android.view.animation.AnimationUtils;
28ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kongimport android.widget.Button;
29ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kongimport android.widget.TextView;
30ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kongimport android.widget.ProgressBar;
31ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong
32ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kongpublic class RotateDialogController implements Rotatable {
33ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong
34ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    private static final String TAG = "RotateDialogController";
35ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    private static final long ANIM_DURATION = 150;  // millis
36ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong
37ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    private Activity mActivity;
38ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    private int mLayoutResourceID;
39ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    private View mDialogRootLayout;
40ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    private RotateLayout mRotateDialog;
41ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    private View mRotateDialogTitleLayout;
42ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    private View mRotateDialogButtonLayout;
43ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    private TextView mRotateDialogTitle;
44ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    private ProgressBar mRotateDialogSpinner;
45ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    private TextView mRotateDialogText;
46ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    private TextView mRotateDialogButton1;
47ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    private TextView mRotateDialogButton2;
48ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong
49ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    private Animation mFadeInAnim, mFadeOutAnim;
50ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong
51ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    public RotateDialogController(Activity a, int layoutResource) {
52ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        mActivity = a;
53ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        mLayoutResourceID = layoutResource;
54ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    }
55ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong
56ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    private void inflateDialogLayout() {
57ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        if (mDialogRootLayout == null) {
58ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong            ViewGroup layoutRoot = (ViewGroup) mActivity.getWindow().getDecorView();
59ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong            LayoutInflater inflater = mActivity.getLayoutInflater();
60ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong            View v = inflater.inflate(mLayoutResourceID, layoutRoot);
61ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong            mDialogRootLayout = v.findViewById(R.id.rotate_dialog_root_layout);
62ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong            mRotateDialog = (RotateLayout) v.findViewById(R.id.rotate_dialog_layout);
63ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong            mRotateDialogTitleLayout = v.findViewById(R.id.rotate_dialog_title_layout);
64ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong            mRotateDialogButtonLayout = v.findViewById(R.id.rotate_dialog_button_layout);
65ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong            mRotateDialogTitle = (TextView) v.findViewById(R.id.rotate_dialog_title);
66ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong            mRotateDialogSpinner = (ProgressBar) v.findViewById(R.id.rotate_dialog_spinner);
67ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong            mRotateDialogText = (TextView) v.findViewById(R.id.rotate_dialog_text);
68ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong            mRotateDialogButton1 = (Button) v.findViewById(R.id.rotate_dialog_button1);
69ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong            mRotateDialogButton2 = (Button) v.findViewById(R.id.rotate_dialog_button2);
70ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong
71ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong            mFadeInAnim = AnimationUtils.loadAnimation(
72ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong                    mActivity, android.R.anim.fade_in);
73ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong            mFadeOutAnim = AnimationUtils.loadAnimation(
74ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong                    mActivity, android.R.anim.fade_out);
75ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong            mFadeInAnim.setDuration(ANIM_DURATION);
76ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong            mFadeOutAnim.setDuration(ANIM_DURATION);
77ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        }
78ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    }
79ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong
80ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    @Override
81ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    public void setOrientation(int orientation) {
82ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        inflateDialogLayout();
83ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        mRotateDialog.setOrientation(orientation);
84ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    }
85ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong
86ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    public void resetRotateDialog() {
87ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        inflateDialogLayout();
88ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        mRotateDialogTitleLayout.setVisibility(View.GONE);
89ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        mRotateDialogSpinner.setVisibility(View.GONE);
90ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        mRotateDialogButton1.setVisibility(View.GONE);
91ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        mRotateDialogButton2.setVisibility(View.GONE);
92ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        mRotateDialogButtonLayout.setVisibility(View.GONE);
93ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    }
94ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong
95ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    private void fadeOutDialog() {
96ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        mDialogRootLayout.startAnimation(mFadeOutAnim);
97ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        mDialogRootLayout.setVisibility(View.GONE);
98ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    }
99ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong
100ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    private void fadeInDialog() {
101ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        mDialogRootLayout.startAnimation(mFadeInAnim);
102ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        mDialogRootLayout.setVisibility(View.VISIBLE);
103ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    }
104ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong
105ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    public void dismissDialog() {
106ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        if (mDialogRootLayout != null && mDialogRootLayout.getVisibility() != View.GONE) {
107ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong            fadeOutDialog();
108ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        }
109ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    }
110ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong
111ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    public void showAlertDialog(String title, String msg, String button1Text,
112ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong                final Runnable r1, String button2Text, final Runnable r2) {
113ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        resetRotateDialog();
114ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong
115ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        mRotateDialogTitle.setText(title);
116ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        mRotateDialogTitleLayout.setVisibility(View.VISIBLE);
117ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong
118ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        mRotateDialogText.setText(msg);
119ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong
120ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        if (button1Text != null) {
121ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong            mRotateDialogButton1.setText(button1Text);
122ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong            mRotateDialogButton1.setVisibility(View.VISIBLE);
123ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong            mRotateDialogButton1.setOnClickListener(new View.OnClickListener() {
124ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong                @Override
125ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong                public void onClick(View v) {
126ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong                    if (r1 != null) r1.run();
127ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong                    dismissDialog();
128ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong                }
129ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong            });
130ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong            mRotateDialogButtonLayout.setVisibility(View.VISIBLE);
131ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        }
132ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        if (button2Text != null) {
133ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong            mRotateDialogButton2.setText(button2Text);
134ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong            mRotateDialogButton2.setVisibility(View.VISIBLE);
135ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong            mRotateDialogButton2.setOnClickListener(new View.OnClickListener() {
136ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong                @Override
137ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong                public void onClick(View v) {
138ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong                    if (r2 != null) r2.run();
139ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong                    dismissDialog();
140ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong                }
141ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong            });
142ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong            mRotateDialogButtonLayout.setVisibility(View.VISIBLE);
143ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        }
144ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong
145ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        fadeInDialog();
146ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    }
147ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong
148ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    public void showWaitingDialog(String msg) {
149ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        resetRotateDialog();
150ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong
151ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        mRotateDialogText.setText(msg);
152ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        mRotateDialogSpinner.setVisibility(View.VISIBLE);
153ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong
154ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong        fadeInDialog();
155ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong    }
156ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong
157ae557ecc220f9d491e8c65b1c895827fbedcdafeAngus Kong}
158