Home | History | Annotate | Download | only in editor
      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 com.android.contacts.activities.CompactContactEditorActivity;
     19 import com.android.contacts.activities.ContactEditorActivity;
     20 import com.android.contacts.activities.ContactEditorBaseActivity;
     21 import com.android.contacts.common.model.RawContactDeltaList;
     22 import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
     23 
     24 import android.app.Activity;
     25 import android.content.ContentValues;
     26 import android.content.Context;
     27 import android.content.Intent;
     28 import android.net.Uri;
     29 import android.os.Bundle;
     30 import android.provider.ContactsContract;
     31 import android.provider.ContactsContract.Contacts;
     32 import android.text.TextUtils;
     33 
     34 import java.util.ArrayList;
     35 
     36 /**
     37  * Creates Intents to edit contacts.
     38  */
     39 public class EditorIntents {
     40 
     41     private EditorIntents() {
     42     }
     43 
     44     /**
     45      * Returns an Intent to start the {@link CompactContactEditorActivity} for an
     46      * existing contact.
     47      */
     48     public static Intent createCompactEditContactIntent(Uri contactLookupUri,
     49             MaterialPalette materialPalette, long photoId) {
     50         final Intent intent = new Intent(Intent.ACTION_EDIT, contactLookupUri);
     51         putMaterialPalette(intent, materialPalette);
     52         putPhotoId(intent, photoId);
     53         return intent;
     54     }
     55 
     56     /**
     57      * Returns an Intent to start the {@link CompactContactEditorActivity} for a new contact.
     58      */
     59     public static Intent createCompactInsertContactIntent() {
     60         return createCompactInsertContactIntent(/* rawContactDeltaList =*/ null,
     61                 /* displayName =*/ null, /* phoneticName =*/ null,
     62                 /* isNewLocalProfile =*/ false);
     63     }
     64 
     65     /**
     66      * Returns an Intent to start the {@link CompactContactEditorActivity} for a new contact with
     67      * the field values specified by rawContactDeltaList pre-populate in the form.
     68      */
     69     public static Intent createCompactInsertContactIntent(RawContactDeltaList rawContactDeltaList,
     70             String displayName, String phoneticName, /* Bundle updatedPhotos, */
     71             boolean isNewLocalProfile) {
     72         final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
     73         intent.putExtra(ContactEditorFragment.INTENT_EXTRA_NEW_LOCAL_PROFILE, isNewLocalProfile);
     74         if (rawContactDeltaList != null || displayName != null || phoneticName != null) {
     75             putRawContactDeltaValues(intent, rawContactDeltaList, displayName, phoneticName);
     76         }
     77         return intent;
     78     }
     79 
     80     /**
     81      * Returns an Intent to edit a different contact (in the fully expaned editor) with whatever
     82      * values were already entered on the currently displayed contact editor.
     83      */
     84     public static Intent createEditOtherContactIntent(Uri contactLookupUri,
     85             ArrayList<ContentValues> contentValues) {
     86         final Intent intent = new Intent(Intent.ACTION_EDIT, contactLookupUri);
     87         intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
     88                 | Intent.FLAG_ACTIVITY_FORWARD_RESULT);
     89         intent.putExtra(ContactEditorFragment.INTENT_EXTRA_ADD_TO_DEFAULT_DIRECTORY, "");
     90 
     91         // Pass on all the data that has been entered so far
     92         if (contentValues != null && contentValues.size() != 0) {
     93             intent.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA, contentValues);
     94         }
     95         return intent;
     96     }
     97 
     98     /**
     99      * Returns an Intent to start the fully expanded {@link ContactEditorActivity} for an
    100      * existing contact.
    101      */
    102     public static Intent createEditContactIntent(Uri contactLookupUri,
    103             MaterialPalette materialPalette, long photoId) {
    104         final Intent intent = new Intent(ContactEditorBaseActivity.ACTION_EDIT, contactLookupUri);
    105         addContactIntentFlags(intent);
    106         putMaterialPalette(intent, materialPalette);
    107         putPhotoId(intent, photoId);
    108         return intent;
    109     }
    110 
    111     /**
    112      * Returns an Intent to start the fully expanded {@link ContactEditorActivity} for a
    113      * new contact.
    114      */
    115     public static Intent createInsertContactIntent(RawContactDeltaList rawContactDeltaList,
    116             String displayName, String phoneticName, boolean isNewLocalProfile) {
    117         final Intent intent = new Intent(ContactEditorBaseActivity.ACTION_INSERT,
    118                 Contacts.CONTENT_URI);
    119         intent.putExtra(ContactEditorFragment.INTENT_EXTRA_NEW_LOCAL_PROFILE, isNewLocalProfile);
    120         addContactIntentFlags(intent);
    121         putRawContactDeltaValues(intent, rawContactDeltaList, displayName, phoneticName);
    122         return intent;
    123     }
    124 
    125     /**
    126      * Returns an Intent to start the full editor for the given raw contact. The full editor will
    127      * only display this one raw contact.
    128      */
    129     public static Intent createEditContactIntentForRawContact(Context context,
    130             Uri rawContactUri, long rawContactId, boolean isReadOnly) {
    131         final Intent intent = new Intent(context, ContactEditorActivity.class);
    132         intent.setAction(ContactEditorBaseActivity.ACTION_EDIT);
    133         intent.setData(rawContactUri);
    134         intent.putExtra(ContactEditorFragment.INTENT_EXTRA_RAW_CONTACT_ID_TO_DISPLAY_ALONE,
    135                 rawContactId);
    136         intent.putExtra(
    137                 ContactEditorBaseFragment.INTENT_EXTRA_RAW_CONTACT_DISPLAY_ALONE_IS_READ_ONLY,
    138                 isReadOnly);
    139         return intent;
    140     }
    141 
    142     private static void addContactIntentFlags(Intent intent) {
    143         intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
    144                 | Intent.FLAG_ACTIVITY_FORWARD_RESULT);
    145     }
    146 
    147     private static void putMaterialPalette(Intent intent, MaterialPalette materialPalette) {
    148         if (materialPalette != null) {
    149             intent.putExtra(ContactEditorBaseFragment.INTENT_EXTRA_MATERIAL_PALETTE_PRIMARY_COLOR,
    150                     materialPalette.mPrimaryColor);
    151             intent.putExtra(ContactEditorBaseFragment.INTENT_EXTRA_MATERIAL_PALETTE_SECONDARY_COLOR,
    152                     materialPalette.mSecondaryColor);
    153         }
    154     }
    155 
    156     private static void putPhotoId(Intent intent, long photoId) {
    157         if (photoId >= 0) {
    158             intent.putExtra(ContactEditorBaseFragment.INTENT_EXTRA_PHOTO_ID, photoId);
    159         }
    160     }
    161 
    162     private static void putRawContactDeltaValues(Intent intent,
    163             RawContactDeltaList rawContactDeltaList, String displayName, String phoneticName) {
    164         // Pass on all the data that has been entered so far
    165         if (rawContactDeltaList != null && !rawContactDeltaList.isEmpty()) {
    166             ArrayList<ContentValues> contentValues = rawContactDeltaList.get(0).getContentValues();
    167             if (contentValues != null && contentValues.size() != 0) {
    168                 intent.putParcelableArrayListExtra(
    169                         ContactsContract.Intents.Insert.DATA, contentValues);
    170             }
    171         }
    172         // Names must be passed separately since they are skipped in RawContactModifier.parseValues
    173         if (!TextUtils.isEmpty(displayName)) {
    174             intent.putExtra(ContactsContract.Intents.Insert.NAME, displayName);
    175         }
    176         if (!TextUtils.isEmpty(phoneticName)) {
    177             intent.putExtra(ContactsContract.Intents.Insert.PHONETIC_NAME, phoneticName);
    178         }
    179     }
    180 }
    181