From e36c34a6dcce635440d692ec866968b057cf8dc4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 24 Nov 2025 19:37:40 +0000 Subject: [PATCH] Implement edge-to-edge, add edit button, and main transport selection - Add android:fitsSystemWindows="true" to activity layout for proper edge-to-edge support - Add edit button (pencil icon) next to delete button for editing transports - Add "Main" indicator for the main transport (CONFIG_CONFIGURED_ADDRESS) - Clicking on a transport now makes it the main transport instead of opening edit - Edit button opens EditTransportActivity with transport data - FAB still adds new transport as intended Co-authored-by: adbenitez <24558636+adbenitez@users.noreply.github.com> --- .../securesms/TransportListActivity.java | 18 +++++++- .../securesms/TransportListAdapter.java | 22 ++++++++-- .../res/layout/activity_transport_list.xml | 1 + src/main/res/layout/transport_list_item.xml | 43 ++++++++++++++++--- src/main/res/values/strings.xml | 1 + 5 files changed, 74 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/thoughtcrime/securesms/TransportListActivity.java b/src/main/java/org/thoughtcrime/securesms/TransportListActivity.java index 895336155..4968dc0eb 100644 --- a/src/main/java/org/thoughtcrime/securesms/TransportListActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/TransportListActivity.java @@ -30,6 +30,7 @@ public class TransportListActivity extends BaseActionBarActivity private FloatingActionButton fabAdd; private Rpc rpc; private int accId; + private String mainTransportAddr; @Override protected void onCreate(Bundle savedInstanceState) { @@ -67,9 +68,11 @@ public class TransportListActivity extends BaseActionBarActivity Util.runOnBackground(() -> { try { List transports = rpc.listTransports(accId); - Util.runOnMain(() -> adapter.setTransports(transports)); + mainTransportAddr = DcHelper.get(this, DcHelper.CONFIG_CONFIGURED_ADDRESS); + Util.runOnMain(() -> adapter.setTransports(transports, mainTransportAddr)); } catch (RpcException e) { - Util.runOnMain(() -> adapter.setTransports(null)); + mainTransportAddr = DcHelper.get(this, DcHelper.CONFIG_CONFIGURED_ADDRESS); + Util.runOnMain(() -> adapter.setTransports(null, mainTransportAddr)); } }); } @@ -81,6 +84,17 @@ public class TransportListActivity extends BaseActionBarActivity @Override public void onTransportClick(EnteredLoginParam transport) { + // Clicking on a transport makes it the main transport + if (transport.addr != null && !transport.addr.equals(mainTransportAddr)) { + Util.runOnBackground(() -> { + DcHelper.getContext(this).setConfig(DcHelper.CONFIG_CONFIGURED_ADDRESS, transport.addr); + Util.runOnMain(this::loadTransports); + }); + } + } + + @Override + public void onTransportEdit(EnteredLoginParam transport) { Intent intent = new Intent(this, EditTransportActivity.class); intent.putExtra(EXTRA_TRANSPORT_ADDR, transport.addr); startActivity(intent); diff --git a/src/main/java/org/thoughtcrime/securesms/TransportListAdapter.java b/src/main/java/org/thoughtcrime/securesms/TransportListAdapter.java index eb5dc6bd8..7c9a43651 100644 --- a/src/main/java/org/thoughtcrime/securesms/TransportListAdapter.java +++ b/src/main/java/org/thoughtcrime/securesms/TransportListAdapter.java @@ -18,9 +18,11 @@ public class TransportListAdapter extends RecyclerView.Adapter transports = new ArrayList<>(); private final OnTransportClickListener listener; + private String mainTransportAddr; public interface OnTransportClickListener { void onTransportClick(EnteredLoginParam transport); + void onTransportEdit(EnteredLoginParam transport); void onTransportDelete(EnteredLoginParam transport); } @@ -28,8 +30,9 @@ public class TransportListAdapter extends RecyclerView.Adapter transports) { + public void setTransports(List transports, String mainTransportAddr) { this.transports = transports != null ? transports : new ArrayList<>(); + this.mainTransportAddr = mainTransportAddr; notifyDataSetChanged(); } @@ -44,7 +47,8 @@ public class TransportListAdapter extends RecyclerView.Adapter { if (listener != null) { listener.onTransportClick(transport); } }); + editButton.setOnClickListener(v -> { + if (listener != null) { + listener.onTransportEdit(transport); + } + }); + deleteButton.setOnClickListener(v -> { if (listener != null) { listener.onTransportDelete(transport); diff --git a/src/main/res/layout/activity_transport_list.xml b/src/main/res/layout/activity_transport_list.xml index 13ae32841..5c0cbc362 100644 --- a/src/main/res/layout/activity_transport_list.xml +++ b/src/main/res/layout/activity_transport_list.xml @@ -4,6 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" + android:fitsSystemWindows="true" android:background="?android:attr/windowBackground"> - + android:orientation="horizontal" + android:gravity="center_vertical"> + + + + + + + + Add Transport Remove Transport Edit Transport + Main Add this transport? The scanned QR code does not contain a valid transport.