diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2018-03-12 20:41:15 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2018-03-12 20:41:15 +0000 |
commit | f6ca06713750ceca2ee28da80474116ed0b106a7 (patch) | |
tree | 820c59251c28365110cd888e435cc792eee9cc60 /java/com/android/dialer/glidephotomanager/impl/DefaultLookupUriGenerator.java | |
parent | b3b46da60812782c9bf35e3895e4081ce54ba349 (diff) | |
parent | 14e72ef6fe2ab2900f5b7ca0c9268e05fb1b3603 (diff) |
Merge "Generate default lookup URI for quick contact badge if lookup URI is not available."
Diffstat (limited to 'java/com/android/dialer/glidephotomanager/impl/DefaultLookupUriGenerator.java')
-rw-r--r-- | java/com/android/dialer/glidephotomanager/impl/DefaultLookupUriGenerator.java | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/java/com/android/dialer/glidephotomanager/impl/DefaultLookupUriGenerator.java b/java/com/android/dialer/glidephotomanager/impl/DefaultLookupUriGenerator.java new file mode 100644 index 000000000..6b90e803c --- /dev/null +++ b/java/com/android/dialer/glidephotomanager/impl/DefaultLookupUriGenerator.java @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2018 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.dialer.glidephotomanager.impl; + +import android.net.Uri; +import android.provider.ContactsContract; +import android.provider.ContactsContract.CommonDataKinds; +import android.provider.ContactsContract.Contacts; +import android.provider.ContactsContract.DisplayNameSources; +import com.android.dialer.glidephotomanager.PhotoInfo; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +/** + * Generate a lookup URI that will populate the quick contact with the number. Used when the lookup + * URI is not available (non-contact and no other sources). The info is encoded into a JSON string + * that is not governed by any public interface. URI format: + * content://com.android.contacts/contacts/lookup/encoded/[JSON] + * + * <p>The JSON is a object containing "display_name", "display_name_source" ({@link + * DisplayNameSources}), and several {@link ContactsContract.Data} rows keyed by the {@link + * ContactsContract.Data#MIMETYPE}. In this case only {@link + * ContactsContract.CommonDataKinds.Phone#CONTENT_ITEM_TYPE} is available. + * + * <p>Example JSON:<br> + * {"display_name":"+1 650-253-0000","display_name_source":30,"vnd.android.cursor.item\/contact":{ + * "vnd.android.cursor.item\/phone_v2":[{"data1":"+1 650-253-0000","data2":12}]}} + */ +final class DefaultLookupUriGenerator { + + static Uri generateUri(PhotoInfo photoInfo) { + JSONObject lookupJson = new JSONObject(); + try { + lookupJson.put(Contacts.DISPLAY_NAME, photoInfo.getFormattedNumber()); + // DISPLAY_NAME_SOURCE required by contacts, otherwise the URI will not be recognized. + lookupJson.put(Contacts.DISPLAY_NAME_SOURCE, DisplayNameSources.STRUCTURED_NAME); + JSONObject contactRows = new JSONObject(); + JSONObject phone = new JSONObject(); + phone.put(CommonDataKinds.Phone.NUMBER, photoInfo.getFormattedNumber()); + contactRows.put(CommonDataKinds.Phone.CONTENT_ITEM_TYPE, new JSONArray().put(phone)); + + lookupJson.put(Contacts.CONTENT_ITEM_TYPE, contactRows); + } catch (JSONException e) { + throw new AssertionError(e); + } + return Contacts.CONTENT_LOOKUP_URI + .buildUpon() + .appendPath("encoded") + .encodedFragment(lookupJson.toString()) + // Directory is required in the URI but it does not exist, use MAX_VALUE to avoid clashing + // with other directory + .appendQueryParameter( + ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Integer.MAX_VALUE)) + .build(); + } +} |