diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d80d7d35..fe28ec243 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Delta Chat Android Changelog +## Unreleased + +* Add context menu in long-pressing relays items instead of showing buttons + ## v2.42.0 2026-02 diff --git a/src/main/java/org/thoughtcrime/securesms/relay/RelayListActivity.java b/src/main/java/org/thoughtcrime/securesms/relay/RelayListActivity.java index 7833c3ab5..b4493d22b 100644 --- a/src/main/java/org/thoughtcrime/securesms/relay/RelayListActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/relay/RelayListActivity.java @@ -3,7 +3,9 @@ package org.thoughtcrime.securesms.relay; import android.content.Intent; import android.os.Bundle; import android.util.Log; +import android.view.ContextMenu; import android.view.MenuItem; +import android.view.View; import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBar; @@ -47,6 +49,9 @@ public class RelayListActivity extends BaseActionBarActivity /** QR provided via Intent extras needs to be saved to pass it to QrCodeHandler when authorization finishes */ private String qrData = null; + /** Relay selected for context menu via onRelayLongClick() */ + private EnteredLoginParam contextMenuRelay = null; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -143,14 +148,54 @@ public class RelayListActivity extends BaseActionBarActivity } @Override - public void onRelayEdit(EnteredLoginParam relay) { + public void onRelayLongClick(View view, EnteredLoginParam relay) { + contextMenuRelay = relay; + registerForContextMenu(view); + openContextMenu(view); + unregisterForContextMenu(view); + } + + @Override + public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { + super.onCreateContextMenu(menu, v, menuInfo); + getMenuInflater().inflate(R.menu.relay_item_context, menu); + + boolean nonNullAddr = contextMenuRelay != null && contextMenuRelay.addr != null; + boolean isMain = nonNullAddr && contextMenuRelay.addr.equals(adapter.getMainRelay()); + menu.findItem(R.id.menu_delete_relay).setVisible(!isMain); + } + + @Override + public void onContextMenuClosed(android.view.Menu menu) { + super.onContextMenuClosed(menu); + contextMenuRelay = null; + } + + @Override + public boolean onContextItemSelected(@NonNull MenuItem item) { + if (contextMenuRelay == null) return super.onContextItemSelected(item); + + int itemId = item.getItemId(); + if (itemId == R.id.menu_edit_relay) { + onRelayEdit(contextMenuRelay); + contextMenuRelay = null; + return true; + } else if (itemId == R.id.menu_delete_relay) { + onRelayDelete(contextMenuRelay); + contextMenuRelay = null; + return true; + } + + return super.onContextItemSelected(item); + } + + private void onRelayEdit(EnteredLoginParam relay) { Intent intent = new Intent(this, EditRelayActivity.class); intent.putExtra(EditRelayActivity.EXTRA_ADDR, relay.addr); startActivity(intent); } - @Override - public void onRelayDelete(EnteredLoginParam relay) { + private void onRelayDelete(EnteredLoginParam relay) { new AlertDialog.Builder(this) .setTitle(R.string.remove_transport) .setMessage(getString(R.string.confirm_remove_transport, relay.addr)) diff --git a/src/main/java/org/thoughtcrime/securesms/relay/RelayListAdapter.java b/src/main/java/org/thoughtcrime/securesms/relay/RelayListAdapter.java index 915465bbc..d97354f30 100644 --- a/src/main/java/org/thoughtcrime/securesms/relay/RelayListAdapter.java +++ b/src/main/java/org/thoughtcrime/securesms/relay/RelayListAdapter.java @@ -25,8 +25,7 @@ public class RelayListAdapter extends RecyclerView.Adapter { if (listener != null) { @@ -92,16 +86,11 @@ public class RelayListAdapter extends RecyclerView.Adapter { + itemView.setOnLongClickListener(v -> { if (listener != null) { - listener.onRelayEdit(relay); - } - }); - - deleteButton.setOnClickListener(v -> { - if (listener != null) { - listener.onRelayDelete(relay); + listener.onRelayLongClick(v, relay); } + return true; }); } } diff --git a/src/main/res/layout/relay_list_item.xml b/src/main/res/layout/relay_list_item.xml index db4eca65a..d7648250b 100644 --- a/src/main/res/layout/relay_list_item.xml +++ b/src/main/res/layout/relay_list_item.xml @@ -59,30 +59,4 @@ - - - - diff --git a/src/main/res/menu/relay_item_context.xml b/src/main/res/menu/relay_item_context.xml new file mode 100644 index 000000000..190e91bde --- /dev/null +++ b/src/main/res/menu/relay_item_context.xml @@ -0,0 +1,11 @@ + + + + + + + + +