From 7f3420c92fce1ba39ab72ee02334d7b82d5e987f Mon Sep 17 00:00:00 2001 From: adbenitez Date: Mon, 21 Oct 2024 22:23:03 +0200 Subject: [PATCH 01/10] allow to set tags on profiles --- .../java/com/b44t/messenger/DcContext.java | 10 +++++++ .../AccountSelectionListFragment.java | 27 +++++++++++++++++++ .../accounts/AccountSelectionListItem.java | 3 ++- src/main/res/menu/account_item_context.xml | 3 +++ src/main/res/values/strings.xml | 4 +++ 5 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/b44t/messenger/DcContext.java b/src/main/java/com/b44t/messenger/DcContext.java index e5ed7082cc..237964ed7f 100644 --- a/src/main/java/com/b44t/messenger/DcContext.java +++ b/src/main/java/com/b44t/messenger/DcContext.java @@ -91,6 +91,8 @@ public class DcContext { public final static int DC_CONNECTIVITY_WORKING = 3000; public final static int DC_CONNECTIVITY_CONNECTED = 4000; + private static final String CONFIG_ACCOUNT_TAG = "ui.tag"; + // when using DcAccounts, use DcAccounts.addAccount() instead public DcContext(String osName, String dbfile) { contextCPtr = createContextCPtr(osName, dbfile); @@ -268,6 +270,14 @@ public void restartIo() { startIo(); } + public String getTag() { + return getConfig(CONFIG_ACCOUNT_TAG); + } + + public void setTag(String tag) { + setConfig(CONFIG_ACCOUNT_TAG, tag); + } + /** * @return true if at least one chat has location streaming enabled */ diff --git a/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java b/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java index ce003fbe91..51a0a66b9f 100644 --- a/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java @@ -9,6 +9,7 @@ import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; +import android.widget.EditText; import android.widget.TextView; import androidx.annotation.NonNull; @@ -113,9 +114,35 @@ private void onContextItemSelected(MenuItem item, int accountId) { case R.id.menu_mute_notifications: onToggleMute(accountId); break; + case R.id.menu_set_tag: + onSetTag(accountId); + break; } } + private void onSetTag(int accountId) { + Activity activity = getActivity(); + if (activity == null) return; + AccountSelectionListFragment.this.dismiss(); + + DcContext dcContext = DcHelper.getContext(activity); + View view = View.inflate(activity, R.layout.single_line_input, null); + EditText inputField = view.findViewById(R.id.input_field); + inputField.setHint(R.string.enter_tag); + inputField.setText(dcContext.getTag()); + + new AlertDialog.Builder(activity) + .setTitle(R.string.profile_tag) + .setMessage(R.string.profile_tag_explain) + .setView(view) + .setPositiveButton(android.R.string.ok, (d, b) -> { + dcContext.setTag(inputField.getText().toString().trim()); + AccountManager.getInstance().showSwitchAccountMenu(activity); + }) + .setNegativeButton(R.string.cancel, (d, b) -> AccountManager.getInstance().showSwitchAccountMenu(activity)) + .show(); + } + private void onDeleteAccount(int accountId) { Activity activity = getActivity(); AccountSelectionListFragment.this.dismiss(); diff --git a/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListItem.java b/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListItem.java index f18b243809..1754580c2a 100644 --- a/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListItem.java +++ b/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListItem.java @@ -69,7 +69,8 @@ public void bind(@NonNull GlideRequests glideRequests, int accountId, DcContext if (TextUtils.isEmpty(name)) { name = self.getAddr(); } - if (!dcContext.isChatmail()) { + addr = dcContext.getTag(); + if ("".equals(addr) && !dcContext.isChatmail()) { addr = self.getAddr(); } unreadCount = dcContext.getFreshMsgs().length; diff --git a/src/main/res/menu/account_item_context.xml b/src/main/res/menu/account_item_context.xml index ad85db7602..8b043c15da 100644 --- a/src/main/res/menu/account_item_context.xml +++ b/src/main/res/menu/account_item_context.xml @@ -5,6 +5,9 @@ + + diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 2f3fbd30bf..0a7e0dc171 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -652,6 +652,10 @@ Accept invalid certificates Switch Profile Add Profile + Profile Tag + Enter Tag + Set Tag + Set a tag to easily recognize profiles you use in different contexts, for example \"work\" or \"family\". Only you can see your profile tag. Delete Profile Are you sure you want to delete your profile data? All profile data of \"%s\" on this device will be deleted, including your end-to-end encryption setup, contacts, chats, messages and media. This action cannot be undone. From bdd0ee140e9e7bf6bb2b334cb8d17bb40d353586 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Mon, 21 Oct 2024 22:34:49 +0200 Subject: [PATCH 02/10] use built-in emojis --- .../layout/account_selection_list_item.xml | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/main/res/layout/account_selection_list_item.xml b/src/main/res/layout/account_selection_list_item.xml index c7bacf3b96..34bd4f5770 100644 --- a/src/main/res/layout/account_selection_list_item.xml +++ b/src/main/res/layout/account_selection_list_item.xml @@ -60,16 +60,17 @@ android:layout_width="wrap_content" android:layout_height="wrap_content"> - + From 4994238d7ff41a63cca2398e56cc42d08ef5f50f Mon Sep 17 00:00:00 2001 From: adbenitez Date: Mon, 21 Oct 2024 22:35:15 +0200 Subject: [PATCH 03/10] fix bug in onSetTag() --- .../securesms/accounts/AccountSelectionListFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java b/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java index 51a0a66b9f..e116abf1cd 100644 --- a/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java @@ -125,7 +125,7 @@ private void onSetTag(int accountId) { if (activity == null) return; AccountSelectionListFragment.this.dismiss(); - DcContext dcContext = DcHelper.getContext(activity); + DcContext dcContext = DcHelper.getAccounts(activity).getAccount(accountId); View view = View.inflate(activity, R.layout.single_line_input, null); EditText inputField = view.findViewById(R.id.input_field); inputField.setHint(R.string.enter_tag); From a193dbb8111cdb1c7680cb268b9f993b50664a47 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Mon, 21 Oct 2024 23:21:26 +0200 Subject: [PATCH 04/10] fix layout --- .../securesms/accounts/AccountSelectionListItem.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListItem.java b/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListItem.java index 1754580c2a..c8120e1f27 100644 --- a/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListItem.java +++ b/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListItem.java @@ -129,7 +129,7 @@ private void updateUnreadIndicator(int unreadCount, boolean isMuted) { private void setText(String name, String addr) { this.nameView.setText(name==null? "#" : name); - if(addr != null) { + if(!TextUtils.isEmpty(addr)) { this.addrView.setText(addr); this.addrContainer.setVisibility(View.VISIBLE); } else { From 4730b7f17ab54945016da96ef0636a333ad71885 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Mon, 21 Oct 2024 23:26:11 +0200 Subject: [PATCH 05/10] improve strings --- .../securesms/accounts/AccountSelectionListFragment.java | 2 +- src/main/res/menu/account_item_context.xml | 2 +- src/main/res/values/strings.xml | 7 +++---- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java b/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java index e116abf1cd..7397c6b125 100644 --- a/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java @@ -128,7 +128,7 @@ private void onSetTag(int accountId) { DcContext dcContext = DcHelper.getAccounts(activity).getAccount(accountId); View view = View.inflate(activity, R.layout.single_line_input, null); EditText inputField = view.findViewById(R.id.input_field); - inputField.setHint(R.string.enter_tag); + inputField.setHint(R.string.tag_field_hint); inputField.setText(dcContext.getTag()); new AlertDialog.Builder(activity) diff --git a/src/main/res/menu/account_item_context.xml b/src/main/res/menu/account_item_context.xml index 8b043c15da..32a27fae32 100644 --- a/src/main/res/menu/account_item_context.xml +++ b/src/main/res/menu/account_item_context.xml @@ -5,7 +5,7 @@ - Accept invalid certificates Switch Profile Add Profile - Profile Tag - Enter Tag - Set Tag - Set a tag to easily recognize profiles you use in different contexts, for example \"work\" or \"family\". Only you can see your profile tag. + Private Tag + eg. Work, Family, ... + Tag that is visible only for you; helping you to differ between your profiles. Delete Profile Are you sure you want to delete your profile data? All profile data of \"%s\" on this device will be deleted, including your end-to-end encryption setup, contacts, chats, messages and media. This action cannot be undone. From 741e29cdbf0796ab0e3d6ab0efd7b7929f5aa295 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Mon, 21 Oct 2024 23:37:52 +0200 Subject: [PATCH 06/10] update addr var name to indicate it can also be tag --- .../accounts/AccountSelectionListItem.java | 24 +++++++++---------- .../layout/account_selection_list_item.xml | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListItem.java b/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListItem.java index c8120e1f27..2c38f805e4 100644 --- a/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListItem.java +++ b/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListItem.java @@ -27,7 +27,7 @@ public class AccountSelectionListItem extends LinearLayout { private AvatarImageView contactPhotoImage; private View addrContainer; - private TextView addrView; + private TextView addrOrTagView; private TextView nameView; private ImageView unreadIndicator; @@ -46,7 +46,7 @@ protected void onFinishInflate() { super.onFinishInflate(); this.contactPhotoImage = findViewById(R.id.contact_photo_image); this.addrContainer = findViewById(R.id.addr_container); - this.addrView = findViewById(R.id.addr); + this.addrOrTagView = findViewById(R.id.addr_or_tag); this.nameView = findViewById(R.id.name); this.unreadIndicator = findViewById(R.id.unread_indicator); @@ -57,7 +57,7 @@ public void bind(@NonNull GlideRequests glideRequests, int accountId, DcContext this.accountId = accountId; DcContact self = null; String name; - String addr = null; + String addrOrTag = null; int unreadCount = 0; boolean isMuted = dcContext.isMuted(); @@ -69,9 +69,9 @@ public void bind(@NonNull GlideRequests glideRequests, int accountId, DcContext if (TextUtils.isEmpty(name)) { name = self.getAddr(); } - addr = dcContext.getTag(); - if ("".equals(addr) && !dcContext.isChatmail()) { - addr = self.getAddr(); + addrOrTag = dcContext.getTag(); + if ("".equals(addrOrTag) && !dcContext.isChatmail()) { + addrOrTag = self.getAddr(); } unreadCount = dcContext.getFreshMsgs().length; } @@ -88,15 +88,15 @@ public void bind(@NonNull GlideRequests glideRequests, int accountId, DcContext setSelected(selected); if (selected) { - addrView.setTypeface(null, Typeface.BOLD); + addrOrTagView.setTypeface(null, Typeface.BOLD); nameView.setTypeface(null, Typeface.BOLD); } else { - addrView.setTypeface(null, Typeface.NORMAL); + addrOrTagView.setTypeface(null, Typeface.NORMAL); nameView.setTypeface(null, Typeface.NORMAL); } updateUnreadIndicator(unreadCount, isMuted); - setText(name, addr); + setText(name, addrOrTag); if (accountId != DcContact.DC_CONTACT_ID_ADD_ACCOUNT) { fragment.registerForContextMenu(this); @@ -126,11 +126,11 @@ private void updateUnreadIndicator(int unreadCount, boolean isMuted) { } } - private void setText(String name, String addr) { + private void setText(String name, String addrOrTag) { this.nameView.setText(name==null? "#" : name); - if(!TextUtils.isEmpty(addr)) { - this.addrView.setText(addr); + if(!TextUtils.isEmpty(addrOrTag)) { + this.addrOrTagView.setText(addrOrTag); this.addrContainer.setVisibility(View.VISIBLE); } else { this.addrContainer.setVisibility(View.GONE); diff --git a/src/main/res/layout/account_selection_list_item.xml b/src/main/res/layout/account_selection_list_item.xml index 34bd4f5770..3625f53c3f 100644 --- a/src/main/res/layout/account_selection_list_item.xml +++ b/src/main/res/layout/account_selection_list_item.xml @@ -61,7 +61,7 @@ android:layout_height="wrap_content"> Date: Mon, 21 Oct 2024 23:42:42 +0200 Subject: [PATCH 07/10] rename tag_field_hint to profile_tag_hint --- .../securesms/accounts/AccountSelectionListFragment.java | 2 +- src/main/res/values/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java b/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java index 7397c6b125..91af39f49e 100644 --- a/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java @@ -128,7 +128,7 @@ private void onSetTag(int accountId) { DcContext dcContext = DcHelper.getAccounts(activity).getAccount(accountId); View view = View.inflate(activity, R.layout.single_line_input, null); EditText inputField = view.findViewById(R.id.input_field); - inputField.setHint(R.string.tag_field_hint); + inputField.setHint(R.string.profile_tag_hint); inputField.setText(dcContext.getTag()); new AlertDialog.Builder(activity) diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index eb18f996b3..df39a245a9 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -653,7 +653,7 @@ Switch Profile Add Profile Private Tag - eg. Work, Family, ... + eg. Work, Family, ... Tag that is visible only for you; helping you to differ between your profiles. Delete Profile Are you sure you want to delete your profile data? From a2141df109e2eb612bb1c8cb82881b12fffb7ee8 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Tue, 22 Oct 2024 15:09:19 +0200 Subject: [PATCH 08/10] use new private_tag setting --- src/main/java/com/b44t/messenger/DcContext.java | 10 ---------- .../accounts/AccountSelectionListFragment.java | 6 ++++-- .../securesms/accounts/AccountSelectionListItem.java | 7 +++++-- .../org/thoughtcrime/securesms/connect/DcHelper.java | 1 + 4 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/b44t/messenger/DcContext.java b/src/main/java/com/b44t/messenger/DcContext.java index 237964ed7f..e5ed7082cc 100644 --- a/src/main/java/com/b44t/messenger/DcContext.java +++ b/src/main/java/com/b44t/messenger/DcContext.java @@ -91,8 +91,6 @@ public class DcContext { public final static int DC_CONNECTIVITY_WORKING = 3000; public final static int DC_CONNECTIVITY_CONNECTED = 4000; - private static final String CONFIG_ACCOUNT_TAG = "ui.tag"; - // when using DcAccounts, use DcAccounts.addAccount() instead public DcContext(String osName, String dbfile) { contextCPtr = createContextCPtr(osName, dbfile); @@ -270,14 +268,6 @@ public void restartIo() { startIo(); } - public String getTag() { - return getConfig(CONFIG_ACCOUNT_TAG); - } - - public void setTag(String tag) { - setConfig(CONFIG_ACCOUNT_TAG, tag); - } - /** * @return true if at least one chat has location streaming enabled */ diff --git a/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java b/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java index 91af39f49e..70f4f6daf8 100644 --- a/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java @@ -36,6 +36,7 @@ import org.thoughtcrime.securesms.util.ViewUtil; import static com.b44t.messenger.DcContact.DC_CONTACT_ID_ADD_ACCOUNT; +import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_PRIVATE_TAG; public class AccountSelectionListFragment extends DialogFragment { @@ -129,14 +130,15 @@ private void onSetTag(int accountId) { View view = View.inflate(activity, R.layout.single_line_input, null); EditText inputField = view.findViewById(R.id.input_field); inputField.setHint(R.string.profile_tag_hint); - inputField.setText(dcContext.getTag()); + inputField.setText(dcContext.getConfig(CONFIG_PRIVATE_TAG)); new AlertDialog.Builder(activity) .setTitle(R.string.profile_tag) .setMessage(R.string.profile_tag_explain) .setView(view) .setPositiveButton(android.R.string.ok, (d, b) -> { - dcContext.setTag(inputField.getText().toString().trim()); + String newTag = inputField.getText().toString().trim(); + dcContext.setConfig(CONFIG_PRIVATE_TAG, newTag); AccountManager.getInstance().showSwitchAccountMenu(activity); }) .setNegativeButton(R.string.cancel, (d, b) -> AccountManager.getInstance().showSwitchAccountMenu(activity)) diff --git a/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListItem.java b/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListItem.java index 2c38f805e4..1f136cb183 100644 --- a/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListItem.java +++ b/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListItem.java @@ -1,5 +1,8 @@ package org.thoughtcrime.securesms.accounts; +import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_DISPLAY_NAME; +import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_PRIVATE_TAG; + import android.content.Context; import android.graphics.Color; import android.graphics.Typeface; @@ -65,11 +68,11 @@ public void bind(@NonNull GlideRequests glideRequests, int accountId, DcContext name = getContext().getString(R.string.add_account); } else { self = dcContext.getContact(DcContact.DC_CONTACT_ID_SELF); - name = dcContext.getConfig("displayname"); + name = dcContext.getConfig(CONFIG_DISPLAY_NAME); if (TextUtils.isEmpty(name)) { name = self.getAddr(); } - addrOrTag = dcContext.getTag(); + addrOrTag = dcContext.getConfig(CONFIG_PRIVATE_TAG); if ("".equals(addrOrTag) && !dcContext.isChatmail()) { addrOrTag = self.getAddr(); } diff --git a/src/main/java/org/thoughtcrime/securesms/connect/DcHelper.java b/src/main/java/org/thoughtcrime/securesms/connect/DcHelper.java index a2b03f8ecf..fd82ab58fd 100644 --- a/src/main/java/org/thoughtcrime/securesms/connect/DcHelper.java +++ b/src/main/java/org/thoughtcrime/securesms/connect/DcHelper.java @@ -76,6 +76,7 @@ public class DcHelper { public static final String CONFIG_PROXY_URL = "proxy_url"; public static final String CONFIG_VERIFIED_ONE_ON_ONE_CHATS = "verified_one_on_one_chats"; public static final String CONFIG_WEBXDC_REALTIME_ENABLED = "webxdc_realtime_enabled"; + public static final String CONFIG_PRIVATE_TAG = "private_tag"; public static DcContext getContext(@NonNull Context context) { return ApplicationContext.getInstance(context).dcContext; From 1425506d83eae47c6f3e60a75008f4c10dce62a2 Mon Sep 17 00:00:00 2001 From: adb Date: Wed, 23 Oct 2024 17:12:12 +0200 Subject: [PATCH 09/10] Update src/main/res/values/strings.xml Co-authored-by: bjoern --- src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index df39a245a9..a39cb28901 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -653,7 +653,7 @@ Switch Profile Add Profile Private Tag - eg. Work, Family, ... + eg. Work, Family Tag that is visible only for you; helping you to differ between your profiles. Delete Profile Are you sure you want to delete your profile data? From 032a33f0a27ba7c590f086995816cce0480cb956 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Wed, 23 Oct 2024 17:53:00 +0200 Subject: [PATCH 10/10] remove forced text direction --- src/main/res/layout/account_selection_list_item.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/res/layout/account_selection_list_item.xml b/src/main/res/layout/account_selection_list_item.xml index 3625f53c3f..5adf88727b 100644 --- a/src/main/res/layout/account_selection_list_item.xml +++ b/src/main/res/layout/account_selection_list_item.xml @@ -64,7 +64,6 @@ android:id="@+id/addr_or_tag" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:textDirection="ltr" android:singleLine="true" android:ellipsize="marquee" android:textAppearance="?android:attr/textAppearanceSmall"