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 17 package com.android.camera; 18 19 import com.android.camera.ui.Rotatable; 20 import com.android.camera.ui.RotateLayout; 21 22 import android.app.Activity; 23 import android.view.LayoutInflater; 24 import android.view.View; 25 import android.view.ViewGroup; 26 import android.view.animation.Animation; 27 import android.view.animation.AnimationUtils; 28 import android.widget.Button; 29 import android.widget.TextView; 30 import android.widget.ProgressBar; 31 32 public 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 RotateDialogController(Activity a, int layoutResource)51 public RotateDialogController(Activity a, int layoutResource) { 52 mActivity = a; 53 mLayoutResourceID = layoutResource; 54 } 55 inflateDialogLayout()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 setOrientation(int orientation)81 public void setOrientation(int orientation) { 82 inflateDialogLayout(); 83 mRotateDialog.setOrientation(orientation); 84 } 85 resetRotateDialog()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 fadeOutDialog()95 private void fadeOutDialog() { 96 mDialogRootLayout.startAnimation(mFadeOutAnim); 97 mDialogRootLayout.setVisibility(View.GONE); 98 } 99 fadeInDialog()100 private void fadeInDialog() { 101 mDialogRootLayout.startAnimation(mFadeInAnim); 102 mDialogRootLayout.setVisibility(View.VISIBLE); 103 } 104 dismissDialog()105 public void dismissDialog() { 106 if (mDialogRootLayout != null && mDialogRootLayout.getVisibility() != View.GONE) { 107 fadeOutDialog(); 108 } 109 } 110 showAlertDialog(String title, String msg, String button1Text, final Runnable r1, String button2Text, final Runnable r2)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 showWaitingDialog(String msg)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