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