From fcd16d9e325ba373a61da5efa12c36a41108e830 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Thu, 22 Jan 2026 17:50:16 +0100 Subject: [PATCH] don't allow to delete or create new profile while sharing/forwarding --- .../securesms/ConversationListActivity.java | 8 +++--- .../AccountSelectionListFragment.java | 25 ++++++++++++------- .../securesms/connect/AccountManager.java | 4 +-- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/thoughtcrime/securesms/ConversationListActivity.java b/src/main/java/org/thoughtcrime/securesms/ConversationListActivity.java index c827004dd..f9a866529 100644 --- a/src/main/java/org/thoughtcrime/securesms/ConversationListActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/ConversationListActivity.java @@ -176,10 +176,10 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit TooltipCompat.setTooltipText(searchAction, getText(R.string.search_explain)); TooltipCompat.setTooltipText(selfAvatar, getText(R.string.switch_account)); - selfAvatar.setOnClickListener(v -> AccountManager.getInstance().showSwitchAccountMenu(this)); + selfAvatar.setOnClickListener(v -> AccountManager.getInstance().showSwitchAccountMenu(this, false)); findViewById(R.id.avatar_and_title).setOnClickListener(v -> { if (!isRelayingMessageContent(this)) { - AccountManager.getInstance().showSwitchAccountMenu(this); + AccountManager.getInstance().showSwitchAccountMenu(this, false); } }); @@ -453,7 +453,7 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit handleSaveAttachment(); return true; } else if (itemId == R.id.menu_switch_account) { - AccountManager.getInstance().showSwitchAccountMenu(this); + AccountManager.getInstance().showSwitchAccountMenu(this, true); return true; } @@ -627,7 +627,7 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit DcContext selAcc = accounts.getSelectedAccount(); AccountManager.getInstance().switchAccountAndStartActivity(this, selAcc.isOk()? selAcc.getAccountId() : 0); } else { - AccountManager.getInstance().showSwitchAccountMenu(this); + AccountManager.getInstance().showSwitchAccountMenu(this, false); } // title update needed to show "Delta Chat" in case there is only one profile left diff --git a/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java b/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java index 1cfd01c4a..924b217d0 100644 --- a/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java @@ -50,10 +50,12 @@ public class AccountSelectionListFragment extends DialogFragment implements DcEv private final ConversationListActivity activity; private RecyclerView recyclerView; private AccountSelectionListAdapter adapter; + private final boolean selectOnly; - public AccountSelectionListFragment(ConversationListActivity activity) { + public AccountSelectionListFragment(ConversationListActivity activity, boolean selectOnly) { super(); this.activity = activity; + this.selectOnly = selectOnly; } @NonNull @@ -61,10 +63,12 @@ public class AccountSelectionListFragment extends DialogFragment implements DcEv public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity()) .setTitle(R.string.switch_account) - .setNeutralButton(R.string.connectivity, ((dialog, which) -> { - startActivity(new Intent(getActivity(), ConnectivityActivity.class)); - })) .setNegativeButton(R.string.cancel, null); + if (!selectOnly) { + builder.setNeutralButton(R.string.connectivity, ((dialog, which) -> { + startActivity(new Intent(getActivity(), ConnectivityActivity.class)); + })); + } LayoutInflater inflater = requireActivity().getLayoutInflater(); View view = inflater.inflate(R.layout.account_selection_list_fragment, null); @@ -99,18 +103,21 @@ public class AccountSelectionListFragment extends DialogFragment implements DcEv DcAccounts accounts = DcHelper.getAccounts(getActivity()); int[] accountIds = accounts.getAll(); - int[] ids = new int[accountIds.length + 1]; + int count = (selectOnly? 0 : 1) + accountIds.length; + int[] ids = new int[count]; int j = 0; for (int accountId : accountIds) { ids[j++] = accountId; } - ids[j] = DC_CONTACT_ID_ADD_ACCOUNT; + if (!selectOnly) ids[j] = DC_CONTACT_ID_ADD_ACCOUNT; adapter.changeData(ids, accounts.getSelectedAccount().getAccountId()); } @Override public void onCreateContextMenu(@NonNull ContextMenu menu, @NonNull View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); + if (selectOnly) return; + requireActivity().getMenuInflater().inflate(R.menu.account_item_context, menu); AccountSelectionListItem listItem = (AccountSelectionListItem) v; @@ -188,9 +195,9 @@ public class AccountSelectionListFragment extends DialogFragment implements DcEv .setPositiveButton(android.R.string.ok, (d, b) -> { String newTag = inputField.getText().toString().trim(); dcContext.setConfig(CONFIG_PRIVATE_TAG, newTag); - AccountManager.getInstance().showSwitchAccountMenu(activity); + AccountManager.getInstance().showSwitchAccountMenu(activity, selectOnly); }) - .setNegativeButton(R.string.cancel, (d, b) -> AccountManager.getInstance().showSwitchAccountMenu(activity)) + .setNegativeButton(R.string.cancel, (d, b) -> AccountManager.getInstance().showSwitchAccountMenu(activity, selectOnly)) .show(); } @@ -230,7 +237,7 @@ public class AccountSelectionListFragment extends DialogFragment implements DcEv AlertDialog dialog = new AlertDialog.Builder(activity) .setTitle(R.string.delete_account) .setView(dialogView) - .setNegativeButton(R.string.cancel, (d, which) -> AccountManager.getInstance().showSwitchAccountMenu(activity)) + .setNegativeButton(R.string.cancel, (d, which) -> AccountManager.getInstance().showSwitchAccountMenu(activity, selectOnly)) .setPositiveButton(R.string.delete, (d2, w2) -> activity.onDeleteProfile(accountId)) .show(); Util.redPositiveButton(dialog); diff --git a/src/main/java/org/thoughtcrime/securesms/connect/AccountManager.java b/src/main/java/org/thoughtcrime/securesms/connect/AccountManager.java index d005c18dc..2bdebe7fe 100644 --- a/src/main/java/org/thoughtcrime/securesms/connect/AccountManager.java +++ b/src/main/java/org/thoughtcrime/securesms/connect/AccountManager.java @@ -137,8 +137,8 @@ public class AccountManager { // ui - public void showSwitchAccountMenu(ConversationListActivity activity) { - AccountSelectionListFragment dialog = new AccountSelectionListFragment(activity); + public void showSwitchAccountMenu(ConversationListActivity activity, boolean selectOnly) { + AccountSelectionListFragment dialog = new AccountSelectionListFragment(activity, selectOnly); dialog.show(((FragmentActivity) activity).getSupportFragmentManager(), null); }