Encoding the locale list in systemState so that icons and labels are updated properly

Bug: 70948387
Change-Id: Ia6348ff8c3e035b9d91bb14fb98c751f3f29ab89
diff --git a/src/com/android/launcher3/IconCache.java b/src/com/android/launcher3/IconCache.java
index a5ca3ee..957a5e5 100644
--- a/src/com/android/launcher3/IconCache.java
+++ b/src/com/android/launcher3/IconCache.java
@@ -118,8 +118,7 @@
         mIconDpi = inv.fillResIconDpi;
         mIconDb = new IconDB(context, inv.iconBitmapSize);
 
-        mIconProvider = Utilities.getOverrideObject(
-                IconProvider.class, context, R.string.icon_provider_class);
+        mIconProvider = IconProvider.newInstance(context);
         mWorkerHandler = new Handler(LauncherModel.getWorkerLooper());
 
         mLowResOptions = new BitmapFactory.Options();
@@ -254,7 +253,7 @@
         // Remove all active icon update tasks.
         mWorkerHandler.removeCallbacksAndMessages(ICON_UPDATE_TOKEN);
 
-        mIconProvider.updateSystemStateString();
+        mIconProvider.updateSystemStateString(mContext);
         for (UserHandle user : mUserManager.getUserProfiles()) {
             // Query for the set of apps
             final List<LauncherActivityInfo> apps = mLauncherApps.getActivityList(null, user);
diff --git a/src/com/android/launcher3/IconProvider.java b/src/com/android/launcher3/IconProvider.java
index 4dee2b5..b469a8f 100644
--- a/src/com/android/launcher3/IconProvider.java
+++ b/src/com/android/launcher3/IconProvider.java
@@ -1,5 +1,6 @@
 package com.android.launcher3;
 
+import android.content.Context;
 import android.content.pm.LauncherActivityInfo;
 import android.graphics.drawable.Drawable;
 import android.os.Build;
@@ -8,17 +9,26 @@
 
 public class IconProvider {
 
-    private static final boolean DBG = false;
-    private static final String TAG = "IconProvider";
-
     protected String mSystemState;
 
-    public IconProvider() {
-        updateSystemStateString();
+    public static IconProvider newInstance(Context context) {
+        IconProvider provider = Utilities.getOverrideObject(
+                IconProvider.class, context, R.string.icon_provider_class);
+        provider.updateSystemStateString(context);
+        return provider;
     }
 
-    public void updateSystemStateString() {
-        mSystemState = Locale.getDefault().toString() + "," + Build.VERSION.SDK_INT;
+    public IconProvider() { }
+
+    public void updateSystemStateString(Context context) {
+        final String locale;
+        if (Utilities.ATLEAST_NOUGAT) {
+            locale = context.getResources().getConfiguration().getLocales().toLanguageTags();
+        } else {
+            locale = Locale.getDefault().toString();
+        }
+
+        mSystemState = locale + "," + Build.VERSION.SDK_INT;
     }
 
     public String getIconSystemState(String packageName) {