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