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

This commit is contained in:
Wenhung Teng
2018-03-27 06:13:53 +00:00
committed by Android (Google) Code Review
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.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Locale;
/** /**
* Wraps the power usage data of a BatterySipper with information about package name * 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 final ArrayList<BatteryEntry> mRequestQueue = new ArrayList<BatteryEntry>();
static Handler sHandler; static Handler sHandler;
static Locale sCurrentLocale = null;
static private class NameAndIconLoader extends Thread { static private class NameAndIconLoader extends Thread {
private boolean mAbort = false; private boolean mAbort = false;
@@ -227,6 +230,13 @@ public class BatteryEntry {
} }
void getQuickNameIconForUid(final int uid) { 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); final String uidString = Integer.toString(uid);
if (sUidCache.containsKey(uidString)) { if (sUidCache.containsKey(uidString)) {
UidToDetail utd = sUidCache.get(uidString); UidToDetail utd = sUidCache.get(uidString);

View File

@@ -39,6 +39,8 @@ import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule; import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import java.util.Locale;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class BatteryEntryTest { public class BatteryEntryTest {
@@ -148,4 +150,17 @@ public class BatteryEntryTest {
assertThat(entry.extractPackagesFromSipper(entry.sipper)).isEqualTo(entry.sipper.mPackages); 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
}
} }