Do not crash if OverlayManager is not available
Just remove the Styles tab in that case.
Bug: 132909772
Change-Id: I63e0444390a56715c2420133870e7c7616bb05d7
diff --git a/src/com/android/customization/model/theme/DefaultThemeProvider.java b/src/com/android/customization/model/theme/DefaultThemeProvider.java
index 5123910..58b6daf 100644
--- a/src/com/android/customization/model/theme/DefaultThemeProvider.java
+++ b/src/com/android/customization/model/theme/DefaultThemeProvider.java
@@ -111,6 +111,11 @@
}
}
+ @Override
+ public boolean isAvailable() {
+ return mOverlayProvider.isAvailable() && super.isAvailable();
+ }
+
private void loadAll() {
addDefaultTheme();
diff --git a/src/com/android/customization/model/theme/OverlayManagerCompat.java b/src/com/android/customization/model/theme/OverlayManagerCompat.java
index 202a0d4..163eca1 100644
--- a/src/com/android/customization/model/theme/OverlayManagerCompat.java
+++ b/src/com/android/customization/model/theme/OverlayManagerCompat.java
@@ -44,6 +44,10 @@
mTargetPackages = ResourceConstants.getPackagesToOverlay(context);
}
+ public boolean isAvailable() {
+ return mOverlayManager != null;
+ }
+
/**
* Enables the overlay provided by the given package for the given user Id
* @return true if the operation succeeded
diff --git a/src/com/android/customization/model/theme/OverlayThemeExtractor.java b/src/com/android/customization/model/theme/OverlayThemeExtractor.java
index 3c261e7..9c85fa4 100644
--- a/src/com/android/customization/model/theme/OverlayThemeExtractor.java
+++ b/src/com/android/customization/model/theme/OverlayThemeExtractor.java
@@ -40,21 +40,26 @@
OverlayThemeExtractor(Context context) {
mContext = context;
OverlayManager om = context.getSystemService(OverlayManager.class);
- Consumer<OverlayInfo> addToMap = overlayInfo -> mOverlayInfos.put(
- overlayInfo.getPackageName(), overlayInfo);
+ if (om != null) {
+ Consumer<OverlayInfo> addToMap = overlayInfo -> mOverlayInfos.put(
+ overlayInfo.getPackageName(), overlayInfo);
- UserHandle user = UserHandle.of(UserHandle.myUserId());
- om.getOverlayInfosForTarget(ANDROID_PACKAGE, user).forEach(addToMap);
- om.getOverlayInfosForTarget(SYSUI_PACKAGE, user).forEach(addToMap);
- om.getOverlayInfosForTarget(SETTINGS_PACKAGE, user).forEach(addToMap);
- om.getOverlayInfosForTarget(ResourceConstants.getLauncherPackage(context), user)
- .forEach(addToMap);
- om.getOverlayInfosForTarget(context.getPackageName(), user).forEach(addToMap);
-
+ UserHandle user = UserHandle.of(UserHandle.myUserId());
+ om.getOverlayInfosForTarget(ANDROID_PACKAGE, user).forEach(addToMap);
+ om.getOverlayInfosForTarget(SYSUI_PACKAGE, user).forEach(addToMap);
+ om.getOverlayInfosForTarget(SETTINGS_PACKAGE, user).forEach(addToMap);
+ om.getOverlayInfosForTarget(ResourceConstants.getLauncherPackage(context), user)
+ .forEach(addToMap);
+ om.getOverlayInfosForTarget(context.getPackageName(), user).forEach(addToMap);
+ }
mShapePreviewIconPackages = context.getResources().getStringArray(
R.array.icon_shape_preview_packages);
}
+ boolean isAvailable() {
+ return !mOverlayInfos.isEmpty();
+ }
+
void addColorOverlay(Builder builder, String colorOverlayPackage)
throws NameNotFoundException {
if (!TextUtils.isEmpty(colorOverlayPackage)) {
diff --git a/src/com/android/customization/model/theme/ThemeManager.java b/src/com/android/customization/model/theme/ThemeManager.java
index d873972..f7bbd00 100644
--- a/src/com/android/customization/model/theme/ThemeManager.java
+++ b/src/com/android/customization/model/theme/ThemeManager.java
@@ -84,7 +84,7 @@
@Override
public boolean isAvailable() {
- return mProvider.isAvailable();
+ return mOverlayManagerCompat.isAvailable() && mProvider.isAvailable();
}
@Override