summaryrefslogtreecommitdiffstats
path: root/src/com/android/contacts/editor/EditorIntents.java
blob: a3c29fc8ce7fea51b2f77d30a3d7f161e785ca73 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
/*
 * Copyright (C) 2015 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.android.contacts.editor;

import com.android.contacts.activities.CompactContactEditorActivity;
import com.android.contacts.activities.ContactEditorActivity;
import com.android.contacts.activities.ContactEditorBaseActivity;
import com.android.contacts.common.model.RawContactDeltaList;
import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;

import android.content.ContentValues;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.Contacts;
import android.text.TextUtils;

import java.util.ArrayList;

/**
 * Creates Intents to edit contacts.
 */
public class EditorIntents {

    private EditorIntents() {
    }

    /**
     * Returns an Intent to start the {@link CompactContactEditorActivity} for an
     * existing contact.
     */
    public static Intent createCompactEditContactIntent(Uri contactLookupUri,
            MaterialPalette materialPalette, Bundle updatedPhotos, long photoId, long nameId) {
        final Intent intent = new Intent(Intent.ACTION_EDIT, contactLookupUri);
        putMaterialPalette(intent, materialPalette);
        putUpdatedPhotos(intent, updatedPhotos);
        putPhotoId(intent, photoId);
        putNameId(intent, nameId);
        return intent;
    }

    /**
     * Returns an Intent to start the {@link CompactContactEditorActivity} for a new contact.
     */
    public static Intent createCompactInsertContactIntent() {
        return createCompactInsertContactIntent(/* rawContactDeltaList =*/ null,
                /* displayName =*/ null, /* phoneticName =*/ null, /* updatedPhotos =*/ null);
    }

    /**
     * Returns an Intent to start the {@link CompactContactEditorActivity} for a new contact with
     * the field values specified by rawContactDeltaList pre-populate in the form.
     */
    public static Intent createCompactInsertContactIntent(RawContactDeltaList rawContactDeltaList,
            String displayName, String phoneticName, Bundle updatedPhotos) {
        final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
        if (rawContactDeltaList != null || displayName != null || phoneticName != null) {
            putRawContactDeltaValues(intent, rawContactDeltaList, displayName, phoneticName);
        }
        putUpdatedPhotos(intent, updatedPhotos);
        return intent;
    }

    /**
     * Returns an Intent to edit a different contact (in the fully expaned editor) with whatever
     * values were already entered on the currently displayed contact editor.
     */
    public static Intent createEditOtherContactIntent(Uri contactLookupUri,
            ArrayList<ContentValues> contentValues) {
        final Intent intent = new Intent(Intent.ACTION_EDIT, contactLookupUri);
        intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
                | Intent.FLAG_ACTIVITY_FORWARD_RESULT);
        intent.putExtra(ContactEditorFragment.INTENT_EXTRA_ADD_TO_DEFAULT_DIRECTORY, "");

        // Pass on all the data that has been entered so far
        if (contentValues != null && contentValues.size() != 0) {
            intent.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA, contentValues);
        }
        return intent;
    }

    /**
     * Returns an Intent to start the fully expanded {@link ContactEditorActivity} for a
     * new contact.
     */
    public static Intent createEditContactIntent(Uri contactLookupUri,
            MaterialPalette materialPalette, long photoId, long nameId) {
        final Intent intent = new Intent(ContactEditorBaseActivity.ACTION_EDIT, contactLookupUri);
        addContactIntentFlags(intent);
        putMaterialPalette(intent, materialPalette);
        putPhotoId(intent, photoId);
        putNameId(intent, nameId);
        return intent;
    }

    /**
     * Returns an Intent to start the fully expanded {@link ContactEditorActivity} for an
     * existing contact.
     */
    public static Intent createInsertContactIntent(RawContactDeltaList rawContactDeltaList,
            String displayName, String phoneticName, Bundle updatedPhotos) {
        final Intent intent = new Intent(ContactEditorBaseActivity.ACTION_INSERT,
                Contacts.CONTENT_URI);
        addContactIntentFlags(intent);
        putRawContactDeltaValues(intent, rawContactDeltaList, displayName, phoneticName);
        putUpdatedPhotos(intent, updatedPhotos);
        return intent;
    }


    private static void addContactIntentFlags(Intent intent) {
        intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
                | Intent.FLAG_ACTIVITY_FORWARD_RESULT);
    }

    private static void putMaterialPalette(Intent intent, MaterialPalette materialPalette) {
        if (materialPalette != null) {
            intent.putExtra(ContactEditorBaseFragment.INTENT_EXTRA_MATERIAL_PALETTE_PRIMARY_COLOR,
                    materialPalette.mPrimaryColor);
            intent.putExtra(ContactEditorBaseFragment.INTENT_EXTRA_MATERIAL_PALETTE_SECONDARY_COLOR,
                    materialPalette.mSecondaryColor);
        }
    }

    private static void putUpdatedPhotos(Intent intent, Bundle updatedPhotos) {
        if (updatedPhotos != null && !updatedPhotos.isEmpty()) {
            intent.putExtra(ContactEditorBaseFragment.INTENT_EXTRA_UPDATED_PHOTOS, updatedPhotos);
        }
    }

    private static void putPhotoId(Intent intent, long photoId) {
        if (photoId >= 0) {
            intent.putExtra(ContactEditorBaseFragment.INTENT_EXTRA_PHOTO_ID, photoId);
        }
    }

    private static void putNameId(Intent intent, long nameId) {
        if (nameId >= 0) {
            intent.putExtra(ContactEditorBaseFragment.INTENT_EXTRA_NAME_ID, nameId);
        }
    }

    private static void putRawContactDeltaValues(Intent intent,
            RawContactDeltaList rawContactDeltaList, String displayName, String phoneticName) {
        // Pass on all the data that has been entered so far
        if (rawContactDeltaList != null && !rawContactDeltaList.isEmpty()) {
            ArrayList<ContentValues> contentValues = rawContactDeltaList.get(0).getContentValues();
            if (contentValues != null && contentValues.size() != 0) {
                intent.putParcelableArrayListExtra(
                        ContactsContract.Intents.Insert.DATA, contentValues);
            }
        }
        // Names must be passed separately since they are skipped in RawContactModifier.parseValues
        if (!TextUtils.isEmpty(displayName)) {
            intent.putExtra(ContactsContract.Intents.Insert.NAME, displayName);
        }
        if (!TextUtils.isEmpty(phoneticName)) {
            intent.putExtra(ContactsContract.Intents.Insert.PHONETIC_NAME, phoneticName);
        }
    }
}