Revert "[Provider Model] Add WiFi toggle in internet panel"

This reverts commit 04a40602256d909f551f9166078cb5850a92db1e.

Reason for revert: Need to split the functions for cherry picking to different branches

Bug: 189912933
Change-Id: I8c30a87c83e23b3df88ce2689d500626e1dd28d2
diff --git a/src/com/android/settings/network/ProviderModelSlice.java b/src/com/android/settings/network/ProviderModelSlice.java
index 1df77bc..cfaef53 100644
--- a/src/com/android/settings/network/ProviderModelSlice.java
+++ b/src/com/android/settings/network/ProviderModelSlice.java
@@ -20,7 +20,6 @@
 import static android.app.slice.Slice.EXTRA_TOGGLE_STATE;
 
 import static com.android.settings.slices.CustomSliceRegistry.PROVIDER_MODEL_SLICE_URI;
-import static com.android.settings.slices.CustomSliceRegistry.WIFI_SLICE_URI;
 
 import android.annotation.ColorInt;
 import android.app.PendingIntent;
@@ -65,6 +64,7 @@
 public class ProviderModelSlice extends WifiSlice {
 
     private static final String TAG = "ProviderModelSlice";
+    protected static final String ACTION_TITLE_CONNECT_TO_CARRIER = "Connect_To_Carrier";
 
     private final ProviderModelSliceHelper mHelper;
 
@@ -89,77 +89,78 @@
     @Override
     public Slice getSlice() {
         // The provider model slice step:
-        //  First section: Add the Ethernet item.
-        // Second section: Add the carrier item.
-        //  Third section: Add the Wi-Fi toggle item.
-        // Fourth section: Add the connected Wi-Fi item.
-        //  Fifth section: Add the Wi-Fi items which are not connected.
-        //  Sixth section: Add the See All item.
+        // First section:  Add a Wi-Fi item which state is connected.
+        // Second section:  Add a carrier item.
+        // Third section:  Add the Wi-Fi items which are not connected.
+        // Fourth section:  If device has connection problem, this row show the message for user.
+        @InternetUpdater.InternetType int internetType = getInternetType();
         final ListBuilder listBuilder = mHelper.createListBuilder(getUri());
+        if (mHelper.isAirplaneModeEnabled() && !mWifiManager.isWifiEnabled()
+                && internetType != InternetUpdater.INTERNET_ETHERNET) {
+            log("Airplane mode is enabled.");
+            return listBuilder.build();
+        }
+
         int maxListSize = 0;
+        List<WifiSliceItem> wifiList = null;
         final NetworkProviderWorker worker = getWorker();
         if (worker != null) {
+            // get Wi-Fi list.
+            wifiList = worker.getResults();
             maxListSize = worker.getApRowCount();
         } else {
             log("network provider worker is null.");
         }
 
-        // First section: Add the Ethernet item.
-        if (getInternetType() == InternetUpdater.INTERNET_ETHERNET) {
+        final boolean hasCarrier = mHelper.hasCarrier();
+        log("hasCarrier: " + hasCarrier);
+
+        // First section:  Add a Ethernet or Wi-Fi item which state is connected.
+        boolean isConnectedWifiAddedTop = false;
+        final WifiSliceItem connectedWifiItem = mHelper.getConnectedWifiItem(wifiList);
+        if (internetType == InternetUpdater.INTERNET_ETHERNET) {
             log("get Ethernet item which is connected");
             listBuilder.addRow(createEthernetRow());
             maxListSize--;
-        }
-
-        // Second section: Add the carrier item.
-        if (!mHelper.isAirplaneModeEnabled()) {
-            final boolean hasCarrier = mHelper.hasCarrier();
-            log("hasCarrier: " + hasCarrier);
-            if (hasCarrier) {
-                mHelper.updateTelephony();
-                listBuilder.addRow(
-                        mHelper.createCarrierRow(
-                                worker != null ? worker.getNetworkTypeDescription() : ""));
+        } else {
+            if (connectedWifiItem != null && internetType == InternetUpdater.INTERNET_WIFI) {
+                log("get Wi-Fi item which is connected to internet");
+                listBuilder.addRow(getWifiSliceItemRow(connectedWifiItem));
+                isConnectedWifiAddedTop = true;
                 maxListSize--;
             }
         }
 
-        // Third section: Add the Wi-Fi toggle item.
-        final boolean isWifiEnabled = mWifiManager.isWifiEnabled();
-        listBuilder.addRow(createWifiToggleRow(mContext, isWifiEnabled));
-        maxListSize--;
-        if (!isWifiEnabled) {
-            log("Wi-Fi is disabled");
-            return listBuilder.build();
-        }
-        List<WifiSliceItem> wifiList = (worker != null) ? worker.getResults() : null;
-        if (wifiList == null || wifiList.size() <= 0) {
-            log("Wi-Fi list is empty");
-            return listBuilder.build();
+        // Second section:  Add a carrier item.
+        if (hasCarrier) {
+            mHelper.updateTelephony();
+            listBuilder.addRow(
+                    mHelper.createCarrierRow(
+                            worker != null ? worker.getNetworkTypeDescription() : ""));
+            maxListSize--;
         }
 
-        // Fourth section: Add the connected Wi-Fi item.
-        final WifiSliceItem connectedWifiItem = mHelper.getConnectedWifiItem(wifiList);
-        if (connectedWifiItem != null) {
+        // Third section:  Add the connected Wi-Fi item to Wi-Fi list if the Ethernet is connected.
+        if (connectedWifiItem != null && !isConnectedWifiAddedTop) {
             log("get Wi-Fi item which is connected");
             listBuilder.addRow(getWifiSliceItemRow(connectedWifiItem));
             maxListSize--;
         }
 
-        // Fifth section: Add the Wi-Fi items which are not connected.
-        log("get Wi-Fi items which are not connected. Wi-Fi items : " + wifiList.size());
-        final List<WifiSliceItem> disconnectedWifiList = wifiList.stream()
-                .filter(item -> item.getConnectedState() != WifiEntry.CONNECTED_STATE_CONNECTED)
-                .limit(maxListSize - 1)
-                .collect(Collectors.toList());
-        for (WifiSliceItem item : disconnectedWifiList) {
-            listBuilder.addRow(getWifiSliceItemRow(item));
+        // Fourth section:  Add the Wi-Fi items which are not connected.
+        if (wifiList != null && wifiList.size() > 0) {
+            log("get Wi-Fi items which are not connected. Wi-Fi items : " + wifiList.size());
+
+            final List<WifiSliceItem> disconnectedWifiList = wifiList.stream()
+                    .filter(wifiSliceItem -> wifiSliceItem.getConnectedState()
+                            != WifiEntry.CONNECTED_STATE_CONNECTED)
+                    .limit(maxListSize - 1)
+                    .collect(Collectors.toList());
+            for (WifiSliceItem item : disconnectedWifiList) {
+                listBuilder.addRow(getWifiSliceItemRow(item));
+            }
+            listBuilder.addRow(getSeeAllRow());
         }
-
-        // Sixth section: Add the See All item.
-        log("add See-All");
-        listBuilder.addRow(getSeeAllRow());
-
         return listBuilder.build();
     }
 
@@ -268,26 +269,6 @@
                 .setSubtitle(mContext.getText(R.string.to_switch_networks_disconnect_ethernet));
     }
 
-    /**
-     * @return a {@link ListBuilder.RowBuilder} of the Wi-Fi toggle.
-     */
-    protected ListBuilder.RowBuilder createWifiToggleRow(Context context, boolean isWifiEnabled) {
-        final Intent intent = new Intent(WIFI_SLICE_URI.toString())
-                .setData(WIFI_SLICE_URI)
-                .setClass(context, SliceBroadcastReceiver.class)
-                .putExtra(EXTRA_TOGGLE_STATE, !isWifiEnabled)
-                // The FLAG_RECEIVER_FOREGROUND flag is necessary to avoid the intent delay of
-                // the first sending after the device restarts
-                .addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
-        final PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent,
-                PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
-        final SliceAction toggleSliceAction = SliceAction.createToggle(pendingIntent,
-                null /* actionTitle */, isWifiEnabled);
-        return new ListBuilder.RowBuilder()
-                .setTitle(context.getString(R.string.wifi_settings))
-                .setPrimaryAction(toggleSliceAction);
-    }
-
     protected ListBuilder.RowBuilder getSeeAllRow() {
         final CharSequence title = mContext.getText(R.string.previous_connected_see_all);
         final IconCompat icon = getSeeAllIcon();
@@ -314,6 +295,31 @@
     }
 
     @Override
+    protected ListBuilder.RowBuilder getWifiSliceItemRow(WifiSliceItem wifiSliceItem) {
+        final CharSequence title = wifiSliceItem.getTitle();
+        final IconCompat levelIcon = getWifiSliceItemLevelIcon(wifiSliceItem);
+        final ListBuilder.RowBuilder rowBuilder = new ListBuilder.RowBuilder()
+                .setTitleItem(levelIcon, ListBuilder.ICON_IMAGE)
+                .setTitle(title)
+                .setSubtitle(wifiSliceItem.getSummary())
+                .setContentDescription(wifiSliceItem.getContentDescription());
+
+        final IconCompat endIcon;
+        if (wifiSliceItem.hasInternetAccess()) {
+            rowBuilder.setPrimaryAction(SliceAction.create(getBroadcastIntent(mContext),
+                    levelIcon, ListBuilder.ICON_IMAGE, ACTION_TITLE_CONNECT_TO_CARRIER));
+            endIcon = IconCompat.createWithResource(mContext, R.drawable.ic_settings_close);
+        } else {
+            rowBuilder.setPrimaryAction(getWifiEntryAction(wifiSliceItem, levelIcon, title));
+            endIcon = getEndIcon(wifiSliceItem);
+        }
+        if (endIcon != null) {
+            rowBuilder.addEndItem(endIcon, ListBuilder.ICON_IMAGE);
+        }
+        return rowBuilder;
+    }
+
+    @Override
     protected IconCompat getWifiSliceItemLevelIcon(WifiSliceItem wifiSliceItem) {
         if (wifiSliceItem.getConnectedState() == WifiEntry.CONNECTED_STATE_CONNECTED
                 && getInternetType() != InternetUpdater.INTERNET_WIFI) {
diff --git a/src/com/android/settings/network/telephony/NetworkProviderWorker.java b/src/com/android/settings/network/telephony/NetworkProviderWorker.java
index d4f0551..369218b 100644
--- a/src/com/android/settings/network/telephony/NetworkProviderWorker.java
+++ b/src/com/android/settings/network/telephony/NetworkProviderWorker.java
@@ -54,7 +54,7 @@
         DataConnectivityListener.Client, InternetUpdater.InternetChangeListener,
         SubscriptionsChangeListener.SubscriptionsChangeListenerClient {
     private static final String TAG = "NetworkProviderWorker";
-    private static final int PROVIDER_MODEL_DEFAULT_EXPANDED_ROW_COUNT = 6;
+    private static final int PROVIDER_MODEL_DEFAULT_EXPANDED_ROW_COUNT = 5;
     private DataContentObserver mMobileDataObserver;
     private SignalStrengthListener mSignalStrengthListener;
     private SubscriptionsChangeListener mSubscriptionsListener;
diff --git a/src/com/android/settings/panel/InternetConnectivityPanel.java b/src/com/android/settings/panel/InternetConnectivityPanel.java
index c735780..e6344d8 100644
--- a/src/com/android/settings/panel/InternetConnectivityPanel.java
+++ b/src/com/android/settings/panel/InternetConnectivityPanel.java
@@ -38,6 +38,7 @@
 import android.util.Log;
 
 import androidx.annotation.VisibleForTesting;
+import androidx.fragment.app.FragmentActivity;
 import androidx.lifecycle.LifecycleObserver;
 import androidx.lifecycle.OnLifecycleEvent;
 
@@ -83,13 +84,12 @@
             }
 
             if (TextUtils.equals(intent.getAction(), WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
-                updateProgressBar();
+                showProgressBar();
                 updatePanelTitle();
                 return;
             }
 
             if (TextUtils.equals(intent.getAction(), WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
-                updateProgressBar();
                 updatePanelTitle();
             }
         }
@@ -110,40 +110,13 @@
     private int mDefaultDataSubid = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
 
     // Wi-Fi scanning progress bar
-    protected HandlerInjector mHandlerInjector;
     protected boolean mIsProgressBarVisible;
-    protected boolean mIsScanningSubTitleShownOnce;
-    protected Runnable mHideProgressBarRunnable = () -> {
+    protected final Runnable mHideProgressBarRunnable = () -> {
         setProgressBarVisible(false);
     };
-    protected Runnable mHideScanningSubTitleRunnable = () -> {
-        mIsScanningSubTitleShownOnce = true;
-        updatePanelTitle();
-    };
-
-    /**
-     * Wrapper for testing compatibility.
-     */
-    @VisibleForTesting
-    static class HandlerInjector {
-        protected final Handler mHandler;
-
-        HandlerInjector(Context context) {
-            mHandler = context.getMainThreadHandler();
-        }
-
-        public void postDelay(Runnable runnable) {
-            mHandler.postDelayed(runnable, 2000 /* delay millis */);
-        }
-
-        public void removeCallbacks(Runnable runnable) {
-            mHandler.removeCallbacks(runnable);
-        }
-    }
 
     private InternetConnectivityPanel(Context context) {
         mContext = context.getApplicationContext();
-        mHandlerInjector = new HandlerInjector(context);
         mIsProviderModelEnabled = Utils.isProviderModelEnabled(mContext);
         mInternetUpdater = new InternetUpdater(context, null /* Lifecycle */, this);
 
@@ -177,7 +150,7 @@
         mTelephonyManager.registerTelephonyCallback(
                 new HandlerExecutor(new Handler(Looper.getMainLooper())), mTelephonyCallback);
         mContext.registerReceiver(mWifiStateReceiver, mWifiStateFilter);
-        updateProgressBar();
+        showProgressBar();
         updatePanelTitle();
     }
 
@@ -192,8 +165,7 @@
         mConnectivityListener.stop();
         mTelephonyManager.unregisterTelephonyCallback(mTelephonyCallback);
         mContext.unregisterReceiver(mWifiStateReceiver);
-        mHandlerInjector.removeCallbacks(mHideProgressBarRunnable);
-        mHandlerInjector.removeCallbacks(mHideScanningSubTitleRunnable);
+        mContext.getMainThreadHandler().removeCallbacks(mHideProgressBarRunnable);
     }
 
     /**
@@ -238,6 +210,23 @@
     }
 
     @Override
+    public boolean isCustomizedButtonUsed() {
+        return mIsProviderModelEnabled;
+    }
+
+    @Override
+    public CharSequence getCustomizedButtonTitle() {
+        return mContext.getText(
+                mInternetUpdater.isWifiEnabled() ? R.string.turn_off_wifi : R.string.turn_on_wifi);
+    }
+
+    @Override
+    public void onClickCustomizedButton(FragmentActivity panelActivity) {
+        // Don't finish the panel activity
+        mWifiManager.setWifiEnabled(!mInternetUpdater.isWifiEnabled());
+    }
+
+    @Override
     public boolean isProgressBarVisible() {
         return mIsProgressBarVisible;
     }
@@ -257,7 +246,6 @@
      */
     @Override
     public void onAirplaneModeChanged(boolean isAirplaneModeOn) {
-        log("onAirplaneModeChanged: isAirplaneModeOn:" + isAirplaneModeOn);
         updatePanelTitle();
     }
 
@@ -266,7 +254,6 @@
      */
     @Override
     public void onWifiEnabledChanged(boolean enabled) {
-        log("onWifiEnabledChanged: enabled:" + enabled);
         updatePanelTitle();
     }
 
@@ -318,6 +305,13 @@
             return;
         }
 
+        if (mIsProgressBarVisible) {
+            // When the Wi-Fi scan result callback is received
+            //   Sub-Title: Searching for networks...
+            mSubtitle = SUBTITLE_TEXT_SEARCHING_FOR_NETWORKS;
+            return;
+        }
+
         if (mInternetUpdater.isAirplaneModeOn()) {
             return;
         }
@@ -325,18 +319,11 @@
         final List<ScanResult> wifiList = mWifiManager.getScanResults();
         if (wifiList != null && wifiList.size() != 0) {
             // When the Wi-Fi scan result is not empty
-            //   Sub-Title: Tap a network to connect
+            //   Sub-Title: Select the network you want to use for data
             mSubtitle = SUBTITLE_TEXT_TAP_A_NETWORK_TO_CONNECT;
             return;
         }
 
-        if (!mIsScanningSubTitleShownOnce && mIsProgressBarVisible) {
-            // When the Wi-Fi scan result callback is received
-            //   Sub-Title: Searching for networks...
-            mSubtitle = SUBTITLE_TEXT_SEARCHING_FOR_NETWORKS;
-            return;
-        }
-
         // Sub-Title:
         // show non_carrier_network_unavailable
         //   - while Wi-Fi on + no Wi-Fi item
@@ -366,7 +353,7 @@
         mSubtitle = SUBTITLE_TEXT_NON_CARRIER_NETWORK_UNAVAILABLE;
     }
 
-    protected void updateProgressBar() {
+    protected void showProgressBar() {
         if (mWifiManager == null || !mInternetUpdater.isWifiEnabled()) {
             setProgressBarVisible(false);
             return;
@@ -375,9 +362,8 @@
         setProgressBarVisible(true);
         List<ScanResult> wifiScanResults = mWifiManager.getScanResults();
         if (wifiScanResults != null && wifiScanResults.size() > 0) {
-            mHandlerInjector.postDelay(mHideProgressBarRunnable);
-        } else if (!mIsScanningSubTitleShownOnce) {
-            mHandlerInjector.postDelay(mHideScanningSubTitleRunnable);
+            mContext.getMainThreadHandler().postDelayed(mHideProgressBarRunnable,
+                    2000 /* delay millis */);
         }
     }
 
diff --git a/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java b/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java
index 85129f8..a96e7cf 100644
--- a/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java
+++ b/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.network;
 
+import static com.android.settings.network.ProviderModelSlice.ACTION_TITLE_CONNECT_TO_CARRIER;
+
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.ArgumentMatchers.any;
@@ -40,8 +42,6 @@
 import android.telephony.TelephonyManager;
 
 import androidx.slice.Slice;
-import androidx.slice.SliceItem;
-import androidx.slice.SliceMetadata;
 import androidx.slice.SliceProvider;
 import androidx.slice.builders.ListBuilder;
 import androidx.slice.builders.SliceAction;
@@ -100,6 +100,8 @@
     ListBuilder.RowBuilder mMockCarrierRowBuild;
     @Mock
     WifiPickerTracker mWifiPickerTracker;
+    @Mock
+    WifiSliceItem mWifiSliceItem;
 
     private FakeFeatureFactory mFeatureFactory;
 
@@ -120,7 +122,7 @@
         when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
         when(mTelephonyManager.createForSubscriptionId(anyInt())).thenReturn(mTelephonyManager);
         when(mContext.getSystemService(WifiManager.class)).thenReturn(mWifiManager);
-        when(mWifiManager.isWifiEnabled()).thenReturn(true);
+
 
         // Set-up specs for SliceMetadata.
         SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
@@ -180,24 +182,7 @@
 
     @Test
     @UiThreadTest
-    public void getSlice_airplaneModeIsOn_oneWifiToggle() {
-        mWifiList.clear();
-        mMockNetworkProviderWorker.updateSelfResults(null);
-        mockHelperCondition(true, false, false, null);
-
-        final Slice slice = mMockProviderModelSlice.getSlice();
-
-        assertThat(slice).isNotNull();
-        verify(mListBuilder, times(1)).addRow(any(ListBuilder.RowBuilder.class));
-        final SliceItem sliceTitle =
-                SliceMetadata.from(mContext, slice).getListContent().getHeader().getTitleItem();
-        assertThat(sliceTitle.getText()).isEqualTo(
-                ResourcesUtils.getResourcesString(mContext, "wifi_settings"));
-    }
-
-    @Test
-    @UiThreadTest
-    public void getSlice_haveTwoWifiAndOneCarrier_getFiveRow() {
+    public void getSlice_haveTwoWifiAndOneCarrier_getCarrierAndTwoWiFiAndSeeAll() {
         mWifiList.clear();
         mockWifiItemCondition(mMockWifiSliceItem1, "wifi1", "wifi1",
                 WifiEntry.CONNECTED_STATE_CONNECTED, "wifi1_key", true);
@@ -212,13 +197,13 @@
 
         assertThat(slice).isNotNull();
         verify(mListBuilder, times(1)).addRow(mMockCarrierRowBuild);
-        verify(mListBuilder, times(5)).addRow(any(ListBuilder.RowBuilder.class));
+        verify(mListBuilder, times(4)).addRow(any(ListBuilder.RowBuilder.class));
         assertThat(mMockProviderModelSlice.hasSeeAllRow()).isTrue();
     }
 
     @Test
     @UiThreadTest
-    public void getSlice_haveOneConnectedWifiAndTwoDisconnectedWifiAndNoCarrier_getFiveRow() {
+    public void getSlice_haveOneConnectedWifiAndTwoDisconnectedWifiAndNoCarrier_getFourRow() {
         mWifiList.clear();
         mockWifiItemCondition(mMockWifiSliceItem1, "wifi1", "wifi1",
                 WifiEntry.CONNECTED_STATE_CONNECTED, "wifi1_key", true);
@@ -235,13 +220,13 @@
         final Slice slice = mMockProviderModelSlice.getSlice();
 
         assertThat(slice).isNotNull();
-        verify(mListBuilder, times(5)).addRow(any(ListBuilder.RowBuilder.class));
+        verify(mListBuilder, times(4)).addRow(any(ListBuilder.RowBuilder.class));
         assertThat(mMockProviderModelSlice.hasSeeAllRow()).isTrue();
     }
 
     @Test
     @UiThreadTest
-    public void getSlice_haveTwoDisconnectedWifiAndNoCarrier_getFourRow() {
+    public void getSlice_haveTwoDisconnectedWifiAndNoCarrier_getThreeRow() {
         mWifiList.clear();
         mockWifiItemCondition(mMockWifiSliceItem1, "wifi1", "wifi1",
                 WifiEntry.CONNECTED_STATE_DISCONNECTED, "wifi1_key", true);
@@ -255,13 +240,13 @@
         final Slice slice = mMockProviderModelSlice.getSlice();
 
         assertThat(slice).isNotNull();
-        verify(mListBuilder, times(4)).addRow(any(ListBuilder.RowBuilder.class));
+        verify(mListBuilder, times(3)).addRow(any(ListBuilder.RowBuilder.class));
         assertThat(mMockProviderModelSlice.hasSeeAllRow()).isTrue();
     }
 
     @Test
     @UiThreadTest
-    public void getSlice_haveEthernetAndCarrierAndTwoDisconnectedWifi_getSixRow() {
+    public void getSlice_haveEthernetAndCarrierAndTwoDisconnectedWifi_getFiveRow() {
         mWifiList.clear();
         mockWifiItemCondition(mMockWifiSliceItem1, "wifi1", "wifi1",
                 WifiEntry.CONNECTED_STATE_DISCONNECTED, "wifi1_key", true);
@@ -279,13 +264,13 @@
         assertThat(slice).isNotNull();
         assertThat(mMockProviderModelSlice.hasCreateEthernetRow()).isTrue();
         verify(mListBuilder, times(1)).addRow(mMockCarrierRowBuild);
-        verify(mListBuilder, times(6)).addRow(any(ListBuilder.RowBuilder.class));
+        verify(mListBuilder, times(5)).addRow(any(ListBuilder.RowBuilder.class));
         assertThat(mMockProviderModelSlice.hasSeeAllRow()).isTrue();
     }
 
     @Test
     @UiThreadTest
-    public void getSlice_haveEthernetAndCarrierAndConnectedWifiAndDisconnectedWifi_getSixRow() {
+    public void getSlice_haveEthernetAndCarrierAndConnectedWifiAndDisconnectedWifi_getFiveRow() {
         mWifiList.clear();
         mockWifiItemCondition(mMockWifiSliceItem1, "wifi1", "wifi1",
                 WifiEntry.CONNECTED_STATE_CONNECTED, "wifi1_key", true);
@@ -303,7 +288,7 @@
         assertThat(slice).isNotNull();
         assertThat(mMockProviderModelSlice.hasCreateEthernetRow()).isTrue();
         verify(mListBuilder, times(1)).addRow(mMockCarrierRowBuild);
-        verify(mListBuilder, times(6)).addRow(any(ListBuilder.RowBuilder.class));
+        verify(mListBuilder, times(5)).addRow(any(ListBuilder.RowBuilder.class));
         assertThat(mMockProviderModelSlice.hasSeeAllRow()).isTrue();
     }
 
@@ -395,11 +380,6 @@
             return super.getSeeAllRow();
         }
 
-        @Override
-        public ListBuilder.RowBuilder getWifiSliceItemRow(WifiSliceItem wifiSliceItem) {
-            return super.getWifiSliceItemRow(wifiSliceItem);
-        }
-
         public boolean hasCreateEthernetRow() {
             return mHasCreateEthernetRow;
         }
@@ -440,4 +420,29 @@
 
         verify(mMockNetworkProviderWorker, never()).connectCarrierNetwork();
     }
+
+    @Test
+    public void getWifiSliceItemRow_wifiNoInternetAccess_actionConnectToWifiSsid() {
+        when(mWifiSliceItem.getKey()).thenReturn("wifi_key");
+        when(mWifiSliceItem.getTitle()).thenReturn("wifi_ssid");
+        when(mWifiSliceItem.hasInternetAccess()).thenReturn(false);
+
+        ListBuilder.RowBuilder rowBuilder =
+                mMockProviderModelSlice.getWifiSliceItemRow(mWifiSliceItem);
+
+        assertThat(rowBuilder.getPrimaryAction().getTitle())
+                .isEqualTo("wifi_ssid");
+    }
+
+    @Test
+    public void getWifiSliceItemRow_wifiHasInternetAccess_actionConnectToCarrier() {
+        when(mWifiSliceItem.getTitle()).thenReturn("wifi_ssid");
+        when(mWifiSliceItem.hasInternetAccess()).thenReturn(true);
+
+        ListBuilder.RowBuilder rowBuilder =
+                mMockProviderModelSlice.getWifiSliceItemRow(mWifiSliceItem);
+
+        assertThat(rowBuilder.getPrimaryAction().getTitle())
+                .isEqualTo(ACTION_TITLE_CONNECT_TO_CARRIER);
+    }
 }
diff --git a/tests/unit/src/com/android/settings/panel/InternetConnectivityPanelTest.java b/tests/unit/src/com/android/settings/panel/InternetConnectivityPanelTest.java
index 9ad4a37..e475e6f 100644
--- a/tests/unit/src/com/android/settings/panel/InternetConnectivityPanelTest.java
+++ b/tests/unit/src/com/android/settings/panel/InternetConnectivityPanelTest.java
@@ -18,9 +18,12 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
 import static org.mockito.Mockito.clearInvocations;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -29,7 +32,9 @@
 import android.net.Uri;
 import android.net.wifi.ScanResult;
 import android.net.wifi.WifiManager;
+import android.os.Handler;
 
+import androidx.fragment.app.FragmentActivity;
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 
@@ -77,6 +82,8 @@
     @Rule
     public final MockitoRule mMocks = MockitoJUnit.rule();
     @Mock
+    Handler mMainThreadHandler;
+    @Mock
     PanelContentCallback mPanelContentCallback;
     @Mock
     InternetUpdater mInternetUpdater;
@@ -84,34 +91,17 @@
     private WifiManager mWifiManager;
     @Mock
     private ProviderModelSliceHelper mProviderModelSliceHelper;
+    @Mock
+    private FragmentActivity mPanelActivity;
 
     private Context mContext;
-    private FakeHandlerInjector mFakeHandlerInjector;
     private InternetConnectivityPanel mPanel;
 
-    private class FakeHandlerInjector extends InternetConnectivityPanel.HandlerInjector {
-
-        private Runnable mRunnable;
-
-        FakeHandlerInjector(Context context) {
-            super(context);
-        }
-
-        @Override
-        public void postDelay(Runnable runnable) {
-            mRunnable = runnable;
-        }
-
-        public Runnable getRunnable() {
-            return mRunnable;
-        }
-    }
-
     @Before
     public void setUp() {
         mContext = spy(ApplicationProvider.getApplicationContext());
-        mFakeHandlerInjector = new FakeHandlerInjector(mContext);
         when(mContext.getApplicationContext()).thenReturn(mContext);
+        when(mContext.getMainThreadHandler()).thenReturn(mMainThreadHandler);
         when(mContext.getSystemService(WifiManager.class)).thenReturn(mWifiManager);
 
         mPanel = InternetConnectivityPanel.create(mContext);
@@ -119,7 +109,6 @@
         mPanel.mIsProviderModelEnabled = true;
         mPanel.mInternetUpdater = mInternetUpdater;
         mPanel.mProviderModelSliceHelper = mProviderModelSliceHelper;
-        mPanel.mHandlerInjector = mFakeHandlerInjector;
     }
 
     @Test
@@ -215,6 +204,20 @@
     }
 
     @Test
+    public void getCustomizedButtonTitle_wifiOff_turnOnWifi() {
+        doReturn(false).when(mInternetUpdater).isWifiEnabled();
+
+        assertThat(mPanel.getCustomizedButtonTitle()).isEqualTo(BUTTON_TURN_ON_WIFI);
+    }
+
+    @Test
+    public void getCustomizedButtonTitle_wifiOn_turnOffWifi() {
+        doReturn(true).when(mInternetUpdater).isWifiEnabled();
+
+        assertThat(mPanel.getCustomizedButtonTitle()).isEqualTo(BUTTON_TURN_OFF_WIFI);
+    }
+
+    @Test
     public void getSlices_providerModelDisabled_containsNecessarySlices() {
         mPanel.mIsProviderModelEnabled = false;
         List<Uri> uris = mPanel.getSlices();
@@ -238,6 +241,31 @@
     }
 
     @Test
+    public void onClickCustomizedButton_wifiOn_setWifiOff() {
+        doReturn(true).when(mInternetUpdater).isWifiEnabled();
+
+        mPanel.onClickCustomizedButton(mPanelActivity);
+
+        verify(mWifiManager).setWifiEnabled(false);
+    }
+
+    @Test
+    public void onClickCustomizedButton_wifiOff_setWifiOn() {
+        doReturn(false).when(mInternetUpdater).isWifiEnabled();
+
+        mPanel.onClickCustomizedButton(mPanelActivity);
+
+        verify(mWifiManager).setWifiEnabled(true);
+    }
+
+    @Test
+    public void onClickCustomizedButton_shouldNotFinishActivity() {
+        mPanel.onClickCustomizedButton(mPanelActivity);
+
+        verify(mPanelActivity, never()).finish();
+    }
+
+    @Test
     public void updatePanelTitle_onHeaderChanged() {
         clearInvocations(mPanelContentCallback);
 
@@ -267,41 +295,36 @@
     }
 
     @Test
-    public void updateProgressBar_wifiDisabled_hideProgress() {
+    public void showProgressBar_wifiDisabled_hideProgress() {
         mPanel.mIsProgressBarVisible = true;
         doReturn(false).when(mInternetUpdater).isWifiEnabled();
         clearInvocations(mPanelContentCallback);
 
-        mPanel.updateProgressBar();
+        mPanel.showProgressBar();
 
         assertThat(mPanel.isProgressBarVisible()).isFalse();
         verify(mPanelContentCallback).onProgressBarVisibleChanged();
     }
 
     @Test
-    public void updateProgressBar_noWifiScanResults_showProgressForever() {
-        mPanel.mIsScanningSubTitleShownOnce = false;
+    public void showProgressBar_noWifiScanResults_showProgressForever() {
         mPanel.mIsProgressBarVisible = false;
         doReturn(true).when(mInternetUpdater).isWifiEnabled();
         List<ScanResult> noWifiScanResults = new ArrayList<>();
         doReturn(noWifiScanResults).when(mWifiManager).getScanResults();
         clearInvocations(mPanelContentCallback);
 
-        mPanel.updateProgressBar();
+        mPanel.showProgressBar();
 
-        assertThat(mPanel.mIsProgressBarVisible).isTrue();
+        assertThat(mPanel.isProgressBarVisible()).isTrue();
         verify(mPanelContentCallback).onProgressBarVisibleChanged();
         verify(mPanelContentCallback).onHeaderChanged();
-
-        assertThat(mFakeHandlerInjector.getRunnable())
-                .isEqualTo(mPanel.mHideScanningSubTitleRunnable);
-        mFakeHandlerInjector.getRunnable().run();
-        assertThat(mPanel.mIsScanningSubTitleShownOnce).isTrue();
-        assertThat(mPanel.mIsProgressBarVisible).isTrue();
+        verify(mMainThreadHandler, never())
+                .postDelayed(any() /* mHideProgressBarRunnable */, anyLong());
     }
 
     @Test
-    public void updateProgressBar_hasWifiScanResults_showProgressDelayedHide() {
+    public void showProgressBar_hasWifiScanResults_showProgressDelayedHide() {
         mPanel.mIsProgressBarVisible = false;
         doReturn(true).when(mInternetUpdater).isWifiEnabled();
         List<ScanResult> hasWifiScanResults = mock(ArrayList.class);
@@ -309,15 +332,11 @@
         doReturn(hasWifiScanResults).when(mWifiManager).getScanResults();
         clearInvocations(mPanelContentCallback);
 
-        mPanel.updateProgressBar();
+        mPanel.showProgressBar();
 
         assertThat(mPanel.isProgressBarVisible()).isTrue();
         verify(mPanelContentCallback).onProgressBarVisibleChanged();
-
-        assertThat(mFakeHandlerInjector.getRunnable())
-                .isEqualTo(mPanel.mHideProgressBarRunnable);
-        mFakeHandlerInjector.getRunnable().run();
-        assertThat(mPanel.mIsProgressBarVisible).isFalse();
+        verify(mMainThreadHandler).postDelayed(any() /* mHideProgressBarRunnable */, anyLong());
     }
 
     @Test