Do not show static overlays as a theme

Static overlays aren't changeable by a user. So we shouldn't list them
as a theme.

This CL fixed b/36812704 as well to run unit tests.

Test: building succeeded and tested on sailfish.
      make RunSettingsRoboTests
      adb shell am instrument -w -e class \
          com.android.settings.display.ThemePreferenceControllerTest \
          com.android.settings.tests.unit/android.support.test.runner.AndroidJUnitRunner
Bug: 37480890
Bug: 36812704

Change-Id: I8c13b6956083095dceaab3da6642bef1647d6a30
This commit is contained in:
Jaekyun Seok
2017-04-29 09:36:46 +09:00
parent ad597344a2
commit ef85d880a5
2 changed files with 71 additions and 15 deletions

View File

@@ -18,6 +18,7 @@ import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION
import android.content.Context;
import android.content.om.IOverlayManager;
import android.content.om.OverlayInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.RemoteException;
@@ -35,6 +36,7 @@ import com.android.settings.overlay.FeatureFactory;
import libcore.util.Objects;
import java.util.ArrayList;
import java.util.List;
public class ThemePreferenceController extends PreferenceController implements
@@ -109,12 +111,22 @@ public class ThemePreferenceController extends PreferenceController implements
return true;
}
private boolean isChangeableOverlay(String packageName) {
try {
PackageInfo pi = mPackageManager.getPackageInfo(packageName, 0);
return pi != null && !pi.isStaticOverlay;
} catch (PackageManager.NameNotFoundException e) {
return false;
}
}
private String getTheme() {
try {
List<OverlayInfo> infos = mOverlayService.getOverlayInfosForTarget("android",
UserHandle.myUserId());
for (int i = 0, size = infos.size(); i < size; i++) {
if (infos.get(i).isEnabled()) {
if (infos.get(i).isEnabled() &&
isChangeableOverlay(infos.get(i).packageName)) {
return infos.get(i).packageName;
}
}
@@ -141,11 +153,13 @@ public class ThemePreferenceController extends PreferenceController implements
try {
List<OverlayInfo> infos = mOverlayService.getOverlayInfosForTarget("android",
UserHandle.myUserId());
String[] pkgs = new String[infos.size()];
List<String> pkgs = new ArrayList(infos.size());
for (int i = 0, size = infos.size(); i < size; i++) {
pkgs[i] = infos.get(i).packageName;
if (isChangeableOverlay(infos.get(i).packageName)) {
pkgs.add(infos.get(i).packageName);
}
}
return pkgs;
return pkgs.toArray(new String[pkgs.size()]);
} catch (RemoteException e) {
}
return new String[0];