Remove bottom padding below wifi preference.

- show bottom padding only when top bar is using static View
- hide wifi preference when ProgressBar is used
- show bottom padding when top bar is using static View and
  wifi preference is hidden.
- rename wifi_config_padding to content_padding, as it is not
  just for wifi config but for acquiring default hight of
  @id/content
- update screen state correctly

Bug: 3502220
Change-Id: I86c89435f43d6bd016a78f7afeb5f477f63d0696
diff --git a/res/layout-xlarge/wifi_settings_for_setup_wizard_xl.xml b/res/layout-xlarge/wifi_settings_for_setup_wizard_xl.xml
index f9ba9d3..1b07813 100644
--- a/res/layout-xlarge/wifi_settings_for_setup_wizard_xl.xml
+++ b/res/layout-xlarge/wifi_settings_for_setup_wizard_xl.xml
@@ -80,10 +80,17 @@
         android:layout_centerHorizontal="true"
         android:layout_marginBottom="0dip">
 
+        <!-- Padding for @id/content shown when keyboard isn't available -->
+        <View
+            android:id="@+id/content_padding"
+            android:layout_width="match_parent"
+            android:layout_height="370dip"
+            android:visibility="gone" />
+
         <FrameLayout
             android:id="@+id/wifi_settings_fragment_layout"
             android:layout_width="match_parent"
-            android:layout_height="370dip">
+            android:layout_height="377dip">
             <fragment
                 class="com.android.settings.wifi.WifiSettings"
                 android:id="@+id/wifi_setup_fragment"
@@ -99,12 +106,6 @@
             android:layout_marginTop="10dip"
             android:layout_alignParentLeft="true"
             android:visibility="gone" />
-        <View
-            android:id="@+id/wifi_config_padding"
-            android:layout_width="match_parent"
-            android:layout_height="360dip"
-            android:layout_marginTop="10dip"
-            android:visibility="gone" />
         <LinearLayout
             android:id="@+id/connecting_status_layout"
             android:layout_width="match_parent"
diff --git a/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java b/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java
index 7feafe3..3f6792c 100644
--- a/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java
+++ b/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java
@@ -82,8 +82,8 @@
     /** Used for resizing a padding above title. Hiden when software keyboard is shown. */
     private View mTopPadding;
 
-    /** Used for resizing a padding inside Config UI. Hiden when software keyboard is shown. */
-    private View mWifiConfigPadding;
+    /** Used for resizing a padding of main content. Hiden when software keyboard is shown. */
+    private View mContentPadding;
 
     private TextView mTitleView;
     /**
@@ -171,7 +171,7 @@
 
         // At first, Wifi module doesn't return SCANNING state (it's too early), so we manually
         // show it.
-        showScanningStatus();
+        showScanningProgressBar();
     }
 
     private void initViews() {
@@ -202,7 +202,7 @@
         mBackButton.setOnClickListener(this);
 
         mTopPadding = findViewById(R.id.top_padding);
-        mWifiConfigPadding = findViewById(R.id.wifi_config_padding);
+        mContentPadding = findViewById(R.id.content_padding);
 
         mWifiSettingsFragmentLayout = findViewById(R.id.wifi_settings_fragment_layout);
         mConnectingStatusLayout = findViewById(R.id.connecting_status_layout);
@@ -228,14 +228,14 @@
         }
     }
 
-    private void restoreFirstButtonVisibilityState() {
+    private void restoreFirstVisibilityState() {
         showDefaultTitle();
         mAddNetworkButton.setVisibility(View.VISIBLE);
         mRefreshButton.setVisibility(View.VISIBLE);
         mSkipOrNextButton.setVisibility(View.VISIBLE);
         mConnectButton.setVisibility(View.GONE);
         mBackButton.setVisibility(View.GONE);
-        setPaddingVisibility(View.VISIBLE, View.GONE);
+        setPaddingVisibility(View.VISIBLE);
     }
 
     @Override
@@ -288,10 +288,14 @@
             // Let users know the device is working correctly though currently there's
             // no visible network on the list.
             if (mWifiSettings.getAccessPointsCount() == 0) {
-                showScanningProgressBar();
+                showScanningState();
             } else {
                 // Users already see available networks.
                 showDisconnectedProgressBar();
+                if (mScreenState == SCREEN_STATE_DISCONNECTED) {
+                    mWifiSettingsFragmentLayout.setVisibility(View.VISIBLE);
+                    mBottomPadding.setVisibility(View.GONE);
+                }
             }
             break;
         }
@@ -316,6 +320,10 @@
 
     private void showDisconnectedState(String stateString) {
         showDisconnectedProgressBar();
+        if (mScreenState == SCREEN_STATE_DISCONNECTED) {
+            mWifiSettingsFragmentLayout.setVisibility(View.VISIBLE);
+            mBottomPadding.setVisibility(View.GONE);
+        }
         mAddNetworkButton.setEnabled(true);
         mRefreshButton.setEnabled(true);
     }
@@ -419,7 +427,9 @@
         mBottomPadding.setVisibility(View.GONE);
     }
 
-    private void showScanningStatus() {
+    private void showScanningState() {
+        setPaddingVisibility(View.VISIBLE);
+        mWifiSettingsFragmentLayout.setVisibility(View.GONE);
         showScanningProgressBar();
     }
 
@@ -435,6 +445,8 @@
      * "Add network" button, meaning there's no selected access point.
      */
     /* package */ void showConfigUi(AccessPoint selectedAccessPoint, boolean edit) {
+        mScreenState = SCREEN_STATE_EDITING;
+
         if (selectedAccessPoint != null &&
                 (selectedAccessPoint.security == AccessPoint.SECURITY_WEP ||
                         selectedAccessPoint.security == AccessPoint.SECURITY_PSK)) {
@@ -600,14 +612,14 @@
 
             // When a user press "Back" button after pressing "Connect" button, we want to cancel
             // the "Connect" request and refresh the whole Wifi status.
-            restoreFirstButtonVisibilityState();
+            restoreFirstVisibilityState();
 
             mSkipOrNextButton.setEnabled(true);
             changeNextButtonState(false);  // Skip
 
             // Wifi list becomes empty for a moment. We show "scanning" effect to a user so that
             // he/she won't be astonished there. This stops once the scan finishes.
-            showScanningProgressBar();
+            showScanningState();
 
             // Remembered networks may be re-used during SetupWizard, which confuse users.
             // We force the module to forget them to reduce UX complexity
@@ -620,18 +632,22 @@
                 mWifiManager.forgetNetwork(config.networkId);
             }
 
+            mWifiSettingsFragmentLayout.setVisibility(View.GONE);
             refreshAccessPoints(true);
         } else { // During user's Wifi configuration.
+            mScreenState = SCREEN_STATE_DISCONNECTED;
             mWifiSettings.resumeWifiScan();
 
-            restoreFirstButtonVisibilityState();
+            restoreFirstVisibilityState();
 
             mAddNetworkButton.setEnabled(true);
             mRefreshButton.setEnabled(true);
             mSkipOrNextButton.setEnabled(true);
+            mWifiSettingsFragmentLayout.setVisibility(View.VISIBLE);
+            showDisconnectedProgressBar();
         }
 
-        mWifiSettingsFragmentLayout.setVisibility(View.VISIBLE);
+        setPaddingVisibility(View.VISIBLE);
         mConnectingStatusLayout.setVisibility(View.GONE);
         final ViewGroup parent = (ViewGroup)findViewById(R.id.wifi_config_ui);
         parent.removeAllViews();
@@ -659,7 +675,11 @@
         // If we already show some of access points but the bar still shows "scanning" state, it
         // should be stopped.
         if (mProgressBar.isIndeterminate() && accessPoints.size() > 0) {
-            showTopDividerWithProgressBar();
+            showDisconnectedProgressBar();
+            if (mScreenState == SCREEN_STATE_DISCONNECTED) {
+                mWifiSettingsFragmentLayout.setVisibility(View.VISIBLE);
+                mBottomPadding.setVisibility(View.GONE);
+            }
             mAddNetworkButton.setEnabled(true);
             mRefreshButton.setEnabled(true);
         }
@@ -678,7 +698,7 @@
             // state. Instead we manually show previous status here.
             showDisconnectedState(Summary.get(this, mPreviousNetworkState));
         } else {
-            showScanningStatus();
+            showScanningState();
         }
 
         if (disconnectNetwork) {
@@ -756,24 +776,24 @@
         }
     }
 
-    /** Note: doesn't affect bottom padding */
     // Used by WifiConfigUiForSetupWizardXL
     /* package */ void setPaddingVisibility(int visibility) {
-        Log.d("@@@", "setPaddingVisibilyty: " + visibility, new RuntimeException());
-        setPaddingVisibility(visibility, visibility);
-    }
-
-    /** Note: doesn't affect bottom padding */
-    private void setPaddingVisibility(int topPaddingVisibility, int configVisibility) {
-        mTopPadding.setVisibility(topPaddingVisibility);
-        mWifiConfigPadding.setVisibility(configVisibility);
+        mTopPadding.setVisibility(visibility);
+        mContentPadding.setVisibility(visibility);
     }
 
     private void showDisconnectedProgressBar() {
-        mProgressBar.setVisibility(View.GONE);
-        mProgressBar.setIndeterminate(false);
-        mTopDividerNoProgress.setVisibility(View.VISIBLE);
-        mBottomPadding.setVisibility(View.VISIBLE);
+        // The device may report DISCONNECTED during connecting to a network, at which we don't
+        // want to lose bottom padding of top divider implicitly added by ProgressBar.
+        if (mScreenState == SCREEN_STATE_DISCONNECTED) {
+            mProgressBar.setVisibility(View.GONE);
+            mProgressBar.setIndeterminate(false);
+            mTopDividerNoProgress.setVisibility(View.VISIBLE);
+        } else {
+            mProgressBar.setVisibility(View.VISIBLE);
+            mProgressBar.setIndeterminate(false);
+            mTopDividerNoProgress.setVisibility(View.GONE);
+        }
     }
 
     /**