Merge "Always check roles for non-blockability"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 8e3378a..9c6b97a 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1423,7 +1423,8 @@
         <activity
             android:name=".datausage.AppDataUsageActivity"
             android:exported="true"
-            android:noHistory="true">
+            android:noHistory="true"
+            android:permission="android.permission.QUERY_ALL_PACKAGES">
             <intent-filter android:priority="1">
                 <action android:name="android.settings.IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS" />
                 <category android:name="android.intent.category.DEFAULT" />
@@ -1493,6 +1494,7 @@
         <activity-alias android:name=".applications.InstalledAppDetails"
                 android:label="@string/application_info_label"
                 android:exported="true"
+                android:permission="android.permission.QUERY_ALL_PACKAGES"
                 android:targetActivity=".applications.InstalledAppDetailsTop">
             <intent-filter android:priority="1">
                 <action android:name="android.settings.APPLICATION_DETAILS_SETTINGS" />
@@ -1504,7 +1506,8 @@
 
         <activity android:name=".applications.InstalledAppOpenByDefaultActivity"
                   android:label="@string/application_info_label"
-                  android:exported="true">
+                  android:exported="true"
+                  android:permission="android.permission.QUERY_ALL_PACKAGES">
             <intent-filter android:priority="1">
                 <action android:name="android.settings.APP_OPEN_BY_DEFAULT_SETTINGS" />
                 <!-- Also catch legacy "com." prefixed action. -->
@@ -1861,7 +1864,8 @@
         <activity
             android:name="Settings$AppUsageAccessSettingsActivity"
             android:exported="true"
-            android:label="@string/usage_access_title">
+            android:label="@string/usage_access_title"
+            android:permission="android.permission.QUERY_ALL_PACKAGES">
             <intent-filter>
                 <action android:name="android.settings.USAGE_ACCESS_SETTINGS"/>
                 <category android:name="android.intent.category.DEFAULT"/>
diff --git a/res/layout/screen_zoom_preview_2.xml b/res/layout/screen_zoom_preview_2.xml
index 2cfd9b7..d8ce346 100644
--- a/res/layout/screen_zoom_preview_2.xml
+++ b/res/layout/screen_zoom_preview_2.xml
@@ -20,4 +20,5 @@
     android:padding="32dp"
     android:numColumns="3"
     android:gravity="center"
+    android:nestedScrollingEnabled="true"
     android:importantForAccessibility="noHideDescendants" />
diff --git a/res/layout/storage_internal_format.xml b/res/layout/storage_internal_format.xml
index 08434b0..0b49d7e 100644
--- a/res/layout/storage_internal_format.xml
+++ b/res/layout/storage_internal_format.xml
@@ -20,7 +20,7 @@
     android:layout_height="match_parent"
     android:orientation="vertical">
 
-    <ScrollView
+    <androidx.core.widget.NestedScrollView
         android:layout_width="match_parent"
         android:layout_height="0dp"
         android:layout_weight="1">
@@ -35,7 +35,7 @@
             android:lineSpacingExtra="@dimen/sud_description_line_spacing_extra"
             android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Body1"
             android:textColor="?android:attr/textColorPrimary" />
-    </ScrollView>
+    </androidx.core.widget.NestedScrollView>
 
     <FrameLayout
         android:layout_width="match_parent"
diff --git a/res/xml/accessibility_text_reading_options.xml b/res/xml/accessibility_text_reading_options.xml
index ced5e79..4bc9317 100644
--- a/res/xml/accessibility_text_reading_options.xml
+++ b/res/xml/accessibility_text_reading_options.xml
@@ -17,6 +17,20 @@
 
 <PreferenceScreen
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:settings="http://schemas.android.com/apk/res-auto"
     android:persistent="false"
     android:title="@string/accessibility_text_reading_options_title">
+
+    <SwitchPreference
+        android:key="toggle_force_bold_text"
+        android:persistent="false"
+        android:title="@string/force_bold_text"
+        settings:keywords="@string/keywords_bold_text"
+        settings:controller="com.android.settings.accessibility.FontWeightAdjustmentPreferenceController"/>
+
+    <SwitchPreference
+        android:key="toggle_high_text_contrast_preference"
+        android:persistent="false"
+        android:title="@string/accessibility_toggle_high_text_contrast_preference_title"
+        settings:controller="com.android.settings.accessibility.HighTextContrastPreferenceController"/>
 </PreferenceScreen>
diff --git a/src/com/android/settings/SettingsDumpService.java b/src/com/android/settings/SettingsDumpService.java
index 7e37e32..38987f5 100644
--- a/src/com/android/settings/SettingsDumpService.java
+++ b/src/com/android/settings/SettingsDumpService.java
@@ -35,6 +35,7 @@
 import androidx.annotation.VisibleForTesting;
 
 import com.android.settings.applications.ProcStatsData;
+import com.android.settings.datausage.lib.DataUsageLib;
 import com.android.settings.fuelgauge.batterytip.AnomalyConfigJobService;
 import com.android.settingslib.net.DataUsageController;
 
@@ -109,14 +110,8 @@
         if (telephonyManager.isDataCapable()) {
             JSONArray array = new JSONArray();
             for (SubscriptionInfo info : manager.getAvailableSubscriptionInfoList()) {
-                telephonyManager = telephonyManager
-                        .createForSubscriptionId(info.getSubscriptionId());
-                String subscriberId = telephonyManager.getSubscriberId();
-                // The null subscriberId means that no any mobile/carrier network will be matched.
-                // Using old API: buildTemplateMobileAll for the null subscriberId to avoid NPE.
-                NetworkTemplate template = subscriberId != null
-                        ? NetworkTemplate.buildTemplateCarrierMetered(subscriberId)
-                        : NetworkTemplate.buildTemplateMobileAll(subscriberId);
+                NetworkTemplate template = DataUsageLib.getMobileTemplateForSubId(
+                        telephonyManager, info.getSubscriptionId());
                 final JSONObject usage = dumpDataUsage(template, controller);
                 usage.put("subId", info.getSubscriptionId());
                 array.put(usage);
@@ -125,12 +120,12 @@
         }
         if (packageManager.hasSystemFeature(FEATURE_WIFI)) {
             obj.put("wifi", dumpDataUsage(
-                    NetworkTemplate.buildTemplateWifi(
-                    NetworkTemplate.WIFI_NETWORKID_ALL, null /* subscriberId */), controller));
+                    new NetworkTemplate.Builder(NetworkTemplate.MATCH_WIFI).build(), controller));
         }
 
         if (packageManager.hasSystemFeature(FEATURE_ETHERNET)) {
-            obj.put("ethernet", dumpDataUsage(NetworkTemplate.buildTemplateEthernet(), controller));
+            obj.put("ethernet", dumpDataUsage(new NetworkTemplate.Builder(
+                    NetworkTemplate.MATCH_ETHERNET).build(), controller));
         }
         return obj;
     }
diff --git a/src/com/android/settings/accessibility/HapticFeedbackIntensityPreferenceController.java b/src/com/android/settings/accessibility/HapticFeedbackIntensityPreferenceController.java
index a2142a2..f3e9b83 100644
--- a/src/com/android/settings/accessibility/HapticFeedbackIntensityPreferenceController.java
+++ b/src/com/android/settings/accessibility/HapticFeedbackIntensityPreferenceController.java
@@ -17,6 +17,7 @@
 package com.android.settings.accessibility;
 
 import android.content.Context;
+import android.os.VibrationAttributes;
 import android.provider.Settings;
 
 import androidx.annotation.VisibleForTesting;
@@ -39,7 +40,7 @@
 
     @Override
     protected int getDefaultIntensity() {
-        return mVibrator.getDefaultHapticFeedbackIntensity();
+        return mVibrator.getDefaultVibrationIntensity(VibrationAttributes.USAGE_TOUCH);
     }
 
 }
diff --git a/src/com/android/settings/accessibility/NotificationVibrationIntensityPreferenceController.java b/src/com/android/settings/accessibility/NotificationVibrationIntensityPreferenceController.java
index 4ace4c6..eb396ac 100644
--- a/src/com/android/settings/accessibility/NotificationVibrationIntensityPreferenceController.java
+++ b/src/com/android/settings/accessibility/NotificationVibrationIntensityPreferenceController.java
@@ -17,6 +17,7 @@
 package com.android.settings.accessibility;
 
 import android.content.Context;
+import android.os.VibrationAttributes;
 import android.provider.Settings;
 
 import androidx.annotation.VisibleForTesting;
@@ -38,6 +39,6 @@
 
     @Override
     protected int getDefaultIntensity() {
-        return mVibrator.getDefaultNotificationVibrationIntensity();
+        return mVibrator.getDefaultVibrationIntensity(VibrationAttributes.USAGE_NOTIFICATION);
     }
 }
diff --git a/src/com/android/settings/accessibility/NotificationVibrationPreferenceFragment.java b/src/com/android/settings/accessibility/NotificationVibrationPreferenceFragment.java
index 3ca197f..e1d9d47 100644
--- a/src/com/android/settings/accessibility/NotificationVibrationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/NotificationVibrationPreferenceFragment.java
@@ -17,6 +17,7 @@
 
 import android.app.settings.SettingsEnums;
 import android.media.AudioAttributes;
+import android.os.VibrationAttributes;
 import android.os.Vibrator;
 import android.provider.Settings;
 
@@ -57,6 +58,6 @@
     @Override
     protected int getDefaultVibrationIntensity() {
         Vibrator vibrator = getContext().getSystemService(Vibrator.class);
-        return vibrator.getDefaultNotificationVibrationIntensity();
+        return vibrator.getDefaultVibrationIntensity(VibrationAttributes.USAGE_NOTIFICATION);
     }
 }
diff --git a/src/com/android/settings/accessibility/RingVibrationIntensityPreferenceController.java b/src/com/android/settings/accessibility/RingVibrationIntensityPreferenceController.java
index 4dee348..75cbefb 100644
--- a/src/com/android/settings/accessibility/RingVibrationIntensityPreferenceController.java
+++ b/src/com/android/settings/accessibility/RingVibrationIntensityPreferenceController.java
@@ -17,6 +17,7 @@
 package com.android.settings.accessibility;
 
 import android.content.Context;
+import android.os.VibrationAttributes;
 import android.provider.Settings;
 
 import androidx.annotation.VisibleForTesting;
@@ -39,6 +40,6 @@
 
     @Override
     protected int getDefaultIntensity() {
-        return mVibrator.getDefaultRingVibrationIntensity();
+        return mVibrator.getDefaultVibrationIntensity(VibrationAttributes.USAGE_RINGTONE);
     }
 }
diff --git a/src/com/android/settings/accessibility/RingVibrationPreferenceFragment.java b/src/com/android/settings/accessibility/RingVibrationPreferenceFragment.java
index 5d19a9b..aa3e313 100644
--- a/src/com/android/settings/accessibility/RingVibrationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/RingVibrationPreferenceFragment.java
@@ -17,6 +17,7 @@
 
 import android.app.settings.SettingsEnums;
 import android.media.AudioAttributes;
+import android.os.VibrationAttributes;
 import android.os.Vibrator;
 import android.provider.Settings;
 
@@ -61,6 +62,6 @@
     @Override
     protected int getDefaultVibrationIntensity() {
         Vibrator vibrator = getContext().getSystemService(Vibrator.class);
-        return vibrator.getDefaultRingVibrationIntensity();
+        return vibrator.getDefaultVibrationIntensity(VibrationAttributes.USAGE_RINGTONE);
     }
 }
diff --git a/src/com/android/settings/accessibility/TouchVibrationPreferenceFragment.java b/src/com/android/settings/accessibility/TouchVibrationPreferenceFragment.java
index f6bbbf3..b1bd847 100644
--- a/src/com/android/settings/accessibility/TouchVibrationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/TouchVibrationPreferenceFragment.java
@@ -17,6 +17,7 @@
 
 import android.app.settings.SettingsEnums;
 import android.media.AudioAttributes;
+import android.os.VibrationAttributes;
 import android.os.Vibrator;
 import android.provider.Settings;
 
@@ -52,7 +53,7 @@
     @Override
     protected int getDefaultVibrationIntensity() {
         Vibrator vibrator = getContext().getSystemService(Vibrator.class);
-        return vibrator.getDefaultHapticFeedbackIntensity();
+        return vibrator.getDefaultVibrationIntensity(VibrationAttributes.USAGE_TOUCH);
     }
 
     @Override
diff --git a/src/com/android/settings/accessibility/VibrationPreferenceController.java b/src/com/android/settings/accessibility/VibrationPreferenceController.java
index 8bfea34..b36106d 100644
--- a/src/com/android/settings/accessibility/VibrationPreferenceController.java
+++ b/src/com/android/settings/accessibility/VibrationPreferenceController.java
@@ -17,6 +17,7 @@
 package com.android.settings.accessibility;
 
 import android.content.Context;
+import android.os.VibrationAttributes;
 import android.os.Vibrator;
 import android.provider.Settings;
 
@@ -41,7 +42,7 @@
     public CharSequence getSummary() {
         int ringIntensity = Settings.System.getInt(mContext.getContentResolver(),
                 Settings.System.RING_VIBRATION_INTENSITY,
-                mVibrator.getDefaultRingVibrationIntensity());
+                mVibrator.getDefaultVibrationIntensity(VibrationAttributes.USAGE_RINGTONE));
         if (Settings.System.getInt(mContext.getContentResolver(),
                 Settings.System.VIBRATE_WHEN_RINGING, 0) == 0
                 && !AccessibilitySettings.isRampingRingerEnabled(mContext)) {
@@ -52,14 +53,14 @@
 
         final int notificationIntensity = Settings.System.getInt(mContext.getContentResolver(),
                 Settings.System.NOTIFICATION_VIBRATION_INTENSITY,
-                mVibrator.getDefaultNotificationVibrationIntensity());
+                mVibrator.getDefaultVibrationIntensity(VibrationAttributes.USAGE_NOTIFICATION));
         final CharSequence notificationIntensityString =
                 VibrationIntensityPreferenceController.getIntensityString(mContext,
                         notificationIntensity);
 
         int touchIntensity = Settings.System.getInt(mContext.getContentResolver(),
                 Settings.System.HAPTIC_FEEDBACK_INTENSITY,
-                mVibrator.getDefaultHapticFeedbackIntensity());
+                mVibrator.getDefaultVibrationIntensity(VibrationAttributes.USAGE_TOUCH));
         if (Settings.System.getInt(mContext.getContentResolver(),
                 Settings.System.HAPTIC_FEEDBACK_ENABLED, 0) == 0) {
             touchIntensity = Vibrator.VIBRATION_INTENSITY_OFF;
diff --git a/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java b/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java
index f321d72..6a254cb 100644
--- a/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java
@@ -17,6 +17,7 @@
 package com.android.settings.applications.appinfo;
 
 import android.content.Context;
+import android.net.NetworkStats;
 import android.net.NetworkTemplate;
 import android.os.Bundle;
 import android.text.format.DateUtils;
@@ -136,13 +137,13 @@
 
     private static NetworkTemplate getTemplate(Context context) {
         if (DataUsageUtils.hasReadyMobileRadio(context)) {
-            return NetworkTemplate.buildTemplateMobileWildcard();
+            return new NetworkTemplate.Builder(NetworkTemplate.MATCH_MOBILE).setMeteredness(
+                    NetworkStats.METERED_YES).build();
         }
         if (DataUsageUtils.hasWifiRadio(context)) {
-            return NetworkTemplate.buildTemplateWifi(NetworkTemplate.WIFI_NETWORKID_ALL,
-                    null /* subscriberId */);
+            return new NetworkTemplate.Builder(NetworkTemplate.MATCH_WIFI).build();
         }
-        return NetworkTemplate.buildTemplateEthernet();
+        return new NetworkTemplate.Builder(NetworkTemplate.MATCH_ETHERNET).build();
     }
 
     @VisibleForTesting
diff --git a/src/com/android/settings/datausage/DataUsageSummary.java b/src/com/android/settings/datausage/DataUsageSummary.java
index a4396a2..abcc45f 100644
--- a/src/com/android/settings/datausage/DataUsageSummary.java
+++ b/src/com/android/settings/datausage/DataUsageSummary.java
@@ -183,15 +183,15 @@
     void addWifiSection() {
         TemplatePreferenceCategory category = (TemplatePreferenceCategory)
                 inflatePreferences(R.xml.data_usage_wifi);
-        category.setTemplate(
-                NetworkTemplate.buildTemplateWifi(NetworkTemplate.WIFI_NETWORKID_ALL,
-                null /* subscriberId */), 0, services);
+        category.setTemplate(new NetworkTemplate.Builder(NetworkTemplate.MATCH_WIFI).build(),
+                0, services);
     }
 
     private void addEthernetSection() {
         TemplatePreferenceCategory category = (TemplatePreferenceCategory)
                 inflatePreferences(R.xml.data_usage_ethernet);
-        category.setTemplate(NetworkTemplate.buildTemplateEthernet(), 0, services);
+        category.setTemplate(new NetworkTemplate.Builder(NetworkTemplate.MATCH_ETHERNET).build(),
+                0, services);
     }
 
     private Preference inflatePreferences(int resId) {
diff --git a/src/com/android/settings/datausage/DataUsageSummaryPreference.java b/src/com/android/settings/datausage/DataUsageSummaryPreference.java
index 260a6da..b6e533b 100644
--- a/src/com/android/settings/datausage/DataUsageSummaryPreference.java
+++ b/src/com/android/settings/datausage/DataUsageSummaryPreference.java
@@ -225,8 +225,7 @@
     static void launchWifiDataUsage(Context context) {
         final Bundle args = new Bundle(1);
         args.putParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE,
-                NetworkTemplate.buildTemplateWifi(NetworkTemplate.WIFI_NETWORKID_ALL,
-                null /* subscriberId */));
+                new NetworkTemplate.Builder(NetworkTemplate.MATCH_WIFI).build());
         args.putInt(DataUsageList.EXTRA_NETWORK_TYPE, ConnectivityManager.TYPE_WIFI);
         final SubSettingLauncher launcher = new SubSettingLauncher(context)
                 .setArguments(args)
@@ -369,8 +368,7 @@
     protected long getHistoricalUsageLevel() {
         final DataUsageController controller = new DataUsageController(getContext());
         return controller.getHistoricalUsageLevel(
-                NetworkTemplate.buildTemplateWifi(NetworkTemplate.WIFI_NETWORKID_ALL,
-                null /* subscriberId */));
+                new NetworkTemplate.Builder(NetworkTemplate.MATCH_WIFI).build());
     }
 
     @VisibleForTesting
diff --git a/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java b/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java
index ac1e1ad..1b3b47a 100644
--- a/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java
+++ b/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java
@@ -138,8 +138,7 @@
             mDefaultTemplate = DataUsageLib.getMobileTemplate(context, subscriptionId);
         } else if (DataUsageUtils.hasWifiRadio(context)) {
             mDataUsageTemplate = R.string.wifi_data_template;
-            mDefaultTemplate = NetworkTemplate.buildTemplateWifi(
-                    NetworkTemplate.WIFI_NETWORKID_ALL, null /* subscriberId */);
+            mDefaultTemplate = new NetworkTemplate.Builder(NetworkTemplate.MATCH_WIFI).build();
         } else {
             mDataUsageTemplate = R.string.ethernet_data_template;
             mDefaultTemplate = DataUsageUtils.getDefaultTemplate(context, subscriptionId);
diff --git a/src/com/android/settings/datausage/DataUsageUtils.java b/src/com/android/settings/datausage/DataUsageUtils.java
index fae53ec..5227284 100644
--- a/src/com/android/settings/datausage/DataUsageUtils.java
+++ b/src/com/android/settings/datausage/DataUsageUtils.java
@@ -184,10 +184,9 @@
         if (SubscriptionManager.isValidSubscriptionId(defaultSubId) && hasMobileData(context)) {
             return DataUsageLib.getMobileTemplate(context, defaultSubId);
         } else if (hasWifiRadio(context)) {
-            return NetworkTemplate.buildTemplateWifi(NetworkTemplate.WIFI_NETWORKID_ALL,
-                    null /* subscriberId */);
+            return new NetworkTemplate.Builder(NetworkTemplate.MATCH_WIFI).build();
         } else {
-            return NetworkTemplate.buildTemplateEthernet();
+            return new NetworkTemplate.Builder(NetworkTemplate.MATCH_ETHERNET).build();
         }
     }
 
diff --git a/src/com/android/settings/datausage/WifiDataUsageSummaryPreferenceController.java b/src/com/android/settings/datausage/WifiDataUsageSummaryPreferenceController.java
index 0551fc2..9d3054e 100644
--- a/src/com/android/settings/datausage/WifiDataUsageSummaryPreferenceController.java
+++ b/src/com/android/settings/datausage/WifiDataUsageSummaryPreferenceController.java
@@ -26,6 +26,8 @@
 import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.net.DataUsageController;
 
+import java.util.Set;
+
 /**
  * The controller displays a data usage chart for the specified Wi-Fi network.
  */
@@ -52,7 +54,8 @@
         final DataUsageSummaryPreference mPreference = (DataUsageSummaryPreference) preference;
         // TODO(b/126299427): Currently gets data usage of whole Wi-Fi networks, but should get
         //  specified one.
-        final NetworkTemplate template = NetworkTemplate.buildTemplateWifi(mNetworkId);
+        final NetworkTemplate template = new NetworkTemplate.Builder(NetworkTemplate.MATCH_WIFI)
+                .setWifiNetworkKeys(Set.of(mNetworkId)).build();
         final DataUsageController.DataUsageInfo info = mDataUsageController.getDataUsageInfo(
                 template);
         mDataInfoController.updateDataLimit(info, mPolicyEditor.getPolicy(template));
diff --git a/src/com/android/settings/datausage/lib/DataUsageLib.java b/src/com/android/settings/datausage/lib/DataUsageLib.java
index 830f1ca..9f4c78f 100644
--- a/src/com/android/settings/datausage/lib/DataUsageLib.java
+++ b/src/com/android/settings/datausage/lib/DataUsageLib.java
@@ -17,6 +17,7 @@
 package com.android.settings.datausage.lib;
 
 import android.content.Context;
+import android.net.NetworkStats;
 import android.net.NetworkTemplate;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
@@ -26,6 +27,7 @@
 import com.android.internal.util.ArrayUtils;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * Lib class for data usage
@@ -71,12 +73,17 @@
         return NetworkTemplate.normalize(mobileTemplate, mergedSubscriberIds);
     }
 
-    private static NetworkTemplate getMobileTemplateForSubId(
+    public static NetworkTemplate getMobileTemplateForSubId(
             TelephonyManager telephonyManager, int subId) {
-        // The null subscriberId means that no any mobile/carrier network will be matched.
-        // Using old API: buildTemplateMobileAll for the null subscriberId to avoid NPE.
+        // Create template that matches any mobile network when the subscriberId is null.
         String subscriberId = telephonyManager.getSubscriberId(subId);
-        return subscriberId != null ? NetworkTemplate.buildTemplateCarrierMetered(subscriberId)
-                : NetworkTemplate.buildTemplateMobileAll(subscriberId);
+        return subscriberId != null
+                ? new NetworkTemplate.Builder(NetworkTemplate.MATCH_CARRIER)
+                .setSubscriberIds(Set.of(subscriberId))
+                .setMeteredness(NetworkStats.METERED_YES)
+                .build()
+                : new NetworkTemplate.Builder(NetworkTemplate.MATCH_MOBILE)
+                        .setMeteredness(NetworkStats.METERED_YES)
+                        .build();
     }
 }
diff --git a/src/com/android/settings/network/NetworkProviderSettings.java b/src/com/android/settings/network/NetworkProviderSettings.java
index e0f8181..ea864ea 100644
--- a/src/com/android/settings/network/NetworkProviderSettings.java
+++ b/src/com/android/settings/network/NetworkProviderSettings.java
@@ -309,9 +309,8 @@
         mAddWifiNetworkPreference = new AddWifiNetworkPreference(getPrefContext());
         mDataUsagePreference = findPreference(PREF_KEY_DATA_USAGE);
         mDataUsagePreference.setVisible(DataUsageUtils.hasWifiRadio(getContext()));
-        mDataUsagePreference.setTemplate(
-                NetworkTemplate.buildTemplateWifi(NetworkTemplate.WIFI_NETWORKID_ALL,
-                null /* subscriberId */), 0 /*subId*/, null /*service*/);
+        mDataUsagePreference.setTemplate(new NetworkTemplate.Builder(NetworkTemplate.MATCH_WIFI)
+                        .build(), 0 /*subId*/, null /*service*/);
         mResetInternetPreference = findPreference(PREF_KEY_RESET_INTERNET);
         if (mResetInternetPreference != null) {
             mResetInternetPreference.setVisible(false);
diff --git a/src/com/android/settings/network/VpnPreferenceController.java b/src/com/android/settings/network/VpnPreferenceController.java
index 96931e6..d3934f6 100644
--- a/src/com/android/settings/network/VpnPreferenceController.java
+++ b/src/com/android/settings/network/VpnPreferenceController.java
@@ -50,7 +50,9 @@
 import com.android.settingslib.core.lifecycle.events.OnResume;
 import com.android.settingslib.utils.ThreadUtils;
 
+import java.util.Arrays;
 import java.util.List;
+import java.util.function.Function;
 
 public class VpnPreferenceController extends AbstractPreferenceController
         implements PreferenceControllerMixin, LifecycleObserver, OnResume, OnPause {
@@ -63,32 +65,36 @@
             .build();
     private static final String TAG = "VpnPreferenceController";
 
-    private final String mToggleable;
     private final UserManager mUserManager;
-    private final ConnectivityManager mConnectivityManager;
+    private ConnectivityManager mConnectivityManager;
     private final VpnManager mVpnManager;
     private Preference mPreference;
 
     public VpnPreferenceController(Context context) {
         super(context);
-        mToggleable = Settings.Global.getString(context.getContentResolver(),
-                Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
         mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
-        mConnectivityManager =
-                (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
         mVpnManager = context.getSystemService(VpnManager.class);
     }
 
     @Override
     public void displayPreference(PreferenceScreen screen) {
         super.displayPreference(screen);
-        mPreference = screen.findPreference(KEY_VPN_SETTINGS);
-        // Manually set dependencies for Wifi when not toggleable.
-        if (mToggleable == null || !mToggleable.contains(Settings.Global.RADIO_WIFI)) {
-            if (mPreference != null) {
-                mPreference.setDependency(SettingsSlicesContract.KEY_AIRPLANE_MODE);
-            }
+        mPreference = getEffectivePreference(screen);
+    }
+
+    @VisibleForTesting
+    protected Preference getEffectivePreference(PreferenceScreen screen) {
+        Preference preference = screen.findPreference(KEY_VPN_SETTINGS);
+        if (preference == null) {
+            return null;
         }
+        String toggleable = Settings.Global.getString(mContext.getContentResolver(),
+                Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
+        // Manually set dependencies for Wifi when not toggleable.
+        if (toggleable == null || !toggleable.contains(Settings.Global.RADIO_WIFI)) {
+            preference.setDependency(SettingsSlicesContract.KEY_AIRPLANE_MODE);
+        }
+        return preference;
     }
 
     @Override
@@ -104,15 +110,19 @@
 
     @Override
     public void onPause() {
-        if (isAvailable()) {
+        if (mConnectivityManager != null) {
             mConnectivityManager.unregisterNetworkCallback(mNetworkCallback);
+            mConnectivityManager = null;
         }
     }
 
     @Override
     public void onResume() {
         if (isAvailable()) {
+            mConnectivityManager = mContext.getSystemService(ConnectivityManager.class);
             mConnectivityManager.registerNetworkCallback(REQUEST, mNetworkCallback);
+        } else {
+            mConnectivityManager = null;
         }
     }
 
@@ -203,17 +213,13 @@
 
     @VisibleForTesting
     protected int getInsecureVpnCount() {
-        int count = 0;
-        for (String key : LegacyVpnProfileStore.list(Credentials.VPN)) {
-            final VpnProfile profile = VpnProfile.decode(key,
-                    LegacyVpnProfileStore.get(Credentials.VPN + key));
-            // Return whether any profile is an insecure type.
-            if (VpnProfile.isLegacyType(profile.type)) {
-                count++;
-            }
-        }
-        // We did not find any insecure VPNs.
-        return count;
+        final Function<String, VpnProfile> keyToProfile = key ->
+                VpnProfile.decode(key, LegacyVpnProfileStore.get(Credentials.VPN + key));
+        return (int) Arrays.stream(LegacyVpnProfileStore.list(Credentials.VPN))
+                .map(keyToProfile)
+                // Return whether any profile is an insecure type.
+                .filter(profile -> VpnProfile.isLegacyType(profile.type))
+                .count();
     }
 
     // Copied from SystemUI::SecurityControllerImpl
diff --git a/src/com/android/settings/security/SecurityAdvancedSettings.java b/src/com/android/settings/security/SecurityAdvancedSettings.java
index 7d8c9ff..4a73eb7 100644
--- a/src/com/android/settings/security/SecurityAdvancedSettings.java
+++ b/src/com/android/settings/security/SecurityAdvancedSettings.java
@@ -25,6 +25,8 @@
 import com.android.settings.biometrics.face.FaceProfileStatusPreferenceController;
 import com.android.settings.biometrics.fingerprint.FingerprintProfileStatusPreferenceController;
 import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.safetycenter.SafetyCenterStatus;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.security.trustagent.TrustAgentListPreferenceController;
 import com.android.settings.widget.PreferenceCategoryController;
@@ -47,6 +49,10 @@
     private static final String TAG = "SecurityAdvancedSettings";
     private static final String WORK_PROFILE_SECURITY_CATEGORY = "security_category_profile";
 
+    /** Used in case of old Security settings when SafetyCenter is disabled */
+    private static final String CATEGORY_SECURITY_LEGACY_ADVANCED_SETTINGS =
+            "com.android.settings.category.ia.legacy_advanced_security";
+
     @Override
     public int getMetricsCategory() {
         return SettingsEnums.SECURITY_ADVANCED;
@@ -54,7 +60,19 @@
 
     @Override
     public String getCategoryKey() {
-        return CategoryKey.CATEGORY_SECURITY_ADVANCED_SETTINGS;
+        if (SafetyCenterStatus.isEnabled()) {
+            return CategoryKey.CATEGORY_SECURITY_ADVANCED_SETTINGS;
+        } else {
+            final SecuritySettingsFeatureProvider securitySettingsFeatureProvider =
+                    FeatureFactory.getFactory(getContext())
+                            .getSecuritySettingsFeatureProvider();
+
+            if (securitySettingsFeatureProvider.hasAlternativeSecuritySettingsFragment()) {
+                return securitySettingsFeatureProvider.getAlternativeAdvancedSettingsCategoryKey();
+            } else {
+                return CATEGORY_SECURITY_LEGACY_ADVANCED_SETTINGS;
+            }
+        }
     }
 
     @Override
diff --git a/src/com/android/settings/security/SecuritySettingsFeatureProvider.java b/src/com/android/settings/security/SecuritySettingsFeatureProvider.java
index 78e4bc7..128ec01 100644
--- a/src/com/android/settings/security/SecuritySettingsFeatureProvider.java
+++ b/src/com/android/settings/security/SecuritySettingsFeatureProvider.java
@@ -24,4 +24,10 @@
 
     /** Returns the alternative SecuritySettings fragment name if available. */
     String getAlternativeSecuritySettingsFragmentClassname();
+
+    /**
+     * Returns the category of SecurityAdvancedSettings fragment for the alternative
+     * SecuritySettings if available.
+     */
+    String getAlternativeAdvancedSettingsCategoryKey();
 }
diff --git a/src/com/android/settings/security/SecuritySettingsFeatureProviderImpl.java b/src/com/android/settings/security/SecuritySettingsFeatureProviderImpl.java
index 8aba523..e4f540c 100644
--- a/src/com/android/settings/security/SecuritySettingsFeatureProviderImpl.java
+++ b/src/com/android/settings/security/SecuritySettingsFeatureProviderImpl.java
@@ -28,4 +28,9 @@
     public String getAlternativeSecuritySettingsFragmentClassname() {
         return null;
     }
+
+    @Override
+    public String getAlternativeAdvancedSettingsCategoryKey() {
+        return null;
+    }
 }
diff --git a/src/com/android/settings/security/VisiblePatternProfilePreferenceController.java b/src/com/android/settings/security/VisiblePatternProfilePreferenceController.java
index 9e82e78..4d65ae7 100644
--- a/src/com/android/settings/security/VisiblePatternProfilePreferenceController.java
+++ b/src/com/android/settings/security/VisiblePatternProfilePreferenceController.java
@@ -126,6 +126,8 @@
 
     @Override
     public void onResume() {
-        mPreference.setVisible(isAvailable());
+        if (mPreference != null) {
+            mPreference.setVisible(isAvailable());
+        }
     }
 }
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index b779a72..bbddd98 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -270,9 +270,8 @@
         mStatusMessagePreference = findPreference(PREF_KEY_STATUS_MESSAGE);
         mDataUsagePreference = findPreference(PREF_KEY_DATA_USAGE);
         mDataUsagePreference.setVisible(DataUsageUtils.hasWifiRadio(getContext()));
-        mDataUsagePreference.setTemplate(
-                NetworkTemplate.buildTemplateWifi(NetworkTemplate.WIFI_NETWORKID_ALL,
-                null /* subscriberId */), 0 /*subId*/, null /*service*/);
+        mDataUsagePreference.setTemplate(new NetworkTemplate.Builder(
+                NetworkTemplate.MATCH_WIFI).build(), 0 /*subId*/, null /*service*/);
     }
 
     @Override
diff --git a/tests/robotests/src/com/android/settings/accessibility/RingVibrationIntensityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/RingVibrationIntensityPreferenceControllerTest.java
index 0eaf008..bd2206f 100644
--- a/tests/robotests/src/com/android/settings/accessibility/RingVibrationIntensityPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/RingVibrationIntensityPreferenceControllerTest.java
@@ -20,10 +20,12 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.spy;
 
 import android.content.Context;
+import android.os.VibrationAttributes;
 import android.os.Vibrator;
 
 import androidx.test.core.app.ApplicationProvider;
@@ -59,7 +61,8 @@
 
     @Test
     public void getDefaultIntensity_success() {
-        doReturn(/* toBeReturned= */ 5).when(mVibrator).getDefaultRingVibrationIntensity();
+        doReturn(/* toBeReturned= */ 5).when(mVibrator).getDefaultVibrationIntensity(
+                eq(VibrationAttributes.USAGE_RINGTONE));
 
         assertThat(mController.getDefaultIntensity()).isEqualTo(/* expected= */ 5);
     }
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsCompanionAppsControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsCompanionAppsControllerTest.java
index 0f7bf20..3fa306f 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsCompanionAppsControllerTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsCompanionAppsControllerTest.java
@@ -109,7 +109,8 @@
                 /* deviceProfile */ "",
                 /* selfManaged */ false,
                 /* notifyOnDeviceNearby */ true,
-                /* timeApprovedMs */ System.currentTimeMillis());
+                /* timeApprovedMs */ System.currentTimeMillis(),
+                /* lastTimeConnected */ Long.MAX_VALUE);
 
         mAssociations.add(association);
         showScreen(mController);
diff --git a/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java b/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java
index f75b7f0..c0cdb01 100644
--- a/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java
@@ -310,8 +310,7 @@
         ReflectionHelpers.setField(mFragment, "mContext", context);
         ReflectionHelpers.setField(mFragment, "mAppItem", appItem);
         ReflectionHelpers.setField(mFragment, "mTemplate",
-                NetworkTemplate.buildTemplateWifi(NetworkTemplate.WIFI_NETWORKID_ALL,
-                null /* subscriberId */));
+                new NetworkTemplate.Builder(NetworkTemplate.MATCH_WIFI).build());
         final long end = System.currentTimeMillis();
         final long start = end - (DateUtils.WEEK_IN_MILLIS * 4);
 
@@ -336,8 +335,7 @@
         ReflectionHelpers.setField(mFragment, "mContext", context);
         ReflectionHelpers.setField(mFragment, "mAppItem", appItem);
         ReflectionHelpers.setField(mFragment, "mTemplate",
-                NetworkTemplate.buildTemplateWifi(NetworkTemplate.WIFI_NETWORKID_ALL,
-                null /* subscriberId */));
+                new NetworkTemplate.Builder(NetworkTemplate.MATCH_WIFI).build());
         final long end = System.currentTimeMillis();
         final long start = end - (DateUtils.WEEK_IN_MILLIS * 4);
 
@@ -368,8 +366,7 @@
         ReflectionHelpers.setField(mFragment, "mCycles", testCycles);
         ReflectionHelpers.setField(mFragment, "mAppItem", appItem);
         ReflectionHelpers.setField(mFragment, "mTemplate",
-                NetworkTemplate.buildTemplateWifi(NetworkTemplate.WIFI_NETWORKID_ALL,
-                null /* subscriberId */));
+                new NetworkTemplate.Builder(NetworkTemplate.MATCH_WIFI).build());
 
         final NetworkCycleDataForUidLoader loader = (NetworkCycleDataForUidLoader)
                 mFragment.mUidDataCallbacks.onCreateLoader(0 /* id */, Bundle.EMPTY /* args */);
diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsagePreferenceTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsagePreferenceTest.java
index ff8ef93..02f683a 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataUsagePreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataUsagePreferenceTest.java
@@ -24,6 +24,7 @@
 
 import android.content.Context;
 import android.content.Intent;
+import android.net.NetworkStats;
 import android.net.NetworkTemplate;
 
 import com.android.settingslib.net.DataUsageController;
@@ -58,8 +59,9 @@
     public void setTemplate_noDataUsage_shouldDisablePreference() {
         doReturn(0L).when(mController).getHistoricalUsageLevel(any(NetworkTemplate.class));
 
-        mPreference.setTemplate(
-                NetworkTemplate.buildTemplateMobileWildcard(), 5 /* subId */, null /* services */);
+        mPreference.setTemplate(new NetworkTemplate.Builder(NetworkTemplate.MATCH_MOBILE)
+                .setMeteredness(NetworkStats.METERED_YES).build(),
+                5 /* subId */, null /* services */);
 
         verify(mPreference).setEnabled(false);
         verify(mPreference).setIntent(null);
@@ -69,8 +71,9 @@
     public void setTemplate_hasDataUsage_shouldNotDisablePreference() {
         doReturn(200L).when(mController).getHistoricalUsageLevel(any(NetworkTemplate.class));
 
-        mPreference.setTemplate(
-                NetworkTemplate.buildTemplateMobileWildcard(), 5 /* subId */, null /* services */);
+        mPreference.setTemplate(new NetworkTemplate.Builder(NetworkTemplate.MATCH_MOBILE)
+                .setMeteredness(NetworkStats.METERED_YES).build(),
+                5 /* subId */, null /* services */);
 
         verify(mPreference, never()).setEnabled(false);
         verify(mPreference).setIntent(any(Intent.class));
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiConfigController2Test.java b/tests/robotests/src/com/android/settings/wifi/WifiConfigController2Test.java
index ff0d7b2..5d568fe 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiConfigController2Test.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiConfigController2Test.java
@@ -19,8 +19,7 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.nullable;
-import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
@@ -36,7 +35,6 @@
 import android.net.wifi.WifiEnterpriseConfig.Eap;
 import android.net.wifi.WifiEnterpriseConfig.Phase2;
 import android.net.wifi.WifiManager;
-import android.os.UserHandle;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
@@ -86,6 +84,8 @@
     private WifiEntry mWifiEntry;
     @Mock
     private AndroidKeystoreAliasLoader mAndroidKeystoreAliasLoader;
+    @Mock
+    private WifiManager mWifiManager;
     private View mView;
     private Spinner mHiddenSettingsSpinner;
     private Spinner mEapCaCertSpinner;
@@ -127,6 +127,7 @@
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application);
+        when(mContext.getSystemService(eq(WifiManager.class))).thenReturn(mWifiManager);
         when(mConfigUiBase.getContext()).thenReturn(mContext);
         when(mWifiEntry.getSecurity()).thenReturn(WifiEntry.SECURITY_PSK);
         mView = LayoutInflater.from(mContext).inflate(R.layout.wifi_dialog, null);
@@ -420,7 +421,7 @@
 
         private TestWifiConfigController2(
                 WifiConfigUiBase2 parent, View view, WifiEntry wifiEntry, int mode) {
-            super(parent, view, wifiEntry, mode);
+            super(parent, view, wifiEntry, mode, mWifiManager);
         }
 
         private TestWifiConfigController2(
diff --git a/tests/unit/src/com/android/settings/datausage/DataUsageInfoControllerTest.java b/tests/unit/src/com/android/settings/datausage/DataUsageInfoControllerTest.java
index d770aba..b80e9d2 100644
--- a/tests/unit/src/com/android/settings/datausage/DataUsageInfoControllerTest.java
+++ b/tests/unit/src/com/android/settings/datausage/DataUsageInfoControllerTest.java
@@ -101,8 +101,7 @@
     }
 
     private NetworkPolicy getDefaultNetworkPolicy() {
-        NetworkTemplate template = NetworkTemplate.buildTemplateWifi(
-                NetworkTemplate.WIFI_NETWORKID_ALL, null /* subscriberId */);
+        NetworkTemplate template = new NetworkTemplate.Builder(NetworkTemplate.MATCH_WIFI).build();
         int cycleDay  = -1;
         String cycleTimezone = "UTC";
         long warningBytes = -1;
diff --git a/tests/unit/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java b/tests/unit/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java
index 7d814b5..b27591e 100644
--- a/tests/unit/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java
+++ b/tests/unit/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java
@@ -531,13 +531,11 @@
 
         final Bundle expect = new Bundle(1);
         expect.putParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE,
-                NetworkTemplate.buildTemplateWifi(NetworkTemplate.WIFI_NETWORKID_ALL,
-                null /* subscriberId */));
+                new NetworkTemplate.Builder(NetworkTemplate.MATCH_WIFI).build());
         final Bundle actual = startedIntent
                 .getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS);
         assertThat((NetworkTemplate) actual.getParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE))
-                .isEqualTo(NetworkTemplate.buildTemplateWifi(
-                NetworkTemplate.WIFI_NETWORKID_ALL, null /* subscriberId */));
+                .isEqualTo(new NetworkTemplate.Builder(NetworkTemplate.MATCH_WIFI).build());
 
         assertThat(startedIntent.getIntExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID, 0))
                 .isEqualTo(ResourcesUtils.getResourcesId(mContext, "string", "wifi_data_usage"));
diff --git a/tests/unit/src/com/android/settings/security/SecurityAdvancedSettingsTest.java b/tests/unit/src/com/android/settings/security/SecurityAdvancedSettingsTest.java
index 6e30bbb..e18b258 100644
--- a/tests/unit/src/com/android/settings/security/SecurityAdvancedSettingsTest.java
+++ b/tests/unit/src/com/android/settings/security/SecurityAdvancedSettingsTest.java
@@ -18,13 +18,18 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.Mockito.when;
+
 import android.content.Context;
 import android.os.Looper;
+import android.provider.DeviceConfig;
 
 import androidx.test.annotation.UiThreadTest;
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 
+import com.android.settings.safetycenter.SafetyCenterStatus;
+import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.ResourcesUtils;
 import com.android.settingslib.drawer.CategoryKey;
 
@@ -35,6 +40,9 @@
 @RunWith(AndroidJUnit4.class)
 public class SecurityAdvancedSettingsTest {
     private static final String SCREEN_XML_RESOURCE_NAME = "security_advanced_settings";
+    private static final String ALTERNATIVE_CATEGORY_KEY = "alternative_category_key";
+    private static final String LEGACY_CATEGORY_KEY =
+            "com.android.settings.category.ia.legacy_advanced_security";
 
     private Context mContext;
     private SecurityAdvancedSettings mSecurityAdvancedSettings;
@@ -58,12 +66,51 @@
     }
 
     @Test
-    public void getCategoryKey_whenCalled_returnsSecurity() {
+    public void getCategoryKey_whenSafetyCenterIsEnabled_returnsSecurity() {
+        setSafetyCenterEnabled(true);
+
         assertThat(mSecurityAdvancedSettings.getCategoryKey())
                 .isEqualTo(CategoryKey.CATEGORY_SECURITY_ADVANCED_SETTINGS);
     }
 
+    @Test
+    public void getCategoryKey_whenAlternativeFragmentPresented_returnsAlternative() {
+        setSafetyCenterEnabled(false);
+        setupAlternativeFragment(true, ALTERNATIVE_CATEGORY_KEY);
+
+        assertThat(mSecurityAdvancedSettings.getCategoryKey())
+                .isEqualTo(ALTERNATIVE_CATEGORY_KEY);
+    }
+
+    @Test
+    public void getCategoryKey_whenNoAlternativeFragmentPresented_returnsLegacy() {
+        setSafetyCenterEnabled(false);
+        setupAlternativeFragment(false, null);
+
+        assertThat(mSecurityAdvancedSettings.getCategoryKey())
+                .isEqualTo(LEGACY_CATEGORY_KEY);
+    }
+
     private int getXmlResId(String resName) {
         return ResourcesUtils.getResourcesId(mContext, "xml", resName);
     }
+
+    private void setSafetyCenterEnabled(boolean isEnabled) {
+        DeviceConfig.setProperty(
+                DeviceConfig.NAMESPACE_PRIVACY,
+                SafetyCenterStatus.SAFETY_CENTER_IS_ENABLED,
+                /* value = */ Boolean.toString(isEnabled),
+                /* makeDefault = */ false);
+    }
+
+    private void setupAlternativeFragment(boolean hasAlternativeFragment,
+            String alternativeCategoryKey) {
+        final FakeFeatureFactory fakeFeatureFactory = FakeFeatureFactory.setupForTest();
+        when(fakeFeatureFactory.securitySettingsFeatureProvider
+                .hasAlternativeSecuritySettingsFragment())
+                .thenReturn(hasAlternativeFragment);
+        when(fakeFeatureFactory.securitySettingsFeatureProvider
+                .getAlternativeAdvancedSettingsCategoryKey())
+                .thenReturn(alternativeCategoryKey);
+    }
 }