Fix issue "open battery settings, switch locale, apps are still in old locale" into pi-dev

Clear uid to package detail cache by checking locale before use.

Fixes: 62422871
Test: RunSettingsRoboTest pass,
manual test
(1) open advance battery settings page,
(2) switch locale,
(3) back to advance battery settings page  => pass
manual test
(1) open advance battery settings page, and then back to settings main page
(2) switch locale,
(3) go to advance battery settings page  => pass

Change-Id: Ifac830706539022cd9bf51d3f33e728aadc163f4
This commit is contained in:
WenHung_Teng
2018-03-22 16:23:21 +08:00
parent baea1c87f5
commit 8e14da1d30
2 changed files with 25 additions and 0 deletions

View File

@@ -38,6 +38,7 @@ import com.android.settingslib.Utils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Locale;
/**
* Wraps the power usage data of a BatterySipper with information about package name
@@ -55,6 +56,8 @@ public class BatteryEntry {
static final ArrayList<BatteryEntry> mRequestQueue = new ArrayList<BatteryEntry>();
static Handler sHandler;
static Locale sCurrentLocale = null;
static private class NameAndIconLoader extends Thread {
private boolean mAbort = false;
@@ -227,6 +230,13 @@ public class BatteryEntry {
}
void getQuickNameIconForUid(final int uid) {
// Locale sync to system config in Settings
final Locale locale = Locale.getDefault();
if (sCurrentLocale != locale) {
clearUidCache();
sCurrentLocale = locale;
}
final String uidString = Integer.toString(uid);
if (sUidCache.containsKey(uidString)) {
UidToDetail utd = sUidCache.get(uidString);

View File

@@ -39,6 +39,8 @@ import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;
import java.util.Locale;
@RunWith(RobolectricTestRunner.class)
public class BatteryEntryTest {
@@ -148,4 +150,17 @@ public class BatteryEntryTest {
assertThat(entry.extractPackagesFromSipper(entry.sipper)).isEqualTo(entry.sipper.mPackages);
}
@Test
public void testUidCache_switchLocale_shouldCleanCache() {
BatteryEntry.stopRequestQueue();
Locale.setDefault(new Locale("en_US"));
BatteryEntry.sUidCache.put(Integer.toString(APP_UID), null);
assertThat(BatteryEntry.sUidCache).isNotEmpty();
Locale.setDefault(new Locale("zh_TW"));
createBatteryEntryForApp();
assertThat(BatteryEntry.sUidCache).isEmpty(); // check if cache is clear
}
}