Files
packages_apps_Settings/res/layout/vpn_dialog.xml
Weng Su 3cdc1a58a7 Fixed accessibility issues in VPN Settings
- Show "(required)" and errors in required fields to alert users

- Show "(optional)" below each optional field

Bug: 386025633
Flag: EXEMPT bugfix
Test: Manual testing
  atest WifiConfigController2Test
Change-Id: Iefbd68e6658af7b073db219b3e04e94805092759
2025-03-06 16:19:47 +08:00

268 lines
13 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2011 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:theme="@style/Theme.Material3.DynamicColors.DayNight"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="0dp"
android:paddingLeft="24dp"
android:paddingRight="24dp" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@android:style/TextAppearance.DeviceDefault.Small"
android:id="@+id/dialog_alert_subtitle"
android:text="@string/vpn_insecure_dialog_subtitle"
android:textColor="?android:attr/colorError"
android:visibility="gone"
android:includeFontPadding="false"
android:padding="0dp" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="24dp">
<LinearLayout android:id="@+id/editor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone">
<com.google.android.material.textfield.TextInputLayout
style="@style/vpn_label"
android:id="@+id/name_layout"
android:hint="@string/vpn_name"
app:endIconMode="clear_text"
app:helperTextEnabled="true"
app:helperText="@string/vpn_required"
app:errorEnabled="true">
<com.google.android.material.textfield.TextInputEditText
style="@style/vpn_value"
android:id="@+id/name"
android:inputType="textCapWords"/>
</com.google.android.material.textfield.TextInputLayout>
<TextView style="@style/vpn_label"
android:text="@string/vpn_type"
android:labelFor="@+id/type"/>
<Spinner style="@style/vpn_value"
android:id="@+id/type"
android:prompt="@string/vpn_type"
android:entries="@array/vpn_types"/>
<com.google.android.material.textfield.TextInputLayout
style="@style/vpn_label"
android:id="@+id/server_layout"
android:hint="@string/vpn_server"
app:endIconMode="clear_text"
app:helperTextEnabled="true"
app:helperText="@string/vpn_required"
app:errorEnabled="true">
<com.google.android.material.textfield.TextInputEditText
style="@style/vpn_value"
android:id="@+id/server"/>
</com.google.android.material.textfield.TextInputLayout>
<LinearLayout android:id="@+id/options_ipsec_identity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone">
<com.google.android.material.textfield.TextInputLayout
style="@style/vpn_label"
android:id="@+id/ipsec_identifier_layout"
android:hint="@string/vpn_ipsec_identifier"
app:endIconMode="clear_text"
app:helperTextEnabled="true"
app:helperText="@string/vpn_required"
app:errorEnabled="true">
<com.google.android.material.textfield.TextInputEditText
style="@style/vpn_value"
android:id="@+id/ipsec_identifier"/>
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
<LinearLayout android:id="@+id/ipsec_psk"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone">
<com.google.android.material.textfield.TextInputLayout
style="@style/vpn_label"
android:id="@+id/ipsec_secret_layout"
android:hint="@string/vpn_ipsec_secret"
app:endIconMode="password_toggle"
app:helperTextEnabled="true"
app:helperText="@string/vpn_required"
app:errorEnabled="true">
<com.google.android.material.textfield.TextInputEditText
style="@style/vpn_value"
android:id="@+id/ipsec_secret"
android:inputType="textPassword"/>
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
<LinearLayout android:id="@+id/ipsec_user"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone">
<TextView style="@style/vpn_label"
android:text="@string/vpn_ipsec_user_cert"
android:labelFor="@+id/ipsec_user_cert"/>
<Spinner style="@style/vpn_value"
android:id="@+id/ipsec_user_cert"
android:prompt="@string/vpn_ipsec_user_cert" />
</LinearLayout>
<LinearLayout android:id="@+id/ipsec_peer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone">
<TextView style="@style/vpn_label"
android:text="@string/vpn_ipsec_ca_cert"
android:labelFor="@+id/ipsec_ca_cert"/>
<Spinner style="@style/vpn_value"
android:id="@+id/ipsec_ca_cert"
android:prompt="@string/vpn_ipsec_ca_cert" />
<TextView style="@style/vpn_label"
android:text="@string/vpn_ipsec_server_cert"
android:labelFor="@+id/ipsec_server_cert"/>
<Spinner style="@style/vpn_value"
android:id="@+id/ipsec_server_cert"
android:prompt="@string/vpn_ipsec_server_cert" />
</LinearLayout>
<CheckBox style="@style/vpn_value"
android:id="@+id/show_options"
android:text="@string/vpn_show_options"/>
</LinearLayout>
<LinearLayout android:id="@+id/options"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone">
<TextView android:id="@+id/vpn_proxy_settings_title"
style="@style/vpn_label"
android:text="@string/proxy_settings_title"
android:labelFor="@+id/vpn_proxy_settings" />
<Spinner android:id="@+id/vpn_proxy_settings"
style="@style/vpn_value"
android:prompt="@string/proxy_settings_title"
android:entries="@array/vpn_proxy_settings" />
<LinearLayout
android:id="@+id/vpn_proxy_fields"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone" >
<com.google.android.material.textfield.TextInputLayout
style="@style/vpn_label"
android:id="@+id/vpn_proxy_host_layout"
android:hint="@string/proxy_hostname_label"
app:endIconMode="clear_text"
app:helperTextEnabled="true"
app:helperText="@string/vpn_optional"
app:errorEnabled="true">
<com.google.android.material.textfield.TextInputEditText
style="@style/vpn_value"
android:id="@+id/vpn_proxy_host"
android:inputType="textNoSuggestions"/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
style="@style/vpn_label"
android:id="@+id/vpn_proxy_port_layout"
android:hint="@string/proxy_port_label"
app:endIconMode="clear_text"
app:helperTextEnabled="true"
app:helperText="@string/vpn_optional"
app:errorEnabled="true">
<com.google.android.material.textfield.TextInputEditText
style="@style/vpn_value"
android:id="@+id/vpn_proxy_port"
android:inputType="number"/>
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
</LinearLayout>
<LinearLayout android:id="@+id/userpass"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<com.google.android.material.textfield.TextInputLayout
style="@style/vpn_label"
android:id="@+id/username_layout"
android:hint="@string/vpn_username"
app:endIconMode="clear_text"
app:helperTextEnabled="true"
app:helperText="@string/vpn_optional"
app:errorEnabled="true">
<com.google.android.material.textfield.TextInputEditText
style="@style/vpn_value"
android:id="@+id/username"/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
style="@style/vpn_label"
android:id="@+id/password_layout"
android:hint="@string/vpn_password"
app:endIconMode="password_toggle"
app:helperTextEnabled="true"
app:helperText="@string/vpn_optional"
app:errorEnabled="true">
<com.google.android.material.textfield.TextInputEditText
style="@style/vpn_value"
android:id="@+id/password"
android:inputType="textPassword"/>
</com.google.android.material.textfield.TextInputLayout>
<CheckBox style="@style/vpn_value"
android:id="@+id/save_login"
android:text="@string/vpn_save_login"/>
</LinearLayout>
<LinearLayout android:id="@+id/connect"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:animateLayoutChanges="true">
<CheckBox style="@style/vpn_value"
android:id="@+id/always_on_vpn"
android:text="@string/vpn_menu_lockdown"/>
<TextView style="@style/vpn_warning"
android:id="@+id/always_on_invalid_reason"
android:visibility="gone"/>
</LinearLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>