RotateDialogController.java revision 913f3784d368a5e11fee5d5db2c355ef832685da
16acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*
26acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * Copyright (C) 2011 The Android Open Source Project
36acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *
46acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * Licensed under the Apache License, Version 2.0 (the "License");
56acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * you may not use this file except in compliance with the License.
66acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * You may obtain a copy of the License at
76acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *
86acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *      http://www.apache.org/licenses/LICENSE-2.0
96acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *
106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * Unless required by applicable law or agreed to in writing, software
116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * distributed under the License is distributed on an "AS IS" BASIS,
126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * See the License for the specific language governing permissions and
146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * limitations under the License.
156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn */
166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennpackage com.android.camera;
186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennimport com.android.camera.ui.Rotatable;
206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennimport com.android.camera.ui.RotateLayout;
216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennimport android.app.Activity;
236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennimport android.view.LayoutInflater;
246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennimport android.view.View;
256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennimport android.view.ViewGroup;
266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennimport android.view.animation.Animation;
276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennimport android.view.animation.AnimationUtils;
286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennimport android.widget.Button;
296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennimport android.widget.TextView;
306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennimport android.widget.ProgressBar;
316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennpublic class RotateDialogController implements Rotatable {
336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    @SuppressWarnings("unused")
356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    private static final String TAG = "RotateDialogController";
366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    private static final long ANIM_DURATION = 150;  // millis
376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    private Activity mActivity;
396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    private int mLayoutResourceID;
406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    private View mDialogRootLayout;
416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    private RotateLayout mRotateDialog;
426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    private View mRotateDialogTitleLayout;
436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    private View mRotateDialogButtonLayout;
446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    private TextView mRotateDialogTitle;
456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    private ProgressBar mRotateDialogSpinner;
466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    private TextView mRotateDialogText;
476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    private TextView mRotateDialogButton1;
486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    private TextView mRotateDialogButton2;
496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    private Animation mFadeInAnim, mFadeOutAnim;
516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    public RotateDialogController(Activity a, int layoutResource) {
536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        mActivity = a;
546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        mLayoutResourceID = layoutResource;
556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    private void inflateDialogLayout() {
586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        if (mDialogRootLayout == null) {
596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            ViewGroup layoutRoot = (ViewGroup) mActivity.getWindow().getDecorView();
606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            LayoutInflater inflater = mActivity.getLayoutInflater();
616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            View v = inflater.inflate(mLayoutResourceID, layoutRoot);
626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            mDialogRootLayout = v.findViewById(R.id.rotate_dialog_root_layout);
636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            mRotateDialog = (RotateLayout) v.findViewById(R.id.rotate_dialog_layout);
646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            mRotateDialogTitleLayout = v.findViewById(R.id.rotate_dialog_title_layout);
656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            mRotateDialogButtonLayout = v.findViewById(R.id.rotate_dialog_button_layout);
666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            mRotateDialogTitle = (TextView) v.findViewById(R.id.rotate_dialog_title);
676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            mRotateDialogSpinner = (ProgressBar) v.findViewById(R.id.rotate_dialog_spinner);
686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            mRotateDialogText = (TextView) v.findViewById(R.id.rotate_dialog_text);
696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            mRotateDialogButton1 = (Button) v.findViewById(R.id.rotate_dialog_button1);
706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            mRotateDialogButton2 = (Button) v.findViewById(R.id.rotate_dialog_button2);
716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            mFadeInAnim = AnimationUtils.loadAnimation(
736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                    mActivity, android.R.anim.fade_in);
746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            mFadeOutAnim = AnimationUtils.loadAnimation(
756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                    mActivity, android.R.anim.fade_out);
766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            mFadeInAnim.setDuration(ANIM_DURATION);
776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            mFadeOutAnim.setDuration(ANIM_DURATION);
786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        }
796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    @Override
826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    public void setOrientation(int orientation, boolean animation) {
836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        inflateDialogLayout();
846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        mRotateDialog.setOrientation(orientation, animation);
856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    public void resetRotateDialog() {
886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        inflateDialogLayout();
896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        mRotateDialogTitleLayout.setVisibility(View.GONE);
906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        mRotateDialogSpinner.setVisibility(View.GONE);
916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        mRotateDialogButton1.setVisibility(View.GONE);
926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        mRotateDialogButton2.setVisibility(View.GONE);
936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        mRotateDialogButtonLayout.setVisibility(View.GONE);
946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    private void fadeOutDialog() {
976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        mDialogRootLayout.startAnimation(mFadeOutAnim);
986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        mDialogRootLayout.setVisibility(View.GONE);
996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
1006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    private void fadeInDialog() {
1026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        mDialogRootLayout.startAnimation(mFadeInAnim);
1036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        mDialogRootLayout.setVisibility(View.VISIBLE);
1046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
1056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    public void dismissDialog() {
1076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        if (mDialogRootLayout != null && mDialogRootLayout.getVisibility() != View.GONE) {
1086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            fadeOutDialog();
1096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        }
1106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
1116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    public void showAlertDialog(String title, String msg, String button1Text,
1136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                final Runnable r1, String button2Text, final Runnable r2) {
1146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        resetRotateDialog();
1156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        mRotateDialogTitle.setText(title);
1176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        mRotateDialogTitleLayout.setVisibility(View.VISIBLE);
1186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        mRotateDialogText.setText(msg);
1206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        if (button1Text != null) {
1226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            mRotateDialogButton1.setText(button1Text);
1236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            mRotateDialogButton1.setVisibility(View.VISIBLE);
1246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            mRotateDialogButton1.setOnClickListener(new View.OnClickListener() {
1256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                @Override
1266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                public void onClick(View v) {
1276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                    if (r1 != null) r1.run();
1286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                    dismissDialog();
1296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                }
1306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            });
1316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            mRotateDialogButtonLayout.setVisibility(View.VISIBLE);
1326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        }
1336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        if (button2Text != null) {
1346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            mRotateDialogButton2.setText(button2Text);
1356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            mRotateDialogButton2.setVisibility(View.VISIBLE);
1366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            mRotateDialogButton2.setOnClickListener(new View.OnClickListener() {
1376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                @Override
1386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                public void onClick(View v) {
1396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                    if (r2 != null) r2.run();
1406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                    dismissDialog();
1416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                }
1426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            });
1436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            mRotateDialogButtonLayout.setVisibility(View.VISIBLE);
1446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        }
1456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        fadeInDialog();
1476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
1486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    public void showWaitingDialog(String msg) {
1506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        resetRotateDialog();
1516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        mRotateDialogText.setText(msg);
1536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        mRotateDialogSpinner.setVisibility(View.VISIBLE);
1546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        fadeInDialog();
1566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
1576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
1596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn