Merge "Refactor FingerprintEnrollEnrolling to fragment" into udc-dev
diff --git a/res-product/values/config.xml b/res-product/values/config.xml
new file mode 100755
index 0000000..39fbdff
--- /dev/null
+++ b/res-product/values/config.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2023 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- The illustration for those screen are not in one of below type. This file should be a video in JSON format. -->
+    <item name="a11y_timeout_banner" type="raw" product="default">@raw/accessibility_timeout_banner</item>
+    <item name="a11y_timeout_banner" type="raw" product="tablet">@raw/accessibility_timeout_banner_tablet</item>
+
+    <item name="a11y_shortcut_type_triple_tap" type="raw" product="default">@raw/accessibility_shortcut_type_triple_tap</item>
+    <item name="a11y_shortcut_type_triple_tap" type="raw" product="tablet">@raw/accessibility_shortcut_type_triple_tap_tablet</item>
+
+    <item name="a11y_color_inversion_banner" type="raw" product="default">@raw/accessibility_color_inversion_banner</item>
+    <item name="a11y_color_inversion_banner" type="raw" product="tablet">@raw/accessibility_color_inversion_banner_tablet</item>
+
+    <item name="a11y_magnification_banner" type="raw" product="default">@raw/accessibility_magnification_banner</item>
+    <item name="a11y_magnification_banner" type="raw" product="tablet">@raw/accessibility_magnification_banner_tablet</item>
+
+    <item name="a11y_extra_dim_banner" type="raw" product="default">@raw/extra_dim_banner</item>
+    <item name="a11y_extra_dim_banner" type="raw" product="tablet">@raw/extra_dim_banner_tablet</item>
+</resources>
diff --git a/res/values/drawables.xml b/res-product/values/drawables.xml
similarity index 100%
rename from res/values/drawables.xml
rename to res-product/values/drawables.xml
diff --git a/res/values/config.xml b/res/values/config.xml
index e27f257..07f6432 100755
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -695,20 +695,4 @@
 
     <!-- Whether auto data switching on secondary SIM enables cross-SIM calling on both SIMs. -->
     <bool name="config_auto_data_switch_enables_cross_sim_calling">false</bool>
-
-    <!-- The illustration for those screen are not in one of below type. This file should be a video in JSON format. -->
-    <item name="a11y_timeout_banner" type="raw" product="default">@raw/accessibility_timeout_banner</item>
-    <item name="a11y_timeout_banner" type="raw" product="tablet">@raw/accessibility_timeout_banner_tablet</item>
-
-    <item name="a11y_shortcut_type_triple_tap" type="raw" product="default">@raw/accessibility_shortcut_type_triple_tap</item>
-    <item name="a11y_shortcut_type_triple_tap" type="raw" product="tablet">@raw/accessibility_shortcut_type_triple_tap_tablet</item>
-
-    <item name="a11y_color_inversion_banner" type="raw" product="default">@raw/accessibility_color_inversion_banner</item>
-    <item name="a11y_color_inversion_banner" type="raw" product="tablet">@raw/accessibility_color_inversion_banner_tablet</item>
-
-    <item name="a11y_magnification_banner" type="raw" product="default">@raw/accessibility_magnification_banner</item>
-    <item name="a11y_magnification_banner" type="raw" product="tablet">@raw/accessibility_magnification_banner_tablet</item>
-
-    <item name="a11y_extra_dim_banner" type="raw" product="default">@raw/extra_dim_banner</item>
-    <item name="a11y_extra_dim_banner" type="raw" product="tablet">@raw/extra_dim_banner_tablet</item>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index bd02186..3efb218 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -382,13 +382,13 @@
     <!-- The subtitle of option's page of regional preferences for Temperature units, Calendar and First day of week. [CHAR LIMIT=NONE] -->
     <string name="regional_preferences_option_page_sub_title">Apps will use your regional preferences where possible.</string>
     <!-- The title of menu entry of Temperature unit preference. [CHAR LIMIT=50] -->
-    <string name="temperature_preferences_title">Temperature units</string>
+    <string name="temperature_preferences_title">Temperature</string>
     <!-- The title of the  menu entry of Calendar type preference. [CHAR LIMIT=50]  -->
     <string name="calendar_preferences_title">Calendar</string>
     <!-- The title of the  menu entry of First day of week preference. [CHAR LIMIT=50]  -->
     <string name="first_day_of_week_preferences_title">First day of week</string>
     <!-- The title of the menu entry of Numbers system preference. [CHAR LIMIT=50]  -->
-    <string name="numbers_preferences_title">Numbers</string>
+    <string name="numbers_preferences_title">Numbers preferences</string>
     <!-- The summary of default string for each regional preference. [CHAR LIMIT=50] -->
     <string name="default_string_of_regional_preference">Use app default</string>
     <!-- The title of Celsius for preference of temperature unit. [CHAR LIMIT=50] -->
diff --git a/src/com/android/settings/datausage/BillingCycleSettings.java b/src/com/android/settings/datausage/BillingCycleSettings.java
index 395d1c7..3047d73 100644
--- a/src/com/android/settings/datausage/BillingCycleSettings.java
+++ b/src/com/android/settings/datausage/BillingCycleSettings.java
@@ -27,6 +27,7 @@
 import android.net.NetworkPolicy;
 import android.net.NetworkTemplate;
 import android.os.Bundle;
+import android.provider.Settings;
 import android.text.method.NumberKeyListener;
 import android.util.Log;
 import android.view.LayoutInflater;
@@ -54,6 +55,7 @@
 
 import java.text.NumberFormat;
 import java.text.ParseException;
+import java.util.Optional;
 import java.util.TimeZone;
 
 @SearchIndexable
@@ -115,6 +117,18 @@
 
         Bundle args = getArguments();
         mNetworkTemplate = args.getParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE);
+        if (mNetworkTemplate == null && getIntent() != null) {
+            mNetworkTemplate = getIntent().getParcelableExtra(Settings.EXTRA_NETWORK_TEMPLATE);
+        }
+
+        if (mNetworkTemplate == null) {
+            Optional<NetworkTemplate> mobileNetworkTemplateFromSim =
+                    DataUsageUtils.getMobileNetworkTemplateFromSubId(context, getIntent());
+            if (mobileNetworkTemplateFromSim.isPresent()) {
+                mNetworkTemplate = mobileNetworkTemplateFromSim.get();
+            }
+        }
+
         if (mNetworkTemplate == null) {
             mNetworkTemplate = DataUsageUtils.getDefaultTemplate(context,
                 DataUsageUtils.getDefaultSubscriptionId(context));
diff --git a/src/com/android/settings/datausage/DataUsageList.java b/src/com/android/settings/datausage/DataUsageList.java
index 1499ded..68751e5 100644
--- a/src/com/android/settings/datausage/DataUsageList.java
+++ b/src/com/android/settings/datausage/DataUsageList.java
@@ -69,6 +69,7 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Optional;
 
 /**
  * Panel showing data usage history across various networks, including options
@@ -266,6 +267,14 @@
             mSubId = intent.getIntExtra(Settings.EXTRA_SUB_ID,
                     SubscriptionManager.INVALID_SUBSCRIPTION_ID);
             mTemplate = intent.getParcelableExtra(Settings.EXTRA_NETWORK_TEMPLATE);
+
+            if (mTemplate == null) {
+                Optional<NetworkTemplate> mobileNetworkTemplateFromSim =
+                        DataUsageUtils.getMobileNetworkTemplateFromSubId(getContext(), getIntent());
+                if (mobileNetworkTemplateFromSim.isPresent()) {
+                    mTemplate = mobileNetworkTemplateFromSim.get();
+                }
+            }
         }
     }
 
diff --git a/src/com/android/settings/datausage/DataUsageUtils.java b/src/com/android/settings/datausage/DataUsageUtils.java
index 9fec27e..cce7ca1 100644
--- a/src/com/android/settings/datausage/DataUsageUtils.java
+++ b/src/com/android/settings/datausage/DataUsageUtils.java
@@ -22,11 +22,13 @@
 import android.app.usage.NetworkStats.Bucket;
 import android.app.usage.NetworkStatsManager;
 import android.content.Context;
+import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.net.ConnectivityManager;
 import android.net.NetworkTemplate;
 import android.os.RemoteException;
 import android.os.SystemProperties;
+import android.provider.Settings;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
@@ -39,6 +41,7 @@
 import com.android.settings.network.ProxySubscriptionManager;
 
 import java.util.List;
+import java.util.Optional;
 
 /**
  * Utility methods for data usage classes.
@@ -193,4 +196,22 @@
         }
     }
 
+    /**
+     * Returns a mobile NetworkTemplate if EXTRA_SUB_ID of the Intent is available and the subId
+     * is valid & hasMobileData. Otherwise, returns empty data.
+     */
+    public static Optional<NetworkTemplate> getMobileNetworkTemplateFromSubId(Context context,
+            Intent intent) {
+        if (intent == null || !intent.hasExtra(Settings.EXTRA_SUB_ID)) {
+            return Optional.empty();
+        }
+
+        int subId = intent.getIntExtra(Settings.EXTRA_SUB_ID,
+                SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+        if (SubscriptionManager.isValidSubscriptionId(subId) && hasMobileData(context)) {
+            return Optional.of(DataUsageLib.getMobileTemplate(context, subId));
+        }
+
+        return  Optional.empty();
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
index 695e86b..16d1483 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
@@ -56,9 +56,11 @@
 import com.android.internal.content.PackageMonitor;
 import com.android.settings.R;
 import com.android.settings.testutils.XmlTestUtils;
+import com.android.settings.testutils.shadow.ShadowBluetoothUtils;
 import com.android.settings.testutils.shadow.ShadowFragment;
 import com.android.settings.testutils.shadow.ShadowUserManager;
 import com.android.settingslib.RestrictedPreference;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.search.SearchIndexableRaw;
 
@@ -85,6 +87,7 @@
 
 /** Test for {@link AccessibilitySettings}. */
 @RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowBluetoothUtils.class})
 public class AccessibilitySettingsTest {
     private static final String PACKAGE_NAME = "com.android.test";
     private static final String CLASS_NAME = PACKAGE_NAME + ".test_a11y_service";
@@ -116,6 +119,8 @@
     private ShadowAccessibilityManager mShadowAccessibilityManager;
     @Mock
     private AppOpsManager mAppOpsManager;
+    @Mock
+    private LocalBluetoothManager mLocalBluetoothManager;
 
     private Lifecycle mLifecycle;
 
@@ -134,6 +139,7 @@
                 anyInt(), anyString())).thenReturn(AppOpsManager.MODE_ALLOWED);
         mLifecycle = new Lifecycle(() -> mLifecycle);
         when(mFragment.getSettingsLifecycle()).thenReturn(mLifecycle);
+        ShadowBluetoothUtils.sLocalBluetoothManager = mLocalBluetoothManager;
     }
 
     @Test