diff options
author | Harsh Shandilya <me@msfjarvis.dev> | 2020-09-20 13:32:31 +0530 |
---|---|---|
committer | Harsh Shandilya <me@msfjarvis.dev> | 2020-09-20 13:33:48 +0530 |
commit | 7cff4367d7026b5ed2c93fb97735e2146dcecbc1 (patch) | |
tree | 9bb0b487bf25182c79204c643d66ba7e9fc17d06 | |
parent | 9eaed5e74592c430d4b680df8d9a67fe5fda32f2 (diff) |
ui: add navigation hints for D-Pad and IME
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
-rw-r--r-- | ui/src/main/res/layout/add_tunnels_bottom_sheet.xml | 6 | ||||
-rw-r--r-- | ui/src/main/res/layout/config_naming_dialog_fragment.xml | 1 | ||||
-rw-r--r-- | ui/src/main/res/layout/tunnel_detail_fragment.xml | 24 | ||||
-rw-r--r-- | ui/src/main/res/layout/tunnel_detail_peer.xml | 15 | ||||
-rw-r--r-- | ui/src/main/res/layout/tunnel_editor_fragment.xml | 33 | ||||
-rw-r--r-- | ui/src/main/res/layout/tunnel_editor_peer.xml | 24 | ||||
-rw-r--r-- | ui/src/main/res/layout/tunnel_list_fragment.xml | 3 |
7 files changed, 106 insertions, 0 deletions
diff --git a/ui/src/main/res/layout/add_tunnels_bottom_sheet.xml b/ui/src/main/res/layout/add_tunnels_bottom_sheet.xml index 41cfe8bd..68f186b6 100644 --- a/ui/src/main/res/layout/add_tunnels_bottom_sheet.xml +++ b/ui/src/main/res/layout/add_tunnels_bottom_sheet.xml @@ -15,6 +15,8 @@ android:layout_marginLeft="@dimen/normal_margin" android:layout_marginEnd="@dimen/normal_margin" android:layout_marginRight="@dimen/normal_margin" + android:nextFocusDown="@id/create_from_qrcode" + android:nextFocusForward="@id/create_from_qrcode" android:text="@string/create_from_file" android:textAlignment="viewStart" android:textColor="?attr/colorOnSurface" @@ -36,6 +38,9 @@ android:layout_marginLeft="@dimen/normal_margin" android:layout_marginEnd="@dimen/normal_margin" android:layout_marginRight="@dimen/normal_margin" + android:nextFocusUp="@id/create_from_file" + android:nextFocusDown="@id/create_empty" + android:nextFocusForward="@id/create_empty" android:text="@string/create_from_qr_code" android:textAlignment="viewStart" android:textColor="?attr/colorOnSurface" @@ -57,6 +62,7 @@ android:layout_marginLeft="@dimen/normal_margin" android:layout_marginEnd="@dimen/normal_margin" android:layout_marginRight="@dimen/normal_margin" + android:nextFocusUp="@id/create_from_qrcode" android:text="@string/create_empty" android:textAlignment="viewStart" android:textColor="?attr/colorOnSurface" diff --git a/ui/src/main/res/layout/config_naming_dialog_fragment.xml b/ui/src/main/res/layout/config_naming_dialog_fragment.xml index 60a904b6..0fd88c6c 100644 --- a/ui/src/main/res/layout/config_naming_dialog_fragment.xml +++ b/ui/src/main/res/layout/config_naming_dialog_fragment.xml @@ -22,6 +22,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/tunnel_name" + android:imeOptions="actionDone" android:inputType="textNoSuggestions|textVisiblePassword" app:filter="@{NameInputFilter.newInstance()}" /> diff --git a/ui/src/main/res/layout/tunnel_detail_fragment.xml b/ui/src/main/res/layout/tunnel_detail_fragment.xml index ce33c5c5..16bc2ddb 100644 --- a/ui/src/main/res/layout/tunnel_detail_fragment.xml +++ b/ui/src/main/res/layout/tunnel_detail_fragment.xml @@ -62,6 +62,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="16dp" + android:nextFocusDown="@id/interface_name_text" + android:nextFocusForward="@id/interface_name_text" app:checked="@{tunnel.state == State.UP}" app:layout_constraintBaseline_toBaselineOf="@+id/interface_title" app:layout_constraintEnd_toEndOf="parent" @@ -83,6 +85,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:contentDescription="@string/name" + android:nextFocusUp="@id/tunnel_switch" + android:nextFocusDown="@id/public_key_text" + android:nextFocusForward="@id/public_key_text" android:onClick="@{ClipboardUtils::copyTextView}" android:text="@{tunnel.name}" app:layout_constraintStart_toStartOf="parent" @@ -107,6 +112,9 @@ android:contentDescription="@string/public_key" android:ellipsize="end" android:maxLines="1" + android:nextFocusUp="@id/interface_name_text" + android:nextFocusDown="@id/addresses_text" + android:nextFocusForward="@id/addresses_text" android:onClick="@{ClipboardUtils::copyTextView}" android:singleLine="true" android:text="@{config.interface.keyPair.publicKey.toBase64}" @@ -131,6 +139,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:contentDescription="@string/addresses" + android:nextFocusUp="@id/public_key_text" + android:nextFocusDown="@id/dns_servers_text" + android:nextFocusForward="@id/dns_servers_text" android:onClick="@{ClipboardUtils::copyTextView}" android:text="@{config.interface.addresses}" android:visibility="@{config.interface.addresses.isEmpty() ? android.view.View.GONE : android.view.View.VISIBLE}" @@ -155,6 +166,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:contentDescription="@string/dns_servers" + android:nextFocusUp="@id/addresses_text" + android:nextFocusDown="@id/listen_port_text" + android:nextFocusForward="@id/listen_port_text" android:onClick="@{ClipboardUtils::copyTextView}" android:text="@{config.interface.dnsServers}" android:visibility="@{config.interface.dnsServers.isEmpty() ? android.view.View.GONE : android.view.View.VISIBLE}" @@ -181,6 +195,10 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:contentDescription="@string/listen_port" + android:nextFocusRight="@id/mtu_text" + android:nextFocusUp="@id/dns_servers_text" + android:nextFocusDown="@id/applications_text" + android:nextFocusForward="@id/mtu_text" android:onClick="@{ClipboardUtils::copyTextView}" android:text="@{config.interface.listenPort}" android:visibility="@{!config.interface.listenPort.isPresent() ? android.view.View.GONE : android.view.View.VISIBLE}" @@ -210,6 +228,9 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:contentDescription="@string/mtu" + android:nextFocusLeft="@id/listen_port_text" + android:nextFocusUp="@id/dns_servers_text" + android:nextFocusForward="@id/applications_text" android:onClick="@{ClipboardUtils::copyTextView}" android:text="@{config.interface.mtu}" android:visibility="@{!config.interface.mtu.isPresent() ? android.view.View.GONE : android.view.View.VISIBLE}" @@ -237,6 +258,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:contentDescription="@string/applications" + android:nextFocusUp="@id/mtu_text" + android:nextFocusDown="@id/peers_layout" + android:nextFocusForward="@id/peers_layout" android:onClick="@{ClipboardUtils::copyTextView}" android:text="@{config.interface.includedApplications.isEmpty() ? @plurals/n_excluded_applications(config.interface.excludedApplications.size(), config.interface.excludedApplications.size()) : @plurals/n_included_applications(config.interface.includedApplications.size(), config.interface.includedApplications.size())}" android:visibility="@{config.interface.includedApplications.isEmpty() && config.interface.excludedApplications.isEmpty() ? android.view.View.GONE : android.view.View.VISIBLE}" diff --git a/ui/src/main/res/layout/tunnel_detail_peer.xml b/ui/src/main/res/layout/tunnel_detail_peer.xml index d0836536..0fbee8f1 100644 --- a/ui/src/main/res/layout/tunnel_detail_peer.xml +++ b/ui/src/main/res/layout/tunnel_detail_peer.xml @@ -48,6 +48,8 @@ android:contentDescription="@string/public_key" android:ellipsize="end" android:maxLines="1" + android:nextFocusDown="@id/pre_shared_key_text" + android:nextFocusForward="@id/pre_shared_key_text" android:onClick="@{ClipboardUtils::copyTextView}" android:singleLine="true" android:text="@{item.publicKey.toBase64}" @@ -74,6 +76,9 @@ android:contentDescription="@string/pre_shared_key" android:ellipsize="end" android:maxLines="1" + android:nextFocusUp="@id/public_key_text" + android:nextFocusDown="@id/allowed_ips_text" + android:nextFocusForward="@id/allowed_ips_text" android:singleLine="true" android:text="@string/pre_shared_key_enabled" android:visibility="@{!item.preSharedKey.isPresent() ? android.view.View.GONE : android.view.View.VISIBLE}" @@ -98,6 +103,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:contentDescription="@string/allowed_ips" + android:nextFocusUp="@id/pre_shared_key_text" + android:nextFocusDown="@id/endpoint_text" + android:nextFocusForward="@id/endpoint_text" android:onClick="@{ClipboardUtils::copyTextView}" android:text="@{item.allowedIps}" android:visibility="@{item.allowedIps.isEmpty() ? android.view.View.GONE : android.view.View.VISIBLE}" @@ -122,6 +130,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:contentDescription="@string/endpoint" + android:nextFocusUp="@id/allowed_ips_text" + android:nextFocusDown="@id/persistent_keepalive_text" + android:nextFocusForward="@id/persistent_keepalive_text" android:onClick="@{ClipboardUtils::copyTextView}" android:text="@{item.endpoint}" android:visibility="@{!item.endpoint.isPresent() ? android.view.View.GONE : android.view.View.VISIBLE}" @@ -146,6 +157,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:contentDescription="@string/persistent_keepalive" + android:nextFocusUp="@id/endpoint_text" + android:nextFocusDown="@id/transfer_text" + android:nextFocusForward="@id/transfer_text" android:onClick="@{ClipboardUtils::copyTextView}" android:text="@{@plurals/persistent_keepalive_seconds_unit(item.persistentKeepalive.orElse(0), item.persistentKeepalive.orElse(0))}" android:visibility="@{!item.persistentKeepalive.isPresent() ? android.view.View.GONE : android.view.View.VISIBLE}" @@ -173,6 +187,7 @@ android:layout_height="wrap_content" android:layout_below="@+id/transfer_label" android:contentDescription="@string/transfer" + android:nextFocusUp="@id/persistent_keepalive_text" android:onClick="@{ClipboardUtils::copyTextView}" android:visibility="gone" app:layout_constraintStart_toStartOf="parent" diff --git a/ui/src/main/res/layout/tunnel_editor_fragment.xml b/ui/src/main/res/layout/tunnel_editor_fragment.xml index 8b2ff2ec..34f52d03 100644 --- a/ui/src/main/res/layout/tunnel_editor_fragment.xml +++ b/ui/src/main/res/layout/tunnel_editor_fragment.xml @@ -76,7 +76,10 @@ android:id="@+id/interface_name_text" android:layout_width="match_parent" android:layout_height="wrap_content" + android:imeOptions="actionNext" android:inputType="textNoSuggestions|textVisiblePassword" + android:nextFocusDown="@id/private_key_text" + android:nextFocusForward="@id/private_key_text" android:text="@={name}" app:filter="@{NameInputFilter.newInstance()}" /> </com.google.android.material.textfield.TextInputLayout> @@ -98,7 +101,11 @@ android:id="@+id/private_key_text" android:layout_width="match_parent" android:layout_height="wrap_content" + android:imeOptions="actionNext" android:inputType="textNoSuggestions|textPassword" + android:nextFocusUp="@id/interface_name_text" + android:nextFocusDown="@id/public_key_text" + android:nextFocusForward="@id/public_key_text" android:onClick="@{fragment::onKeyClick}" android:text="@={config.interface.privateKey}" app:filter="@{KeyInputFilter.newInstance()}" @@ -124,6 +131,10 @@ android:ellipsize="end" android:focusable="false" android:hint="@string/hint_generated" + android:imeOptions="actionNext" + android:nextFocusUp="@id/private_key_text" + android:nextFocusDown="@id/addresses_label_text" + android:nextFocusForward="@id/addresses_label_text" android:onClick="@{ClipboardUtils::copyTextView}" android:singleLine="true" android:text="@{config.interface.publicKey}" /> @@ -145,7 +156,11 @@ android:id="@+id/addresses_label_text" android:layout_width="match_parent" android:layout_height="wrap_content" + android:imeOptions="actionNext" android:inputType="textNoSuggestions|textVisiblePassword" + android:nextFocusUp="@id/public_key_text" + android:nextFocusDown="@id/dns_servers_text" + android:nextFocusForward="@id/listen_port_text" android:text="@={config.interface.addresses}" /> </com.google.android.material.textfield.TextInputLayout> @@ -162,10 +177,15 @@ app:layout_constraintTop_toBottomOf="@id/public_key_label_layout"> <com.google.android.material.textfield.TextInputEditText + android:id="@+id/listen_port_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/hint_random" + android:imeOptions="actionNext" android:inputType="number" + android:nextFocusUp="@id/public_key_text" + android:nextFocusDown="@id/mtu_text" + android:nextFocusForward="@id/dns_servers_text" android:text="@={config.interface.listenPort}" android:textAlignment="center" /> </com.google.android.material.textfield.TextInputLayout> @@ -187,7 +207,11 @@ android:id="@+id/dns_servers_text" android:layout_width="match_parent" android:layout_height="wrap_content" + android:imeOptions="actionNext" android:inputType="textNoSuggestions|textVisiblePassword" + android:nextFocusUp="@id/addresses_label_text" + android:nextFocusDown="@id/set_excluded_applications" + android:nextFocusForward="@id/mtu_text" android:text="@={config.interface.dnsServers}" /> </com.google.android.material.textfield.TextInputLayout> @@ -208,7 +232,11 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/hint_automatic" + android:imeOptions="actionDone" android:inputType="number" + android:nextFocusUp="@id/listen_port_text" + android:nextFocusDown="@id/set_excluded_applications" + android:nextFocusForward="@id/set_excluded_applications" android:text="@={config.interface.mtu}" android:textAlignment="center" /> </com.google.android.material.textfield.TextInputLayout> @@ -219,6 +247,9 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_margin="4dp" + android:nextFocusUp="@id/dns_servers_text" + android:nextFocusDown="@id/peers_layout" + android:nextFocusForward="@id/peers_layout" android:onClick="@{fragment::onRequestSetExcludedIncludedApplications}" android:text="@{config.interface.includedApplications.size > 0 ? @plurals/set_included_applications(config.interface.includedApplications.size, config.interface.includedApplications.size) : config.interface.excludedApplications.size > 0 ? @plurals/set_excluded_applications(config.interface.excludedApplications.size, config.interface.excludedApplications.size) : @string/all_applications}" android:textColor="?attr/colorSecondary" @@ -231,6 +262,7 @@ </com.google.android.material.card.MaterialCardView> <LinearLayout + android:id="@+id/peers_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:divider="@null" @@ -241,6 +273,7 @@ tools:ignore="UselessLeaf" /> <com.google.android.material.button.MaterialButton + android:id="@+id/add_peer_button" style="@style/Widget.MaterialComponents.Button.TextButton" android:layout_width="match_parent" android:layout_height="wrap_content" diff --git a/ui/src/main/res/layout/tunnel_editor_peer.xml b/ui/src/main/res/layout/tunnel_editor_peer.xml index 76aaa1cd..27a6d125 100644 --- a/ui/src/main/res/layout/tunnel_editor_peer.xml +++ b/ui/src/main/res/layout/tunnel_editor_peer.xml @@ -51,6 +51,8 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:background="@null" + android:nextFocusDown="@id/public_key_text" + android:nextFocusForward="@id/public_key_text" android:onClick="@{() -> item.unbind()}" android:padding="8dp" android:src="@drawable/ic_action_delete" @@ -73,7 +75,11 @@ android:id="@+id/public_key_text" android:layout_width="match_parent" android:layout_height="wrap_content" + android:imeOptions="actionNext" android:inputType="textNoSuggestions|textVisiblePassword" + android:nextFocusUp="@id/delete" + android:nextFocusDown="@id/pre_shared_key_text" + android:nextFocusForward="@id/pre_shared_key_text" android:text="@={item.publicKey}" app:filter="@{KeyInputFilter.newInstance()}" /> </com.google.android.material.textfield.TextInputLayout> @@ -94,7 +100,11 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/hint_optional" + android:imeOptions="actionNext" android:inputType="textNoSuggestions|textPassword" + android:nextFocusUp="@id/public_key_text" + android:nextFocusDown="@id/persistent_keepalive_text" + android:nextFocusForward="@id/persistent_keepalive_text" android:onClick="@{fragment::onKeyClick}" android:text="@={item.preSharedKey}" app:filter="@{KeyInputFilter.newInstance()}" @@ -118,7 +128,11 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/hint_optional_discouraged" + android:imeOptions="actionNext" android:inputType="number" + android:nextFocusUp="@id/persistent_keepalive_text" + android:nextFocusDown="@id/endpoint_text" + android:nextFocusForward="@id/endpoint_text" android:text="@={item.persistentKeepalive}" /> </com.google.android.material.textfield.TextInputLayout> @@ -136,7 +150,11 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentStart="true" + android:imeOptions="actionNext" android:inputType="textNoSuggestions|textVisiblePassword" + android:nextFocusUp="@id/persistent_keepalive_text" + android:nextFocusDown="@id/allowed_ips_text" + android:nextFocusForward="@id/allowed_ips_text" android:text="@={item.endpoint}" /> </com.google.android.material.textfield.TextInputLayout> @@ -155,7 +173,11 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentStart="true" + android:imeOptions="actionDone" android:inputType="textNoSuggestions|textVisiblePassword" + android:nextFocusUp="@id/endpoint_text" + android:nextFocusDown="@id/selected_checkbox" + android:nextFocusForward="@id/selected_checkbox" android:text="@={item.allowedIps}" /> </com.google.android.material.textfield.TextInputLayout> @@ -166,6 +188,8 @@ android:layout_marginStart="4dp" android:layout_marginTop="0dp" android:checked="@={item.excludingPrivateIps}" + android:nextFocusDown="@id/add_peer_button" + android:nextFocusForward="@id/add_peer_button" android:text="@string/exclude_private_ips" android:visibility="@{item.ableToExcludePrivateIps ? View.VISIBLE : View.GONE}" app:layout_constraintEnd_toEndOf="parent" diff --git a/ui/src/main/res/layout/tunnel_list_fragment.xml b/ui/src/main/res/layout/tunnel_list_fragment.xml index 277ecd01..5d39d3a3 100644 --- a/ui/src/main/res/layout/tunnel_list_fragment.xml +++ b/ui/src/main/res/layout/tunnel_list_fragment.xml @@ -33,6 +33,8 @@ android:layout_height="match_parent" android:choiceMode="multipleChoiceModal" android:clipToPadding="false" + android:nextFocusDown="@id/create_fab" + android:nextFocusForward="@id/create_fab" android:paddingBottom="@{@dimen/design_fab_size_normal * 1.1f}" android:visibility="@{tunnels.size() > 0 ? android.view.View.VISIBLE : android.view.View.GONE}" app:configurationHandler="@{rowConfigurationHandler}" @@ -72,6 +74,7 @@ android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_margin="@dimen/fab_margin" + android:nextFocusUp="@id/tunnel_list" app:srcCompat="@drawable/ic_action_add_white" /> </androidx.coordinatorlayout.widget.CoordinatorLayout> |