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