Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6cb6f6f8 authored by Yorke Lee's avatar Yorke Lee
Browse files

Add "Add to contacts" button in QC for supported contacts

Allow users to directly add an unknown contact to local contacts
from the QC card. Nearby places contacts are not supported because
directory export support is disabled.

Bug: 10693314
Change-Id: I4c6a5850282460b61cff1ad1a341cb1cbcb546ca
parent fb9fde3b
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -58,6 +58,7 @@ import com.android.contacts.common.model.account.AccountType.EditType;
import com.android.contacts.common.model.account.AccountType.EventEditType;
import com.android.contacts.common.model.account.GoogleAccountType;
import com.android.contacts.common.model.dataitem.DataKind;
import com.android.contacts.model.dataitem.PhoneDataItem;
import com.android.contacts.model.dataitem.StructuredNameDataItem;
import com.android.contacts.util.DateUtils;
import com.android.contacts.util.NameConverter;
@@ -693,6 +694,8 @@ public class RawContactModifier {
            // Won't override the contact name
            if (StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) {
                continue;
            } else if (Phone.CONTENT_ITEM_TYPE.equals(mimeType)) {
                values.remove(PhoneDataItem.KEY_FORMATTED_PHONE_NUMBER);
            }

            DataKind kind = accountType.getKindForMimetype(mimeType);
+54 −16
Original line number Diff line number Diff line
@@ -37,6 +37,9 @@ import android.provider.ContactsContract.CommonDataKinds.SipAddress;
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
import android.provider.ContactsContract.CommonDataKinds.Website;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.DisplayNameSources;
import android.provider.ContactsContract.Intents.Insert;
import android.provider.ContactsContract.Directory;
import android.provider.ContactsContract.QuickContact;
import android.provider.ContactsContract.RawContacts;
import android.support.v13.app.FragmentPagerAdapter;
@@ -114,11 +117,12 @@ public class QuickContactActivity extends Activity {
    private View mLineAfterTrack;

    private ImageView mPhotoView;
    private ImageView mOpenDetailsImage;
    private ImageView mOpenDetailsOrAddContactImage;
    private ImageView mStarImage;
    private ViewPager mListPager;
    private ViewPagerAdapter mPagerAdapter;

    private Contact mContactData;
    private ContactLoader mContactLoader;

    private final ImageViewDrawableSetter mPhotoSetter = new ImageViewDrawableSetter();
@@ -159,6 +163,37 @@ public class QuickContactActivity extends Activity {
    private StopWatch mStopWatch = ENABLE_STOPWATCH
            ? StopWatch.start("QuickContact") : StopWatch.getNullStopWatch();

    final OnClickListener mOpenDetailsClickHandler = new OnClickListener() {
        @Override
        public void onClick(View v) {
            final Intent intent = new Intent(Intent.ACTION_VIEW, mLookupUri);
            mContactLoader.cacheResult();
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
            startActivity(intent);
            close(false);
        }
    };

    final OnClickListener mAddToContactsClickHandler = new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (mContactData == null) {
                Log.e(TAG, "Empty contact data when trying to add to contact");
                return;
            }
            final Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
            intent.setType(Contacts.CONTENT_ITEM_TYPE);

            // Only pre-fill the name field if the provided display name is an organization
            // name or better (e.g. structured name, nickname)
            if (mContactData.getDisplayNameSource() >= DisplayNameSources.ORGANIZATION) {
                intent.putExtra(Insert.NAME, mContactData.getDisplayName());
            }
            intent.putExtra(Insert.DATA, mContactData.getContentValues());
            startActivity(intent);
        }
    };

    @Override
    protected void onCreate(Bundle icicle) {
        mStopWatch.lap("c"); // create start
@@ -202,7 +237,7 @@ public class QuickContactActivity extends Activity {
        mFloatingLayout = (FloatingChildLayout) findViewById(R.id.floating_layout);
        mTrack = (ViewGroup) findViewById(R.id.track);
        mTrackScroller = (HorizontalScrollView) findViewById(R.id.track_scroller);
        mOpenDetailsImage = (ImageView) findViewById(R.id.contact_details_image);
        mOpenDetailsOrAddContactImage = (ImageView) findViewById(R.id.contact_details_image);
        mStarImage = (ImageView) findViewById(R.id.quickcontact_star_button);
        mListPager = (ViewPager) findViewById(R.id.item_list_pager);
        mSelectedTabRectangle = findViewById(R.id.selected_tab_rectangle);
@@ -216,17 +251,7 @@ public class QuickContactActivity extends Activity {
            }
        });

        final OnClickListener openDetailsClickHandler = new OnClickListener() {
            @Override
            public void onClick(View v) {
                final Intent intent = new Intent(Intent.ACTION_VIEW, mLookupUri);
                mContactLoader.cacheResult();
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
                startActivity(intent);
                close(false);
            }
        };
        mOpenDetailsImage.setOnClickListener(openDetailsClickHandler);
        mOpenDetailsOrAddContactImage.setOnClickListener(mOpenDetailsClickHandler);

        mPagerAdapter = new ViewPagerAdapter(getFragmentManager());
        mListPager.setAdapter(mPagerAdapter);
@@ -243,7 +268,7 @@ public class QuickContactActivity extends Activity {
        setHeaderNameText(R.id.name, R.string.missing_name);

        mPhotoView = (ImageView) mPhotoContainer.findViewById(R.id.photo);
        mPhotoView.setOnClickListener(openDetailsClickHandler);
        mPhotoView.setOnClickListener(mOpenDetailsClickHandler);

        mStopWatch.lap("v"); // view initialized

@@ -341,11 +366,12 @@ public class QuickContactActivity extends Activity {
     * Handle the result from the ContactLoader
     */
    private void bindData(Contact data) {
        mContactData = data;
        final ResolveCache cache = ResolveCache.getInstance(this);
        final Context context = this;

        mOpenDetailsImage.setVisibility(isMimeExcluded(Contacts.CONTENT_ITEM_TYPE) ? View.GONE
                : View.VISIBLE);
        mOpenDetailsOrAddContactImage.setVisibility(isMimeExcluded(Contacts.CONTENT_ITEM_TYPE) ?
                View.GONE : View.VISIBLE);
        final boolean isStarred = data.getStarred();
        if (isStarred) {
            mStarImage.setImageResource(R.drawable.ic_favorite_on_lt);
@@ -357,7 +383,19 @@ public class QuickContactActivity extends Activity {
        // If this is a json encoded URI, there is no local contact to star
        if (UriUtils.isEncodedContactUri(lookupUri)) {
            mStarImage.setVisibility(View.GONE);

            // If directory export support is not allowed, then don't allow the user to add
            // to contacts
            if (mContactData.getDirectoryExportSupport() == Directory.EXPORT_SUPPORT_NONE) {
                mOpenDetailsOrAddContactImage.setImageResource(R.drawable.ic_contacts_holo_dark);
                mOpenDetailsOrAddContactImage.setOnClickListener(mOpenDetailsClickHandler);
            } else {
                mOpenDetailsOrAddContactImage.setImageResource(R.drawable.ic_add_contact_holo_dark);
                mOpenDetailsOrAddContactImage.setOnClickListener(mAddToContactsClickHandler);
            }
        } else {
            mOpenDetailsOrAddContactImage.setImageResource(R.drawable.ic_contacts_holo_dark);
            mOpenDetailsOrAddContactImage.setOnClickListener(mOpenDetailsClickHandler);
            mStarImage.setVisibility(View.VISIBLE);
            mStarImage.setOnClickListener(new OnClickListener() {
                @Override