blob: 484747d9084c58002723df029850bbbdb3d1dbd7 [file] [log] [blame]
Gary Maia6c80b32016-09-30 16:34:55 -07001package com.android.contacts.editor;
2
3import android.app.AlertDialog;
4import android.app.Dialog;
5import android.app.DialogFragment;
6import android.content.Context;
7import android.content.DialogInterface;
8import android.content.Intent;
9import android.database.Cursor;
10import android.net.Uri;
11import android.os.Bundle;
12import android.view.LayoutInflater;
13import android.view.View;
14import android.view.ViewGroup;
15import android.widget.CursorAdapter;
16import android.widget.ImageView;
17import android.widget.TextView;
18
19import com.android.contacts.R;
20import com.android.contacts.common.ContactPhotoManager;
21import com.android.contacts.common.model.AccountTypeManager;
22import com.android.contacts.common.model.account.AccountType;
23import com.android.contacts.common.preference.ContactsPreferences;
24import com.android.contacts.common.util.ImplicitIntentsUtil;
25import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
26
27/**
28 * Dialog containing the raw contacts that make up a contact. On selection the editor is loaded
29 * for the chosen raw contact.
30 */
31public class PickRawContactDialogFragment extends DialogFragment {
32 /**
33 * Used to list the account info for the given raw contacts list.
34 */
35 private static final class RawContactAccountListAdapter extends CursorAdapter {
36 private final LayoutInflater mInflater;
37 private final Context mContext;
38
39 public RawContactAccountListAdapter(Context context, Cursor cursor) {
40 super(context, cursor, 0);
41 mContext = context;
42 mInflater = LayoutInflater.from(context);
43 }
44
45 @Override
46 public void bindView(View view, Context context, Cursor cursor) {
47 final long rawContactId = cursor.getLong(PickRawContactLoader.RAW_CONTACT_ID);
48 final String accountName = cursor.getString(PickRawContactLoader.ACCOUNT_NAME);
49 final String accountType = cursor.getString(PickRawContactLoader.ACCOUNT_TYPE);
50 final String dataSet = cursor.getString(PickRawContactLoader.DATA_SET);
51 final AccountType account = AccountTypeManager.getInstance(mContext)
52 .getAccountType(accountType, dataSet);
53
54 final ContactsPreferences prefs = new ContactsPreferences(mContext);
55 final int displayNameColumn =
56 prefs.getDisplayOrder() == ContactsPreferences.DISPLAY_ORDER_PRIMARY
57 ? PickRawContactLoader.DISPLAY_NAME_PRIMARY
58 : PickRawContactLoader.DISPLAY_NAME_ALTERNATIVE;
59 String displayName = cursor.getString(displayNameColumn);
60
61 final TextView nameView = (TextView) view.findViewById(
62 R.id.display_name);
63 final TextView accountTextView = (TextView) view.findViewById(
64 R.id.account_name);
65 final ImageView accountIconView = (ImageView) view.findViewById(
66 R.id.account_icon);
67
68 if (!account.areContactsWritable()) {
69 displayName = mContext
70 .getString(R.string.contact_editor_pick_raw_contact_read_only, displayName);
71 view.setAlpha(.38f);
72 } else {
73 view.setAlpha(1f);
74 }
75
76 nameView.setText(displayName);
77 accountTextView.setText(accountName);
78 accountIconView.setImageDrawable(account.getDisplayIcon(mContext));
79
80 final ContactPhotoManager.DefaultImageRequest
81 request = new ContactPhotoManager.DefaultImageRequest(
82 displayName, String.valueOf(rawContactId), /* isCircular = */ true);
83 final ImageView photoView = (ImageView) view.findViewById(
84 R.id.photo);
85 ContactPhotoManager.getInstance(mContext).loadDirectoryPhoto(photoView,
86 ContactPhotoManager.getDefaultAvatarUriForContact(request),
87 /* darkTheme = */ false,
88 /* isCircular = */ true,
89 request);
90 }
91
92 @Override
93 public View newView(Context context, Cursor cursor, ViewGroup parent) {
94 return mInflater.inflate(R.layout.raw_contact_list_item, parent, false);
95 }
96
97 @Override
98 public long getItemId(int position) {
99 getCursor().moveToPosition(position);
100 return getCursor().getLong(PickRawContactLoader.RAW_CONTACT_ID);
101 }
102 }
103
104 // Cursor holding all raw contact rows for the given Contact.
105 private Cursor mCursor;
106 // Uri for the whole Contact.
107 private Uri mUri;
Gary Maiea2f3572016-10-11 17:30:28 -0700108 private CursorAdapter mAdapter;
Gary Maia6c80b32016-09-30 16:34:55 -0700109 private MaterialPalette mMaterialPalette;
110
111 public static PickRawContactDialogFragment getInstance(Uri uri, Cursor cursor,
112 MaterialPalette materialPalette) {
113 final PickRawContactDialogFragment fragment = new PickRawContactDialogFragment();
114 fragment.setUri(uri);
115 fragment.setCursor(cursor);
116 fragment.setMaterialPalette(materialPalette);
117 return fragment;
118 }
119
120 @Override
121 public Dialog onCreateDialog(Bundle savedInstanceState) {
122 final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
Gary Maiea2f3572016-10-11 17:30:28 -0700123 mAdapter = new RawContactAccountListAdapter(getContext(), mCursor);
Gary Maia6c80b32016-09-30 16:34:55 -0700124 builder.setTitle(R.string.contact_editor_pick_raw_contact_dialog_title);
Gary Maiea2f3572016-10-11 17:30:28 -0700125 builder.setAdapter(mAdapter, new DialogInterface.OnClickListener() {
Gary Maia6c80b32016-09-30 16:34:55 -0700126 @Override
127 public void onClick(DialogInterface dialog, int which) {
Gary Maiea2f3572016-10-11 17:30:28 -0700128 final long rawContactId = mAdapter.getItemId(which);
Gary Maia6c80b32016-09-30 16:34:55 -0700129 final Intent intent = EditorIntents.createEditContactIntentForRawContact(
130 getActivity(), mUri, rawContactId, mMaterialPalette);
131 intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
132 ImplicitIntentsUtil.startActivityInApp(getActivity(), intent);
133 }
134 });
135 builder.setCancelable(true);
136 return builder.create();
137 }
138
139 @Override
140 public void onDismiss(DialogInterface dialog) {
141 super.onDismiss(dialog);
142 mCursor = null;
143 finishActivity();
144 }
145
146 private void setUri(Uri uri) {
147 mUri = uri;
148 }
149
Gary Maiea2f3572016-10-11 17:30:28 -0700150 public void setCursor(Cursor cursor) {
151 if (mAdapter != null) {
152 mAdapter.swapCursor(cursor);
153 }
Gary Maia6c80b32016-09-30 16:34:55 -0700154 mCursor = cursor;
155 }
156
157 private void setMaterialPalette(MaterialPalette materialPalette) {
158 mMaterialPalette = materialPalette;
159 }
160
161 private void finishActivity() {
162 if (getActivity() != null && !getActivity().isFinishing()) {
163 getActivity().finish();
164 }
165 }
166}