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