Fix incorrect focus position when setting the language

After selecting the language in the radio button, the ui will be refreshed.
When onResume is called, the language list data is not prepared yet, so
focus is on the first row. This patch refresh focus position after
createPreferences if onResume is called already.

Bug: b/361213178

Test: All settings > System > Language, select languages in the radio button
Change-Id: I6ed99904047395e492aca789860a1004e0d3e13e
diff --git a/Settings/src/com/android/tv/settings/system/locale/LanguagePickerFragment.java b/Settings/src/com/android/tv/settings/system/locale/LanguagePickerFragment.java
index 817fa69..45f4982 100644
--- a/Settings/src/com/android/tv/settings/system/locale/LanguagePickerFragment.java
+++ b/Settings/src/com/android/tv/settings/system/locale/LanguagePickerFragment.java
@@ -59,6 +59,7 @@
     static final String KEY_LOCALE_INFO = "locale_info";
     private final Handler mHandler = new Handler(Looper.getMainLooper());
     private boolean mProgressBarHidden;
+    private boolean mNeedRefreshFocus;
 
     public static LanguagePickerFragment newInstance() {
         return new LanguagePickerFragment();
@@ -77,6 +78,7 @@
             loadLocales(applicationContext, mainThreadRunnable);
         });
         setPreferenceScreen(screen);
+        mNeedRefreshFocus = false;
     }
 
     @Override
@@ -163,6 +165,7 @@
                 preference.getExtras().putSerializable(KEY_LOCALE_INFO, localeInfo);
             }
         }
+        ifNeededScrollToPreference();
     }
 
     private static boolean containsSuggestedLocale(Set<LocaleStore.LocaleInfo> localeInfos,
@@ -173,9 +176,13 @@
                         suggestedLocaleInfo.getLocale().getScript()));
     }
 
-    @Override
-    public void onResume() {
-        super.onResume();
+    private void ifNeededScrollToPreference() {
+        if (!mNeedRefreshFocus) {
+            if (DEBUG) {
+                Log.d(TAG, "ifNeededScrollToPreference, do nothing!");
+            }
+            return;
+        }
         Locale currentLocale = LocaleDataViewModel.getCurrentLocale();
         for (int i = 0; i < getPreferenceScreen().getPreferenceCount(); i++) {
             Preference pref = getPreferenceScreen().getPreference(i);
@@ -188,12 +195,20 @@
                     if (DEBUG) {
                         Log.d(TAG, "Scroll to active locale: " + locale);
                     }
+                    mNeedRefreshFocus = false;
                     mHandler.post(() -> scrollToPreference(pref));
                 }
             }
     }
 
     @Override
+    public void onResume() {
+        super.onResume();
+        mNeedRefreshFocus = true;
+        ifNeededScrollToPreference();
+    }
+
+    @Override
     public boolean onPreferenceTreeClick(Preference preference) {
         if (DEBUG) {
             Log.d(TAG, "Preference clicked: " + preference.getTitle());