From bbf33f88e03000f925280bd6543c1000c25839c0 Mon Sep 17 00:00:00 2001 From: Moxie Marlinspike Date: Mon, 27 Jul 2015 10:49:14 -0700 Subject: [PATCH] Support for static RecipientDetails for certain shortcodes. Closes #3813 // FREEBIE --- res/drawable-hdpi/ic_amazon.png | Bin 0 -> 1041 bytes res/drawable-mdpi/ic_amazon.png | Bin 0 -> 704 bytes res/drawable-xhdpi/ic_amazon.png | Bin 0 -> 1553 bytes res/drawable-xxhdpi/ic_amazon.png | Bin 0 -> 2072 bytes res/drawable-xxxhdpi/ic_amazon.png | Bin 0 -> 4788 bytes .../contacts/avatars/ContactPhotoFactory.java | 9 ++++++++- .../avatars/ResourceContactPhoto.java | 3 ++- .../database/CanonicalAddressDatabase.java | 3 ++- .../recipients/RecipientProvider.java | 19 +++++++++++++----- 9 files changed, 26 insertions(+), 8 deletions(-) create mode 100644 res/drawable-hdpi/ic_amazon.png create mode 100644 res/drawable-mdpi/ic_amazon.png create mode 100644 res/drawable-xhdpi/ic_amazon.png create mode 100644 res/drawable-xxhdpi/ic_amazon.png create mode 100644 res/drawable-xxxhdpi/ic_amazon.png diff --git a/res/drawable-hdpi/ic_amazon.png b/res/drawable-hdpi/ic_amazon.png new file mode 100644 index 0000000000000000000000000000000000000000..504f2b1f47de071cd02894f0cbb18d9eb762edfd GIT binary patch literal 1041 zcmV+s1n&EZP)h4+(Z7+#M^83MHZoOI8L&HzTvb zEVU1P2#R1UinN=BP*Hv8vP*7dcCpf>W@mRU&xzB%Q{(s!?>o6e`@!>RIL~>`|Norl z|GejnFwRWI86OT23cHd2TA`W1CBPiuIA9Wx2fhM60bT_5gn*8JpE{(c3Dxoic69ST21>W@i z7XdRG0GoeT6jD(LEvNyl&A9rUDCr>A*Dq>b3!o1^`%f-VN~I4m>bcgrelB#@LJ6{(lfk0w)1y_(Glq91R@V z;3`{Ip;Lh6z*W#xA8ZLB)67jx5~<$am=k&uxIRD|3VaB>0t^C20k^eULl*+Q0U$ep z%l&3rT{ca<-)cfzfpY>tP6Kw-`OgO4ZY3cPC;*8%kZ%DSLF#P@u%(rRGQKwIF+K%O z4gkIjxF^7WA8==s4_a6+v-S`)XqoTuI)FCdXTT0oZ$J2gcVVQ$2-)m2(qIO%;p;IU zpdEM#utwa-?31zfUbUIiBEbF>fUaZ_$!ulC?c4{j)zP@JwvWlK-&M<}0*&-YwuPcqAQ z0jM#+z--X6-v^u?u$kv|f58O)9x&e@%xvG^Hk^x{=a4%@aD#hG7iXp<{wzCA%w&sS z?nh{79n&Qi-=xUzs6$`1HV@}*N-izV62aQgff~x^;@txGgJe|o`3W8$l~vwp?vWE}h+KxqsfH!6(^0u4-Bq!{pP^i0ji+u~TX(ry*1?(4jDl8ClT2vFzgf&(WEL{8WxQ$LnAN)N^ADe`OSNUvab z?WsavS^nwxbt19=Wif)al8C1JP_`(pH{D$^QAe^+Le(sNk2A3&6`w6|rsrga6OIL) zhSH|Okiaiu)f4@?ST1ePETdl-)kQNFnNTxH4<_~yp|I+Wy9)gU6(I~XPLTjh00000 LNkvXXu0mjfR_W3I literal 0 HcmV?d00001 diff --git a/res/drawable-mdpi/ic_amazon.png b/res/drawable-mdpi/ic_amazon.png new file mode 100644 index 0000000000000000000000000000000000000000..d1e94ffbc5f7298791369e49bf3bff7e3e025fde GIT binary patch literal 704 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 STATIC_DETAILS = new HashMap() {{ + put("262966", new RecipientDetails("Amazon", "262966", null, + ContactPhotoFactory.getResourceContactPhoto(R.drawable.ic_amazon), + ContactColors.UNKNOWN_COLOR)); + }}; + Recipient getRecipient(Context context, long recipientId, boolean asynchronous) { Recipient cachedRecipient = recipientCache.get(recipientId); if (cachedRecipient != null && !cachedRecipient.isStale()) return cachedRecipient; @@ -102,7 +110,7 @@ public class RecipientProvider { private @NonNull ListenableFutureTask getRecipientDetailsAsync(final Context context, final long recipientId, - final String number) + final @NonNull String number) { Callable task = new Callable() { @Override @@ -116,12 +124,12 @@ public class RecipientProvider { return future; } - private @NonNull RecipientDetails getRecipientDetailsSync(Context context, long recipientId, String number) { + private @NonNull RecipientDetails getRecipientDetailsSync(Context context, long recipientId, @NonNull String number) { if (GroupUtil.isEncodedGroup(number)) return getGroupRecipientDetails(context, number); else return getIndividualRecipientDetails(context, recipientId, number); } - private @NonNull RecipientDetails getIndividualRecipientDetails(Context context, long recipientId, String number) { + private @NonNull RecipientDetails getIndividualRecipientDetails(Context context, long recipientId, @NonNull String number) { Optional preferences = DatabaseFactory.getRecipientPreferenceDatabase(context).getRecipientsPreferences(new long[]{recipientId}); MaterialColor color = preferences.isPresent() ? preferences.get().getColor() : null; Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number)); @@ -143,7 +151,8 @@ public class RecipientProvider { cursor.close(); } - return new RecipientDetails(null, number, null, ContactPhotoFactory.getDefaultContactPhoto(null), color); + if (STATIC_DETAILS.containsKey(number)) return STATIC_DETAILS.get(number); + else return new RecipientDetails(null, number, null, ContactPhotoFactory.getDefaultContactPhoto(null), color); } private @NonNull RecipientDetails getGroupRecipientDetails(Context context, String groupId) {