From 4aa433cd62e4b2db3764152c2a61276b5bdab337 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Wed, 23 Feb 2022 14:10:13 -0500 Subject: [PATCH 1/3] Show dynamic tag "Android" when item is in Android contacts only --- src/main/java/eu/siacs/conversations/entities/Contact.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/eu/siacs/conversations/entities/Contact.java b/src/main/java/eu/siacs/conversations/entities/Contact.java index e2ede44666cbf2f733b55e8abf91e52e519130a0..e0d05a504334b09194996c81ab082653d46d931d 100644 --- a/src/main/java/eu/siacs/conversations/entities/Contact.java +++ b/src/main/java/eu/siacs/conversations/entities/Contact.java @@ -200,6 +200,9 @@ public class Contact implements ListItem, Blockable { if (isBlocked()) { tags.add(new Tag(context.getString(R.string.blocked), 0xff2e2f3b)); } + if (!showInRoster() && getSystemAccount() != null) { + tags.add(new Tag("Android", UIHelper.getColorForName("Android"))); + } return tags; } From dd7618a31fc042177657bc35f95818218403adcf Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Wed, 23 Feb 2022 14:10:51 -0500 Subject: [PATCH 2/3] Display phone number type/label as a tag where relevant --- .../android/PhoneNumberContact.java | 12 ++++++++++ .../services/QuickConversationsService.java | 4 +++- .../siacs/conversations/entities/Contact.java | 24 +++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/cheogram/java/eu/siacs/conversations/android/PhoneNumberContact.java b/src/cheogram/java/eu/siacs/conversations/android/PhoneNumberContact.java index a8bbf88d9579451ba8e6c88d4df7649352531521..3a3216c27d111fde4eb5f773117bcc939b8314e9 100644 --- a/src/cheogram/java/eu/siacs/conversations/android/PhoneNumberContact.java +++ b/src/cheogram/java/eu/siacs/conversations/android/PhoneNumberContact.java @@ -23,15 +23,25 @@ import io.michaelrocks.libphonenumber.android.NumberParseException; public class PhoneNumberContact extends AbstractPhoneContact { private final String phoneNumber; + private final String typeLabel; public String getPhoneNumber() { return phoneNumber; } + public String getTypeLabel() { + return typeLabel; + } + private PhoneNumberContact(Context context, Cursor cursor) throws IllegalArgumentException { super(cursor); try { this.phoneNumber = PhoneNumberUtilWrapper.normalize(context, cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))); + this.typeLabel = ContactsContract.CommonDataKinds.Phone.getTypeLabel( + context.getResources(), + cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)), + cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.LABEL)) + ).toString(); } catch (NumberParseException | NullPointerException e) { throw new IllegalArgumentException(e); } @@ -45,6 +55,8 @@ public class PhoneNumberContact extends AbstractPhoneContact { ContactsContract.Data.DISPLAY_NAME, ContactsContract.Data.PHOTO_URI, ContactsContract.Data.LOOKUP_KEY, + ContactsContract.CommonDataKinds.Phone.TYPE, + ContactsContract.CommonDataKinds.Phone.LABEL, ContactsContract.CommonDataKinds.Phone.NUMBER}; final HashMap contacts = new HashMap<>(); try (final Cursor cursor = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, PROJECTION, null, null, null)){ diff --git a/src/cheogram/java/eu/siacs/conversations/services/QuickConversationsService.java b/src/cheogram/java/eu/siacs/conversations/services/QuickConversationsService.java index 06aae4c12985dd4cd0048255d5e7025218506a78..b12bd1c3633a7f229c04e549ad1947278dba4777 100644 --- a/src/cheogram/java/eu/siacs/conversations/services/QuickConversationsService.java +++ b/src/cheogram/java/eu/siacs/conversations/services/QuickConversationsService.java @@ -2,6 +2,7 @@ package eu.siacs.conversations.services; import java.util.concurrent.atomic.AtomicInteger; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.Objects; import java.util.ArrayList; @@ -132,7 +133,8 @@ public class QuickConversationsService extends AbstractQuickConversationsService for(String gateway : gateways) { final Jid jid = Jid.ofLocalAndDomain(phoneContact.getPhoneNumber(), gateway); final Contact contact = account.getRoster().getContact(jid); - final boolean needsCacheClean = contact.setPhoneContact(phoneContact); + boolean needsCacheClean = contact.setPhoneContact(phoneContact); + needsCacheClean |= contact.setSystemTags(Collections.singleton(phoneContact.getTypeLabel())); if (needsCacheClean) { service.getAvatarService().clear(contact); } diff --git a/src/main/java/eu/siacs/conversations/entities/Contact.java b/src/main/java/eu/siacs/conversations/entities/Contact.java index e0d05a504334b09194996c81ab082653d46d931d..7e25f979ce5108b54420a27244f714992f4b43c9 100644 --- a/src/main/java/eu/siacs/conversations/entities/Contact.java +++ b/src/main/java/eu/siacs/conversations/entities/Contact.java @@ -69,6 +69,7 @@ public class Contact implements ListItem, Blockable { private String photoUri; private final JSONObject keys; private JSONArray groups = new JSONArray(); + private JSONArray systemTags = new JSONArray(); private final Presences presences = new Presences(); protected Account account; protected Avatar avatar; @@ -193,6 +194,9 @@ public class Contact implements ListItem, Blockable { for (final String group : getGroups(true)) { tags.add(new Tag(group, UIHelper.getColorForName(group))); } + for (final String tag : getSystemTags(true)) { + tags.add(new Tag(tag, UIHelper.getColorForName(tag))); + } Presence.Status status = getShownStatus(); if (status != Presence.Status.OFFLINE) { tags.add(UIHelper.getTagForStatus(context, status)); @@ -309,6 +313,15 @@ public class Contact implements ListItem, Blockable { return !old.equals(getDisplayName()); } + public boolean setSystemTags(Collection systemTags) { + final JSONArray old = this.systemTags; + this.systemTags = new JSONArray(); + for(String tag : systemTags) { + this.systemTags.put(tag); + } + return !old.equals(this.systemTags); + } + public boolean setPresenceName(String presenceName) { final String old = getDisplayName(); this.presenceName = presenceName; @@ -334,6 +347,17 @@ public class Contact implements ListItem, Blockable { return groups; } + private Collection getSystemTags(final boolean unique) { + final Collection tags = unique ? new HashSet<>() : new ArrayList<>(); + for (int i = 0; i < this.systemTags.length(); ++i) { + try { + tags.add(this.systemTags.getString(i)); + } catch (final JSONException ignored) { + } + } + return tags; + } + public long getPgpKeyId() { synchronized (this.keys) { if (this.keys.has("pgp_keyid")) { From 5c2594dd4b1dae5cd52cc6fa75954078d709e912 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Wed, 23 Feb 2022 14:18:37 -0500 Subject: [PATCH 3/3] Default dynamic tags to on --- .../java/eu/siacs/conversations/ui/ContactDetailsActivity.java | 2 +- .../java/eu/siacs/conversations/ui/adapter/ListItemAdapter.java | 2 +- src/main/res/values/defaults.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java b/src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java index 7c1d08643cb8f52808a56d9464854d2b1b5dde1a..038e855300145e1952d2caccc9f17141535e6b71 100644 --- a/src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java @@ -242,7 +242,7 @@ public class ContactDetailsActivity extends OmemoActivity implements OnAccountUp recreate(); } else { final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); - this.showDynamicTags = preferences.getBoolean(SettingsActivity.SHOW_DYNAMIC_TAGS, false); + this.showDynamicTags = preferences.getBoolean(SettingsActivity.SHOW_DYNAMIC_TAGS, getResources().getBoolean(R.bool.show_dynamic_tags)); this.showLastSeen = preferences.getBoolean("last_activity", false); } binding.mediaWrapper.setVisibility(Compatibility.hasStoragePermission(this) ? View.VISIBLE : View.GONE); diff --git a/src/main/java/eu/siacs/conversations/ui/adapter/ListItemAdapter.java b/src/main/java/eu/siacs/conversations/ui/adapter/ListItemAdapter.java index 4e721338090a2f146c631d4a38e50053f7691392..7665710b079c9756c544df3da678c42e7710b490 100644 --- a/src/main/java/eu/siacs/conversations/ui/adapter/ListItemAdapter.java +++ b/src/main/java/eu/siacs/conversations/ui/adapter/ListItemAdapter.java @@ -47,7 +47,7 @@ public class ListItemAdapter extends ArrayAdapter { public void refreshSettings() { SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(activity); - this.showDynamicTags = preferences.getBoolean(SettingsActivity.SHOW_DYNAMIC_TAGS, false); + this.showDynamicTags = preferences.getBoolean(SettingsActivity.SHOW_DYNAMIC_TAGS, activity.getResources().getBoolean(R.bool.show_dynamic_tags)); } @Override diff --git a/src/main/res/values/defaults.xml b/src/main/res/values/defaults.xml index 60085d0f9bb0c32636d8d429f15c429c1b43464b..d2531029ec8f43d35f218c411497f257cfe4e03c 100644 --- a/src/main/res/values/defaults.xml +++ b/src/main/res/values/defaults.xml @@ -20,7 +20,7 @@ auto true recent - false + true true 0 false