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 package com.android.contacts.editor;
17 
18 import android.content.ContentValues;
19 import android.content.Context;
20 import android.content.Intent;
21 import android.net.Uri;
22 import android.provider.ContactsContract;
23 import android.provider.ContactsContract.Contacts;
24 import android.text.TextUtils;
25 
26 import com.android.contacts.activities.ContactEditorActivity;
27 import com.android.contacts.activities.ContactEditorSpringBoardActivity;
28 import com.android.contacts.model.RawContactDeltaList;
29 import com.android.contacts.util.MaterialColorMapUtils.MaterialPalette;
30 
31 import java.util.ArrayList;
32 
33 /**
34  * Creates Intents to edit contacts.
35  */
36 public class EditorIntents {
37 
EditorIntents()38     private EditorIntents() {
39     }
40 
41     /**
42      * Returns an Intent to start the {@link ContactEditorSpringBoardActivity} for an
43      * existing contact.
44      */
createEditContactIntent(Context context, Uri uri, MaterialPalette materialPalette, long photoId)45     public static Intent createEditContactIntent(Context context, Uri uri,
46             MaterialPalette materialPalette, long photoId) {
47         final Intent intent = new Intent(Intent.ACTION_EDIT, uri, context,
48                 ContactEditorSpringBoardActivity.class);
49         putMaterialPalette(intent, materialPalette);
50         putPhotoId(intent, photoId);
51         return intent;
52     }
53 
createViewLinkedContactsIntent(Context context, Uri uri, MaterialPalette materialPalette)54     public static Intent createViewLinkedContactsIntent(Context context, Uri uri,
55             MaterialPalette materialPalette) {
56         final Intent intent = createEditContactIntent(context, uri, materialPalette,
57                 /* photoId */ -1);
58         intent.putExtra(ContactEditorSpringBoardActivity.EXTRA_SHOW_READ_ONLY, true);
59 
60         return intent;
61     }
62 
63     /**
64      * Returns an Intent to start the {@link ContactEditorActivity} for the given raw contact.
65      */
createEditContactIntentForRawContact(Context context, Uri uri, long rawContactId, MaterialPalette materialPalette)66     public static Intent createEditContactIntentForRawContact(Context context,
67             Uri uri, long rawContactId, MaterialPalette materialPalette) {
68         final Intent intent = new Intent(Intent.ACTION_EDIT, uri, context,
69                 ContactEditorActivity.class);
70         intent.putExtra(ContactEditorFragment.INTENT_EXTRA_RAW_CONTACT_ID_TO_DISPLAY_ALONE,
71                 rawContactId);
72         putMaterialPalette(intent, materialPalette);
73         return intent;
74     }
75 
76     /**
77      * Returns an Intent to start the {@link ContactEditorActivity} for a new contact with
78      * the field values specified by rawContactDeltaList pre-populate in the form.
79      */
createInsertContactIntent(Context context, RawContactDeltaList rawContactDeltaList, String displayName, String phoneticName, boolean isNewLocalProfile)80     public static Intent createInsertContactIntent(Context context,
81             RawContactDeltaList rawContactDeltaList, String displayName, String phoneticName,
82             /* Bundle updatedPhotos, */ boolean isNewLocalProfile) {
83         final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI,
84                 context, ContactEditorActivity.class);
85         intent.putExtra(
86                 ContactEditorFragment.INTENT_EXTRA_NEW_LOCAL_PROFILE, isNewLocalProfile);
87         putRawContactDeltaValues(intent, rawContactDeltaList, displayName, phoneticName);
88         return intent;
89     }
90 
91     /**
92      * Returns an Intent to edit a different raw contact in the editor with whatever
93      * values were already entered on the current editor.
94      */
createEditOtherRawContactIntent(Context context, Uri uri, long rawContactId, ArrayList<ContentValues> contentValues)95     public static Intent createEditOtherRawContactIntent(Context context, Uri uri,
96             long rawContactId, ArrayList<ContentValues> contentValues) {
97         final Intent intent = new Intent(Intent.ACTION_EDIT, uri, context,
98                 ContactEditorActivity.class);
99         intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
100                 | Intent.FLAG_ACTIVITY_FORWARD_RESULT);
101         intent.putExtra(ContactEditorFragment.INTENT_EXTRA_ADD_TO_DEFAULT_DIRECTORY, "");
102         intent.putExtra(ContactEditorFragment.INTENT_EXTRA_RAW_CONTACT_ID_TO_DISPLAY_ALONE,
103                 rawContactId);
104         // Pass on all the data that has been entered so far
105         if (contentValues != null && contentValues.size() != 0) {
106             intent.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA, contentValues);
107         }
108         return intent;
109     }
110 
putMaterialPalette(Intent intent, MaterialPalette materialPalette)111     private static void putMaterialPalette(Intent intent, MaterialPalette materialPalette) {
112         if (materialPalette != null) {
113             intent.putExtra(
114                     ContactEditorFragment.INTENT_EXTRA_MATERIAL_PALETTE_PRIMARY_COLOR,
115                     materialPalette.mPrimaryColor);
116             intent.putExtra(
117                     ContactEditorFragment.INTENT_EXTRA_MATERIAL_PALETTE_SECONDARY_COLOR,
118                     materialPalette.mSecondaryColor);
119         }
120     }
121 
putPhotoId(Intent intent, long photoId)122     private static void putPhotoId(Intent intent, long photoId) {
123         if (photoId >= 0) {
124             intent.putExtra(ContactEditorFragment.INTENT_EXTRA_PHOTO_ID, photoId);
125         }
126     }
127 
putRawContactDeltaValues(Intent intent, RawContactDeltaList rawContactDeltaList, String displayName, String phoneticName)128     private static void putRawContactDeltaValues(Intent intent,
129             RawContactDeltaList rawContactDeltaList, String displayName, String phoneticName) {
130         // Pass on all the data that has been entered so far
131         if (rawContactDeltaList != null && !rawContactDeltaList.isEmpty()) {
132             ArrayList<ContentValues> contentValues = rawContactDeltaList.get(0).getContentValues();
133             if (contentValues != null && contentValues.size() != 0) {
134                 intent.putParcelableArrayListExtra(
135                         ContactsContract.Intents.Insert.DATA, contentValues);
136             }
137         }
138         // Names must be passed separately since they are skipped in RawContactModifier.parseValues
139         if (!TextUtils.isEmpty(displayName)) {
140             intent.putExtra(ContactsContract.Intents.Insert.NAME, displayName);
141         }
142         if (!TextUtils.isEmpty(phoneticName)) {
143             intent.putExtra(ContactsContract.Intents.Insert.PHONETIC_NAME, phoneticName);
144         }
145     }
146 }
147