From 04490699ff4ad8b689a16ea9cd6508886e60ebf9 Mon Sep 17 00:00:00 2001 From: dethe <76167420+detherminal@users.noreply.github.com> Date: Sat, 4 May 2024 21:51:44 +0300 Subject: [PATCH 1/5] feat: accesibility labels for buttons --- .../com/m2049r/xmrwallet/LoginFragment.java | 4 ++ .../com/m2049r/xmrwallet/NodeFragment.java | 8 ++-- .../com/m2049r/xmrwallet/WalletActivity.java | 4 +- .../java/com/m2049r/xmrwallet/data/Node.java | 4 ++ .../com/m2049r/xmrwallet/data/NodeInfo.java | 4 ++ .../xmrwallet/layout/NodeInfoAdapter.java | 13 +++++-- app/src/main/res/layout/layout_fabmenu.xml | 38 ++++++++++++++----- app/src/main/res/values/strings.xml | 7 ++++ 8 files changed, 64 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/m2049r/xmrwallet/LoginFragment.java b/app/src/main/java/com/m2049r/xmrwallet/LoginFragment.java index 8e920adb69..82f76724db 100644 --- a/app/src/main/java/com/m2049r/xmrwallet/LoginFragment.java +++ b/app/src/main/java/com/m2049r/xmrwallet/LoginFragment.java @@ -323,8 +323,10 @@ private void setFabOpen(boolean value) { public void animateFAB() { if (isFabOpen()) { // close the fab fabScreen.setClickable(false); + fabScreen.setVisibility(View.INVISIBLE); fabScreen.startAnimation(fab_close_screen); fab.startAnimation(rotate_backward); + fab.setContentDescription(getString(R.string.fab_create_or_restore)); if (fabLedgerL.getVisibility() == View.VISIBLE) { fabLedgerL.startAnimation(fab_close); fabLedger.setClickable(false); @@ -343,8 +345,10 @@ public void animateFAB() { setFabOpen(false); } else { // open the fab fabScreen.setClickable(true); + fabScreen.setVisibility(View.VISIBLE);; fabScreen.startAnimation(fab_open_screen); fab.startAnimation(rotate_forward); + fab.setContentDescription(getString(R.string.fab_close)); if (activityCallback.hasLedger()) { fabLedgerL.setVisibility(View.VISIBLE); fabNewL.setVisibility(View.GONE); diff --git a/app/src/main/java/com/m2049r/xmrwallet/NodeFragment.java b/app/src/main/java/com/m2049r/xmrwallet/NodeFragment.java index 70098d6fc9..bab74a778a 100644 --- a/app/src/main/java/com/m2049r/xmrwallet/NodeFragment.java +++ b/app/src/main/java/com/m2049r/xmrwallet/NodeFragment.java @@ -181,7 +181,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Helper.hideKeyboard(getActivity()); nodeList = new HashSet<>(activityCallback.getFavouriteNodes()); - nodesAdapter.setNodes(nodeList); + nodesAdapter.setNodes(nodeList, getContext()); ViewGroup llNotice = view.findViewById(R.id.llNotice); Notice.showAll(llNotice, ".*_nodes"); @@ -266,7 +266,7 @@ private class AsyncFindNodes extends AsyncTask protected void onPreExecute() { super.onPreExecute(); filterFavourites(); - nodesAdapter.setNodes(null); + nodesAdapter.setNodes(null, getContext()); nodesAdapter.allowClick(false); tvPull.setText(getString(R.string.node_scanning)); } @@ -335,7 +335,7 @@ protected void onProgressUpdate(NodeInfo... values) { if (values != null) nodesAdapter.addNode(values[0]); else - nodesAdapter.setNodes(null); + nodesAdapter.setNodes(null, getContext()); } @Override @@ -357,7 +357,7 @@ private void complete() { //if (isCancelled()) return; tvPull.setText(getString(R.string.node_pull_hint)); pullToRefresh.setRefreshing(false); - nodesAdapter.setNodes(nodeList); + nodesAdapter.setNodes(nodeList, getContext()); nodesAdapter.allowClick(true); updateRefreshElements(); } diff --git a/app/src/main/java/com/m2049r/xmrwallet/WalletActivity.java b/app/src/main/java/com/m2049r/xmrwallet/WalletActivity.java index afa05f6ea1..cff673fd34 100644 --- a/app/src/main/java/com/m2049r/xmrwallet/WalletActivity.java +++ b/app/src/main/java/com/m2049r/xmrwallet/WalletActivity.java @@ -387,11 +387,13 @@ public void onButton(int type) { }); drawer = findViewById(R.id.drawer_layout); - drawerToggle = new ActionBarDrawerToggle(this, drawer, toolbar, 0, 0); + drawerToggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.open_drawer, R.string.close_drawer); drawer.addDrawerListener(drawerToggle); drawerToggle.syncState(); setDrawerEnabled(false); // disable until synced + + accountsView = findViewById(R.id.accounts_nav); accountsView.setNavigationItemSelectedListener(this); diff --git a/app/src/main/java/com/m2049r/xmrwallet/data/Node.java b/app/src/main/java/com/m2049r/xmrwallet/data/Node.java index 0f0115304e..be77c0cd08 100644 --- a/app/src/main/java/com/m2049r/xmrwallet/data/Node.java +++ b/app/src/main/java/com/m2049r/xmrwallet/data/Node.java @@ -255,6 +255,10 @@ public String toString() { return sb.toString(); } + public String toNameString() { + return name; + } + public Node() { this.networkType = WalletManager.getInstance().getNetworkType(); } diff --git a/app/src/main/java/com/m2049r/xmrwallet/data/NodeInfo.java b/app/src/main/java/com/m2049r/xmrwallet/data/NodeInfo.java index f9026cb514..f9bff41709 100644 --- a/app/src/main/java/com/m2049r/xmrwallet/data/NodeInfo.java +++ b/app/src/main/java/com/m2049r/xmrwallet/data/NodeInfo.java @@ -178,6 +178,10 @@ public String toString() { return sb.toString(); } + public String toNameString() { + return super.toNameString(); + } + private static final int HTTP_TIMEOUT = 1000; //ms public static final double PING_GOOD = HTTP_TIMEOUT / 3.0; //ms public static final double PING_MEDIUM = 2 * PING_GOOD; //ms diff --git a/app/src/main/java/com/m2049r/xmrwallet/layout/NodeInfoAdapter.java b/app/src/main/java/com/m2049r/xmrwallet/layout/NodeInfoAdapter.java index baae49e188..3153abe95d 100644 --- a/app/src/main/java/com/m2049r/xmrwallet/layout/NodeInfoAdapter.java +++ b/app/src/main/java/com/m2049r/xmrwallet/layout/NodeInfoAdapter.java @@ -52,6 +52,8 @@ public interface OnInteractionListener { private final FragmentActivity activity; + private Context context; + public NodeInfoAdapter(FragmentActivity activity, OnInteractionListener listener) { this.activity = activity; this.listener = listener; @@ -107,10 +109,11 @@ public void addNode(NodeInfo node) { List newItems = new ArrayList<>(nodeItems); if (!nodeItems.contains(node)) newItems.add(node); - setNodes(newItems); // in case the nodeinfo has changed + setNodes(newItems, context); // in case the nodeinfo has changed } - public void setNodes(Collection newItemsCollection) { + public void setNodes(Collection newItemsCollection, Context iContext) { + context = iContext; List newItems; if (newItemsCollection != null) { newItems = new ArrayList<>(newItemsCollection); @@ -126,7 +129,7 @@ public void setNodes(Collection newItemsCollection) { } public void setNodes() { - setNodes(nodeItems); + setNodes(nodeItems, context); } private boolean itemsClickable = true; @@ -156,7 +159,7 @@ class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener showStar(); if (!nodeItem.isFavourite()) { nodeItem.setSelected(false); - setNodes(nodeItems); + setNodes(nodeItems, context); } }); itemView.setOnClickListener(this); @@ -166,8 +169,10 @@ class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener private void showStar() { if (nodeItem.isFavourite()) { ibBookmark.setImageResource(R.drawable.ic_favorite_24dp); + ibBookmark.setContentDescription(context.getString(R.string.node_remove_favourite).replace("%1$", nodeItem.toNameString())); } else { ibBookmark.setImageResource(R.drawable.ic_favorite_border_24dp); + ibBookmark.setContentDescription(context.getString(R.string.node_add_favourite).replace("%1$", nodeItem.toNameString())); } } diff --git a/app/src/main/res/layout/layout_fabmenu.xml b/app/src/main/res/layout/layout_fabmenu.xml index 02778f85ed..c79fe732c1 100644 --- a/app/src/main/res/layout/layout_fabmenu.xml +++ b/app/src/main/res/layout/layout_fabmenu.xml @@ -13,14 +13,18 @@ android:alpha="0.93" android:background="?android:attr/colorBackground" android:focusable="true" - android:visibility="invisible"> + android:visibility="invisible" + android:contentDescription="@string/fab_addition_options_menu" + > + android:layout_alignEnd="@id/fabImportL" + android:contentDescription="@string/fab_create_new" + > + app:pressedTranslationZ="12dp" + /> @@ -54,7 +60,9 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@id/fabKeyL" - android:layout_alignEnd="@id/fabImportL"> + android:layout_alignEnd="@id/fabImportL" + android:contentDescription="@string/fab_restore_viewonly" + > + app:pressedTranslationZ="12dp" + /> @@ -85,7 +95,9 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@id/fabSeedL" - android:layout_alignEnd="@id/fabImportL"> + android:layout_alignEnd="@id/fabImportL" + android:contentDescription="@string/fab_restore_key" + > @@ -116,7 +129,9 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@id/fabImportL" - android:layout_alignEnd="@id/fabImportL"> + android:layout_alignEnd="@id/fabImportL" + android:contentDescription="@string/fab_restore_seed" + > @@ -147,7 +163,9 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" - android:layout_alignParentBottom="true"> + android:layout_alignParentBottom="true" + android:contentDescription="@string/menu_restore" + > @@ -201,6 +220,7 @@ android:layout_toEndOf="@+id/fabLedgerT" android:elevation="6dp" android:src="@drawable/ic_ledger_restore" + android:contentDescription="@string/fab_restore_ledger" app:borderWidth="0dp" app:fabSize="mini" app:pressedTranslationZ="12dp" /> @@ -233,7 +253,7 @@ app:fabSize="normal" app:pressedTranslationZ="0dp" app:tint="?attr/toolbarTextColor" - android:contentDescription="@string/fab_create_new" /> + android:contentDescription="@string/fab_create_or_restore" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 49b006cbe4..90b827a796 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -285,14 +285,19 @@ Yes, do that! No thanks! + Create or restore wallet + Close wallet addition options menu Create new wallet Restore view-only wallet Restore wallet from private keys Restore wallet 25 word seed + Wallet addition options menu %1$s XMR (%1$d, %2$d)  <span style=\"background-color: #%3$s; color: #%4$s;\"> %5$s </span> + Open accounts drawer + Close accounts drawer Create Account Added new account #%1$d Account # @@ -352,6 +357,8 @@ Scanning network… Automatically bookmarked best %1$d nodes Test + Save %1$ node + Remove saved %1$ node Receiver From af45b092c9ce75131ca353a24d16e6e0330597bb Mon Sep 17 00:00:00 2001 From: dethe <76167420+detherminal@users.noreply.github.com> Date: Sun, 15 Sep 2024 01:23:19 +0300 Subject: [PATCH 2/5] chore: conflict update --- app/src/main/java/com/m2049r/xmrwallet/LoginFragment.java | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/m2049r/xmrwallet/LoginFragment.java b/app/src/main/java/com/m2049r/xmrwallet/LoginFragment.java index 36e859d4fc..7b62329ae7 100644 --- a/app/src/main/java/com/m2049r/xmrwallet/LoginFragment.java +++ b/app/src/main/java/com/m2049r/xmrwallet/LoginFragment.java @@ -355,6 +355,7 @@ public void animateFAB() { fabScreen.setVisibility(View.VISIBLE);; fabScreen.startAnimation(fab_open_screen); fab.startAnimation(rotate_forward); + fab.setContentDescription(getString(R.string.fab_close)); if ((activityCallback.hasDevice(Wallet.Device.Ledger) || activityCallback.hasDevice(Wallet.Device.Sidekick))) { fabNewL.setVisibility(View.GONE); From 933bc539ea6bbb24beb21b516c1063242b6ca884 Mon Sep 17 00:00:00 2001 From: dethe <76167420+detherminal@users.noreply.github.com> Date: Tue, 1 Oct 2024 01:08:30 +0300 Subject: [PATCH 3/5] Update LoginFragment.java --- .../java/com/m2049r/xmrwallet/LoginFragment.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/app/src/main/java/com/m2049r/xmrwallet/LoginFragment.java b/app/src/main/java/com/m2049r/xmrwallet/LoginFragment.java index 7b62329ae7..ec523dcc86 100644 --- a/app/src/main/java/com/m2049r/xmrwallet/LoginFragment.java +++ b/app/src/main/java/com/m2049r/xmrwallet/LoginFragment.java @@ -325,6 +325,8 @@ private void setFabOpen(boolean value) { } public void animateFAB() { + // NOTE: Without `fabX.setVisibility(View.VISIBLE)`, the code `fabX.setClickable(true)` does not work. + // Please update the future buttons with the above code for better accessibility. if (isFabOpen()) { // close the fab fabScreen.setClickable(false); fabScreen.setVisibility(View.INVISIBLE); @@ -334,20 +336,27 @@ public void animateFAB() { if (fabLedgerL.getVisibility() == View.VISIBLE) { fabLedgerL.startAnimation(fab_close); fabLedger.setClickable(false); + fabLedger.setVisibility(View.INVISIBLE); } else if (fabSidekickL.getVisibility() == View.VISIBLE) { fabSidekickL.startAnimation(fab_close); fabSidekick.setClickable(false); + fabSidekick.setVisibility(View.INVISIBLE); } else { fabNewL.startAnimation(fab_close); fabNew.setClickable(false); + fabNew.setVisibility(View.INVISIBLE); fabViewL.startAnimation(fab_close); fabView.setClickable(false); + fabView.setVisibility(View.INVISIBLE); fabKeyL.startAnimation(fab_close); fabKey.setClickable(false); + fabKey.setVisibility(View.INVISIBLE); fabSeedL.startAnimation(fab_close); fabSeed.setClickable(false); + fabSeed.setVisibility(View.INVISIBLE); fabImportL.startAnimation(fab_close); fabImport.setClickable(false); + fabImport.setVisibility(View.INVISIBLE); } setFabOpen(false); } else { // open the fab @@ -368,10 +377,12 @@ public void animateFAB() { fabLedgerL.setVisibility(View.VISIBLE); fabLedgerL.startAnimation(fab_open); fabLedger.setClickable(true); + fabLedger.setVisibility(View.VISIBLE); } else { // Sidekick fabSidekickL.setVisibility(View.VISIBLE); fabSidekickL.startAnimation(fab_open); fabSidekick.setClickable(true); + fabSidekick.setVisibility(View.VISIBLE); } } else { fabSidekickL.setVisibility(View.GONE); @@ -384,14 +395,19 @@ public void animateFAB() { fabNewL.startAnimation(fab_open); fabNew.setClickable(true); + fabNew.setVisibility(View.VISIBLE); fabViewL.startAnimation(fab_open); fabView.setClickable(true); + fabView.setVisibility(View.VISIBLE); fabKeyL.startAnimation(fab_open); fabKey.setClickable(true); + fabKey.setVisibility(View.VISIBLE); fabSeedL.startAnimation(fab_open); fabSeed.setClickable(true); + fabSeed.setVisibility(View.VISIBLE); fabImportL.startAnimation(fab_open); fabImport.setClickable(true); + fabImport.setVisibility(View.VISIBLE); } setFabOpen(true); } From c4e4bb0964c9a7ce4c9a8ddb996055557d544850 Mon Sep 17 00:00:00 2001 From: dethe <76167420+detherminal@users.noreply.github.com> Date: Thu, 3 Oct 2024 12:31:37 +0300 Subject: [PATCH 4/5] fix initial sound bug --- app/src/main/res/layout/layout_fabmenu.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/layout/layout_fabmenu.xml b/app/src/main/res/layout/layout_fabmenu.xml index 5aa0f30be0..ac8b9d382e 100644 --- a/app/src/main/res/layout/layout_fabmenu.xml +++ b/app/src/main/res/layout/layout_fabmenu.xml @@ -278,7 +278,7 @@ android:layout_gravity="bottom|end" android:backgroundTint="@android:color/transparent" android:backgroundTintMode="src_in" - android:contentDescription="@string/fab_create_new" + android:contentDescription="@string/fab_create_or_restore" android:src="@drawable/ic_add" app:borderWidth="0dp" app:elevation="0dp" From 0589612a4cbef95daf5a295e7f3b1e1e606386bf Mon Sep 17 00:00:00 2001 From: dethe <76167420+detherminal@users.noreply.github.com> Date: Tue, 15 Oct 2024 21:52:18 +0300 Subject: [PATCH 5/5] remove blank lines --- app/src/main/java/com/m2049r/xmrwallet/WalletActivity.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/java/com/m2049r/xmrwallet/WalletActivity.java b/app/src/main/java/com/m2049r/xmrwallet/WalletActivity.java index 8a423b549c..1bc8074e6a 100644 --- a/app/src/main/java/com/m2049r/xmrwallet/WalletActivity.java +++ b/app/src/main/java/com/m2049r/xmrwallet/WalletActivity.java @@ -389,8 +389,6 @@ protected void onCreate(Bundle savedInstanceState) { drawerToggle.syncState(); setDrawerEnabled(false); // disable until synced - - accountsView = findViewById(R.id.accounts_nav); accountsView.setNavigationItemSelectedListener(this);