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

Commit 02f304f7 authored by Yorke Lee's avatar Yorke Lee
Browse files

Allow supplying extras when assigning QuickContactsBadge

Add assignContactFromEmail(String, boolean, Bundle)
and assignContactFromPhone(String, boolean, Bundle)
that allow the caller to provide a bundle of extras to
pre-populate the ContactEditorFragment with if a contact
is not found with the requested email address or phone number.

Bug: 7038382
Change-Id: Ib77fa484e1c39cb60d7acc27efe3a3fcf3fee62f
parent c19b5497
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -28963,7 +28963,9 @@ package android.widget {
    ctor public QuickContactBadge(android.content.Context, android.util.AttributeSet);
    ctor public QuickContactBadge(android.content.Context, android.util.AttributeSet);
    ctor public QuickContactBadge(android.content.Context, android.util.AttributeSet, int);
    ctor public QuickContactBadge(android.content.Context, android.util.AttributeSet, int);
    method public void assignContactFromEmail(java.lang.String, boolean);
    method public void assignContactFromEmail(java.lang.String, boolean);
    method public void assignContactFromEmail(java.lang.String, boolean, android.os.Bundle);
    method public void assignContactFromPhone(java.lang.String, boolean);
    method public void assignContactFromPhone(java.lang.String, boolean);
    method public void assignContactFromPhone(java.lang.String, boolean, android.os.Bundle);
    method public void assignContactUri(android.net.Uri);
    method public void assignContactUri(android.net.Uri);
    method public void onClick(android.view.View);
    method public void onClick(android.view.View);
    method public void setExcludeMimes(java.lang.String[]);
    method public void setExcludeMimes(java.lang.String[]);
+58 −5
Original line number Original line Diff line number Diff line
@@ -27,6 +27,7 @@ import android.database.Cursor;
import android.graphics.Canvas;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Intents;
import android.provider.ContactsContract.Intents;
@@ -50,6 +51,7 @@ public class QuickContactBadge extends ImageView implements OnClickListener {
    private Drawable mOverlay;
    private Drawable mOverlay;
    private QueryHandler mQueryHandler;
    private QueryHandler mQueryHandler;
    private Drawable mDefaultAvatar;
    private Drawable mDefaultAvatar;
    private Bundle mExtras = null;


    protected String[] mExcludeMimes = null;
    protected String[] mExcludeMimes = null;


@@ -58,6 +60,8 @@ public class QuickContactBadge extends ImageView implements OnClickListener {
    static final private int TOKEN_EMAIL_LOOKUP_AND_TRIGGER = 2;
    static final private int TOKEN_EMAIL_LOOKUP_AND_TRIGGER = 2;
    static final private int TOKEN_PHONE_LOOKUP_AND_TRIGGER = 3;
    static final private int TOKEN_PHONE_LOOKUP_AND_TRIGGER = 3;


    static final private String EXTRA_URI_CONTENT = "uri_content";

    static final String[] EMAIL_LOOKUP_PROJECTION = new String[] {
    static final String[] EMAIL_LOOKUP_PROJECTION = new String[] {
        RawContacts.CONTACT_ID,
        RawContacts.CONTACT_ID,
        Contacts.LOOKUP_KEY,
        Contacts.LOOKUP_KEY,
@@ -175,7 +179,26 @@ public class QuickContactBadge extends ImageView implements OnClickListener {
     * until this view is clicked.
     * until this view is clicked.
     */
     */
    public void assignContactFromEmail(String emailAddress, boolean lazyLookup) {
    public void assignContactFromEmail(String emailAddress, boolean lazyLookup) {
        assignContactFromEmail(emailAddress, lazyLookup, null);
    }

    /**
     * Assign a contact based on an email address. This should only be used when
     * the contact's URI is not available, as an extra query will have to be
     * performed to lookup the URI based on the email.

     @param emailAddress The email address of the contact.
     @param lazyLookup If this is true, the lookup query will not be performed
     until this view is clicked.
     @param extras A bundle of extras to populate the contact edit page with if the contact
     is not found and the user chooses to add the email address to an existing contact or
     create a new contact. Uses the same string constants as those found in
     {@link #ContactsContract.Intents.Insert}
    */

    public void assignContactFromEmail(String emailAddress, boolean lazyLookup, Bundle extras) {
        mContactEmail = emailAddress;
        mContactEmail = emailAddress;
        mExtras = extras;
        if (!lazyLookup) {
        if (!lazyLookup) {
            mQueryHandler.startQuery(TOKEN_EMAIL_LOOKUP, null,
            mQueryHandler.startQuery(TOKEN_EMAIL_LOOKUP, null,
                    Uri.withAppendedPath(Email.CONTENT_LOOKUP_URI, Uri.encode(mContactEmail)),
                    Uri.withAppendedPath(Email.CONTENT_LOOKUP_URI, Uri.encode(mContactEmail)),
@@ -186,6 +209,7 @@ public class QuickContactBadge extends ImageView implements OnClickListener {
        }
        }
    }
    }



    /**
    /**
     * Assign a contact based on a phone number. This should only be used when
     * Assign a contact based on a phone number. This should only be used when
     * the contact's URI is not available, as an extra query will have to be
     * the contact's URI is not available, as an extra query will have to be
@@ -196,7 +220,25 @@ public class QuickContactBadge extends ImageView implements OnClickListener {
     * until this view is clicked.
     * until this view is clicked.
     */
     */
    public void assignContactFromPhone(String phoneNumber, boolean lazyLookup) {
    public void assignContactFromPhone(String phoneNumber, boolean lazyLookup) {
        assignContactFromPhone(phoneNumber, lazyLookup, new Bundle());
    }

    /**
     * Assign a contact based on a phone number. This should only be used when
     * the contact's URI is not available, as an extra query will have to be
     * performed to lookup the URI based on the phone number.
     *
     * @param phoneNumber The phone number of the contact.
     * @param lazyLookup If this is true, the lookup query will not be performed
     * until this view is clicked.
     * @param extras A bundle of extras to populate the contact edit page with if the contact
     * is not found and the user chooses to add the phone number to an existing contact or
     * create a new contact. Uses the same string constants as those found in
     * {@link #ContactsContract.Intents.Insert}
     */
    public void assignContactFromPhone(String phoneNumber, boolean lazyLookup, Bundle extras) {
        mContactPhone = phoneNumber;
        mContactPhone = phoneNumber;
        mExtras = extras;
        if (!lazyLookup) {
        if (!lazyLookup) {
            mQueryHandler.startQuery(TOKEN_PHONE_LOOKUP, null,
            mQueryHandler.startQuery(TOKEN_PHONE_LOOKUP, null,
                    Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, mContactPhone),
                    Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, mContactPhone),
@@ -213,15 +255,21 @@ public class QuickContactBadge extends ImageView implements OnClickListener {


    @Override
    @Override
    public void onClick(View v) {
    public void onClick(View v) {
        // If contact has been assigned, mExtras should no longer be null, but do a null check
        // anyway just in case assignContactFromPhone or Email was called with a null bundle or
        // wasn't assigned previously.
        final Bundle extras = (mExtras == null) ? new Bundle() : mExtras;
        if (mContactUri != null) {
        if (mContactUri != null) {
            QuickContact.showQuickContact(getContext(), QuickContactBadge.this, mContactUri,
            QuickContact.showQuickContact(getContext(), QuickContactBadge.this, mContactUri,
                    QuickContact.MODE_LARGE, mExcludeMimes);
                    QuickContact.MODE_LARGE, mExcludeMimes);
        } else if (mContactEmail != null) {
        } else if (mContactEmail != null) {
            mQueryHandler.startQuery(TOKEN_EMAIL_LOOKUP_AND_TRIGGER, mContactEmail,
            extras.putString(EXTRA_URI_CONTENT, mContactEmail);
            mQueryHandler.startQuery(TOKEN_EMAIL_LOOKUP_AND_TRIGGER, extras,
                    Uri.withAppendedPath(Email.CONTENT_LOOKUP_URI, Uri.encode(mContactEmail)),
                    Uri.withAppendedPath(Email.CONTENT_LOOKUP_URI, Uri.encode(mContactEmail)),
                    EMAIL_LOOKUP_PROJECTION, null, null, null);
                    EMAIL_LOOKUP_PROJECTION, null, null, null);
        } else if (mContactPhone != null) {
        } else if (mContactPhone != null) {
            mQueryHandler.startQuery(TOKEN_PHONE_LOOKUP_AND_TRIGGER, mContactPhone,
            extras.putString(EXTRA_URI_CONTENT, mContactPhone);
            mQueryHandler.startQuery(TOKEN_PHONE_LOOKUP_AND_TRIGGER, extras,
                    Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, mContactPhone),
                    Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, mContactPhone),
                    PHONE_LOOKUP_PROJECTION, null, null, null);
                    PHONE_LOOKUP_PROJECTION, null, null, null);
        } else {
        } else {
@@ -262,12 +310,12 @@ public class QuickContactBadge extends ImageView implements OnClickListener {
            Uri lookupUri = null;
            Uri lookupUri = null;
            Uri createUri = null;
            Uri createUri = null;
            boolean trigger = false;
            boolean trigger = false;

            Bundle extras = (cookie != null) ? (Bundle) cookie : new Bundle();
            try {
            try {
                switch(token) {
                switch(token) {
                    case TOKEN_PHONE_LOOKUP_AND_TRIGGER:
                    case TOKEN_PHONE_LOOKUP_AND_TRIGGER:
                        trigger = true;
                        trigger = true;
                        createUri = Uri.fromParts("tel", (String)cookie, null);
                        createUri = Uri.fromParts("tel", extras.getString(EXTRA_URI_CONTENT), null);


                        //$FALL-THROUGH$
                        //$FALL-THROUGH$
                    case TOKEN_PHONE_LOOKUP: {
                    case TOKEN_PHONE_LOOKUP: {
@@ -281,7 +329,8 @@ public class QuickContactBadge extends ImageView implements OnClickListener {
                    }
                    }
                    case TOKEN_EMAIL_LOOKUP_AND_TRIGGER:
                    case TOKEN_EMAIL_LOOKUP_AND_TRIGGER:
                        trigger = true;
                        trigger = true;
                        createUri = Uri.fromParts("mailto", (String)cookie, null);
                        createUri = Uri.fromParts("mailto",
                                extras.getString(EXTRA_URI_CONTENT), null);


                        //$FALL-THROUGH$
                        //$FALL-THROUGH$
                    case TOKEN_EMAIL_LOOKUP: {
                    case TOKEN_EMAIL_LOOKUP: {
@@ -309,6 +358,10 @@ public class QuickContactBadge extends ImageView implements OnClickListener {
            } else if (createUri != null) {
            } else if (createUri != null) {
                // Prompt user to add this person to contacts
                // Prompt user to add this person to contacts
                final Intent intent = new Intent(Intents.SHOW_OR_CREATE_CONTACT, createUri);
                final Intent intent = new Intent(Intents.SHOW_OR_CREATE_CONTACT, createUri);
                if (extras != null) {
                    extras.remove(EXTRA_URI_CONTENT);
                    intent.putExtras(extras);
                }
                getContext().startActivity(intent);
                getContext().startActivity(intent);
            }
            }
        }
        }