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    private static final String TAG = "RotateDialogController";
35    private static final long ANIM_DURATION = 150;  // millis
36
37    private Activity mActivity;
38    private int mLayoutResourceID;
39    private View mDialogRootLayout;
40    private RotateLayout mRotateDialog;
41    private View mRotateDialogTitleLayout;
42    private View mRotateDialogButtonLayout;
43    private TextView mRotateDialogTitle;
44    private ProgressBar mRotateDialogSpinner;
45    private TextView mRotateDialogText;
46    private TextView mRotateDialogButton1;
47    private TextView mRotateDialogButton2;
48
49    private Animation mFadeInAnim, mFadeOutAnim;
50
51    public RotateDialogController(Activity a, int layoutResource) {
52        mActivity = a;
53        mLayoutResourceID = layoutResource;
54    }
55
56    private void inflateDialogLayout() {
57        if (mDialogRootLayout == null) {
58            ViewGroup layoutRoot = (ViewGroup) mActivity.getWindow().getDecorView();
59            LayoutInflater inflater = mActivity.getLayoutInflater();
60            View v = inflater.inflate(mLayoutResourceID, layoutRoot);
61            mDialogRootLayout = v.findViewById(R.id.rotate_dialog_root_layout);
62            mRotateDialog = (RotateLayout) v.findViewById(R.id.rotate_dialog_layout);
63            mRotateDialogTitleLayout = v.findViewById(R.id.rotate_dialog_title_layout);
64            mRotateDialogButtonLayout = v.findViewById(R.id.rotate_dialog_button_layout);
65            mRotateDialogTitle = (TextView) v.findViewById(R.id.rotate_dialog_title);
66            mRotateDialogSpinner = (ProgressBar) v.findViewById(R.id.rotate_dialog_spinner);
67            mRotateDialogText = (TextView) v.findViewById(R.id.rotate_dialog_text);
68            mRotateDialogButton1 = (Button) v.findViewById(R.id.rotate_dialog_button1);
69            mRotateDialogButton2 = (Button) v.findViewById(R.id.rotate_dialog_button2);
70
71            mFadeInAnim = AnimationUtils.loadAnimation(
72                    mActivity, android.R.anim.fade_in);
73            mFadeOutAnim = AnimationUtils.loadAnimation(
74                    mActivity, android.R.anim.fade_out);
75            mFadeInAnim.setDuration(ANIM_DURATION);
76            mFadeOutAnim.setDuration(ANIM_DURATION);
77        }
78    }
79
80    @Override
81    public void setOrientation(int orientation) {
82        inflateDialogLayout();
83        mRotateDialog.setOrientation(orientation);
84    }
85
86    public void resetRotateDialog() {
87        inflateDialogLayout();
88        mRotateDialogTitleLayout.setVisibility(View.GONE);
89        mRotateDialogSpinner.setVisibility(View.GONE);
90        mRotateDialogButton1.setVisibility(View.GONE);
91        mRotateDialogButton2.setVisibility(View.GONE);
92        mRotateDialogButtonLayout.setVisibility(View.GONE);
93    }
94
95    private void fadeOutDialog() {
96        mDialogRootLayout.startAnimation(mFadeOutAnim);
97        mDialogRootLayout.setVisibility(View.GONE);
98    }
99
100    private void fadeInDialog() {
101        mDialogRootLayout.startAnimation(mFadeInAnim);
102        mDialogRootLayout.setVisibility(View.VISIBLE);
103    }
104
105    public void dismissDialog() {
106        if (mDialogRootLayout != null && mDialogRootLayout.getVisibility() != View.GONE) {
107            fadeOutDialog();
108        }
109    }
110
111    public void showAlertDialog(String title, String msg, String button1Text,
112                final Runnable r1, String button2Text, final Runnable r2) {
113        resetRotateDialog();
114
115        mRotateDialogTitle.setText(title);
116        mRotateDialogTitleLayout.setVisibility(View.VISIBLE);
117
118        mRotateDialogText.setText(msg);
119
120        if (button1Text != null) {
121            mRotateDialogButton1.setText(button1Text);
122            mRotateDialogButton1.setVisibility(View.VISIBLE);
123            mRotateDialogButton1.setOnClickListener(new View.OnClickListener() {
124                @Override
125                public void onClick(View v) {
126                    if (r1 != null) r1.run();
127                    dismissDialog();
128                }
129            });
130            mRotateDialogButtonLayout.setVisibility(View.VISIBLE);
131        }
132        if (button2Text != null) {
133            mRotateDialogButton2.setText(button2Text);
134            mRotateDialogButton2.setVisibility(View.VISIBLE);
135            mRotateDialogButton2.setOnClickListener(new View.OnClickListener() {
136                @Override
137                public void onClick(View v) {
138                    if (r2 != null) r2.run();
139                    dismissDialog();
140                }
141            });
142            mRotateDialogButtonLayout.setVisibility(View.VISIBLE);
143        }
144
145        fadeInDialog();
146    }
147
148    public void showWaitingDialog(String msg) {
149        resetRotateDialog();
150
151        mRotateDialogText.setText(msg);
152        mRotateDialogSpinner.setVisibility(View.VISIBLE);
153
154        fadeInDialog();
155    }
156
157}
158