Show more graceful screens for "add network" flow
- use TableLayout instead of RelativeLayout for
wifi configuration to align each columns appropriately.
- split @id/type field into two fields in SetupWizard
Bug: 3403168
Change-Id: I37f2c60ce1b0473af7d20dee1775e9893d2abade
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 7f23ce0..7879d0c 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -315,6 +315,7 @@
<activity android:name="DateTimeSettingsSetupWizard"
android:label="@string/date_and_time"
android:theme="@android:style/Theme.Holo.NoActionBar"
+ android:windowBackground="@drawable/setups_bg_default"
android:screenOrientation="behind">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
diff --git a/res/layout/wifi_config_ui_for_setup_wizard.xml b/res/layout/wifi_config_ui_for_setup_wizard.xml
index 698ce20..dc3d185 100644
--- a/res/layout/wifi_config_ui_for_setup_wizard.xml
+++ b/res/layout/wifi_config_ui_for_setup_wizard.xml
@@ -52,12 +52,13 @@
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone">
- <TextView
- android:layout_width="match_parent"
+ <TextView android:layout_width="match_parent"
+ android:minWidth="128dip"
android:layout_height="wrap_content"
android:text="@string/wifi_wps_pin"
android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="20sp" />
+ android:textSize="20sp"
+ android:gravity="bottom" />
<EditText android:id="@+id/wps_pin"
android:layout_width="match_parent"
@@ -67,103 +68,93 @@
android:textAppearance="?android:attr/textAppearanceMedium"
android:textSize="20sp" />
</LinearLayout>
- <RelativeLayout android:id="@+id/security_fields"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
+ <TableLayout android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="16dip">
+ <TableRow android:id="@+id/security_fields"
android:visibility="gone">
- <TextView android:id="@+id/password_text"
- android:layout_width="wrap_content"
- android:minWidth="80dip"
- android:layout_height="wrap_content"
- android:minHeight="48dip"
- android:layout_marginRight="8dip"
- android:layout_alignParentLeft="true"
- android:text="@string/wifi_password"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="20sp"
- android:gravity="bottom" />
+ <TextView android:id="@+id/password_text"
+ android:layout_width="wrap_content"
+ android:minWidth="128dip"
+ android:layout_height="wrap_content"
+ android:minHeight="48dip"
+ android:text="@string/wifi_password"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textSize="20sp"
+ android:gravity="bottom" />
- <FrameLayout android:id="@+id/password_layout"
- android:layout_width="wrap_content"
+ <FrameLayout android:id="@+id/password_layout"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:minHeight="48dip">
+ <EditText android:id="@+id/password"
+ android:layout_width="368dip"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:password="true"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textSize="20sp" />
+ </FrameLayout>
+
+ <CheckBox android:id="@+id/show_password"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/wifi_show_password"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textSize="20sp" />
+ </TableRow>
+
+ <!-- To accomodate @id/type into TableLayout, we splitted the layout into two:
+ @id/type_ssid and @id/type_security. -->
+ <TableRow android:id="@+id/type_ssid"
+ android:visibility="gone">
+ <TextView android:id="@+id/ssid_text"
+ android:layout_width="wrap_content"
+ android:minWidth="128dip"
+ android:layout_height="wrap_content"
+ android:minHeight="48dip"
+ android:layout_alignParentLeft="true"
+ android:text="@string/wifi_ssid"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textSize="20sp"
+ android:gravity="bottom"/>
+
+ <FrameLayout android:id="@+id/ssid_layout"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignBottom="@id/ssid_text"
+ android:layout_toRightOf="@id/ssid_text">
+ <EditText android:id="@+id/ssid"
+ android:layout_width="368dip"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:inputType="textNoSuggestions"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textSize="20sp" />
+ </FrameLayout>
+ </TableRow>
+ <TableRow android:id="@+id/type_security"
+ android:visibility="gone">
+ <TextView android:id="@+id/security_text"
+ android:layout_width="wrap_content"
+ android:minWidth="128dip"
+ android:layout_height="wrap_content"
+ android:minHeight="48dip"
+ android:text="@string/wifi_security"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textSize="20sp"
+ android:gravity="bottom"/>
+
+ <Spinner android:id="@+id/security"
+ android:layout_width="368dip"
android:layout_height="wrap_content"
android:minHeight="48dip"
- android:layout_alignParentTop="true"
- android:layout_toRightOf="@id/password_text"
- android:layout_alignBottom="@id/password_text">
- <EditText android:id="@+id/password"
- android:layout_width="368dip"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:password="true"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="20sp" />
- </FrameLayout>
-
- <CheckBox android:id="@+id/show_password"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="16dip"
- android:layout_below="@id/password_layout"
- android:layout_alignLeft="@id/password_layout"
- android:text="@string/wifi_show_password"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="20sp" />
- </RelativeLayout>
- <RelativeLayout android:id="@+id/type"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:visibility="gone">
- <TextView android:id="@+id/ssid_text"
- android:layout_width="wrap_content"
- android:minWidth="128dip"
- android:layout_height="wrap_content"
- android:minHeight="48dip"
- android:layout_alignParentLeft="true"
- android:text="@string/wifi_ssid"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="20sp"
- android:gravity="bottom"/>
-
- <FrameLayout android:id="@+id/ssid_layout"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignBottom="@id/ssid_text"
- android:layout_toRightOf="@id/ssid_text">
- <EditText android:id="@+id/ssid"
- android:layout_width="368dip"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:inputType="textNoSuggestions"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="20sp" />
- </FrameLayout>
-
- <TextView android:id="@+id/security_text"
- android:layout_width="wrap_content"
- android:minWidth="128dip"
- android:layout_height="wrap_content"
- android:layout_marginTop="16dip"
- android:minHeight="48dip"
- android:layout_below="@id/ssid_text"
- android:layout_alignLeft="@id/ssid_text"
- android:text="@string/wifi_security"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="20sp"
- android:gravity="bottom"/>
-
- <Spinner android:id="@+id/security"
- android:layout_width="368dip"
- android:layout_height="wrap_content"
- android:minHeight="48dip"
- android:layout_alignBottom="@id/security_text"
- android:layout_toRightOf="@id/security_text"
- android:paddingLeft="4dip"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="20sp"
- android:gravity="left|center_vertical"/>
- </RelativeLayout> <!-- android:id="@+id/type" -->
+ android:paddingLeft="4dip"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textSize="20sp"
+ android:gravity="left|center_vertical"/>
+ </TableRow>
+ </TableLayout>
<!-- All the views below are "gone".
We want them as data storage, not as UI components. -->
diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java
index 7ab647e..3efedf6 100644
--- a/src/com/android/settings/wifi/WifiConfigController.java
+++ b/src/com/android/settings/wifi/WifiConfigController.java
@@ -154,17 +154,21 @@
if (mAccessPoint == null) { // new network
mConfigUi.setTitle(R.string.wifi_add_network);
- mView.findViewById(R.id.type).setVisibility(View.VISIBLE);
+
mSsidView = (TextView) mView.findViewById(R.id.ssid);
mSsidView.addTextChangedListener(this);
mSecuritySpinner = ((Spinner) mView.findViewById(R.id.security));
mSecuritySpinner.setOnItemSelectedListener(this);
if (mInXlSetupWizard) {
+ mView.findViewById(R.id.type_ssid).setVisibility(View.VISIBLE);
+ mView.findViewById(R.id.type_security).setVisibility(View.VISIBLE);
// We want custom layout. The content must be same as the other cases.
mSecuritySpinner.setAdapter(
new ArrayAdapter<String>(context, R.layout.wifi_setup_custom_list_item_1,
android.R.id.text1,
context.getResources().getStringArray(R.array.wifi_security)));
+ } else {
+ mView.findViewById(R.id.type).setVisibility(View.VISIBLE);
}
mConfigUi.setSubmitButton(context.getString(R.string.wifi_save));
} else {
@@ -512,7 +516,7 @@
return;
}
mView.findViewById(R.id.eap).setVisibility(View.VISIBLE);
-
+
if (mEapMethodSpinner == null) {
mEapMethodSpinner = (Spinner) mView.findViewById(R.id.method);
mPhase2Spinner = (Spinner) mView.findViewById(R.id.phase2);
@@ -537,7 +541,7 @@
}
}
}
-
+
private void showNetworkSetupFields() {
mView.findViewById(R.id.setup_fields).setVisibility(View.VISIBLE);
diff --git a/src/com/android/settings/wifi/WifiConfigUiForSetupWizardXL.java b/src/com/android/settings/wifi/WifiConfigUiForSetupWizardXL.java
index bffcc61..440e694 100644
--- a/src/com/android/settings/wifi/WifiConfigUiForSetupWizardXL.java
+++ b/src/com/android/settings/wifi/WifiConfigUiForSetupWizardXL.java
@@ -75,7 +75,7 @@
if (mView.findViewById(R.id.security_fields).getVisibility() == View.VISIBLE) {
requestFocusAndShowKeyboard(R.id.password);
- } else if (mView.findViewById(R.id.type).getVisibility() == View.VISIBLE) {
+ } else if (mView.findViewById(R.id.type_ssid).getVisibility() == View.VISIBLE) {
// Add Network flow.
requestFocusAndShowKeyboard(R.id.ssid);
}
@@ -93,12 +93,15 @@
Log.w(TAG, "password field is not EditText");
} else {
if (viewToBeFocused.isFocused()) {
- mInputMethodManager.showSoftInput(viewToBeFocused, 0);
+ Log.i(TAG, "Already focused");
+ if (!mInputMethodManager.showSoftInput(viewToBeFocused, 0)) {
+ Log.w(TAG, "Failed to show SoftInput");
+ }
} else {
// After acquiring the focus, we show software keyboard.
viewToBeFocused.setOnFocusChangeListener(this);
final boolean requestFocusResult = viewToBeFocused.requestFocus();
- Log.i(TAG, String.format("Focus request %s.",
+ Log.i(TAG, String.format("Focus request: %s",
(requestFocusResult ? "successful" : "failed")));
if (!requestFocusResult) {
viewToBeFocused.setOnFocusChangeListener(null);
diff --git a/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java b/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java
index e8a6a25..c50c030 100644
--- a/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java
+++ b/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java
@@ -505,12 +505,13 @@
view.findViewById(R.id.ssid_layout).setVisibility(View.VISIBLE);
if (accessPointSecurity == AccessPoint.SECURITY_EAP) {
+ setPaddingVisibility(View.VISIBLE);
hideSoftwareKeyboard();
// In SetupWizard for XLarge screen, we don't have enough space for showing
// configurations needed for EAP. We instead disable the whole feature there and let
// users configure those networks after the setup.
- if (view.findViewById(R.id.type).getVisibility() == View.VISIBLE) {
+ if (view.findViewById(R.id.type_ssid).getVisibility() == View.VISIBLE) {
view.findViewById(R.id.eap_not_supported_for_add_network)
.setVisibility(View.VISIBLE);
} else {
@@ -525,11 +526,26 @@
return false;
}
+ mConnectButton.setVisibility(View.VISIBLE);
+ setPaddingVisibility(View.GONE);
+
+ // In "add network" flow, we'll see multiple initSecurityFields() calls with different
+ // accessPointSecurity variable. We want to show software keyboard conditionally everytime
+ // when this method is called.
+ if (mWifiConfig != null) {
+ if (accessPointSecurity == AccessPoint.SECURITY_PSK ||
+ accessPointSecurity == AccessPoint.SECURITY_WEP) {
+ mWifiConfig.requestFocusAndShowKeyboard(R.id.password);
+ } else {
+ mWifiConfig.requestFocusAndShowKeyboard(R.id.ssid);
+ }
+ }
+
// Let the caller init security fields.
return true;
}
- /* package */ void onEapNetworkSelected() {
+ private void onEapNetworkSelected() {
mConnectButton.setVisibility(View.GONE);
mBackButton.setText(R.string.wifi_setup_back);
}