Merge "Register the rule for injected apps" into sc-v2-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 7199dd5..a29089a 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -292,16 +292,23 @@
             android:icon="@drawable/ic_homepage_network"
             android:exported="true"
             android:configChanges="orientation|keyboardHidden|screenSize">
-            <intent-filter android:priority="1">
-                <action android:name="android.settings.WIFI_SETTINGS" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.wifi.WifiSettings" />
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
 
+        <!-- Keep compatibility with old shortcuts. -->
+        <activity-alias
+            android:name="Settings$WifiSettings2Activity"
+            android:targetActivity="Settings$WifiSettingsActivity"
+            android:label="@string/wifi_settings"
+            android:icon="@drawable/ic_homepage_network"
+            android:exported="true">
+            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+                       android:value="com.android.settings.wifi.WifiSettings" />
+        </activity-alias>
+
         <activity
             android:name="Settings$NetworkProviderSettingsActivity"
             android:label="@string/provider_internet_settings"
@@ -313,6 +320,10 @@
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
             <intent-filter android:priority="1">
+                <action android:name="android.settings.WIFI_SETTINGS" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <intent-filter android:priority="1">
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="com.android.settings.SHORTCUT" />
             </intent-filter>
diff --git a/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java b/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
index e9dcea1..d57c0c2 100644
--- a/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
+++ b/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
@@ -17,7 +17,6 @@
 package com.android.settings.activityembedding;
 
 import android.app.Activity;
-import android.app.settings.SettingsEnums;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
@@ -26,7 +25,6 @@
 
 import androidx.annotation.NonNull;
 import androidx.window.embedding.ActivityFilter;
-import androidx.window.embedding.ActivityRule;
 import androidx.window.embedding.SplitController;
 import androidx.window.embedding.SplitPairFilter;
 import androidx.window.embedding.SplitPairRule;
@@ -36,7 +34,6 @@
 import com.android.settings.SubSettings;
 import com.android.settings.Utils;
 import com.android.settings.homepage.SettingsHomepageActivity;
-import com.android.settings.overlay.FeatureFactory;
 
 import java.util.HashSet;
 import java.util.Set;
@@ -73,8 +70,6 @@
                 null /* secondaryIntentAction */,
                 true /* finishPrimaryWithSecondary */,
                 true /* finishSecondaryWithPrimary */);
-        // Set rules here to show full screen for specified Activity.
-        registerAlwaysExpandRule();
     }
 
     /** Register a SplitPairRule for 2-pane. */
@@ -98,16 +93,6 @@
                 LayoutDirection.LOCALE));
     }
 
-    private void registerAlwaysExpandRule() {
-        final Set<ActivityFilter> activityFilters = new HashSet<>();
-
-        final Intent searchIntent = FeatureFactory.getFactory(mContext).getSearchFeatureProvider()
-                .buildSearchIntent(mContext, SettingsEnums.SETTINGS_HOMEPAGE);
-        addActivityFilter(activityFilters, searchIntent);
-
-        mSplitController.registerRule(new ActivityRule(activityFilters, true /* alwaysExpand */));
-    }
-
     private void registerHomepagePlaceholderRule() {
         final Set<ActivityFilter> activityFilters = new HashSet<>();
         addActivityFilter(activityFilters, SettingsHomepageActivity.class);
diff --git a/src/com/android/settings/network/NetworkProviderSettings.java b/src/com/android/settings/network/NetworkProviderSettings.java
index 8a4929a..349bb82 100644
--- a/src/com/android/settings/network/NetworkProviderSettings.java
+++ b/src/com/android/settings/network/NetworkProviderSettings.java
@@ -19,6 +19,8 @@
 import static android.net.wifi.WifiConfiguration.NetworkSelectionStatus.NETWORK_SELECTION_ENABLED;
 import static android.os.UserManager.DISALLOW_CONFIG_WIFI;
 
+import static com.android.settings.Settings.WifiSettingsActivity;
+
 import android.app.Activity;
 import android.app.Dialog;
 import android.app.settings.SettingsEnums;
@@ -27,6 +29,7 @@
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
+import android.location.LocationManager;
 import android.net.NetworkTemplate;
 import android.net.wifi.WifiConfiguration;
 import android.net.wifi.WifiManager;
@@ -277,6 +280,17 @@
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
+        if (!FeatureFlagUtils.isEnabled(getContext(), FeatureFlagUtils.SETTINGS_PROVIDER_MODEL)) {
+            final Intent intent = new Intent(getContext(), WifiSettingsActivity.class);
+            final Bundle extras = getActivity().getIntent().getExtras();
+            if (extras != null) {
+                intent.putExtras(extras);
+            }
+            getContext().startActivity(intent);
+            finish();
+            return;
+        }
+
         mAirplaneModeEnabler = new AirplaneModeEnabler(getContext(), this);
 
         // TODO(b/37429702): Add animations and preference comparator back after initial screen is
@@ -464,7 +478,9 @@
 
     @Override
     public void onDestroy() {
-        mAirplaneModeEnabler.close();
+        if (mAirplaneModeEnabler != null) {
+            mAirplaneModeEnabler.close();
+        }
         super.onDestroy();
     }
 
@@ -756,7 +772,10 @@
         if (context == null) {
             return;
         }
-        if (isWifiEnabled || !mWifiManager.isScanAlwaysAvailable()) {
+
+        final LocationManager locationManager = context.getSystemService(LocationManager.class);
+        if (isWifiEnabled || !locationManager.isLocationEnabled()
+                || !mWifiManager.isScanAlwaysAvailable()) {
             mWifiStatusMessagePreference.setVisible(false);
             return;
         }
diff --git a/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java b/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java
index e048849..be8bf3a 100644
--- a/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java
@@ -38,6 +38,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Resources;
+import android.location.LocationManager;
 import android.net.wifi.WifiConfiguration;
 import android.net.wifi.WifiManager;
 import android.os.Bundle;
@@ -98,6 +99,8 @@
     @Mock
     private UserManager mUserManager;
     @Mock
+    private LocationManager mLocationManager;
+    @Mock
     private AirplaneModeEnabler mAirplaneModeEnabler;
     @Mock
     private DataUsagePreference mDataUsagePreference;
@@ -133,6 +136,7 @@
         doReturn(mPowerManager).when(mContext).getSystemService(PowerManager.class);
         doReturn(mWifiManager).when(mContext).getSystemService(WifiManager.class);
         doReturn(mUserManager).when(mContext).getSystemService(Context.USER_SERVICE);
+        doReturn(mLocationManager).when(mContext).getSystemService(LocationManager.class);
         when(mUserManager.hasBaseUserRestriction(any(), any())).thenReturn(true);
         doReturn(mContext).when(mPreferenceManager).getContext();
         mNetworkProviderSettings.mAddWifiNetworkPreference = new AddWifiNetworkPreference(mContext);
@@ -543,19 +547,41 @@
     }
 
     @Test
-    public void setWifiScanMessage_wifiOffScanOn_footerIsVisible() {
+    public void setWifiScanMessage_wifiOffLocationOnScanOn_footerIsVisible() {
         when(mWifiManager.isScanAlwaysAvailable()).thenReturn(true);
+        when(mLocationManager.isLocationEnabled()).thenReturn(true);
 
         mNetworkProviderSettings.setWifiScanMessage(/* isWifiEnabled */ false);
 
         assertThat(mNetworkProviderSettings.mWifiStatusMessagePreference.isVisible()).isTrue();
         assertThat(mNetworkProviderSettings.mWifiStatusMessagePreference.getTitle().length())
-                .isNotEqualTo(0);
+            .isNotEqualTo(0);
     }
 
     @Test
-    public void setWifiScanMessage_wifiOffScanOff_footerIsInvisible() {
+    public void setWifiScanMessage_wifiOffLocationOnScanOff_footerIsInvisible() {
         when(mWifiManager.isScanAlwaysAvailable()).thenReturn(false);
+        when(mLocationManager.isLocationEnabled()).thenReturn(true);
+
+        mNetworkProviderSettings.setWifiScanMessage(/* isWifiEnabled */ false);
+
+        assertThat(mNetworkProviderSettings.mWifiStatusMessagePreference.isVisible()).isFalse();
+    }
+
+    @Test
+    public void setWifiScanMessage_wifiOffLocationOffScanOn_footerIsInvisible() {
+        when(mWifiManager.isScanAlwaysAvailable()).thenReturn(true);
+        when(mLocationManager.isLocationEnabled()).thenReturn(false);
+
+        mNetworkProviderSettings.setWifiScanMessage(/* isWifiEnabled */ false);
+
+        assertThat(mNetworkProviderSettings.mWifiStatusMessagePreference.isVisible()).isFalse();
+    }
+
+    @Test
+    public void setWifiScanMessage_wifiOffLocationOffScanOff_footerIsInvisible() {
+        when(mWifiManager.isScanAlwaysAvailable()).thenReturn(false);
+        when(mLocationManager.isLocationEnabled()).thenReturn(false);
 
         mNetworkProviderSettings.setWifiScanMessage(/* isWifiEnabled */ false);