1 /*
2  * Copyright (C) 2015 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.contacts.editor;
18 
19 import com.android.contacts.R;
20 import com.android.contacts.editor.PhotoActionPopup.ChoiceListItem;
21 
22 import android.app.Activity;
23 import android.app.AlertDialog;
24 import android.app.Dialog;
25 import android.app.DialogFragment;
26 import android.content.DialogInterface;
27 import android.content.DialogInterface.OnClickListener;
28 import android.os.Bundle;
29 
30 import java.util.ArrayList;
31 
32 /**
33  * Displays the options for changing the contact photo.
34  */
35 public class PhotoSourceDialogFragment extends DialogFragment {
36 
37     private static final String ARG_PHOTO_MODE = "photoMode";
38 
39     /**
40      * Callbacks for the host of the {@link PhotoSourceDialogFragment}.
41      */
42     public interface Listener {
onRemovePictureChosen()43         void onRemovePictureChosen();
onTakePhotoChosen()44         void onTakePhotoChosen();
onPickFromGalleryChosen()45         void onPickFromGalleryChosen();
46     }
47 
show(Activity activity, int photoMode)48     public static void show(Activity activity, int photoMode) {
49         if (!(activity instanceof Listener)) {
50             throw new IllegalArgumentException(
51                     "Activity must implement " + Listener.class.getName());
52         }
53         final Bundle args = new Bundle();
54         args.putInt(ARG_PHOTO_MODE, photoMode);
55 
56         PhotoSourceDialogFragment dialog = new PhotoSourceDialogFragment();
57         dialog.setArguments(args);
58         dialog.show(activity.getFragmentManager(), "photoSource");
59     }
60 
61     @Override
onCreateDialog(Bundle savedInstanceState)62     public Dialog onCreateDialog(Bundle savedInstanceState) {
63         // Get the available options for changing the photo
64         final int photoMode = getArguments().getInt(ARG_PHOTO_MODE);
65         final ArrayList<ChoiceListItem> choices =
66                 PhotoActionPopup.getChoices(getActivity(), photoMode);
67 
68         // Prepare the AlertDialog items and click listener
69         final CharSequence[] items = new CharSequence[choices.size()];
70         for (int i = 0; i < items.length; i++) {
71             items[i] = choices.get(i).toString();
72         }
73         final OnClickListener clickListener = new OnClickListener() {
74             @Override
75             public void onClick(DialogInterface dialogInterface, int which) {
76                 final Listener listener = (Listener) getActivity();
77                 final ChoiceListItem choice = choices.get(which);
78                 switch (choice.getId()) {
79                     case ChoiceListItem.ID_REMOVE:
80                         listener.onRemovePictureChosen();
81                         break;
82                     case ChoiceListItem.ID_TAKE_PHOTO:
83                         listener.onTakePhotoChosen();
84                         break;
85                     case ChoiceListItem.ID_PICK_PHOTO:
86                         listener.onPickFromGalleryChosen();
87                         break;
88                 }
89                 dismiss();
90             }
91         };
92 
93         // Build the AlertDialog
94         final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
95         builder.setTitle(R.string.menu_change_photo);
96         builder.setItems(items, clickListener);
97         builder.setNegativeButton(android.R.string.cancel, /* listener =*/ null);
98         return builder.create();
99     }
100 }
101