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