Revert "Revert "Device do network scan after user rotates NetworkSelection page""

This reverts commit 3c9580d573e83b8b6059b363f51e201714522787.

Reason for revert: since b/207587612 revert the ag/16259258, do revert this solution back and submit ag/16182703 for sc-v2

Change-Id: I05148506503fc6d1f4ee4ac2ae99e2eb28f61c9f
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index a471504..a41c89a 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -234,6 +234,11 @@
                   android:exported="true"
                   android:launchMode="singleTask"
                   android:configChanges="orientation|screenSize|keyboardHidden">
+            <!-- Note: Since the framework does not support the multiple requests of network scan
+            from the UI, this singleTask can protect that there is only one
+            Settings$NetworkSelectActivity which can request the network scan.
+            If removing the "singleTask" in the future, please also modify the
+            Settings$NetworkSelectActivity's structure. -->
             <intent-filter android:priority="1">
                 <!-- Displays the MobileNetworkActivity and opt-in dialog for capability discovery. -->
                 <action android:name="android.telephony.ims.action.SHOW_CAPABILITY_DISCOVERY_OPT_IN" />
@@ -346,6 +351,16 @@
         </activity>
 
         <activity
+            android:name="Settings$NetworkSelectActivity"
+            android:label="@string/choose_network_title"
+            android:configChanges="orientation|keyboard|keyboardHidden|screenSize|screenLayout|smallestScreenSize">
+            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+                android:value="com.android.settings.network.telephony.NetworkSelectSettings" />
+            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
+                android:value="true" />
+        </activity>
+
+        <activity
             android:name="Settings$WifiDetailsSettingsActivity"
             android:label="@string/wifi_details_title"
             android:icon="@drawable/ic_homepage_network"
diff --git a/res/xml/mobile_network_settings.xml b/res/xml/mobile_network_settings.xml
index 7d1ff09..673994a 100644
--- a/res/xml/mobile_network_settings.xml
+++ b/res/xml/mobile_network_settings.xml
@@ -223,7 +223,6 @@
             <Preference
                 android:key="choose_network_key"
                 android:title="@string/choose_network_title"
-                android:fragment="com.android.phone.NetworkSelectSetting"
                 settings:controller="com.android.settings.network.telephony.gsm.OpenNetworkSelectPagePreferenceController"/>
         </PreferenceCategory>
 
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 4de795c..6dd5a2e 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -91,6 +91,7 @@
     public static class WifiSettingsActivity extends SettingsActivity { /* empty */ }
     public static class WifiSettings2Activity extends SettingsActivity { /* empty */ }
     public static class NetworkProviderSettingsActivity extends SettingsActivity { /* empty */ }
+    public static class NetworkSelectActivity extends SettingsActivity { /* empty */ }
     /** Activity for the Wi-Fi network details settings. */
     public static class WifiDetailsSettingsActivity extends SettingsActivity { /* empty */ }
     public static class WifiP2pSettingsActivity extends SettingsActivity { /* empty */ }
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index 3c594a7..a9f8e31 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -119,6 +119,7 @@
 import com.android.settings.network.NetworkProviderSettings;
 import com.android.settings.network.apn.ApnEditor;
 import com.android.settings.network.apn.ApnSettings;
+import com.android.settings.network.telephony.NetworkSelectSettings;
 import com.android.settings.nfc.AndroidBeam;
 import com.android.settings.nfc.PaymentSettings;
 import com.android.settings.notification.ConfigureNotificationSettings;
@@ -318,6 +319,7 @@
             InteractAcrossProfilesDetails.class.getName(),
             MediaControlsSettings.class.getName(),
             NetworkProviderSettings.class.getName(),
+            NetworkSelectSettings.class.getName(),
             AlarmsAndRemindersDetails.class.getName(),
             MediaManagementAppsDetails.class.getName()
     };
@@ -341,6 +343,7 @@
             Settings.WifiSettingsActivity.class.getName(),
             Settings.DataUsageSummaryActivity.class.getName(),
             Settings.NetworkProviderSettingsActivity.class.getName(),
+            Settings.NetworkSelectActivity.class.getName(),
             // Home page > Connected devices
             Settings.BluetoothSettingsActivity.class.getName(),
             Settings.WifiDisplaySettingsActivity.class.getName(),
diff --git a/src/com/android/settings/network/telephony/NetworkSelectSettings.java b/src/com/android/settings/network/telephony/NetworkSelectSettings.java
index c72c18d..67d3171 100644
--- a/src/com/android/settings/network/telephony/NetworkSelectSettings.java
+++ b/src/com/android/settings/network/telephony/NetworkSelectSettings.java
@@ -19,6 +19,7 @@
 import android.app.Activity;
 import android.app.settings.SettingsEnums;
 import android.content.Context;
+import android.content.Intent;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
@@ -101,7 +102,7 @@
     @VisibleForTesting
     protected void onCreateInitialization() {
         mUseNewApi = enableNewAutoSelectNetworkUI(getContext());
-        mSubId = getArguments().getInt(Settings.EXTRA_SUB_ID);
+        mSubId = getSubId();
 
         mPreferenceCategory = getPreferenceCategory(PREF_KEY_NETWORK_OPERATORS);
         mStatusMessagePreference = new Preference(getContext());
@@ -120,7 +121,7 @@
         mMetricsFeatureProvider = getMetricsFeatureProvider(getContext());
         mIsAggregationEnabled = enableAggregation(getContext());
         Log.d(TAG, "init: mUseNewApi:" + mUseNewApi
-                + " ,mIsAggregationEnabled:" + mIsAggregationEnabled);
+                + " ,mIsAggregationEnabled:" + mIsAggregationEnabled + " ,mSubId:" + mSubId);
     }
 
     @Keep
@@ -174,6 +175,18 @@
         getPreferenceScreen().setEnabled(enable);
     }
 
+    @Keep
+    @VisibleForTesting
+    protected int getSubId() {
+        int subId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
+        Intent intent = getActivity().getIntent();
+        if (intent != null) {
+            subId = intent.getIntExtra(Settings.EXTRA_SUB_ID,
+                    SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+        }
+        return subId;
+    }
+
     @Override
     public void onViewCreated(View view, Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
diff --git a/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java b/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java
index 997235c..028c4e7 100644
--- a/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java
+++ b/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java
@@ -20,9 +20,8 @@
 import static androidx.lifecycle.Lifecycle.Event.ON_STOP;
 
 import android.app.ProgressDialog;
-import android.app.settings.SettingsEnums;
 import android.content.Context;
-import android.os.Bundle;
+import android.content.Intent;
 import android.os.Handler;
 import android.os.HandlerExecutor;
 import android.os.Looper;
@@ -43,10 +42,8 @@
 import androidx.preference.SwitchPreference;
 
 import com.android.settings.R;
-import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.network.AllowedNetworkTypesListener;
 import com.android.settings.network.telephony.MobileNetworkUtils;
-import com.android.settings.network.telephony.NetworkSelectSettings;
 import com.android.settings.network.telephony.TelephonyTogglePreferenceController;
 import com.android.settingslib.utils.ThreadUtils;
 
@@ -151,25 +148,26 @@
     public boolean setChecked(boolean isChecked) {
         if (isChecked) {
             setAutomaticSelectionMode();
-            return false;
         } else {
-            final Bundle bundle = new Bundle();
-            bundle.putInt(Settings.EXTRA_SUB_ID, mSubId);
-            new SubSettingLauncher(mContext)
-                    .setDestination(NetworkSelectSettings.class.getName())
-                    .setSourceMetricsCategory(SettingsEnums.MOBILE_NETWORK_SELECT)
-                    .setTitleRes(R.string.choose_network_title)
-                    .setArguments(bundle)
-                    .launch();
-            return false;
+            if (mSwitchPreference != null) {
+                Intent intent = new Intent();
+                intent.setClassName("com.android.settings",
+                        "com.android.settings.Settings$NetworkSelectActivity");
+                intent.putExtra(Settings.EXTRA_SUB_ID, mSubId);
+                mSwitchPreference.setIntent(intent);
+            }
         }
+        return false;
     }
 
     @VisibleForTesting
     Future setAutomaticSelectionMode() {
         final long startMillis = SystemClock.elapsedRealtime();
         showAutoSelectProgressBar();
-        mSwitchPreference.setEnabled(false);
+        if (mSwitchPreference != null) {
+            mSwitchPreference.setIntent(null);
+            mSwitchPreference.setEnabled(false);
+        }
         return ThreadUtils.postOnBackgroundThread(() -> {
             // set network selection mode in background
             mTelephonyManager.setNetworkSelectionModeAutomatic();
diff --git a/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java b/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java
index 4047009..54f5ce1 100644
--- a/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java
+++ b/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java
@@ -19,14 +19,12 @@
 import static androidx.lifecycle.Lifecycle.Event.ON_START;
 import static androidx.lifecycle.Lifecycle.Event.ON_STOP;
 
-import android.app.settings.SettingsEnums;
 import android.content.Context;
-import android.os.Bundle;
+import android.content.Intent;
 import android.provider.Settings;
 import android.telephony.ServiceState;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
-import android.text.TextUtils;
 
 import androidx.lifecycle.Lifecycle;
 import androidx.lifecycle.LifecycleObserver;
@@ -35,10 +33,8 @@
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
-import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.network.AllowedNetworkTypesListener;
 import com.android.settings.network.telephony.MobileNetworkUtils;
-import com.android.settings.network.telephony.NetworkSelectSettings;
 import com.android.settings.network.telephony.TelephonyBasePreferenceController;
 
 /**
@@ -102,6 +98,12 @@
         super.updateState(preference);
         preference.setEnabled(mTelephonyManager.getNetworkSelectionMode()
                 != TelephonyManager.NETWORK_SELECTION_MODE_AUTO);
+
+        Intent intent = new Intent();
+        intent.setClassName("com.android.settings",
+                "com.android.settings.Settings$NetworkSelectActivity");
+        intent.putExtra(Settings.EXTRA_SUB_ID, mSubId);
+        preference.setIntent(intent);
     }
 
     @Override
@@ -114,23 +116,6 @@
         }
     }
 
-    @Override
-    public boolean handlePreferenceTreeClick(Preference preference) {
-        if (TextUtils.equals(preference.getKey(), getPreferenceKey())) {
-            final Bundle bundle = new Bundle();
-            bundle.putInt(Settings.EXTRA_SUB_ID, mSubId);
-            new SubSettingLauncher(mContext)
-                    .setDestination(NetworkSelectSettings.class.getName())
-                    .setSourceMetricsCategory(SettingsEnums.MOBILE_NETWORK_SELECT)
-                    .setTitleRes(R.string.choose_network_title)
-                    .setArguments(bundle)
-                    .launch();
-            return true;
-        }
-
-        return false;
-    }
-
     public OpenNetworkSelectPagePreferenceController init(Lifecycle lifecycle, int subId) {
         mSubId = subId;
         mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
diff --git a/tests/unit/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java b/tests/unit/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java
index 391839c..6dbc4c9 100644
--- a/tests/unit/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java
+++ b/tests/unit/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java
@@ -122,10 +122,6 @@
 
         public TargetClass(NetworkSelectSettingsTest env) {
             mTestEnv = env;
-
-            Bundle bundle = new Bundle();
-            bundle.putInt(Settings.EXTRA_SUB_ID, SUB_ID);
-            setArguments(bundle);
         }
 
         @Override
@@ -184,6 +180,11 @@
         protected boolean enableAggregation(Context context) {
             return mTestEnv.mIsAggregationEnabled;
         }
+
+        @Override
+        protected int getSubId() {
+            return SUB_ID;
+        }
     }
 
     @Test