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);
     }