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

Commit 7035f2be authored by Brian Attwell's avatar Brian Attwell
Browse files

QuickContacts can prioritize phone mimetype. Part1

Define the ContactsContract for a new QuickContact extra.
This can be used to tell QuickContacts to prioritize a
given mimetype.

Bug: 18391003
Change-Id: Ie5a93ad9e1919f470a638d4235d91fe337cb5ca3
parent cff41ae3
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -25049,9 +25049,12 @@ package android.provider {
    ctor public ContactsContract.QuickContact();
    method public static void showQuickContact(android.content.Context, android.view.View, android.net.Uri, int, java.lang.String[]);
    method public static void showQuickContact(android.content.Context, android.graphics.Rect, android.net.Uri, int, java.lang.String[]);
    method public static void showQuickContact(android.content.Context, android.view.View, android.net.Uri, java.lang.String[], java.lang.String);
    method public static void showQuickContact(android.content.Context, android.graphics.Rect, android.net.Uri, java.lang.String[], java.lang.String);
    field public static final java.lang.String ACTION_QUICK_CONTACT = "android.provider.action.QUICK_CONTACT";
    field public static final java.lang.String EXTRA_EXCLUDE_MIMES = "android.provider.extra.EXCLUDE_MIMES";
    field public static final java.lang.String EXTRA_MODE = "android.provider.extra.MODE";
    field public static final java.lang.String EXTRA_PRIORITIZED_MIMETYPE = "android.provider.extra.PRIORITIZED_MIMETYPE";
    field public static final int MODE_LARGE = 3; // 0x3
    field public static final int MODE_MEDIUM = 2; // 0x2
    field public static final int MODE_SMALL = 1; // 0x1
@@ -38747,6 +38750,7 @@ package android.widget {
    method public void setImageToDefault();
    method public void setMode(int);
    method public void setOverlay(android.graphics.drawable.Drawable);
    method public void setPrioritizedMimeType(java.lang.String);
    field protected java.lang.String[] mExcludeMimes;
  }
+4 −0
Original line number Diff line number Diff line
@@ -26648,9 +26648,12 @@ package android.provider {
    ctor public ContactsContract.QuickContact();
    method public static void showQuickContact(android.content.Context, android.view.View, android.net.Uri, int, java.lang.String[]);
    method public static void showQuickContact(android.content.Context, android.graphics.Rect, android.net.Uri, int, java.lang.String[]);
    method public static void showQuickContact(android.content.Context, android.view.View, android.net.Uri, java.lang.String[], java.lang.String);
    method public static void showQuickContact(android.content.Context, android.graphics.Rect, android.net.Uri, java.lang.String[], java.lang.String);
    field public static final java.lang.String ACTION_QUICK_CONTACT = "android.provider.action.QUICK_CONTACT";
    field public static final java.lang.String EXTRA_EXCLUDE_MIMES = "android.provider.extra.EXCLUDE_MIMES";
    field public static final java.lang.String EXTRA_MODE = "android.provider.extra.MODE";
    field public static final java.lang.String EXTRA_PRIORITIZED_MIMETYPE = "android.provider.extra.PRIORITIZED_MIMETYPE";
    field public static final int MODE_LARGE = 3; // 0x3
    field public static final int MODE_MEDIUM = 2; // 0x2
    field public static final int MODE_SMALL = 1; // 0x1
@@ -41206,6 +41209,7 @@ package android.widget {
    method public void setImageToDefault();
    method public void setMode(int);
    method public void setOverlay(android.graphics.drawable.Drawable);
    method public void setPrioritizedMimeType(java.lang.String);
    field protected java.lang.String[] mExcludeMimes;
  }
+82 −0
Original line number Diff line number Diff line
@@ -8068,6 +8068,14 @@ public final class ContactsContract {
         */
        public static final String EXTRA_MODE = "android.provider.extra.MODE";

        /**
         * Extra used to specify which mimetype should be prioritized in the QuickContacts UI.
         * For example, passing the value {@link CommonDataKinds.Phone#CONTENT_ITEM_TYPE} can
         * cause phone numbers to be displayed more prominently in QuickContacts.
         */
        public static final String EXTRA_PRIORITIZED_MIMETYPE
                = "android.provider.extra.PRIORITIZED_MIMETYPE";

        /**
         * Extra used to indicate a list of specific MIME-types to exclude and not display in the
         * QuickContacts dialog. Stored as a {@link String} array.
@@ -8206,6 +8214,80 @@ public final class ContactsContract {
            startActivityWithErrorToast(context, intent);
        }

        /**
         * Trigger a dialog that lists the various methods of interacting with
         * the requested {@link Contacts} entry. This may be based on available
         * {@link ContactsContract.Data} rows under that contact, and may also
         * include social status and presence details.
         *
         * @param context The parent {@link Context} that may be used as the
         *            parent for this dialog.
         * @param target Specific {@link View} from your layout that this dialog
         *            should be centered around. In particular, if the dialog
         *            has a "callout" arrow, it will be pointed and centered
         *            around this {@link View}.
         * @param lookupUri A
         *            {@link ContactsContract.Contacts#CONTENT_LOOKUP_URI} style
         *            {@link Uri} that describes a specific contact to feature
         *            in this dialog.
         * @param excludeMimes Optional list of {@link Data#MIMETYPE} MIME-types
         *            to exclude when showing this dialog. For example, when
         *            already viewing the contact details card, this can be used
         *            to omit the details entry from the dialog.
         * @param prioritizedMimeType This mimetype should be prioritized in the QuickContacts UI.
         *             For example, passing the value
         *             {@link CommonDataKinds.Phone#CONTENT_ITEM_TYPE} can cause phone numbers to be
         *             displayed more prominently in QuickContacts.
         */
        public static void showQuickContact(Context context, View target, Uri lookupUri,
                String[] excludeMimes, String prioritizedMimeType) {
            // Use MODE_LARGE instead of accepting mode as a parameter. The different mode
            // values defined in ContactsContract only affect very old implementations
            // of QuickContacts.
            Intent intent = composeQuickContactsIntent(context, target, lookupUri, MODE_LARGE,
                    excludeMimes);
            intent.putExtra(EXTRA_PRIORITIZED_MIMETYPE, prioritizedMimeType);
            startActivityWithErrorToast(context, intent);
        }

        /**
         * Trigger a dialog that lists the various methods of interacting with
         * the requested {@link Contacts} entry. This may be based on available
         * {@link ContactsContract.Data} rows under that contact, and may also
         * include social status and presence details.
         *
         * @param context The parent {@link Context} that may be used as the
         *            parent for this dialog.
         * @param target Specific {@link Rect} that this dialog should be
         *            centered around, in screen coordinates. In particular, if
         *            the dialog has a "callout" arrow, it will be pointed and
         *            centered around this {@link Rect}. If you are running at a
         *            non-native density, you need to manually adjust using
         *            {@link DisplayMetrics#density} before calling.
         * @param lookupUri A
         *            {@link ContactsContract.Contacts#CONTENT_LOOKUP_URI} style
         *            {@link Uri} that describes a specific contact to feature
         *            in this dialog.
         * @param excludeMimes Optional list of {@link Data#MIMETYPE} MIME-types
         *            to exclude when showing this dialog. For example, when
         *            already viewing the contact details card, this can be used
         *            to omit the details entry from the dialog.
         * @param prioritizedMimeType This mimetype should be prioritized in the QuickContacts UI.
         *             For example, passing the value
         *             {@link CommonDataKinds.Phone#CONTENT_ITEM_TYPE} can cause phone numbers to be
         *             displayed more prominently in QuickContacts.
         */
        public static void showQuickContact(Context context, Rect target, Uri lookupUri,
                String[] excludeMimes, String prioritizedMimeType) {
            // Use MODE_LARGE instead of accepting mode as a parameter. The different mode
            // values defined in ContactsContract only affect very old implementations
            // of QuickContacts.
            Intent intent = composeQuickContactsIntent(context, target, lookupUri, MODE_LARGE,
                    excludeMimes);
            intent.putExtra(EXTRA_PRIORITIZED_MIMETYPE, prioritizedMimeType);
            startActivityWithErrorToast(context, intent);
        }

        private static void startActivityWithErrorToast(Context context, Intent intent) {
            try {
              context.startActivity(intent);
+14 −6
Original line number Diff line number Diff line
@@ -37,8 +37,6 @@ import android.provider.ContactsContract.RawContacts;
import android.util.AttributeSet;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;

/**
 * Widget used to show an image with the standard QuickContact badge
@@ -52,6 +50,7 @@ public class QuickContactBadge extends ImageView implements OnClickListener {
    private QueryHandler mQueryHandler;
    private Drawable mDefaultAvatar;
    private Bundle mExtras = null;
    private String mPrioritizedMimeType;

    protected String[] mExcludeMimes = null;

@@ -126,6 +125,15 @@ public class QuickContactBadge extends ImageView implements OnClickListener {
    public void setMode(int size) {
    }

    /**
     * Set which mimetype should be prioritized in the QuickContacts UI. For example, passing the
     * value {@link Email#CONTENT_ITEM_TYPE} can cause emails to be displayed more prominently in
     * QuickContacts.
     */
    public void setPrioritizedMimeType(String prioritizedMimeType) {
        mPrioritizedMimeType = prioritizedMimeType;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
@@ -287,7 +295,7 @@ public class QuickContactBadge extends ImageView implements OnClickListener {
        final Bundle extras = (mExtras == null) ? new Bundle() : mExtras;
        if (mContactUri != null) {
            QuickContact.showQuickContact(getContext(), QuickContactBadge.this, mContactUri,
                    QuickContact.MODE_LARGE, mExcludeMimes);
                    mExcludeMimes, mPrioritizedMimeType);
        } else if (mContactEmail != null && mQueryHandler != null) {
            extras.putString(EXTRA_URI_CONTENT, mContactEmail);
            mQueryHandler.startQuery(TOKEN_EMAIL_LOOKUP_AND_TRIGGER, extras,
@@ -370,10 +378,10 @@ public class QuickContactBadge extends ImageView implements OnClickListener {
            mContactUri = lookupUri;
            onContactUriChanged();

            if (trigger && lookupUri != null) {
            if (trigger && mContactUri != null) {
                // Found contact, so trigger QuickContact
                QuickContact.showQuickContact(getContext(), QuickContactBadge.this, lookupUri,
                        QuickContact.MODE_LARGE, mExcludeMimes);
                QuickContact.showQuickContact(getContext(), QuickContactBadge.this, mContactUri,
                        mExcludeMimes, mPrioritizedMimeType);
            } else if (createUri != null) {
                // Prompt user to add this person to contacts
                final Intent intent = new Intent(Intents.SHOW_OR_CREATE_CONTACT, createUri);