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