Home | History | Annotate | Download | only in camera
      1 /*
      2  * Copyright (C) 2008 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.app.AlertDialog;
     21 import android.content.ActivityNotFoundException;
     22 import android.content.Context;
     23 import android.content.DialogInterface;
     24 import android.content.DialogInterface.OnClickListener;
     25 import android.content.Intent;
     26 import android.net.Uri;
     27 import android.provider.MediaStore;
     28 import android.provider.MediaStore.Images;
     29 import android.util.Log;
     30 import android.view.Menu;
     31 import android.view.MenuItem;
     32 import android.view.MenuItem.OnMenuItemClickListener;
     33 
     34 
     35 /**
     36  * A utility class to handle various kinds of menu operations.
     37  */
     38 public class MenuHelper {
     39     private static final String TAG = "MenuHelper";
     40 
     41     // TODO: These should be public and added to frameworks.
     42     private static final int INCLUDE_IMAGES = (1 << 0);
     43     private static final int INCLUDE_VIDEOS = (1 << 2);
     44 
     45     private static final int NO_ANIMATION = 0;
     46     private static final String CAMERA_CLASS = "com.android.camera.Camera";
     47     private static final String PANORAMA_CLASS = "com.android.camera.panorama.PanoramaActivity";
     48     private static final String VIDEO_CAMERA_CLASS = "com.android.camera.VideoCamera";
     49 
     50     public static void addSwitchModeMenuItem(Menu menu, int mode,
     51             final Runnable r) {
     52         int labelId, iconId;
     53         switch(mode) {
     54             case ModePicker.MODE_VIDEO:
     55                 labelId = R.string.switch_to_video_label;
     56                 iconId = R.drawable.ic_menu_camera_video_view;
     57                 break;
     58             case ModePicker.MODE_CAMERA:
     59                 labelId = R.string.switch_to_camera_label;
     60                 iconId = android.R.drawable.ic_menu_camera;
     61                 break;
     62             case ModePicker.MODE_PANORAMA:
     63                 labelId = R.string.switch_to_panorama_label;
     64                 iconId = R.drawable.btn_ic_panorama;
     65                 break;
     66             default:
     67                   // incorrect mode, do nothing.
     68                   return;
     69         }
     70         MenuItem item = menu.add(labelId).setOnMenuItemClickListener(
     71                 new OnMenuItemClickListener() {
     72             public boolean onMenuItemClick(MenuItem item) {
     73                 r.run();
     74                 return true;
     75             }
     76         });
     77         item.setIcon(iconId);
     78     }
     79 
     80     private static void startCameraActivity(Activity activity, Intent intent,
     81             String className) {
     82         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
     83         intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
     84         intent.setClassName(activity.getPackageName(), className);
     85 
     86         // Keep the camera instance for a while.
     87         // This avoids re-opening the camera and saves time.
     88         CameraHolder.instance().keep();
     89 
     90         try {
     91             activity.startActivity(intent);
     92         } catch (ActivityNotFoundException e) {
     93             intent.setComponent(null);
     94             activity.startActivity(intent);
     95         }
     96         activity.overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
     97     }
     98 
     99     public static void gotoMode(int mode, Activity activity) {
    100         String action, className;
    101         switch (mode) {
    102             case ModePicker.MODE_PANORAMA:
    103                 action = PANORAMA_CLASS;
    104                 className = PANORAMA_CLASS;
    105                 break;
    106             case ModePicker.MODE_VIDEO:
    107                 action = MediaStore.INTENT_ACTION_VIDEO_CAMERA;
    108                 className = VIDEO_CAMERA_CLASS;
    109                 break;
    110             case ModePicker.MODE_CAMERA:
    111                 action = MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA;
    112                 className = CAMERA_CLASS;
    113                 break;
    114             default:
    115                 Log.e(TAG, "unknown camera mode:" + mode);
    116                 return;
    117         }
    118         startCameraActivity(activity, new Intent(action), className);
    119     }
    120 
    121     public static void gotoVideoMode(Activity activity, boolean resetEffect) {
    122         Intent intent = new Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA);
    123         intent.putExtra(VideoCamera.RESET_EFFECT_EXTRA, resetEffect);
    124         startCameraActivity(activity, intent, VIDEO_CAMERA_CLASS);
    125     }
    126 
    127     public static void gotoCameraMode(Activity activity) {
    128         Intent intent = new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA);
    129         startCameraActivity(activity, intent, CAMERA_CLASS);
    130     }
    131 
    132     public static void gotoVideoMode(Activity activity, Intent intent) {
    133         startCameraActivity(activity, intent, VIDEO_CAMERA_CLASS);
    134      }
    135 
    136     public static void gotoCameraMode(Activity activity, Intent intent) {
    137         startCameraActivity(activity, intent, CAMERA_CLASS);
    138     }
    139 
    140     public static void gotoCameraImageGallery(Activity activity) {
    141         gotoGallery(activity, R.string.gallery_camera_bucket_name, INCLUDE_IMAGES);
    142     }
    143 
    144     public static void gotoCameraVideoGallery(Activity activity) {
    145         gotoGallery(activity, R.string.gallery_camera_videos_bucket_name, INCLUDE_VIDEOS);
    146     }
    147 
    148     private static void gotoGallery(Activity activity, int windowTitleId,
    149             int mediaTypes) {
    150         Uri target = Images.Media.EXTERNAL_CONTENT_URI.buildUpon()
    151                 .appendQueryParameter("bucketId", Storage.BUCKET_ID).build();
    152         Intent intent = new Intent(Intent.ACTION_VIEW, target);
    153         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    154         intent.putExtra("windowTitle", activity.getString(windowTitleId));
    155         intent.putExtra("mediaTypes", mediaTypes);
    156 
    157         try {
    158             activity.startActivity(intent);
    159         } catch (ActivityNotFoundException e) {
    160             Log.e(TAG, "Could not start gallery activity", e);
    161         }
    162     }
    163 }
    164