Snap for 5698743 from 23b88fa0dac3021152513681ac06a806606d6983 to qt-release

Change-Id: Ica40f74b48f0c7d26112d3f24b0761f0ef1416cc
diff --git a/res/color/option_border_color.xml b/res/color/option_border_color.xml
index ea5f189..ec5ab97 100644
--- a/res/color/option_border_color.xml
+++ b/res/color/option_border_color.xml
@@ -23,5 +23,6 @@
         android:alpha="0.24"
         android:color="?android:colorAccent" />
     <item
-        android:color="@color/material_grey500"/>
+        android:alpha="0.05"
+        android:color="@color/option_border_default"/>
 </selector>
diff --git a/res/drawable/color_chip_hollow.xml b/res/drawable/color_chip_hollow.xml
index 76ab6b8..c0eab74 100644
--- a/res/drawable/color_chip_hollow.xml
+++ b/res/drawable/color_chip_hollow.xml
@@ -17,8 +17,8 @@
 -->
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
         android:shape="ring"
-        android:innerRadius="13dp"
-        android:thickness="8dp"
+        android:innerRadius="10dp"
+        android:thickness="6dp"
         android:useLevel="false">
     <solid android:color="@android:color/black"/>
 </shape>
diff --git a/res/drawable/ic_colorize_24px.xml b/res/drawable/ic_colorize_24px.xml
index fb70972..8363683 100644
--- a/res/drawable/ic_colorize_24px.xml
+++ b/res/drawable/ic_colorize_24px.xml
@@ -14,8 +14,8 @@
      limitations under the License.
 -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="24dp"
-    android:height="24dp"
+    android:width="32dp"
+    android:height="32dp"
     android:viewportWidth="24"
     android:viewportHeight="24">
     <path
diff --git a/res/drawable/ic_font.xml b/res/drawable/ic_font.xml
index f5df7ba..6ce8308 100644
--- a/res/drawable/ic_font.xml
+++ b/res/drawable/ic_font.xml
@@ -14,8 +14,8 @@
      limitations under the License.
 -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="24dp"
-    android:height="24dp"
+    android:width="32dp"
+    android:height="32dp"
     android:viewportWidth="24"
     android:viewportHeight="24">
     <!-- This path represents a square with rounded corners -->
diff --git a/res/drawable/ic_nav_wallpaper.xml b/res/drawable/ic_nav_wallpaper.xml
index c935666..a884a44 100644
--- a/res/drawable/ic_nav_wallpaper.xml
+++ b/res/drawable/ic_nav_wallpaper.xml
@@ -15,8 +15,8 @@
 -->
 <!-- Represents the wallpaper icon (a "landscape" shape in a box) -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="24dp"
-    android:height="24dp"
+    android:width="32dp"
+    android:height="32dp"
     android:viewportWidth="24"
     android:viewportHeight="24">
     <path
diff --git a/res/drawable/ic_shapes_24px.xml b/res/drawable/ic_shapes_24px.xml
index 525f757..6debc53 100644
--- a/res/drawable/ic_shapes_24px.xml
+++ b/res/drawable/ic_shapes_24px.xml
@@ -14,8 +14,8 @@
      limitations under the License.
 -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="24dp"
-    android:height="24dp"
+    android:width="32dp"
+    android:height="32dp"
     android:viewportWidth="24"
     android:viewportHeight="24">
     <path
diff --git a/res/drawable/ic_wifi_24px.xml b/res/drawable/ic_wifi_24px.xml
index 0e27c57..64834e0 100644
--- a/res/drawable/ic_wifi_24px.xml
+++ b/res/drawable/ic_wifi_24px.xml
@@ -14,8 +14,8 @@
      limitations under the License.
 -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="24dp"
-    android:height="24dp"
+    android:width="32dp"
+    android:height="32dp"
     android:viewportWidth="24"
     android:viewportHeight="24">
     <path
diff --git a/res/layout/fragment_custom_theme_component.xml b/res/layout/fragment_custom_theme_component.xml
index 314480f..fb9c36c 100644
--- a/res/layout/fragment_custom_theme_component.xml
+++ b/res/layout/fragment_custom_theme_component.xml
@@ -36,7 +36,6 @@
             app:layout_constraintBottom_toTopOf="@+id/guideline"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintHeight_max="@dimen/preview_pager_max_height"
-            app:layout_constraintHeight_min="@dimen/preview_pager_min_height"
             app:layout_constraintHorizontal_bias="0.5"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent"
@@ -47,9 +46,9 @@
                 layout="@layout/theme_component_preview"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
+                android:layout_gravity="center_vertical"
                 android:layout_marginHorizontal="@dimen/preview_page_horizontal_margin"
-                android:layout_marginTop="@dimen/preview_page_top_margin"
-                android:layout_marginBottom="@dimen/indicator_container_height"/>
+                android:layout_marginTop="@dimen/preview_page_top_margin"/>
         </FrameLayout>
         <View
             android:id="@+id/divider"
@@ -81,7 +80,9 @@
             android:textSize="@dimen/component_options_title_size"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toBottomOf="@+id/guideline"/>
+            app:layout_constraintTop_toBottomOf="@+id/component_preview_container"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintVertical_bias=".15"/>
 
         <androidx.recyclerview.widget.RecyclerView
             android:id="@+id/options_container"
@@ -93,7 +94,7 @@
             app:layout_constraintHorizontal_bias="0.5"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toBottomOf="@+id/component_options_title"
-            app:layout_constraintVertical_bias=".2"/>
+            app:layout_constraintVertical_bias=".25"/>
 
     </androidx.constraintlayout.widget.ConstraintLayout>
 </LinearLayout>
diff --git a/res/layout/fragment_custom_theme_name.xml b/res/layout/fragment_custom_theme_name.xml
index 9ac0b21..6a3d1ba 100644
--- a/res/layout/fragment_custom_theme_name.xml
+++ b/res/layout/fragment_custom_theme_name.xml
@@ -36,7 +36,6 @@
             app:layout_constraintBottom_toTopOf="@+id/guideline"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintHeight_max="@dimen/preview_pager_max_height"
-            app:layout_constraintHeight_min="@dimen/preview_pager_min_height"
             app:layout_constraintHorizontal_bias="0.5"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent"
@@ -69,9 +68,12 @@
             android:layout_marginBottom="10dp"
             android:textAlignment="center"
             android:textAppearance="@style/HeaderTextAppearance"
+            android:textSize="@dimen/component_options_title_size"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toBottomOf="@+id/guideline"/>
+            app:layout_constraintTop_toBottomOf="@+id/component_preview_container"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintVertical_bias=".15"/>
 
         <EditText
             android:id="@+id/custom_theme_name"
@@ -85,7 +87,7 @@
             app:layout_constraintHorizontal_bias="0.5"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toBottomOf="@+id/component_options_title"
-            app:layout_constraintVertical_bias=".2"/>
+            app:layout_constraintVertical_bias=".25"/>
 
 
     </androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/res/layout/fragment_theme_picker.xml b/res/layout/fragment_theme_picker.xml
index d38e67f..8272bde 100644
--- a/res/layout/fragment_theme_picker.xml
+++ b/res/layout/fragment_theme_picker.xml
@@ -41,7 +41,6 @@
                 app:layout_constraintBottom_toTopOf="@id/options_container"
                 app:layout_constraintEnd_toEndOf="parent"
                 app:layout_constraintHeight_max="@dimen/preview_pager_max_height"
-                app:layout_constraintHeight_min="@dimen/preview_pager_min_height"
                 app:layout_constraintStart_toStartOf="parent"
                 app:layout_constraintTop_toTopOf="parent"
                 app:layout_constraintVertical_bias="0.0"
diff --git a/res/layout/preview_card_font_content.xml b/res/layout/preview_card_font_content.xml
index 2a27b01..fb7879e 100644
--- a/res/layout/preview_card_font_content.xml
+++ b/res/layout/preview_card_font_content.xml
@@ -20,26 +20,39 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:layout_gravity="center"
-    android:gravity="center_horizontal"
+    android:weightSum="7"
     android:orientation="vertical"
     tools:showIn="@layout/theme_preview_card">
     <TextView
         style="@style/FontCardTitleStyle"
         android:id="@+id/font_card_title"
         android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
+        android:layout_height="16sp"
+        android:layout_weight="1.5"
+        android:layout_gravity="center"
         android:gravity="center_horizontal"
+        android:maxLines="1"
         android:text="@string/font_card_title"/>
+    <Space
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="0"/>
     <View
         android:id="@+id/font_card_divider"
         android:layout_width="15dp"
         android:layout_height="2dp"
-        android:layout_marginVertical="@dimen/font_preview_divider_gap"
+        android:layout_gravity="center"
         android:background="?android:colorAccent"/>
+    <Space
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="1"/>
     <TextView
         style="@style/FontCardBodyTextStyle"
         android:id="@+id/font_card_body"
-        android:layout_height="wrap_content"
+        android:layout_height="56sp"
+        android:layout_weight="2"
+        android:layout_gravity="bottom|center_horizontal"
         android:gravity="center_horizontal"
         android:text="@string/font_card_body"/>
 </LinearLayout>
\ No newline at end of file
diff --git a/res/layout/theme_color_option.xml b/res/layout/theme_color_option.xml
index 72acd8b..12fe623 100644
--- a/res/layout/theme_color_option.xml
+++ b/res/layout/theme_color_option.xml
@@ -18,7 +18,7 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_gravity="center"
-    android:padding="4dp">
+    android:padding="8dp">
 
     <ImageView
         android:id="@+id/option_tile"
diff --git a/res/layout/theme_component_preview.xml b/res/layout/theme_component_preview.xml
index 0d01e05..fe2f691 100644
--- a/res/layout/theme_component_preview.xml
+++ b/res/layout/theme_component_preview.xml
@@ -23,6 +23,7 @@
     android:id="@+id/theme_preview_card_background"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
+    android:clipToPadding="false"
     android:maxHeight="@dimen/preview_theme_max_height"
     android:minHeight="@dimen/preview_theme_min_height"
     android:paddingHorizontal="@dimen/preview_card_padding"
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 6ebf016..47b3b8b 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -47,7 +47,7 @@
     <string name="apply_theme_error_msg" msgid="791364062636538317">"No se ha podido aplicar el estilo"</string>
     <string name="custom_theme_next" msgid="6235420097213197301">"Siguiente"</string>
     <string name="custom_theme_previous" msgid="4941132112640503022">"Anterior"</string>
-    <string name="custom_theme_title" msgid="2192300350332693631">"<xliff:g id="ID_1">%1$d</xliff:g> personalizado"</string>
+    <string name="custom_theme_title" msgid="2192300350332693631">"Personalizado <xliff:g id="ID_1">%1$d</xliff:g>"</string>
     <string name="custom_theme_fragment_title" msgid="6615547284702040280">"Estilo personal"</string>
     <string name="custom_theme_delete" msgid="4744494663184126202">"Eliminar"</string>
     <string name="font_component_title" msgid="8800340833695292049">"Elegir fuente"</string>
diff --git a/res/values-night/colors.xml b/res/values-night/colors.xml
index 129d364..b567d0d 100644
--- a/res/values-night/colors.xml
+++ b/res/values-night/colors.xml
@@ -28,6 +28,8 @@
     <color name="tile_disabled_icon_color">@color/light_grey</color>
     <color name="tile_disabled_background_color">#353535</color>
 
+    <color name="shape_option_tile_foreground_color">@color/edit_background_base</color>
+
     <color name="tip_dot_color">#81C995</color>
     <color name="tip_dot_line_color">#000000</color>
 
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 42335bf..3d646f9 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -30,6 +30,8 @@
     <color name="shape_thumbnail_color">#b2b2b2</color>
     <color name="icon_thumbnail_color">@color/black_87_alpha</color>
 
+    <color name="option_border_default">@color/edit_background_base</color>
+
     <color name="clockface_preview_background">@android:color/black</color>
 
     <color name="theme_preview_icon_color">@color/google_grey700</color>
@@ -47,7 +49,7 @@
     <color name="tile_disabled_icon_color">#2d2d2d</color>
     <color name="tile_disabled_background_color">@color/light_grey</color>
 
-    <color name="shape_option_tile_foreground_color">#f8f9fa</color>
+    <color name="shape_option_tile_foreground_color">@color/edit_background_base</color>
 
     <color name="tip_dot_color">#34A853</color>
     <color name="tip_dot_line_color">#FFFFFF</color>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 00b2bed..5c98fda 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -85,7 +85,7 @@
     <dimen name="preview_theme_cover_content_bottom">@dimen/preview_theme_content_bottom</dimen>
 
     <dimen name="font_preview_body_width">200dp</dimen>
-    <dimen name="font_preview_divider_gap">30dp</dimen>
+    <dimen name="font_preview_divider_gap">24dp</dimen>
 
     <dimen name="custom_theme_nav_height">56dp</dimen>
 
@@ -94,7 +94,7 @@
 
     <dimen name="component_icon_thumb_size">40dp</dimen>
 
-    <dimen name="component_color_chip_size">42dp</dimen>
+    <dimen name="component_color_chip_size">32dp</dimen>
 
     <dimen name="component_shape_thumb_size">72dp</dimen>
     <dimen name="option_border_width">2dp</dimen>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index dd8e18d..1289a87 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -44,7 +44,7 @@
     <style name="BottomNavStyle">
         <item name="itemIconTint">@color/bottom_nav_item_color</item>
         <item name="itemTextColor">@color/bottom_nav_item_color</item>
-        <item name="itemTextAppearanceActive">@style/BottomNavTextAppearance</item>
+        <item name="itemTextAppearanceActive">@style/BottomNavTextAppearanceActive</item>
         <item name="itemTextAppearanceInactive">@style/BottomNavTextAppearance</item>
         <item name="itemBackground">?android:attr/selectableItemBackgroundBorderless</item>
         <item name="android:background">?android:colorPrimary</item>
@@ -54,6 +54,10 @@
         <item name="android:textSize">@dimen/bottom_navbar_font_text_size</item>
     </style>
 
+    <style name="BottomNavTextAppearanceActive" parent="BottomNavTextAppearance">
+        <item name="android:textStyle">bold</item>
+    </style>
+
     <!-- Common components and widgets -->
     <style name="HeaderTextAppearance" parent="@android:style/TextAppearance.DeviceDefault.Widget.ActionBar.Title"/>
 
diff --git a/src/com/android/customization/model/clock/ClockManager.java b/src/com/android/customization/model/clock/ClockManager.java
index 3744317..4e77a49 100644
--- a/src/com/android/customization/model/clock/ClockManager.java
+++ b/src/com/android/customization/model/clock/ClockManager.java
@@ -17,9 +17,13 @@
 
 import android.content.ContentResolver;
 import android.provider.Settings.Secure;
+import android.text.TextUtils;
 
 import com.android.customization.module.ThemesUserEventLogger;
 
+import org.json.JSONException;
+import org.json.JSONObject;
+
 /**
  * {@link CustomizationManager} for clock faces that implements apply by writing to secure settings.
  */
@@ -27,6 +31,8 @@
 
     // TODO: use constant from Settings.Secure
     static final String CLOCK_FACE_SETTING = "lock_screen_custom_clock_face";
+    private static final String CLOCK_FIELD = "clock";
+    private static final String TIMESTAMP_FIELD = "_applied_timestamp";
     private final ContentResolver mContentResolver;
     private final ThemesUserEventLogger mEventLogger;
 
@@ -39,7 +45,15 @@
 
     @Override
     protected void handleApply(Clockface option, Callback callback) {
-        boolean stored = Secure.putString(mContentResolver, CLOCK_FACE_SETTING, option.getId());
+        boolean stored;
+        try {
+            final JSONObject json = new JSONObject();
+            json.put(CLOCK_FIELD, option.getId());
+            json.put(TIMESTAMP_FIELD, System.currentTimeMillis());
+            stored = Secure.putString(mContentResolver, CLOCK_FACE_SETTING, json.toString());
+        } catch (JSONException ex) {
+            stored = false;
+        }
         if (stored) {
             mEventLogger.logClockApplied(option);
             callback.onSuccess();
@@ -50,6 +64,15 @@
 
     @Override
     protected String lookUpCurrentClock() {
-        return Secure.getString(mContentResolver, CLOCK_FACE_SETTING);
+        final String value = Secure.getString(mContentResolver, CLOCK_FACE_SETTING);
+        if (TextUtils.isEmpty(value)) {
+            return value;
+        }
+        try {
+            final JSONObject json = new JSONObject(value);
+            return json.getString(CLOCK_FIELD);
+        } catch (JSONException ex) {
+            return value;
+        }
     }
 }
diff --git a/src/com/android/customization/model/theme/custom/ThemeComponentOption.java b/src/com/android/customization/model/theme/custom/ThemeComponentOption.java
index 78131cc..ff8da08 100644
--- a/src/com/android/customization/model/theme/custom/ThemeComponentOption.java
+++ b/src/com/android/customization/model/theme/custom/ThemeComponentOption.java
@@ -29,6 +29,7 @@
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.content.res.Resources.Theme;
+import android.content.res.TypedArray;
 import android.graphics.Path;
 import android.graphics.Typeface;
 import android.graphics.drawable.Drawable;
@@ -49,6 +50,7 @@
 import androidx.annotation.DrawableRes;
 import androidx.annotation.Nullable;
 import androidx.annotation.StringRes;
+import androidx.core.graphics.ColorUtils;
 
 import com.android.customization.model.CustomizationManager;
 import com.android.customization.model.CustomizationOption;
@@ -146,6 +148,8 @@
             title.setTypeface(mHeadlineFont);
             TextView bodyText = container.findViewById(R.id.font_card_body);
             bodyText.setTypeface(mBodyFont);
+            container.findViewById(R.id.font_card_divider).setBackgroundColor(
+                    title.getCurrentTextColor());
         }
 
         @Override
@@ -441,7 +445,13 @@
 
             foreground.setIntrinsicHeight(background.getIntrinsicHeight() - borderWidth);
             foreground.setIntrinsicWidth(background.getIntrinsicWidth() - borderWidth);
-            foreground.setTint(res.getColor(R.color.shape_option_tile_foreground_color, theme));
+            TypedArray ta = view.getContext().obtainStyledAttributes(
+                    new int[]{android.R.attr.colorPrimary});
+            int primaryColor = ta.getColor(0, 0);
+            ta.recycle();
+            int foregroundColor = res.getColor(R.color.shape_option_tile_foreground_color, theme);
+
+            foreground.setTint(ColorUtils.blendARGB(primaryColor, foregroundColor, .05f));
 
             thumb.setImageDrawable(mShape);
             view.setContentDescription(mLabel);
diff --git a/src/com/android/customization/module/StatsLogUserEventLogger.java b/src/com/android/customization/module/StatsLogUserEventLogger.java
index 07d8c1d..b77d7dc 100644
--- a/src/com/android/customization/module/StatsLogUserEventLogger.java
+++ b/src/com/android/customization/module/StatsLogUserEventLogger.java
@@ -41,7 +41,7 @@
     private static final String TAG = "StatsLogUserEventLogger";
 
     @Override
-    public void logResumed() {
+    public void logResumed(boolean provisioned, boolean wallpaper) {
         StatsLogCompat.write(StyleEnums.ONRESUME, 0, 0, 0, 0, 0, 0, 0, 0, 0);
     }
 
diff --git a/src/com/android/customization/picker/ClockFacePickerActivity.java b/src/com/android/customization/picker/ClockFacePickerActivity.java
index bfe2e5e..5065aef 100644
--- a/src/com/android/customization/picker/ClockFacePickerActivity.java
+++ b/src/com/android/customization/picker/ClockFacePickerActivity.java
@@ -64,12 +64,16 @@
                 return getIntent().getStringExtra(EXTRA_CLOCK_FACE_NAME);
             }
         };
-
-        final FragmentManager fm = getSupportFragmentManager();
-        final FragmentTransaction fragmentTransaction = fm.beginTransaction();
-        final ClockFragment clockFragment = ClockFragment.newInstance(getString(R.string.clock_title));
-        fragmentTransaction.replace(R.id.fragment_container, clockFragment);
-        fragmentTransaction.commitNow();
+        if (!mClockManager.isAvailable()) {
+            finish();
+        } else {
+            final FragmentManager fm = getSupportFragmentManager();
+            final FragmentTransaction fragmentTransaction = fm.beginTransaction();
+            final ClockFragment clockFragment = ClockFragment.newInstance(
+                    getString(R.string.clock_title));
+            fragmentTransaction.replace(R.id.fragment_container, clockFragment);
+            fragmentTransaction.commitNow();
+        }
     }
 
     @Override
diff --git a/src/com/android/customization/picker/CustomizationPickerActivity.java b/src/com/android/customization/picker/CustomizationPickerActivity.java
index 3f78298..80cd7d9 100644
--- a/src/com/android/customization/picker/CustomizationPickerActivity.java
+++ b/src/com/android/customization/picker/CustomizationPickerActivity.java
@@ -20,6 +20,7 @@
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.LayerDrawable;
 import android.os.Bundle;
+import android.provider.Settings;
 import android.util.Log;
 import android.view.Gravity;
 import android.view.Menu;
@@ -138,7 +139,12 @@
     @Override
     protected void onResume() {
         super.onResume();
-        mUserEventLogger.logResumed();
+        boolean wallpaperOnly =
+                WALLPAPER_ONLY.equals(getIntent().getStringExtra(WALLPAPER_FLAVOR_EXTRA));
+        boolean provisioned = Settings.Global.getInt(getContentResolver(),
+                Settings.Global.DEVICE_PROVISIONED, 0) != 0;
+
+        mUserEventLogger.logResumed(provisioned, wallpaperOnly);
         // refresh the sections as the preview may have changed
         initSections();
         if (mBottomNav == null) {
diff --git a/src/com/android/customization/picker/theme/ThemeFragment.java b/src/com/android/customization/picker/theme/ThemeFragment.java
index cb78ea6..f584dec 100644
--- a/src/com/android/customization/picker/theme/ThemeFragment.java
+++ b/src/com/android/customization/picker/theme/ThemeFragment.java
@@ -22,6 +22,7 @@
 import android.content.res.ColorStateList;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
+import android.graphics.Bitmap.Config;
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.LayerDrawable;
@@ -568,7 +569,15 @@
                 }
                 view.findViewById(R.id.theme_preview_card_background).setBackground(background);
                 if (mScrim == null && !mIsTranslucent) {
+                    boolean shouldRecycle = false;
+                    if (bitmap.getConfig() == Config.HARDWARE) {
+                        bitmap = bitmap.copy(Config.ARGB_8888, false);
+                        shouldRecycle = true;
+                    }
                     int colorsHint = WallpaperColors.fromBitmap(bitmap).getColorHints();
+                    if (shouldRecycle) {
+                        bitmap.recycle();
+                    }
                     TextView header = view.findViewById(R.id.theme_preview_card_header);
                     if ((colorsHint & WallpaperColors.HINT_SUPPORTS_DARK_TEXT) == 0) {
                         int colorLight = res.getColor(R.color.text_color_light, null);