[automerger skipped] Import translations. DO NOT MERGE
am: 78d6922fa0 -s ours
am skip reason: subject contains skip directive
Change-Id: Ic9c5164d666553f3f227fe8ab3328845b5f8c90e
diff --git a/res/drawable/theme_cover_scrim.xml b/res/drawable/theme_cover_scrim.xml
index 029ea85..c75213c 100644
--- a/res/drawable/theme_cover_scrim.xml
+++ b/res/drawable/theme_cover_scrim.xml
@@ -17,10 +17,11 @@
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
- <gradient
+ <gradient
android:angle="90"
- android:startColor="@android:color/transparent"
+ android:centerY="25%"
+ android:startColor="@color/black_38_alpha"
android:centerColor="@android:color/transparent"
- android:endColor="@color/translucent_black_darker"
+ android:endColor="@android:color/transparent"
android:type="linear" />
</shape>
\ No newline at end of file
diff --git a/res/drawable/theme_cover_scrim_custom.xml b/res/drawable/theme_cover_scrim_custom.xml
deleted file mode 100644
index de49be3..0000000
--- a/res/drawable/theme_cover_scrim_custom.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-
- Copyright (C) 2019 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<layer-list
- xmlns:android="http://schemas.android.com/apk/res/android" >
- <item android:drawable="@drawable/theme_cover_scrim"/>
- <item>
- <shape android:shape="rectangle">
- <gradient
- android:angle="90"
- android:centerY="25%"
- android:startColor="@color/black_67_alpha"
- android:centerColor="@android:color/transparent"
- android:endColor="@android:color/transparent"
- android:type="linear" />
- </shape>
- </item>
-</layer-list>
\ No newline at end of file
diff --git a/res/layout/fragment_clock_picker.xml b/res/layout/fragment_clock_picker.xml
index da4f891..1528666 100644
--- a/res/layout/fragment_clock_picker.xml
+++ b/res/layout/fragment_clock_picker.xml
@@ -23,40 +23,89 @@
android:background="?android:colorPrimary">
<include layout="@layout/section_header"/>
- <com.android.customization.widget.PreviewPager
- android:id="@+id/clock_preview_pager"
+ <FrameLayout
android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1"
- android:background="@color/secondary_color"
- app:card_style="screen_aspect_ratio"/>
+ android:layout_height="match_parent">
- <LinearLayout
- android:id="@+id/options_section"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingVertical="10dp"
- android:orientation="vertical">
-
- <androidx.recyclerview.widget.RecyclerView
- android:id="@+id/options_container"
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:id="@+id/content_section"
android:layout_width="match_parent"
- android:layout_height="@dimen/options_container_height"
- android:layout_gravity="center_horizontal"/>
+ android:layout_height="match_parent">
- <RelativeLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingHorizontal="10dp">
+ <com.android.customization.widget.PreviewPager
+ android:id="@+id/clock_preview_pager"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="@color/secondary_color"
+ app:layout_constrainedHeight="true"
+ 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_constraintVertical_bias="0.0"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_chainStyle="spread_inside"/>
+
+ <androidx.recyclerview.widget.RecyclerView
+ android:id="@+id/options_container"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/options_container_height"
+ android:layout_gravity="center_horizontal"
+ android:layout_marginTop="10dp"
+ app:layout_constraintBottom_toTopOf="@id/placeholder"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/clock_preview_pager"
+ app:layout_constraintVertical_bias="1.0"/>
+
+ <Space
+ android:id="@+id/placeholder"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/min_taptarget_height"
+ app:layout_constraintBottom_toTopOf="@id/apply_button"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHeight_min="@dimen/min_taptarget_height"
+ app:layout_constraintHorizontal_bias="0.0"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/options_container"
+ app:layout_constraintVertical_bias="1.0"/>
+
<Button
android:id="@+id/apply_button"
style="@style/ActionPrimaryButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_alignParentEnd="true"
- android:text="@string/apply_btn"/>
- </RelativeLayout>
+ android:layout_gravity="end"
+ android:layout_marginEnd="10dp"
+ android:layout_marginVertical="10dp"
+ android:layout_weight="1"
+ android:text="@string/apply_theme_btn"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+ </androidx.constraintlayout.widget.ConstraintLayout>
- </LinearLayout>
-
+ <androidx.core.widget.ContentLoadingProgressBar
+ android:id="@+id/loading_indicator"
+ style="@android:style/Widget.DeviceDefault.ProgressBar"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="200dp"
+ android:layout_gravity="center_horizontal|top"
+ android:indeterminate="true"/>
+ <FrameLayout
+ android:id="@+id/error_section"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:visibility="gone">
+ <TextView
+ android:id="@+id/error_message"
+ style="@style/HeaderTextAppearance"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:gravity="center"
+ android:text="@string/something_went_wrong"/>
+ </FrameLayout>
+ </FrameLayout>
</LinearLayout>
diff --git a/res/layout/fragment_custom_theme_component.xml b/res/layout/fragment_custom_theme_component.xml
index e9dd927..13b0b33 100644
--- a/res/layout/fragment_custom_theme_component.xml
+++ b/res/layout/fragment_custom_theme_component.xml
@@ -16,54 +16,83 @@
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="?android:colorPrimary">
<include layout="@layout/section_header"/>
- <FrameLayout
- android:id="@+id/component_preview_container"
+ <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1"
- android:background="?android:colorPrimary">
- <include
- android:id="@+id/component_preview_content"
+ android:layout_height="match_parent">
+
+ <FrameLayout
+ android:id="@+id/component_preview_container"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_marginHorizontal="@dimen/preview_page_horizontal_margin"
- android:layout_marginTop="@dimen/preview_page_top_margin"
- android:layout_marginBottom="@dimen/component_preview_page_bottom_margin"
- layout="@layout/theme_component_preview"/>
- </FrameLayout>
- <View
- android:layout_width="match_parent"
- android:layout_height="1dp"
- android:background="@color/divider_color"/>
- <LinearLayout
- android:id="@+id/options_section"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingVertical="10dp"
- android:clipToPadding="false"
- android:orientation="vertical">
+ android:layout_height="0dp"
+ android:background="?android:colorPrimary"
+ app:layout_constrainedHeight="true"
+ 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"
+ app:layout_constraintVertical_bias="0.0">
+
+ <include
+ android:id="@+id/component_preview_content"
+ layout="@layout/theme_component_preview"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_marginHorizontal="@dimen/preview_page_horizontal_margin"
+ android:layout_marginTop="@dimen/preview_page_top_margin"
+ android:layout_marginBottom="@dimen/indicator_container_height"/>
+ </FrameLayout>
+ <View
+ android:id="@+id/divider"
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:background="@color/divider_color"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/component_preview_container"/>
+
+ <androidx.constraintlayout.widget.Guideline
+ android:id="@+id/guideline"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ app:layout_constraintGuide_percent=".7"/>
+
<TextView
android:id="@+id/component_options_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:layout_margin="10dp"
+ android:layout_marginTop="10dp"
+ android:layout_marginStart="10dp"
+ android:layout_marginEnd="10dp"
+ android:layout_marginBottom="10dp"
android:textAlignment="center"
- android:textAppearance="@style/HeaderTextAppearance"/>
+ android:textAppearance="@style/HeaderTextAppearance"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/guideline"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/options_container"
android:layout_width="match_parent"
android:layout_height="@dimen/options_container_height"
- android:layout_gravity="center_horizontal"/>
+ android:layout_gravity="center_horizontal"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.5"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/component_options_title"
+ app:layout_constraintVertical_bias=".2"/>
- </LinearLayout>
-
+ </androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
diff --git a/res/layout/fragment_custom_theme_name.xml b/res/layout/fragment_custom_theme_name.xml
index 98feb60..9ac0b21 100644
--- a/res/layout/fragment_custom_theme_name.xml
+++ b/res/layout/fragment_custom_theme_name.xml
@@ -16,59 +16,78 @@
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
- xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:background="?android:colorPrimary">
<include layout="@layout/section_header"/>
- <FrameLayout
- android:id="@+id/component_preview_container"
+ <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1"
- android:background="@color/secondary_color">
- <include
- android:id="@+id/component_preview_content"
+ android:layout_height="match_parent">
+
+ <FrameLayout
+ android:id="@+id/component_preview_container"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_marginHorizontal="@dimen/preview_page_horizontal_margin"
- android:layout_marginTop="@dimen/preview_page_top_margin"
- android:layout_marginBottom="@dimen/component_preview_page_bottom_margin"
- layout="@layout/theme_preview_card"/>
- </FrameLayout>
- <LinearLayout
- android:id="@+id/options_section"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingVertical="10dp"
- android:clipToPadding="false"
- android:orientation="vertical">
+ android:layout_height="0dp"
+ android:background="@color/secondary_color"
+ app:layout_constrainedHeight="true"
+ 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"
+ app:layout_constraintVertical_bias="0.0">
+
+ <include
+ android:id="@+id/component_preview_content"
+ layout="@layout/theme_preview_card"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_marginHorizontal="@dimen/preview_page_horizontal_margin"
+ android:layout_marginTop="@dimen/preview_page_top_margin"
+ android:layout_marginBottom="@dimen/indicator_container_height"/>
+ </FrameLayout>
+
+ <androidx.constraintlayout.widget.Guideline
+ android:id="@+id/guideline"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ app:layout_constraintGuide_percent=".7"/>
<TextView
android:id="@+id/component_options_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:layout_margin="10dp"
+ android:layout_marginTop="10dp"
+ android:layout_marginStart="10dp"
+ android:layout_marginEnd="10dp"
+ android:layout_marginBottom="10dp"
android:textAlignment="center"
- android:textAppearance="@style/HeaderTextAppearance"/>
+ android:textAppearance="@style/HeaderTextAppearance"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/guideline"/>
- <FrameLayout
- android:layout_width="match_parent"
- android:layout_height="@dimen/options_container_height"
- android:layout_gravity="center">
+ <EditText
+ android:id="@+id/custom_theme_name"
+ style="@style/CustomThemeNameEditText"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:importantForAutofill="no"
+ android:minWidth="300dp"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.5"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/component_options_title"
+ app:layout_constraintVertical_bias=".2"/>
- <EditText
- style="@style/CustomThemeNameEditText"
- android:id="@+id/custom_theme_name"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:minWidth="300dp"/>
- </FrameLayout>
- </LinearLayout>
+ </androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
diff --git a/res/layout/fragment_grid_picker.xml b/res/layout/fragment_grid_picker.xml
index d7618f3..467a620 100644
--- a/res/layout/fragment_grid_picker.xml
+++ b/res/layout/fragment_grid_picker.xml
@@ -16,46 +16,95 @@
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
- android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_height="match_parent"
android:orientation="vertical"
android:background="?android:colorPrimary">
<include layout="@layout/section_header"/>
- <com.android.customization.widget.PreviewPager
- android:id="@+id/grid_preview_pager"
+ <FrameLayout
android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1"
- android:background="@color/secondary_color"
- app:card_style="screen_aspect_ratio"/>
+ android:layout_height="match_parent">
- <LinearLayout
- android:id="@+id/options_section"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingVertical="10dp"
- android:orientation="vertical">
-
- <androidx.recyclerview.widget.RecyclerView
- android:id="@+id/options_container"
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:id="@+id/content_section"
android:layout_width="match_parent"
- android:layout_height="@dimen/options_container_height"
- android:layout_gravity="center_horizontal"/>
+ android:layout_height="match_parent">
- <RelativeLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingHorizontal="10dp">
+ <com.android.customization.widget.PreviewPager
+ android:id="@+id/grid_preview_pager"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="@color/secondary_color"
+ app:card_style="screen_aspect_ratio"
+ app:layout_constrainedHeight="true"
+ 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_constraintVertical_bias="0.0"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_chainStyle="spread_inside"/>
+
+ <androidx.recyclerview.widget.RecyclerView
+ android:id="@+id/options_container"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/options_container_height"
+ android:layout_gravity="center_horizontal"
+ android:layout_marginTop="10dp"
+ app:layout_constraintBottom_toTopOf="@id/placeholder"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/grid_preview_pager"
+ app:layout_constraintVertical_bias="1.0"/>
+
+ <Space
+ android:id="@+id/placeholder"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/min_taptarget_height"
+ app:layout_constraintBottom_toTopOf="@id/apply_button"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/options_container"
+ app:layout_constraintVertical_bias="1.0"/>
+
<Button
android:id="@+id/apply_button"
style="@style/ActionPrimaryButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_alignParentEnd="true"
- android:text="@string/apply_btn"/>
- </RelativeLayout>
+ android:layout_gravity="end"
+ android:layout_marginEnd="10dp"
+ android:layout_marginVertical="10dp"
+ android:layout_weight="1"
+ android:text="@string/apply_theme_btn"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
- </LinearLayout>
+ </androidx.constraintlayout.widget.ConstraintLayout>
+ <androidx.core.widget.ContentLoadingProgressBar
+ android:id="@+id/loading_indicator"
+ style="@android:style/Widget.DeviceDefault.ProgressBar"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="200dp"
+ android:layout_gravity="center_horizontal|top"
+ android:indeterminate="true"/>
+ <FrameLayout
+ android:id="@+id/error_section"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:visibility="gone">
+ <TextView
+ android:id="@+id/error_message"
+ style="@style/HeaderTextAppearance"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:gravity="center"
+ android:text="@string/something_went_wrong"/>
+ </FrameLayout>
+ </FrameLayout>
</LinearLayout>
diff --git a/res/layout/fragment_theme_picker.xml b/res/layout/fragment_theme_picker.xml
index 2cfac1d..dbb633e 100644
--- a/res/layout/fragment_theme_picker.xml
+++ b/res/layout/fragment_theme_picker.xml
@@ -16,56 +16,102 @@
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="?android:colorPrimary">
<include layout="@layout/section_header"/>
- <com.android.customization.widget.PreviewPager
- android:id="@+id/theme_preview_pager"
+ <FrameLayout
android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1"
- android:background="@color/secondary_color"/>
+ android:layout_height="match_parent">
- <LinearLayout
- android:id="@+id/options_section"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingVertical="10dp"
- android:orientation="vertical">
-
- <androidx.recyclerview.widget.RecyclerView
- android:id="@+id/options_container"
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:id="@+id/content_section"
android:layout_width="match_parent"
- android:layout_height="@dimen/options_container_height"
- android:layout_gravity="center_horizontal"/>
+ android:layout_height="match_parent">
- <RelativeLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingHorizontal="10dp">
+ <com.android.customization.widget.PreviewPager
+ android:id="@+id/theme_preview_pager"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="@color/secondary_color"
+ app:layout_constrainedHeight="true"
+ 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"
+ app:layout_constraintVertical_chainStyle="spread_inside"/>
+
+ <androidx.recyclerview.widget.RecyclerView
+ android:id="@+id/options_container"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/options_container_height"
+ android:layout_gravity="bottom|center_horizontal"
+ android:layout_marginTop="10dp"
+ android:layout_weight="1"
+ app:layout_constraintBottom_toTopOf="@id/use_my_wallpaper"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/theme_preview_pager"
+ app:layout_constraintVertical_bias="1.0"/>
+
<CheckBox
android:id="@+id/use_my_wallpaper"
android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentStart="true"
- android:layout_centerVertical="true"
- android:layout_toStartOf="@+id/apply_button"
+ android:layout_height="@dimen/min_taptarget_height"
+ android:layout_marginStart="10dp"
android:ellipsize="end"
+ android:gravity="start|center_vertical"
android:paddingLeft="4dp"
- android:minHeight="@dimen/min_taptarget_height"
- android:text="@string/keep_my_wallpaper"/>
+ android:text="@string/keep_my_wallpaper"
+ app:layout_constraintBottom_toTopOf="@id/apply_button"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHeight_min="@dimen/min_taptarget_height"
+ app:layout_constraintHorizontal_bias="0.0"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/options_container"
+ app:layout_constraintVertical_bias="1.0"/>
+
<Button
android:id="@+id/apply_button"
style="@style/ActionPrimaryButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_alignParentEnd="true"
- android:text="@string/apply_theme_btn"/>
- </RelativeLayout>
+ android:layout_gravity="end"
+ android:layout_marginEnd="10dp"
+ android:layout_marginBottom="10dp"
+ android:text="@string/apply_theme_btn"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+ </androidx.constraintlayout.widget.ConstraintLayout>
- </LinearLayout>
+ <androidx.core.widget.ContentLoadingProgressBar
+ android:id="@+id/loading_indicator"
+ style="@android:style/Widget.DeviceDefault.ProgressBar"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="200dp"
+ android:layout_gravity="center_horizontal|top"
+ android:indeterminate="true"/>
+ <FrameLayout
+ android:id="@+id/error_section"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:visibility="gone">
+ <TextView
+ android:id="@+id/error_message"
+ style="@style/HeaderTextAppearance"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:gravity="center"
+ android:text="@string/something_went_wrong"/>
+ </FrameLayout>
+ </FrameLayout>
</LinearLayout>
diff --git a/res/layout/preview_card_color_content.xml b/res/layout/preview_card_color_content.xml
index 8587652..1de2cd4 100644
--- a/res/layout/preview_card_color_content.xml
+++ b/res/layout/preview_card_color_content.xml
@@ -75,14 +75,13 @@
android:layout_width="@dimen/preview_theme_icon_size"
android:layout_height="@dimen/preview_theme_icon_size"
android:layout_gravity="center"
- android:id="@+id/preview_color_qs_2_bg"
- android:tint="@color/tile_disabled_background_color"/>
+ android:id="@+id/preview_color_qs_2_bg"/>
<ImageView
android:layout_width="@dimen/preview_theme_tile_size"
android:layout_height="@dimen/preview_theme_tile_size"
android:layout_gravity="center"
android:id="@+id/preview_color_qs_2_icon"
- android:color="@color/tile_disabled_icon_color"/>
+ android:color="@color/tile_enabled_icon_color"/>
</FrameLayout>
</LinearLayout>
<Space
diff --git a/res/layout/preview_card_cover_content.xml b/res/layout/preview_card_cover_content.xml
index d052642..055a126 100644
--- a/res/layout/preview_card_cover_content.xml
+++ b/res/layout/preview_card_cover_content.xml
@@ -67,13 +67,12 @@
<ImageView
android:layout_width="@dimen/preview_theme_icon_size"
android:layout_height="@dimen/preview_theme_icon_size"
- android:id="@+id/preview_color_qs_2_bg"
- android:tint="@color/tile_disabled_background_color"/>
+ android:id="@+id/preview_color_qs_2_bg"/>
<ImageView
android:layout_width="@dimen/preview_theme_tile_size"
android:layout_height="@dimen/preview_theme_tile_size"
android:id="@+id/preview_color_qs_2_icon"
- android:color="@color/tile_disabled_icon_color"
+ android:tint="@color/tile_enabled_icon_color"
android:layout_gravity="center"/>
</FrameLayout>
diff --git a/res/layout/theme_component_preview.xml b/res/layout/theme_component_preview.xml
index a087c0d..32d3f20 100644
--- a/res/layout/theme_component_preview.xml
+++ b/res/layout/theme_component_preview.xml
@@ -14,55 +14,47 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<FrameLayout
- xmlns:app="http://schemas.android.com/apk/res-auto"
+
+
+<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools" android:id="@+id/theme_preview_card_background"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/theme_preview_card_background"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:focusable="true" tools:showIn="@layout/theme_preview_card">
-
- <androidx.constraintlayout.widget.ConstraintLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingHorizontal="@dimen/preview_card_padding"
- android:paddingTop="@dimen/preview_card_padding"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintHorizontal_bias="0.5"
- app:layout_constraintStart_toStartOf="parent">
+ android:maxHeight="@dimen/preview_theme_max_height"
+ android:minHeight="@dimen/preview_theme_min_height"
+ android:paddingHorizontal="@dimen/preview_card_padding"
+ android:paddingTop="@dimen/preview_card_padding">
<ViewStub
android:id="@+id/theme_preview_top_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout="@layout/theme_preview_topbar"
+ app:layout_constraintBottom_toTopOf="@+id/theme_preview_card_header"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent"/>
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_chainStyle="spread_inside"/>
<TextView
android:id="@+id/theme_preview_card_header"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
- android:layout_marginVertical="@dimen/card_header_top_margin"
- android:drawablePadding="12dp"
+ android:drawablePadding="@dimen/theme_preview_header_drawable_padding"
android:textAppearance="@style/CardTitleTextAppearance"
+ app:layout_constraintBottom_toTopOf="@id/theme_preview_card_body_container"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/theme_preview_top_bar"
- app:layout_goneMarginTop="@dimen/card_header_top_margin"/>
-
- <Space
- android:id="@+id/theme_preview_content_spacer"
- android:layout_width="0dp"
- android:layout_height="0dp"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintHeight_max="48dp"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/theme_preview_card_header"/>
+ app:layout_goneMarginTop="@dimen/card_header_top_margin"
+ app:layout_constraintVertical_chainStyle="spread_inside"
+ tools:text="Default"/>
<FrameLayout
android:id="@+id/theme_preview_card_body_container"
@@ -76,23 +68,23 @@
app:layout_constraintHeight_min="@dimen/preview_theme_content_min_height"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/theme_preview_content_spacer">
-
- </FrameLayout>
+ app:layout_constraintTop_toBottomOf="@+id/theme_preview_card_header"/>
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
- app:layout_constraintGuide_end="40dp"
- />
+ app:layout_constraintBottom_toTopOf="@+id/edit_label"
+ app:layout_constraintGuide_end="@dimen/min_taptarget_height"
+ app:layout_constraintTop_toBottomOf="@+id/theme_preview_card_body_container"/>
<TextView
android:id="@+id/edit_label"
style="@style/EditLabelStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:minHeight="@dimen/min_taptarget_height"
android:drawableStart="@drawable/ic_tune"
android:drawablePadding="8dp"
android:gravity="center"
@@ -102,8 +94,7 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/theme_preview_card_body_container"
+ app:layout_constraintTop_toBottomOf="@+id/guideline"
app:layout_constraintVertical_bias="0.5"/>
- </androidx.constraintlayout.widget.ConstraintLayout>
-</FrameLayout>
\ No newline at end of file
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/res/layout/theme_icon_option.xml b/res/layout/theme_icon_option.xml
index 4872ffc..62925ad 100644
--- a/res/layout/theme_icon_option.xml
+++ b/res/layout/theme_icon_option.xml
@@ -38,6 +38,7 @@
android:id="@+id/option_icon"
android:layout_width="@dimen/component_icon_thumb_size"
android:layout_height="@dimen/component_icon_thumb_size"
- android:layout_gravity="center"/>
+ android:layout_gravity="center"
+ android:tint="?android:colorForeground"/>
</FrameLayout>
</LinearLayout>
diff --git a/res/layout/theme_option.xml b/res/layout/theme_option.xml
index de81231..1cb9ffa 100644
--- a/res/layout/theme_option.xml
+++ b/res/layout/theme_option.xml
@@ -45,7 +45,8 @@
android:layout_height="@dimen/theme_option_icon_sample_height"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
- android:layout_margin="@dimen/theme_option_sample_padding"/>
+ android:layout_margin="@dimen/theme_option_sample_padding"
+ android:tint="?android:colorForeground"/>
<ImageView
android:id="@+id/theme_option_shape"
android:layout_width="@dimen/theme_option_shape_sample_width"
diff --git a/res/layout/theme_preview_topbar.xml b/res/layout/theme_preview_topbar.xml
index 2422064..5642668 100644
--- a/res/layout/theme_preview_topbar.xml
+++ b/res/layout/theme_preview_topbar.xml
@@ -20,7 +20,8 @@
android:id="@+id/theme_preview_top_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- tools:visibility="visible" tools:showIn="@layout/theme_preview_card">
+ tools:visibility="visible"
+ tools:showIn="@layout/theme_preview_card">
<TextView
android:id="@+id/theme_preview_clock"
android:layout_width="wrap_content"
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 9ec9fbb..63c127b 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Gebruik <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Nee, dankie"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g>-horlosievoorskou"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Oeps! Iets het skeefgeloop."</string>
</resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index b28e5c4..ae13d48 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g>ን ይጠቀሙ"</string>
<string name="no_thanks" msgid="7286616980115687627">"አይ፣ አመሰግናለሁ"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"የ<xliff:g id="ID_1">%1$s</xliff:g> ሰዓት ቅድመ-እይታ"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"ውይ! የሆነ ችግር ተፈጥሯል።"</string>
</resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 4ba6689..39173b0 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"استخدام <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"لا، شكرًا"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"معاينة الساعة <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"عفوًا! حدث خطأ ما."</string>
</resources>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index 74d907b..fc322f4 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g> ব্যৱহাৰ কৰক"</string>
<string name="no_thanks" msgid="7286616980115687627">"নালাগে, ধন্যবাদ"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> ঘড়ীৰ পূৰ্বদৰ্শন"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"দুঃখিত! কিবা ভুল হ’ল।"</string>
</resources>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index e8de0e2..e1001c9 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g> istifadə edin"</string>
<string name="no_thanks" msgid="7286616980115687627">"Xeyr, təşəkkürlər"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g>, saatın önizlənməsi"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Ups! Xəta baş verdi."</string>
</resources>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 48bd436..cb4becd 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Koristi <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Ne, hvala"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Pregled sata <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Ups! Došlo je do greške."</string>
</resources>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index e48b7bc..a1b4262 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Выкарыстоўваць <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Не, дзякуй"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Папярэдні прагляд гадзінніка <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Памылка! Нешта пайшло не так."</string>
</resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index d6599d0..ebd909a 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Използване на „<xliff:g id="ID_1">%1$s</xliff:g>“"</string>
<string name="no_thanks" msgid="7286616980115687627">"Не, благодаря"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Визуализация на циферблата <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Ами сега! Нещо се обърка."</string>
</resources>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index fc5f9f7..9d45e49 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g> ব্যবহার করুন"</string>
<string name="no_thanks" msgid="7286616980115687627">"না, থাক"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> ঘড়ির প্রিভিউ"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"উপস! কিছু সমস্যা হয়েছে।"</string>
</resources>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 68f3928..c09fdef 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Koristi stil <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Ne, hvala"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Pregled sata <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Ups! Nešto nije uredu"</string>
</resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index f9cc32c..9ba191e 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Utilitza l\'estil <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"No, gràcies"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Previsualització de rellotge <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Vaja! S\'ha produït un error."</string>
</resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 5c5f492..77ce470 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Použít styl <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Ne, děkuji"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Náhled ciferníku <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Jejda. Něco se pokazilo."</string>
</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 552ea19..848709b 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Brug <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Nej tak"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Forhåndsvisning af urskiven <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Ups! Noget gik galt."</string>
</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index c4b44ad..681350f 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g> verwenden"</string>
<string name="no_thanks" msgid="7286616980115687627">"Nein danke"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Vorschau für Zifferblatt <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Hoppla, ein Fehler ist aufgetreten."</string>
</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index fbab553..fae57a5 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Χρήση <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Όχι, ευχαριστώ"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Προεπισκόπηση ρολογιού <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Δυστυχώς, παρουσιάστηκε κάποιο πρόβλημα."</string>
</resources>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 2208e8a..756ad00 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Use <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"No thanks"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> clock preview"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Oops! Something went wrong."</string>
</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 2208e8a..756ad00 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Use <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"No thanks"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> clock preview"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Oops! Something went wrong."</string>
</resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 2208e8a..756ad00 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Use <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"No thanks"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> clock preview"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Oops! Something went wrong."</string>
</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index c854d47..3dd33ed 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Usar <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"No, gracias"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Vista previa del reloj <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Se produjo un error."</string>
</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index e572b9c..6ebf016 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Utilizar <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"No, gracias"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Vista previa del reloj <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"¡Vaya! Se ha producido un error."</string>
</resources>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 59308e2..d6230af 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Kasuta teemat <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Tänan, ei"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Kella <xliff:g id="ID_1">%1$s</xliff:g> eelvaade"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Vabandust! Midagi läks valesti."</string>
</resources>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index df84512..e461865 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Erabili <xliff:g id="ID_1">%1$s</xliff:g> estiloa"</string>
<string name="no_thanks" msgid="7286616980115687627">"Ez"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> erlojuaren aurrebista"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Arazoren bat izan da."</string>
</resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 9af1cdb..5ffd461 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"استفاده از <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"نه، متشکرم"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> پیشنمایش ساعت"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"متأسفم! مشکلی رخ داد."</string>
</resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index d2fd65b..696b5d3 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Valitse <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Ei kiitos"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Kellon esikatselu: <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Hups! Jokin meni vikaan."</string>
</resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 9ab562b..c4b0224 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Utiliser <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Non, merci"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Aperçu de l\'horloge <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Oups! Une erreur s\'est produite."</string>
</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 417eebd..e28b35e 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Utiliser <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Non, merci"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> aperçu d\'horloge"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Petit problème… Une erreur s\'est produite."</string>
</resources>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 73b4ce1..2cdb267 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Utilizar <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Non, grazas"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Vista previa do reloxo <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Ai! Produciuse un erro."</string>
</resources>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index d344bdd..d94c671 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g>નો ઉપયોગ કરો"</string>
<string name="no_thanks" msgid="7286616980115687627">"ના, આભાર"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> ઘડિયાળનું પ્રીવ્યૂ"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"અરેરે! કંઈક ખોટું થયું."</string>
</resources>
diff --git a/res/values-h740dp/dimens.xml b/res/values-h740dp/dimens.xml
new file mode 100644
index 0000000..a752b6b
--- /dev/null
+++ b/res/values-h740dp/dimens.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+ Copyright (C) 2019 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<resources>
+ <dimen name="preview_theme_content_margin">12dp</dimen>
+
+ <dimen name="preview_theme_icon_size">40dp</dimen>
+ <dimen name="preview_theme_tile_size">20dp</dimen>
+ <dimen name="preview_theme_shape_size">52dp</dimen>
+ <dimen name="preview_theme_cover_content_extra_margin">8dp</dimen>
+
+ <dimen name="preview_theme_content_min_height">152dp</dimen>
+
+ <dimen name="theme_preview_header_drawable_padding">12dp</dimen>
+
+ <dimen name="card_header_top_margin">16dp</dimen>
+</resources>
\ No newline at end of file
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 7e349c9..50e26a8 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g> इस्तेमाल करें"</string>
<string name="no_thanks" msgid="7286616980115687627">"रहने दें"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> घड़ी की झलक"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"ओह हो! कुछ गड़बड़ी हुई."</string>
</resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index fd3990f..b3166b1 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Koristi <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Ne, hvala"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Pregled sata <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Ups! Došlo je do pogreške."</string>
</resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 3425778..ee4df61 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g> használata"</string>
<string name="no_thanks" msgid="7286616980115687627">"Nem, köszönöm"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> – óra előnézete"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Hoppá! Valami hiba történt."</string>
</resources>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 4d0e281..94f4d1c 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Օգտագործել <xliff:g id="ID_1">%1$s</xliff:g> ոճը"</string>
<string name="no_thanks" msgid="7286616980115687627">"Ոչ"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> ժամացույցի նախադիտում"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Սխալ առաջացավ։"</string>
</resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 32fa0ec..1b9c7cc 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Gunakan <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Lain kali"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Pratinjau jam <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Ups! Ada yang tidak beres."</string>
</resources>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 02d46c7..8474c87 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Nota „<xliff:g id="ID_1">%1$s</xliff:g>“"</string>
<string name="no_thanks" msgid="7286616980115687627">"Nei, takk"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> forskoðun klukku"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Úbbs! Eitthvað fór úrskeiðis."</string>
</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 3fd0c72..1a46542 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Usa <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"No, grazie"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Anteprima dell\'orologio <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Spiacenti. Si è verificato un problema."</string>
</resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 5137153..f8d444b 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"שימוש בעיצוב <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"לא תודה"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"תצוגה מקדימה של שעון <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"אופס! משהו השתבש."</string>
</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index b792418..f95c696 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g> を使用"</string>
<string name="no_thanks" msgid="7286616980115687627">"いいえ"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> クロックのプレビュー"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"問題が発生しました。"</string>
</resources>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index 4bc9afb..5e6cab0 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g>-ის გამოყენება"</string>
<string name="no_thanks" msgid="7286616980115687627">"არა, გმადლობთ"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> საათის გადახედვა"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"უკაცრავად! წარმოიქმნა შეფერხება."</string>
</resources>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index a7e5291..c8aa174 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g> пайдалану"</string>
<string name="no_thanks" msgid="7286616980115687627">"Жоқ, рақмет"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> сағатын алдын ала қарау"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Қап! Бірдеңе дұрыс болмады."</string>
</resources>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index 2a7e623..1bc2e7f 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"ប្រើ <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"ទេ អរគុណ"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"ការមើលនាឡិកា <xliff:g id="ID_1">%1$s</xliff:g> សាកល្បង"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"អូ៎! មានអ្វីមួយខុសប្រក្រតី។"</string>
</resources>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 272d91e..0bffb94 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g> ಅನ್ನು ಬಳಸಿ"</string>
<string name="no_thanks" msgid="7286616980115687627">"ಬೇಡ"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> ಗಡಿಯಾರ ಪೂರ್ವವೀಕ್ಷಣೆ"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"ಓಹ್! ಯಾವುದೋ ತಪ್ಪು ಸಂಭವಿಸಿದೆ."</string>
</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 80a24c0..2cdd6a8 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g> 사용"</string>
<string name="no_thanks" msgid="7286616980115687627">"아니요"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> 시계 미리보기"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"죄송합니다. 문제가 발생했습니다."</string>
</resources>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index f13c07d..bcd7cea 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g> колдонулсун"</string>
<string name="no_thanks" msgid="7286616980115687627">"Жок, рахмат"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> саатын алдын ала көрүү"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Ой! Бир жерден ката кетти."</string>
</resources>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 1ad275c..3b9dd17 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"ໃຊ້ <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"ບໍ່, ຂອບໃຈ"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"ຕົວຢ່າງໂມງ <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"ຂໍອະໄພ! ເກີດບາງຢ່າງຜິດພາດຂຶ້ນ."</string>
</resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 997608e..07984e6 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Naudoti „<xliff:g id="ID_1">%1$s</xliff:g>“"</string>
<string name="no_thanks" msgid="7286616980115687627">"Ne, ačiū"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Ciferblato „<xliff:g id="ID_1">%1$s</xliff:g>“ peržiūra"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Oi, kažkas nepavyko."</string>
</resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index a325e15..c671560 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Izmantojiet <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Nē, paldies"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g>: pulksteņa priekšskatījums"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Diemžēl radās problēma."</string>
</resources>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 19b3c23..cf58de7 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Користи <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Не, фала"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Преглед на часовник <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Оф леле! Нешто тргна наопаку."</string>
</resources>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index f1b8451..ea0488a 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g> ഉപയോഗിക്കുക"</string>
<string name="no_thanks" msgid="7286616980115687627">"വേണ്ട"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> ക്ലോക്ക് പ്രിവ്യൂ"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"ക്ഷമിക്കണം! എന്തോ കുഴപ്പമുണ്ടായി."</string>
</resources>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 5084797..136afb1 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g>-г ашиглах"</string>
<string name="no_thanks" msgid="7286616980115687627">"Үгүй, баярлалаа"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> цагийг урьдчилан үзэх"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Өө! Алдаа гарлаа."</string>
</resources>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index b8bf7ce..a5e0550 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g> वापरा"</string>
<string name="no_thanks" msgid="7286616980115687627">"नाही, नको"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> घड्याळाचे पूर्वावलोकन"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"अरेरे! काहीतरी चूक झाली."</string>
</resources>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 8afa281..87d6f6d 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Gunakan <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Tidak perlu"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> pratonton jam"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Op! Berlaku kesilapan."</string>
</resources>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 4c280e7..a0f8435 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g> သုံးရန်"</string>
<string name="no_thanks" msgid="7286616980115687627">"မလိုပါ"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> နာရီ အစမ်းကြည့်ခြင်း"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"သည်းခံပါ။ တစ်ခုခု မှားသွားသည်။"</string>
</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 534c219..062a98b 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Bruk <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Nei takk"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Forhåndsvisning av <xliff:g id="ID_1">%1$s</xliff:g>-klokke"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Beklager, men noe gikk galt."</string>
</resources>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 6d55db8..5b3c636 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g> प्रयोग गर्नु…"</string>
<string name="no_thanks" msgid="7286616980115687627">"पर्दैन, धन्यवाद"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> घडीको पूर्वावलोकन"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"हत्तेरिका! केही चिज गडबड भयो।"</string>
</resources>
diff --git a/res/values-night/colors.xml b/res/values-night/colors.xml
index 6a79445..4037f4d 100644
--- a/res/values-night/colors.xml
+++ b/res/values-night/colors.xml
@@ -18,7 +18,7 @@
<resources>
<color name="theme_preview_icon_color">@color/white_70_alpha</color>
- <color name="icon_thumbnail_color">@color/white_70_alpha</color>
+ <color name="icon_thumbnail_color">@color/black_87_alpha</color>
<color name="control_grey">#b3b3b3</color>
<color name="switch_track_tint">#171717</color>
@@ -35,7 +35,6 @@
<color name="selected_check_background_color">#81C995</color>
<color name="toolbar_icon_color">@color/text_color_light</color>
- <color name="toolbar_color">#000000</color>
<color name="divider_color">@color/white_14_alpha</color>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 256faab..71f7f24 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g> gebruiken"</string>
<string name="no_thanks" msgid="7286616980115687627">"Nee, bedankt"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Voorbeeld van <xliff:g id="ID_1">%1$s</xliff:g>-klok bekijken"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Er is iets misgegaan."</string>
</resources>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 07905b8..071664a 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g> ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="no_thanks" msgid="7286616980115687627">"ନାହିଁ, ଥାଉ"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> ଘଣ୍ଟାର ପୂର୍ବାବଲୋକନ"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"ଓହୋଃ, କିଛି ଭୁଲ ହୋଇଗଲା।"</string>
</resources>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index 07c67ef..61d89a0 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g> ਵਰਤੋ"</string>
<string name="no_thanks" msgid="7286616980115687627">"ਨਹੀਂ, ਧੰਨਵਾਦ"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> ਘੜੀ ਦੀ ਪੂਰਵ-ਝਲਕ"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"ਓਹੋ! ਕੋਈ ਗੜਬੜ ਹੋਈ।"</string>
</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 7903977..7b94f32 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Użyj motywu <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Nie, dziękuję"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Podgląd zegara <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Ups. Coś poszło nie tak."</string>
</resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 132119c..73dc198 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Utilizar <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Não, obrigado"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Pré-visualização do relógio <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Ups! Ocorreu um erro."</string>
</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 1bf6795..417280b 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Usar <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Não"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Visualização do relógio <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Ops! Algo deu errado."</string>
</resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 2a18739..04e1a3f 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Folosiți <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Nu, mulțumesc"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Previzualizarea ceasului <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Hopa! Ceva nu a funcționat cum trebuie."</string>
</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index fac53b9..0b356fc 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g>: использовать"</string>
<string name="no_thanks" msgid="7286616980115687627">"Нет"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g>: предварительный просмотр циферблата"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Произошла ошибка."</string>
</resources>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index 7b4a6db..b9e20a3 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g> භාවිතා කරන්න"</string>
<string name="no_thanks" msgid="7286616980115687627">"එපා, ස්තූතියි"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> ඔරලෝසු පෙරදසුන"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"අපොයි! යමක් වැරදී ගියේය."</string>
</resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index c836aca..336c221 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Použiť <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Nie, ďakujem"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Ukážka ciferníka <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Ojoj! Niečo sa pokazilo."</string>
</resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 38be787..b2415a6 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Uporabi slog <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Ne, hvala"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Predogled ure <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Ojoj, prišlo je do napake."</string>
</resources>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index 8b199d9..b6b9c45 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Përdor <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Jo, faleminderit"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Pamja paraprake e orës <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Mos! Ndodhi një gabim."</string>
</resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 3b6bf6d..afe91b4 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Користи <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Не, хвала"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Преглед сата <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Упс! Дошло је до грешке."</string>
</resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index ea1e7f0..d124728 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Använd <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Nej tack"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Förhandsvisning av urtavlan <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Hoppsan! Något gick fel."</string>
</resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 049a4e1..db157ae 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Tumia <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Hapana, asante"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Onyesho la kukagua saa ya <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Lo! Hitilafu imetokea."</string>
</resources>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index e9609b0..a539944 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g>ஐப் பயன்படுத்து"</string>
<string name="no_thanks" msgid="7286616980115687627">"வேண்டாம்"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> கடிகார மாதிரிக்காட்சி"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"அச்சச்சோ! ஏதோ தவறாகிவிட்டது."</string>
</resources>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index bbf4026..12dd69d 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g>ని ఉపయోగించు"</string>
<string name="no_thanks" msgid="7286616980115687627">"వద్దు, ధన్యవాదం"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> గడియార ప్రివ్యూ"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"అయ్యో, ఏదో తప్పు జరిగింది."</string>
</resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index cae0802..d061f5e 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"ใช้ <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"ไม่เป็นไร"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"ตัวอย่างนาฬิกา <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"อ๊ะ! มีบางอย่างผิดปกติ"</string>
</resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index b6d174f..cdc7de1 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Gamitin ang <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Hindi, salamat"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> preview ng orasan"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Oops! May maling nangyari."</string>
</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index ca6089f..575f052 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g> stilini kullan"</string>
<string name="no_thanks" msgid="7286616980115687627">"Hayır"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> saat önizleme"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Hay aksi! Bir hata oluştu."</string>
</resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 812a78b..9e04c90 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Вибрати стиль \"<xliff:g id="ID_1">%1$s</xliff:g>\""</string>
<string name="no_thanks" msgid="7286616980115687627">"Ні, дякую"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Попередній перегляд годинника \"<xliff:g id="ID_1">%1$s</xliff:g>\""</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Сталася помилка."</string>
</resources>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index cce806c..e3b6823 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g> استعمال کریں"</string>
<string name="no_thanks" msgid="7286616980115687627">"نہیں، شکریہ"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> گھڑی کا پیش منظر"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"افوہ! کچھ غلط ہوگیا۔"</string>
</resources>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 88cd360..1d0c62b 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g> ishlatish"</string>
<string name="no_thanks" msgid="7286616980115687627">"Kerak emas"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> soatiga razm solish"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Ana xolos! Xatolik yuz berdi."</string>
</resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 2fc7c83..f688d90 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Sử dụng <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Không, cảm ơn"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"Bản xem trước đồng hồ <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Rất tiếc! Đã xảy ra lỗi."</string>
</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index f907108..52a0bda 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"使用<xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"不用了"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g>时钟预览"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"糟糕!遇到了问题。"</string>
</resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 34ddf83..91ed965 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"使用「<xliff:g id="ID_1">%1$s</xliff:g>」"</string>
<string name="no_thanks" msgid="7286616980115687627">"不用了,謝謝"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"「<xliff:g id="ID_1">%1$s</xliff:g>」時鐘預覽"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"糟糕!發生錯誤。"</string>
</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index b0d12a0..de8381a 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"使用「<xliff:g id="ID_1">%1$s</xliff:g>」"</string>
<string name="no_thanks" msgid="7286616980115687627">"不用了,謝謝"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"「<xliff:g id="ID_1">%1$s</xliff:g>」時鐘預覽畫面"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"糟糕!發生錯誤。"</string>
</resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 8bf2d53..2ead0b0 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -65,4 +65,5 @@
<string name="use_style_button" msgid="1754493078383627019">"Sebenzisa i-<xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="no_thanks" msgid="7286616980115687627">"Cha, ngiyabonga"</string>
<string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> ukubuka kuqala iwashi"</string>
+ <string name="something_went_wrong" msgid="529840112449799117">"Hawu! Kukhona okungahambile kahle."</string>
</resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index bc27623..b63f8ff 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -26,7 +26,7 @@
<color name="system_navigation_bar_divider">#1f000000</color>
<color name="shape_thumbnail_color">#b2b2b2</color>
- <color name="icon_thumbnail_color">@color/white_70_alpha</color>
+ <color name="icon_thumbnail_color">@color/black_87_alpha</color>
<color name="clockface_preview_background">@android:color/black</color>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index ed05ee5..f3f0e86 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -58,22 +58,27 @@
<dimen name="theme_option_font_text_size">16dp</dimen>
<dimen name="theme_option_title_font_text_size">12sp</dimen>
- <dimen name="option_tile_margin_horizontal">2dp</dimen>
+ <dimen name="option_tile_margin_horizontal">6dp</dimen>
<dimen name="theme_option_label_margin">4dp</dimen>
<dimen name="preview_card_padding">20dp</dimen>
<dimen name="card_title_text_size">16sp</dimen>
<dimen name="card_cover_title_text_size">24sp</dimen>
- <dimen name="card_header_top_margin">16dp</dimen>
- <dimen name="preview_theme_content_margin">40dp</dimen>
+ <dimen name="card_header_top_margin">0dp</dimen>
+ <dimen name="preview_pager_max_height">450dp</dimen>
+ <dimen name="preview_pager_min_height">350dp</dimen>
+ <dimen name="preview_theme_max_height">400dp</dimen>
+ <dimen name="preview_theme_min_height">180dp</dimen>
+ <dimen name="theme_preview_header_drawable_padding">8dp</dimen>
+ <dimen name="preview_theme_content_margin">18dp</dimen>
<dimen name="preview_theme_content_max_height">192dp</dimen>
- <dimen name="preview_theme_content_min_height">152dp</dimen>
- <dimen name="preview_theme_icon_size">40dp</dimen>
- <dimen name="preview_theme_tile_size">20dp</dimen>
- <dimen name="preview_theme_shape_size">52dp</dimen>
- <dimen name="preview_theme_cover_topbar_icon_size">20dp</dimen>
- <dimen name="preview_theme_cover_content_extra_margin">8dp</dimen>
+ <dimen name="preview_theme_content_min_height">120dp</dimen>
+ <dimen name="preview_theme_icon_size">30dp</dimen>
+ <dimen name="preview_theme_tile_size">16dp</dimen>
+ <dimen name="preview_theme_shape_size">36dp</dimen>
+ <dimen name="preview_theme_cover_topbar_icon_size">16dp</dimen>
+ <dimen name="preview_theme_cover_content_extra_margin">16dp</dimen>
<dimen name="font_preview_body_width">200dp</dimen>
<dimen name="font_preview_divider_gap">30dp</dimen>
diff --git a/res/values/override.xml b/res/values/override.xml
index 818f357..a01507e 100644
--- a/res/values/override.xml
+++ b/res/values/override.xml
@@ -31,10 +31,10 @@
typically GMS apps so they should be available in GMS devices. -->
<array name="icon_shape_preview_packages">
<item>com.google.android.gm</item>
- <item>com.google.android.apps.maps</item>
+ <item>com.google.android.googlequicksearchbox</item>
<item>com.google.android.apps.photos</item>
<item>com.google.android.apps.docs</item>
<item>com.google.android.youtube</item>
<item>com.android.vending</item>
</array>
-</resources>
\ No newline at end of file
+</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 46de146..f571b6b 100755
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -187,4 +187,7 @@
<!-- Content description for a screen showing the preview of a clock face. [CHAR_LIMIT=NONE] -->
<string name="clock_preview_content_description"><xliff:g name="clock_name">%1$s</xliff:g> clock preview</string>
+
+ <!-- Generic error message [CHAR_LIMIT=NONE] -->
+ <string name="something_went_wrong">Oops! Something went wrong.</string>
</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 800e99a..c4c5d4d 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -15,6 +15,8 @@
limitations under the License.
-->
<resources>
+
+ <!-- Main themes -->
<style name="CustomizationTheme" parent="@android:style/Theme.DeviceDefault.Settings">
<item name="colorPrimary">?android:colorPrimary</item>
@@ -30,6 +32,7 @@
<item name="actionButtonStyle">?android:actionButtonStyle</item>
<item name="actionMenuTextColor">?android:actionMenuTextColor</item>
</style>
+
<style name="CustomizationTheme.NoActionBar">
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
@@ -37,6 +40,7 @@
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
</style>
+ <!-- Bottom nav -->
<style name="BottomNavStyle">
<item name="itemIconTint">@color/bottom_nav_item_color</item>
<item name="itemTextColor">@color/bottom_nav_item_color</item>
@@ -49,12 +53,8 @@
<style name="BottomNavTextAppearance" parent="HeaderTextAppearance">
<item name="android:textSize">@dimen/bottom_navbar_font_text_size</item>
</style>
- <style name="RegularToolbarStyle" parent="@android:style/Widget.DeviceDefault.Light.ActionBar.Solid">
- <item name="android:background">@color/toolbar_color</item>
- <item name="android:elevation">0dp</item>
- <item name="android:theme">@style/WallpaperTheme</item>
- </style>
+ <!-- Common components and widgets -->
<style name="HeaderTextAppearance" parent="@android:style/TextAppearance.DeviceDefault.Widget.ActionBar.Title">
<item name="android:textFontWeight">400</item>
</style>
@@ -63,13 +63,14 @@
<style name="ActionSecondaryButton" parent="android:Widget.DeviceDefault.Button.Borderless.Colored"/>
+ <!-- Option tiles -->
<style name="OptionTitleTextAppearance" parent="HeaderTextAppearance">
<item name="android:textColor">@color/option_title_color</item>
<item name="android:textAlignment">center</item>
<item name="android:textSize">@dimen/theme_option_title_font_text_size</item>
</style>
-
+ <!-- Preview cards -->
<style name="PreviewCard" parent="CardView">
<item name="cardCornerRadius">?android:dialogCornerRadius</item>
<item name="android:clipChildren">true</item>
@@ -90,7 +91,7 @@
<style name="CoverTitleTextAppearance" parent="CardTitleTextAppearance">
<item name="android:textSize">@dimen/card_cover_title_text_size</item>
- <item name="android:textColor">@color/white_70_alpha</item>
+ <item name="android:textColor">@color/black_87_alpha</item>
</style>
<style name="FontCardTitleStyle" parent="HeaderTextAppearance">
@@ -104,9 +105,11 @@
<item name="android:textAppearance">@android:style/TextAppearance.DeviceDefault</item>
</style>
+ <!-- Custom theme editor -->
<style name="EditLabelStyle">
- <item name="android:textAppearance">@android:style/TextAppearance.DeviceDefault</item>
+ <item name="android:textAppearance">@android:style/TextAppearance.DeviceDefault.Widget.Button</item>
<item name="android:textColor">@color/material_white_100</item>
+ <item name="android:textAllCaps">false</item>
</style>
<style name="CustomThemeNameEditText" parent="@android:style/Widget.DeviceDefault.EditText">
diff --git a/src/com/android/customization/model/CustomizationManager.java b/src/com/android/customization/model/CustomizationManager.java
index 3296ca1..7b9f463 100644
--- a/src/com/android/customization/model/CustomizationManager.java
+++ b/src/com/android/customization/model/CustomizationManager.java
@@ -15,6 +15,9 @@
*/
package com.android.customization.model;
+import android.util.Log;
+import android.widget.Toast;
+
import androidx.annotation.Nullable;
import java.util.List;
@@ -49,6 +52,15 @@
* Called when the options have been retrieved.
*/
void onOptionsLoaded(List<T> options);
+
+ /**
+ * Called if there was an error loading grid options
+ */
+ default void onError(@Nullable Throwable throwable) {
+ if (throwable != null) {
+ Log.e("OptionsFecthedListener", "Error loading options", throwable);
+ }
+ }
}
/**
diff --git a/src/com/android/customization/model/ResourceConstants.java b/src/com/android/customization/model/ResourceConstants.java
index be3b548..0b1dec2 100644
--- a/src/com/android/customization/model/ResourceConstants.java
+++ b/src/com/android/customization/model/ResourceConstants.java
@@ -83,7 +83,9 @@
"ic_qs_dnd",
"ic_qs_flashlight",
"ic_qs_auto_rotate",
- "ic_qs_airplane"
+ "ic_qs_airplane",
+ "ic_signal_cellular_3_4_bar",
+ "ic_battery_80_24dp"
};
ArrayList<String> sTargetPackages = new ArrayList<>();
diff --git a/src/com/android/customization/model/grid/GridOptionsManager.java b/src/com/android/customization/model/grid/GridOptionsManager.java
index ba5968e..1599dde 100644
--- a/src/com/android/customization/model/grid/GridOptionsManager.java
+++ b/src/com/android/customization/model/grid/GridOptionsManager.java
@@ -78,8 +78,19 @@
@Override
protected void onPostExecute(List<GridOption> gridOptions) {
if (mCallback != null) {
- mCallback.onOptionsLoaded(gridOptions != null ? gridOptions
- : Collections.emptyList());
+ if (gridOptions != null && !gridOptions.isEmpty()) {
+ mCallback.onOptionsLoaded(gridOptions);
+ } else {
+ mCallback.onError(null);
+ }
+ }
+ }
+
+ @Override
+ protected void onCancelled() {
+ super.onCancelled();
+ if (mCallback != null) {
+ mCallback.onError(null);
}
}
}
diff --git a/src/com/android/customization/model/theme/DefaultThemeProvider.java b/src/com/android/customization/model/theme/DefaultThemeProvider.java
index 58b6daf..87b5b4a 100644
--- a/src/com/android/customization/model/theme/DefaultThemeProvider.java
+++ b/src/com/android/customization/model/theme/DefaultThemeProvider.java
@@ -15,6 +15,8 @@
*/
package com.android.customization.model.theme;
+import static android.content.res.Resources.ID_NULL;
+
import static com.android.customization.model.ResourceConstants.ANDROID_PACKAGE;
import static com.android.customization.model.ResourceConstants.ICONS_FOR_PREVIEW;
import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_COLOR;
@@ -33,6 +35,7 @@
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
+import android.content.res.Resources;
import android.content.res.Resources.NotFoundException;
import android.service.wallpaper.WallpaperService;
import android.text.TextUtils;
@@ -83,12 +86,17 @@
private static final String WALLPAPER_PREFIX = "theme_wallpaper_";
private static final String WALLPAPER_TITLE_PREFIX = "theme_wallpaper_title_";
private static final String WALLPAPER_ATTRIBUTION_PREFIX = "theme_wallpaper_attribution_";
+ private static final String WALLPAPER_THUMB_PREFIX = "theme_wallpaper_thumbnail_";
private static final String WALLPAPER_ACTION_PREFIX = "theme_wallpaper_action_";
+ private static final String WALLPAPER_OPTIONS_PREFIX = "theme_wallpaper_options_";
private static final String DEFAULT_THEME_NAME= "default";
private static final String THEME_TITLE_FIELD = "_theme_title";
private static final String THEME_ID_FIELD = "_theme_id";
+ // Maximum number of themes allowed (including default, pre-bundled and custom)
+ private static final int MAX_TOTAL_THEMES = 10;
+
private final OverlayThemeExtractor mOverlayProvider;
private List<ThemeBundle> mThemes;
private final CustomizationPreferences mCustomizationPreferences;
@@ -181,7 +189,11 @@
String wallpaperResName = WALLPAPER_PREFIX + themeName;
int wallpaperResId = mStubApkResources.getIdentifier(wallpaperResName,
"drawable", mStubPackageName);
- if (wallpaperResId > 0) {
+ // Check in case the theme has a separate thumbnail for the wallpaper
+ String wallpaperThumbnailResName = WALLPAPER_THUMB_PREFIX + themeName;
+ int wallpaperThumbnailResId = mStubApkResources.getIdentifier(wallpaperThumbnailResName,
+ "drawable", mStubPackageName);
+ if (wallpaperResId != ID_NULL) {
builder.setWallpaperInfo(mStubPackageName, wallpaperResName,
themeName, wallpaperResId,
mStubApkResources.getIdentifier(WALLPAPER_TITLE_PREFIX + themeName,
@@ -191,19 +203,26 @@
mStubPackageName),
mStubApkResources.getIdentifier(WALLPAPER_ACTION_PREFIX + themeName,
"string", mStubPackageName))
- .setWallpaperAsset(
- getDrawableResourceAsset(WALLPAPER_PREFIX, themeName));
+ .setWallpaperAsset(wallpaperThumbnailResId != ID_NULL ?
+ getDrawableResourceAsset(WALLPAPER_THUMB_PREFIX, themeName)
+ : getDrawableResourceAsset(WALLPAPER_PREFIX, themeName));
} else {
// Try to see if it's a live wallpaper reference
wallpaperResId = mStubApkResources.getIdentifier(wallpaperResName,
"string", mStubPackageName);
- if (wallpaperResId > 0) {
+ if (wallpaperResId != ID_NULL) {
String wpComponent = mStubApkResources.getString(wallpaperResId);
+
+ int wallpaperOptionsResId = mStubApkResources.getIdentifier(
+ WALLPAPER_OPTIONS_PREFIX + themeName, "string", mStubPackageName);
+ String wallpaperOptions = wallpaperOptionsResId != ID_NULL
+ ? mStubApkResources.getString(wallpaperOptionsResId) : null;
+
String[] componentParts = wpComponent.split("/");
Intent liveWpIntent = new Intent(WallpaperService.SERVICE_INTERFACE);
liveWpIntent.setComponent(
- new ComponentName(componentParts[0],
- componentParts[0] + componentParts[1]));
+ new ComponentName(componentParts[0], componentParts[1]));
+
Context appContext = mContext.getApplicationContext();
PackageManager pm = appContext.getPackageManager();
ResolveInfo resolveInfo =
@@ -213,8 +232,11 @@
try {
wallpaperInfo = new android.app.WallpaperInfo(appContext, resolveInfo);
LiveWallpaperInfo liveInfo = new LiveWallpaperInfo(wallpaperInfo);
- builder.setLiveWallpaperInfo(liveInfo)
- .setWallpaperAsset(liveInfo.getThumbAsset(mContext));
+ builder.setLiveWallpaperInfo(liveInfo).setWallpaperAsset(
+ wallpaperThumbnailResId != ID_NULL ?
+ getDrawableResourceAsset(WALLPAPER_THUMB_PREFIX, themeName)
+ : liveInfo.getThumbAsset(mContext))
+ .setWallpaperOptions(wallpaperOptions);
} catch (XmlPullParserException | IOException e) {
Log.w(TAG, "Skipping wallpaper " + resolveInfo.serviceInfo, e);
}
@@ -384,9 +406,11 @@
}
}
- // Add an empty one at the end.
- mThemes.add(new CustomTheme(CustomTheme.newId(), mContext.getString(
- R.string.custom_theme_title, customThemesCount + 1), new HashMap<>(), null));
+ if (mThemes.size() < MAX_TOTAL_THEMES) {
+ // Add an empty one at the end.
+ mThemes.add(new CustomTheme(CustomTheme.newId(), mContext.getString(
+ R.string.custom_theme_title, customThemesCount + 1), new HashMap<>(), null));
+ }
}
diff --git a/src/com/android/customization/model/theme/ThemeBundle.java b/src/com/android/customization/model/theme/ThemeBundle.java
index 12ec32c..b3258de 100644
--- a/src/com/android/customization/model/theme/ThemeBundle.java
+++ b/src/com/android/customization/model/theme/ThemeBundle.java
@@ -70,22 +70,25 @@
*/
public class ThemeBundle implements CustomizationOption<ThemeBundle> {
+ private final static String EMPTY_JSON = "{}";
private final String mTitle;
private final PreviewInfo mPreviewInfo;
private final boolean mIsDefault;
protected final Map<String, String> mPackagesByCategory;
@Nullable private final WallpaperInfo mWallpaperInfo;
+ @Nullable private final String mWallpaperOptions;
private WallpaperInfo mOverrideWallpaper;
private Asset mOverrideWallpaperAsset;
private CharSequence mContentDescription;
protected ThemeBundle(String title, Map<String, String> overlayPackages,
boolean isDefault, @Nullable WallpaperInfo wallpaperInfo,
- PreviewInfo previewInfo) {
+ @Nullable String wallpaperOptions, PreviewInfo previewInfo) {
mTitle = title;
mIsDefault = isDefault;
mPreviewInfo = previewInfo;
mWallpaperInfo = wallpaperInfo;
+ mWallpaperOptions = wallpaperOptions;
mPackagesByCategory = Collections.unmodifiableMap(overlayPackages);
}
@@ -142,7 +145,8 @@
return false;
}
if (mIsDefault) {
- return other.isDefault() || TextUtils.isEmpty(other.getSerializedPackages());
+ return other.isDefault() || TextUtils.isEmpty(other.getSerializedPackages())
+ || EMPTY_JSON.equals(other.getSerializedPackages());
}
// Map#equals ensures keys and values are compared.
return mPackagesByCategory.equals(other.mPackagesByCategory);
@@ -179,6 +183,11 @@
return mWallpaperInfo;
}
+ @Nullable
+ public String getWallpaperOptions() {
+ return mWallpaperOptions;
+ }
+
boolean isDefault() {
return mIsDefault;
}
@@ -300,11 +309,12 @@
@Dimension private int mCornerRadius;
private Asset mWallpaperAsset;
private WallpaperInfo mWallpaperInfo;
+ private String mWallpaperOptions;
protected Map<String, String> mPackages = new HashMap<>();
private List<Drawable> mAppIcons = new ArrayList<>();
public ThemeBundle build(Context context) {
- return new ThemeBundle(mTitle, mPackages, mIsDefault, mWallpaperInfo,
+ return new ThemeBundle(mTitle, mPackages, mIsDefault, mWallpaperInfo, mWallpaperOptions,
createPreviewInfo(context));
}
@@ -409,6 +419,11 @@
return this;
}
+ public Builder setWallpaperOptions(String wallpaperOptions) {
+ mWallpaperOptions = wallpaperOptions;
+ return this;
+ }
+
public Builder asDefault() {
mIsDefault = true;
return this;
diff --git a/src/com/android/customization/model/theme/ThemeManager.java b/src/com/android/customization/model/theme/ThemeManager.java
index f7bbd00..5fddc57 100644
--- a/src/com/android/customization/model/theme/ThemeManager.java
+++ b/src/com/android/customization/model/theme/ThemeManager.java
@@ -23,11 +23,10 @@
import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_SYSUI;
import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_THEMEPICKER;
import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_SHAPE;
-
import android.graphics.Point;
import android.provider.Settings;
-
import android.text.TextUtils;
+
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentActivity;
@@ -37,11 +36,11 @@
import com.android.customization.module.ThemesUserEventLogger;
import com.android.wallpaper.R;
import com.android.wallpaper.asset.Asset;
-import com.android.wallpaper.module.WallpaperPersister;
+import com.android.wallpaper.model.LiveWallpaperInfo;
import com.android.wallpaper.module.WallpaperPersister.SetWallpaperCallback;
import com.android.wallpaper.module.WallpaperSetter;
-import com.android.wallpaper.picker.SetWallpaperDialogFragment.Listener;
import com.android.wallpaper.util.WallpaperCropUtils;
+
import org.json.JSONObject;
import java.util.HashSet;
@@ -67,7 +66,7 @@
private final OverlayManagerCompat mOverlayManagerCompat;
private final WallpaperSetter mWallpaperSetter;
- private final FragmentActivity mActivity;
+ protected final FragmentActivity mActivity;
private final ThemesUserEventLogger mEventLogger;
private Map<String, String> mCurrentOverlays;
@@ -92,26 +91,12 @@
// Set wallpaper
if (theme.shouldUseThemeWallpaper()) {
mWallpaperSetter.requestDestination(mActivity, mActivity.getSupportFragmentManager(),
- R.string.set_theme_wallpaper_dialog_message, theme.getWallpaperInfo(),
- new Listener() {
- @Override
- public void onSetHomeScreen() {
- applyWallpaper(theme, WallpaperPersister.DEST_HOME_SCREEN,
- createSetWallpaperCallback(theme, callback));
- }
-
- @Override
- public void onSetLockScreen() {
- applyWallpaper(theme, WallpaperPersister.DEST_LOCK_SCREEN,
- createSetWallpaperCallback(theme, callback));
- }
-
- @Override
- public void onSetBoth() {
- applyWallpaper(theme, WallpaperPersister.DEST_BOTH,
- createSetWallpaperCallback(theme, callback));
- }
- });
+ R.string.set_theme_wallpaper_dialog_message,
+ destination -> applyWallpaper(
+ theme,
+ destination,
+ createSetWallpaperCallback(theme, callback)),
+ theme.getWallpaperInfo() instanceof LiveWallpaperInfo);
} else {
applyOverlays(theme, callback);
@@ -122,6 +107,7 @@
return new SetWallpaperCallback() {
@Override
public void onSuccess() {
+ applyWallpaperOptions(theme);
applyOverlays(theme, callback);
}
@@ -132,6 +118,10 @@
};
}
+ protected void applyWallpaperOptions(ThemeBundle theme) {
+ //Do nothing.
+ }
+
private void applyWallpaper(ThemeBundle theme, int destination,
SetWallpaperCallback callback) {
Point defaultCropSurfaceSize = WallpaperCropUtils.getDefaultCropSurfaceSize(
diff --git a/src/com/android/customization/model/theme/custom/ColorOptionsProvider.java b/src/com/android/customization/model/theme/custom/ColorOptionsProvider.java
index 020e3ef..a37f250 100644
--- a/src/com/android/customization/model/theme/custom/ColorOptionsProvider.java
+++ b/src/com/android/customization/model/theme/custom/ColorOptionsProvider.java
@@ -81,9 +81,6 @@
}
for (String iconName : ICONS_FOR_PREVIEW) {
try {
- if (previewIcons.size() == COLOR_TILES_ICON_IDS.length) {
- break;
- }
previewIcons.add(loadIconPreviewDrawable(iconName, iconPackage));
} catch (NameNotFoundException | NotFoundException e) {
Log.w(TAG, String.format("Couldn't load icon in %s for color preview, will skip it",
diff --git a/src/com/android/customization/model/theme/custom/CustomTheme.java b/src/com/android/customization/model/theme/custom/CustomTheme.java
index 97a1876..8a7ca05 100644
--- a/src/com/android/customization/model/theme/custom/CustomTheme.java
+++ b/src/com/android/customization/model/theme/custom/CustomTheme.java
@@ -41,7 +41,7 @@
public CustomTheme(@NonNull String id, String title, Map<String, String> overlayPackages,
@Nullable PreviewInfo previewInfo) {
- super(title, overlayPackages, false, null, previewInfo);
+ super(title, overlayPackages, false, null, null, previewInfo);
mId = id;
}
diff --git a/src/com/android/customization/model/theme/custom/IconOptionsProvider.java b/src/com/android/customization/model/theme/custom/IconOptionsProvider.java
index 73a4a22..f7b669b 100644
--- a/src/com/android/customization/model/theme/custom/IconOptionsProvider.java
+++ b/src/com/android/customization/model/theme/custom/IconOptionsProvider.java
@@ -86,7 +86,7 @@
}
for (String overlayPackage : mSysUiIconsOverlayPackages) {
- addOrUpdateOption(optionsByPrefix, overlayPackage, OVERLAY_CATEGORY_ICON_SYSUI);
+ addOrUpdateOption(optionsByPrefix, overlayPackage, OVERLAY_CATEGORY_ICON_SYSUI);
}
for (String overlayPackage : mSettingsIconsOverlayPackages) {
@@ -142,6 +142,11 @@
} catch (NameNotFoundException | NotFoundException e) {
Log.w(TAG, "Didn't find SystemUi package icons, will skip option", e);
}
+ option.addOverlayPackage(OVERLAY_CATEGORY_ICON_ANDROID, null);
+ option.addOverlayPackage(OVERLAY_CATEGORY_ICON_SYSUI, null);
+ option.addOverlayPackage(OVERLAY_CATEGORY_ICON_SETTINGS, null);
+ option.addOverlayPackage(OVERLAY_CATEGORY_ICON_LAUNCHER, null);
+ option.addOverlayPackage(OVERLAY_CATEGORY_ICON_THEMEPICKER, null);
mOptions.add(option);
}
diff --git a/src/com/android/customization/model/theme/custom/ThemeComponentOption.java b/src/com/android/customization/model/theme/custom/ThemeComponentOption.java
index 994b5f3..78131cc 100644
--- a/src/com/android/customization/model/theme/custom/ThemeComponentOption.java
+++ b/src/com/android/customization/model/theme/custom/ThemeComponentOption.java
@@ -34,7 +34,6 @@
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.graphics.drawable.ShapeDrawable;
-import android.text.TextUtils;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
@@ -47,7 +46,9 @@
import androidx.annotation.ColorInt;
import androidx.annotation.Dimension;
+import androidx.annotation.DrawableRes;
import androidx.annotation.Nullable;
+import androidx.annotation.StringRes;
import com.android.customization.model.CustomizationManager;
import com.android.customization.model.CustomizationOption;
@@ -59,7 +60,6 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.Map.Entry;
import java.util.Objects;
/**
@@ -90,11 +90,7 @@
public abstract void bindPreview(ViewGroup container);
public Builder buildStep(Builder builder) {
- getOverlayPackages().forEach((category, packageName) -> {
- if (!TextUtils.isEmpty(packageName)) {
- builder.addOverlayPackage(category, packageName);
- }
- });
+ getOverlayPackages().forEach(builder::addOverlayPackage);
return builder;
}
@@ -138,9 +134,7 @@
@Override
public void bindPreview(ViewGroup container) {
- TextView header = container.findViewById(R.id.theme_preview_card_header);
- header.setText(R.string.preview_name_font);
- header.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.ic_font, 0, 0);
+ bindPreviewHeader(container, R.string.preview_name_font, R.drawable.ic_font);
ViewGroup cardBody = container.findViewById(R.id.theme_preview_card_body_container);
if (cardBody.getChildCount() == 0) {
@@ -161,6 +155,15 @@
}
}
+ void bindPreviewHeader(ViewGroup container, @StringRes int headerTextResId,
+ @DrawableRes int headerIcon) {
+ TextView header = container.findViewById(R.id.theme_preview_card_header);
+ header.setText(headerTextResId);
+ header.setCompoundDrawablesWithIntrinsicBounds(0, headerIcon, 0, 0);
+ header.setCompoundDrawableTintList(ColorStateList.valueOf(
+ header.getCurrentTextColor()));
+ }
+
public static class IconOption extends ThemeComponentOption {
public static final int THUMBNAIL_ICON_POSITION = 0;
@@ -210,9 +213,7 @@
@Override
public void bindPreview(ViewGroup container) {
- TextView header = container.findViewById(R.id.theme_preview_card_header);
- header.setText(R.string.preview_name_icon);
- header.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.ic_wifi_24px, 0, 0);
+ bindPreviewHeader(container, R.string.preview_name_icon, R.drawable.ic_wifi_24px);
ViewGroup cardBody = container.findViewById(R.id.theme_preview_card_body_container);
if (cardBody.getChildCount() == 0) {
@@ -258,9 +259,15 @@
private static int[] COLOR_TILE_IDS = {
R.id.preview_color_qs_0_bg, R.id.preview_color_qs_1_bg, R.id.preview_color_qs_2_bg
};
- static int[] COLOR_TILES_ICON_IDS = {
- R.id.preview_color_qs_0_icon, R.id.preview_color_qs_1_icon,
- R.id.preview_color_qs_2_icon
+
+ /**
+ * Ids of the views for the foreground of the icon, mapping to the corresponding index of
+ * the actual icon drawable.
+ */
+ static int[][] COLOR_TILES_ICON_IDS = {
+ new int[]{ R.id.preview_color_qs_0_icon, 0},
+ new int[]{ R.id.preview_color_qs_1_icon, 1},
+ new int[] { R.id.preview_color_qs_2_icon, 3}
};
/**
@@ -296,11 +303,13 @@
@Override
public void bindThumbnailTile(View view) {
- int color = resolveColor(view.getResources());
- ((ImageView) view.findViewById(R.id.option_tile)).getDrawable().setTint(color);
+ @ColorInt int color = resolveColor(view.getResources());
+ ((ImageView) view.findViewById(R.id.option_tile)).setImageTintList(
+ ColorStateList.valueOf(color));
view.setContentDescription(mLabel);
}
+ @ColorInt
private int resolveColor(Resources res) {
Configuration configuration = res.getConfiguration();
return (configuration.uiMode & Configuration.UI_MODE_NIGHT_MASK)
@@ -321,9 +330,7 @@
@Override
public void bindPreview(ViewGroup container) {
- TextView header = container.findViewById(R.id.theme_preview_card_header);
- header.setText(R.string.preview_name_color);
- header.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.ic_colorize_24px, 0, 0);
+ bindPreviewHeader(container, R.string.preview_name_color, R.drawable.ic_colorize_24px);
ViewGroup cardBody = container.findViewById(R.id.theme_preview_card_body_container);
if (cardBody.getChildCount() == 0) {
@@ -364,14 +371,15 @@
seekbar.setOnTouchListener((view, motionEvent) -> true);
if (!mIcons.isEmpty() && mShapeDrawable != null) {
for (int i = 0; i < COLOR_TILE_IDS.length; i++) {
- Drawable icon = mIcons.get(i).getConstantState().newDrawable();
+ Drawable icon = mIcons.get(COLOR_TILES_ICON_IDS[i][1]).getConstantState()
+ .newDrawable();
//TODO: load and set the shape.
Drawable bgShape = mShapeDrawable.getConstantState().newDrawable();
bgShape.setTint(accentColor);
ImageView bg = container.findViewById(COLOR_TILE_IDS[i]);
bg.setImageDrawable(bgShape);
- ImageView fg = container.findViewById(COLOR_TILES_ICON_IDS[i]);
+ ImageView fg = container.findViewById(COLOR_TILES_ICON_IDS[i][0]);
fg.setImageDrawable(icon);
}
}
@@ -453,9 +461,7 @@
@Override
public void bindPreview(ViewGroup container) {
- TextView header = container.findViewById(R.id.theme_preview_card_header);
- header.setText(R.string.preview_name_shape);
- header.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.ic_shapes_24px, 0, 0);
+ bindPreviewHeader(container, R.string.preview_name_shape, R.drawable.ic_shapes_24px);
ViewGroup cardBody = container.findViewById(R.id.theme_preview_card_body_container);
if (cardBody.getChildCount() == 0) {
diff --git a/src/com/android/customization/module/CustomizationInjector.java b/src/com/android/customization/module/CustomizationInjector.java
index 90333f0..d25f925 100644
--- a/src/com/android/customization/module/CustomizationInjector.java
+++ b/src/com/android/customization/module/CustomizationInjector.java
@@ -17,9 +17,19 @@
import android.content.Context;
+import androidx.fragment.app.FragmentActivity;
+
+import com.android.customization.model.theme.OverlayManagerCompat;
+import com.android.customization.model.theme.ThemeBundleProvider;
+import com.android.customization.model.theme.ThemeManager;
import com.android.wallpaper.module.Injector;
+import com.android.wallpaper.module.WallpaperSetter;
public interface CustomizationInjector extends Injector {
CustomizationPreferences getCustomizationPreferences(Context context);
+
+ ThemeManager getThemeManager(ThemeBundleProvider provider, FragmentActivity activity,
+ WallpaperSetter wallpaperSetter, OverlayManagerCompat overlayManagerCompat,
+ ThemesUserEventLogger logger);
}
diff --git a/src/com/android/customization/module/DefaultCustomizationInjector.java b/src/com/android/customization/module/DefaultCustomizationInjector.java
index 7af90a3..a0d435b 100644
--- a/src/com/android/customization/module/DefaultCustomizationInjector.java
+++ b/src/com/android/customization/module/DefaultCustomizationInjector.java
@@ -18,16 +18,19 @@
import android.content.Context;
import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
+import com.android.customization.model.theme.OverlayManagerCompat;
+import com.android.customization.model.theme.ThemeBundleProvider;
+import com.android.customization.model.theme.ThemeManager;
import com.android.wallpaper.model.CategoryProvider;
import com.android.wallpaper.model.WallpaperInfo;
import com.android.wallpaper.module.BaseWallpaperInjector;
import com.android.wallpaper.module.DefaultCategoryProvider;
import com.android.wallpaper.module.LoggingOptInStatusProvider;
-import com.android.wallpaper.module.NoOpUserEventLogger;
-import com.android.wallpaper.module.UserEventLogger;
import com.android.wallpaper.module.WallpaperPreferences;
import com.android.wallpaper.module.WallpaperRotationRefresher;
+import com.android.wallpaper.module.WallpaperSetter;
import com.android.wallpaper.monitor.PerformanceMonitor;
import com.android.wallpaper.picker.PreviewFragment;
@@ -85,6 +88,7 @@
@Override
public Fragment getPreviewFragment(
+ Context context,
WallpaperInfo wallpaperInfo,
int mode,
boolean testingModeEnabled) {
@@ -109,4 +113,11 @@
return null;
}
+ @Override
+ public ThemeManager getThemeManager(ThemeBundleProvider provider, FragmentActivity activity,
+ WallpaperSetter wallpaperSetter, OverlayManagerCompat overlayManagerCompat,
+ ThemesUserEventLogger logger) {
+ return new ThemeManager(provider, activity, wallpaperSetter, overlayManagerCompat, logger);
+ }
+
}
diff --git a/src/com/android/customization/picker/ClockFacePickerActivity.java b/src/com/android/customization/picker/ClockFacePickerActivity.java
index 261f794..bfe2e5e 100644
--- a/src/com/android/customization/picker/ClockFacePickerActivity.java
+++ b/src/com/android/customization/picker/ClockFacePickerActivity.java
@@ -56,6 +56,7 @@
result.putExtra(EXTRA_CLOCK_FACE_NAME, option.getId());
setResult(RESULT_OK, result);
callback.onSuccess();
+ finish();
}
@Override
diff --git a/src/com/android/customization/picker/CustomizationPickerActivity.java b/src/com/android/customization/picker/CustomizationPickerActivity.java
index b85948d..5b1623c 100644
--- a/src/com/android/customization/picker/CustomizationPickerActivity.java
+++ b/src/com/android/customization/picker/CustomizationPickerActivity.java
@@ -19,7 +19,6 @@
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
-import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
@@ -159,6 +158,7 @@
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (WALLPAPER_ONLY.equals(intent.getStringExtra(WALLPAPER_FLAVOR_EXTRA))) {
+ Log.d(TAG, "WALLPAPER_ONLY intent, reverting to Wallpaper Picker");
skipToWallpaperPicker();
}
}
@@ -177,15 +177,11 @@
private void initSections() {
mSections.clear();
if (!BuildCompat.isAtLeastQ()) {
- return;
- }
- //if (!BuildCompat.isAtLeastQ()) {
- // return;
- //}
- if (Build.TYPE.equals("user")) {
+ Log.d(TAG, "Build version < Q detected");
return;
}
if (WALLPAPER_ONLY.equals(getIntent().getStringExtra(WALLPAPER_FLAVOR_EXTRA))) {
+ Log.d(TAG, "WALLPAPER_ONLY intent");
return;
}
//Theme
@@ -194,18 +190,22 @@
injector.getPreferences(this), mUserEventLogger, false);
ThemesUserEventLogger eventLogger = (ThemesUserEventLogger) injector.getUserEventLogger(
this);
- ThemeManager themeManager = new ThemeManager(
+ ThemeManager themeManager = injector.getThemeManager(
new DefaultThemeProvider(this, injector.getCustomizationPreferences(this)),
this,
mWallpaperSetter, new OverlayManagerCompat(this), eventLogger);
if (themeManager.isAvailable()) {
mSections.put(R.id.nav_theme, new ThemeSection(R.id.nav_theme, themeManager));
+ } else {
+ Log.d(TAG, "ThemeManager not available, removing Style section");
}
//Clock
ClockManager clockManager = new ClockManager(getContentResolver(),
new ContentProviderClockProvider(this), eventLogger);
if (clockManager.isAvailable()) {
mSections.put(R.id.nav_clock, new ClockSection(R.id.nav_clock, clockManager));
+ } else {
+ Log.d(TAG, "ClockManager not available, removing Clock section");
}
//Grid
GridOptionsManager gridManager = new GridOptionsManager(
@@ -214,9 +214,10 @@
eventLogger);
if (gridManager.isAvailable()) {
mSections.put(R.id.nav_grid, new GridSection(R.id.nav_grid, gridManager));
+ } else {
+ Log.d(TAG, "GridOptionsManager not available, removing Grid section");
}
mSections.put(R.id.nav_wallpaper, new WallpaperSection(R.id.nav_wallpaper));
- //TODO (santie): add other sections if supported by the device
}
private void setUpBottomNavView() {
diff --git a/src/com/android/customization/picker/TimeTicker.java b/src/com/android/customization/picker/TimeTicker.java
new file mode 100644
index 0000000..2cf5dbf
--- /dev/null
+++ b/src/com/android/customization/picker/TimeTicker.java
@@ -0,0 +1,41 @@
+package com.android.customization.picker;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+
+import androidx.annotation.Nullable;
+
+/**
+ * BroadcastReceiver that can notify a listener when the system time (minutes) changes.
+ * Use {@link #registerNewReceiver(Context, TimeListener)} to create a new instance that will be
+ * automatically registered using the given Context.
+ */
+public class TimeTicker extends BroadcastReceiver {
+
+ public interface TimeListener {
+ void onCurrentTimeChanged();
+ }
+
+ public static TimeTicker registerNewReceiver(Context context, TimeListener listener) {
+ TimeTicker receiver = new TimeTicker(listener);
+ // Register broadcast receiver for time tick
+ final IntentFilter filter = new IntentFilter(Intent.ACTION_TIME_TICK);
+ context.registerReceiver(receiver, filter);
+ return receiver;
+ }
+
+ @Nullable private TimeListener mListener;
+
+ private TimeTicker(TimeListener listener) {
+ mListener = listener;
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (mListener != null) {
+ mListener.onCurrentTimeChanged();
+ }
+ }
+}
diff --git a/src/com/android/customization/picker/clock/ClockFragment.java b/src/com/android/customization/picker/clock/ClockFragment.java
index c3e1c97..14dbc16 100644
--- a/src/com/android/customization/picker/clock/ClockFragment.java
+++ b/src/com/android/customization/picker/clock/ClockFragment.java
@@ -18,6 +18,7 @@
import android.content.Context;
import android.content.res.Resources;
import android.os.Bundle;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -26,9 +27,11 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.core.widget.ContentLoadingProgressBar;
import androidx.recyclerview.widget.RecyclerView;
import com.android.customization.model.CustomizationManager.Callback;
+import com.android.customization.model.CustomizationManager.OptionsFetchedListener;
import com.android.customization.model.clock.BaseClockManager;
import com.android.customization.model.clock.Clockface;
import com.android.customization.module.ThemesUserEventLogger;
@@ -41,11 +44,15 @@
import com.android.wallpaper.module.InjectorProvider;
import com.android.wallpaper.picker.ToolbarFragment;
+import java.util.List;
+
/**
* Fragment that contains the main UI for selecting and applying a Clockface.
*/
public class ClockFragment extends ToolbarFragment {
+ private static final String TAG = "ClockFragment";
+
/**
* Interface to be implemented by an Activity hosting a {@link ClockFragment}
*/
@@ -64,6 +71,9 @@
private Clockface mSelectedOption;
private BaseClockManager mClockManager;
private PreviewPager mPreviewPager;
+ private ContentLoadingProgressBar mLoading;
+ private View mContent;
+ private View mError;
private ThemesUserEventLogger mEventLogger;
@Override
@@ -81,8 +91,11 @@
View view = inflater.inflate(
R.layout.fragment_clock_picker, container, /* attachToRoot */ false);
setUpToolbar(view);
+ mContent = view.findViewById(R.id.content_section);
mPreviewPager = view.findViewById(R.id.clock_preview_pager);
mOptionsContainer = view.findViewById(R.id.options_container);
+ mLoading = view.findViewById(R.id.loading_indicator);
+ mError = view.findViewById(R.id.error_section);
setUpOptions();
view.findViewById(R.id.apply_button).setOnClickListener(v -> {
mClockManager.apply(mSelectedOption, new Callback() {
@@ -95,6 +108,9 @@
@Override
public void onError(@Nullable Throwable throwable) {
+ if (throwable != null) {
+ Log.e(TAG, "Error loading clockfaces", throwable);
+ }
//TODO(santie): handle
}
});
@@ -108,26 +124,50 @@
}
private void setUpOptions() {
- mClockManager.fetchOptions(options -> {
- mOptionsController = new OptionSelectorController<>(mOptionsContainer, options);
+ hideError();
+ mLoading.show();
+ mClockManager.fetchOptions(new OptionsFetchedListener<Clockface>() {
+ @Override
+ public void onOptionsLoaded(List<Clockface> options) {
+ mLoading.hide();
+ mOptionsController = new OptionSelectorController<>(mOptionsContainer, options);
- mOptionsController.addListener(selected -> {
- mSelectedOption = (Clockface) selected;
- mEventLogger.logClockSelected(mSelectedOption);
- createAdapter();
- });
- mOptionsController.initOptions(mClockManager);
- for (Clockface option : options) {
- if (option.isActive(mClockManager)) {
- mSelectedOption = option;
+ mOptionsController.addListener(selected -> {
+ mSelectedOption = (Clockface) selected;
+ mEventLogger.logClockSelected(mSelectedOption);
+ createAdapter();
+ });
+ mOptionsController.initOptions(mClockManager);
+ for (Clockface option : options) {
+ if (option.isActive(mClockManager)) {
+ mSelectedOption = option;
+ }
+ }
+ // For development only, as there should always be a grid set.
+ if (mSelectedOption == null) {
+ mSelectedOption = options.get(0);
+ }
+ createAdapter();
+ }
+ @Override
+ public void onError(@Nullable Throwable throwable) {
+ if (throwable != null) {
+ Log.e(TAG, "Error loading clockfaces", throwable);
}
+ showError();
}
- // For development only, as there should always be a grid set.
- if (mSelectedOption == null) {
- mSelectedOption = options.get(0);
- }
- createAdapter();
- }, false);
+ }, false);
+ }
+
+ private void hideError() {
+ mContent.setVisibility(View.VISIBLE);
+ mError.setVisibility(View.GONE);
+ }
+
+ private void showError() {
+ mLoading.hide();
+ mContent.setVisibility(View.GONE);
+ mError.setVisibility(View.VISIBLE);
}
private static class ClockfacePreviewPage extends PreviewPage {
diff --git a/src/com/android/customization/picker/grid/GridFragment.java b/src/com/android/customization/picker/grid/GridFragment.java
index d50c7a8..3c395a1 100644
--- a/src/com/android/customization/picker/grid/GridFragment.java
+++ b/src/com/android/customization/picker/grid/GridFragment.java
@@ -22,6 +22,7 @@
import android.net.Uri;
import android.os.Bundle;
import android.util.DisplayMetrics;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnLayoutChangeListener;
@@ -31,9 +32,11 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.cardview.widget.CardView;
+import androidx.core.widget.ContentLoadingProgressBar;
import androidx.recyclerview.widget.RecyclerView;
import com.android.customization.model.CustomizationManager.Callback;
+import com.android.customization.model.CustomizationManager.OptionsFetchedListener;
import com.android.customization.model.grid.GridOption;
import com.android.customization.model.grid.GridOptionsManager;
import com.android.customization.module.ThemesUserEventLogger;
@@ -51,6 +54,8 @@
import com.bumptech.glide.request.RequestOptions;
+import java.util.List;
+
/**
* Fragment that contains the UI for selecting and applying a GridOption.
*/
@@ -58,6 +63,8 @@
private static final int PREVIEW_FADE_DURATION_MS = 100;
+ private static final String TAG = "GridFragment";
+
/**
* Interface to be implemented by an Activity hosting a {@link GridFragment}
*/
@@ -82,6 +89,9 @@
private GridOptionsManager mGridManager;
private GridOption mSelectedOption;
private PreviewPager mPreviewPager;
+ private ContentLoadingProgressBar mLoading;
+ private View mContent;
+ private View mError;
private ThemesUserEventLogger mEventLogger;
@Override
@@ -99,8 +109,11 @@
View view = inflater.inflate(
R.layout.fragment_grid_picker, container, /* attachToRoot */ false);
setUpToolbar(view);
+ mContent = view.findViewById(R.id.content_section);
mPreviewPager = view.findViewById(R.id.grid_preview_pager);
mOptionsContainer = view.findViewById(R.id.options_container);
+ mLoading = view.findViewById(R.id.loading_indicator);
+ mError = view.findViewById(R.id.error_section);
final Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
mScreenAspectRatio = (float) dm.heightPixels / dm.widthPixels;
@@ -161,28 +174,53 @@
}
private void setUpOptions() {
- mGridManager.fetchOptions(options -> {
- mOptionsController = new OptionSelectorController<>(mOptionsContainer, options);
+ hideError();
+ mLoading.show();
+ mGridManager.fetchOptions(new OptionsFetchedListener<GridOption>() {
+ @Override
+ public void onOptionsLoaded(List<GridOption> options) {
+ mLoading.hide();
+ mOptionsController = new OptionSelectorController<>(mOptionsContainer, options);
- mOptionsController.addListener(selected -> {
- mSelectedOption = (GridOption) selected;
- mEventLogger.logGridSelected(mSelectedOption);
- createAdapter();
- });
- mOptionsController.initOptions(mGridManager);
- for (GridOption option : options) {
- if (option.isActive(mGridManager)) {
- mSelectedOption = option;
+ mOptionsController.addListener(selected -> {
+ mSelectedOption = (GridOption) selected;
+ mEventLogger.logGridSelected(mSelectedOption);
+ createAdapter();
+ });
+ mOptionsController.initOptions(mGridManager);
+ for (GridOption option : options) {
+ if (option.isActive(mGridManager)) {
+ mSelectedOption = option;
+ }
}
+ // For development only, as there should always be a grid set.
+ if (mSelectedOption == null) {
+ mSelectedOption = options.get(0);
+ }
+ createAdapter();
}
- // For development only, as there should always be a grid set.
- if (mSelectedOption == null) {
- mSelectedOption = options.get(0);
+
+ @Override
+ public void onError(@Nullable Throwable throwable) {
+ if (throwable != null) {
+ Log.e(TAG, "Error loading grid options", throwable);
+ }
+ showError();
}
- createAdapter();
}, false);
}
+ private void hideError() {
+ mContent.setVisibility(View.VISIBLE);
+ mError.setVisibility(View.GONE);
+ }
+
+ private void showError() {
+ mLoading.hide();
+ mContent.setVisibility(View.GONE);
+ mError.setVisibility(View.VISIBLE);
+ }
+
private class GridPreviewPage extends PreviewPage {
private final int mPageId;
private final Asset mPreviewAsset;
diff --git a/src/com/android/customization/picker/theme/CustomThemeActivity.java b/src/com/android/customization/picker/theme/CustomThemeActivity.java
index 2bc371d..fe537ba 100644
--- a/src/com/android/customization/picker/theme/CustomThemeActivity.java
+++ b/src/com/android/customization/picker/theme/CustomThemeActivity.java
@@ -15,7 +15,6 @@
*/
package com.android.customization.picker.theme;
-import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Intent;
import android.os.Bundle;
@@ -104,7 +103,7 @@
}
}
- mThemeManager = new ThemeManager(
+ mThemeManager = injector.getThemeManager(
new DefaultThemeProvider(this, injector.getCustomizationPreferences(this)),
this,
new WallpaperSetter(injector.getWallpaperPersister(this),
diff --git a/src/com/android/customization/picker/theme/CustomThemeNameFragment.java b/src/com/android/customization/picker/theme/CustomThemeNameFragment.java
index 04aac7d..e21fc80 100644
--- a/src/com/android/customization/picker/theme/CustomThemeNameFragment.java
+++ b/src/com/android/customization/picker/theme/CustomThemeNameFragment.java
@@ -20,7 +20,6 @@
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
-import android.graphics.drawable.LayerDrawable;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
@@ -36,6 +35,7 @@
import androidx.cardview.widget.CardView;
import com.android.customization.model.theme.ThemeBundle.PreviewInfo;
+import com.android.customization.picker.TimeTicker;
import com.android.customization.picker.theme.ThemePreviewPage.ThemeCoverPage;
import com.android.wallpaper.R;
import com.android.wallpaper.asset.Asset;
@@ -63,8 +63,10 @@
private int[] mColorTileIds = {
R.id.preview_color_qs_0_bg, R.id.preview_color_qs_1_bg, R.id.preview_color_qs_2_bg
};
- private int[] mColorTileIconIds = {
- R.id.preview_color_qs_0_icon, R.id.preview_color_qs_1_icon, R.id.preview_color_qs_2_icon
+ private int[][] mColorTileIconIds = {
+ new int[]{ R.id.preview_color_qs_0_icon, 0},
+ new int[]{ R.id.preview_color_qs_1_icon, 1},
+ new int[] { R.id.preview_color_qs_2_icon, 3}
};
private int[] mShapeIconIds = {
@@ -74,7 +76,7 @@
private Asset mWallpaperAsset;
private ThemeCoverPage mCoverPage;
-
+ private TimeTicker mTicker;
private EditText mNameEditor;
@Override
@@ -106,6 +108,27 @@
return view;
}
+ @Override
+ public void onResume() {
+ super.onResume();
+ mTicker = TimeTicker.registerNewReceiver(getContext(), this::updateTime);
+ updateTime();
+ }
+
+ private void updateTime() {
+ if (mCoverPage != null) {
+ mCoverPage.updateTime();
+ }
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ if (getContext() != null) {
+ getContext().unregisterReceiver(mTicker);
+ }
+ }
+
private void bindCover(CardView card) {
Context context = getContext();
PreviewInfo previewInfo = mCustomThemeManager.buildCustomThemePreviewInfo(context);
@@ -114,7 +137,7 @@
previewInfo.headlineFontFamily, previewInfo.bottomSheeetCornerRadius,
previewInfo.shapeDrawable, previewInfo.shapeAppIcons, null,
mColorButtonIds, mColorTileIds, mColorTileIconIds, mShapeIconIds,
- new WallpaperLayoutListener(context));
+ new WallpaperLayoutListener());
mCoverPage.setCard(card);
mCoverPage.bindPreviewContent();
mNameEditor.addTextChangedListener(new TextWatcher() {
@@ -136,12 +159,7 @@
}
private class WallpaperLayoutListener implements OnLayoutChangeListener {
- private final Drawable mScrim;
- WallpaperLayoutListener(Context context) {
- mScrim = context.getResources()
- .getDrawable(R.drawable.theme_cover_scrim, context.getTheme());
- }
@Override
public void onLayoutChange(View view, int left, int top, int right,
int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
@@ -160,9 +178,8 @@
private void setWallpaperBitmap(View view, Bitmap bitmap) {
Resources res = view.getContext().getResources();
Drawable background = new BitmapDrawable(res, bitmap);
- if (mScrim != null) {
- background = new LayerDrawable(new Drawable[]{background, mScrim});
- }
+ background.setAlpha(ThemeCoverPage.COVER_PAGE_WALLPAPER_ALPHA);
+
view.findViewById(R.id.theme_preview_card_background).setBackground(background);
}
}
diff --git a/src/com/android/customization/picker/theme/ThemeFragment.java b/src/com/android/customization/picker/theme/ThemeFragment.java
index 22fa1d4..cb78ea6 100644
--- a/src/com/android/customization/picker/theme/ThemeFragment.java
+++ b/src/com/android/customization/picker/theme/ThemeFragment.java
@@ -42,16 +42,20 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.core.widget.ContentLoadingProgressBar;
import androidx.recyclerview.widget.RecyclerView;
import com.android.customization.model.CustomizationManager.Callback;
+import com.android.customization.model.CustomizationManager.OptionsFetchedListener;
import com.android.customization.model.theme.ThemeBundle;
import com.android.customization.model.theme.ThemeBundle.PreviewInfo;
import com.android.customization.model.theme.ThemeManager;
import com.android.customization.model.theme.custom.CustomTheme;
import com.android.customization.module.ThemesUserEventLogger;
import com.android.customization.picker.BasePreviewAdapter;
+import com.android.customization.picker.TimeTicker;
import com.android.customization.picker.theme.ThemePreviewPage.ThemeCoverPage;
+import com.android.customization.picker.theme.ThemePreviewPage.TimeContainer;
import com.android.customization.widget.OptionSelectorController;
import com.android.customization.widget.PreviewPager;
import com.android.wallpaper.R;
@@ -91,9 +95,13 @@
private ThemeBundle mSelectedTheme;
private ThemePreviewAdapter mAdapter;
private PreviewPager mPreviewPager;
+ private ContentLoadingProgressBar mLoading;
+ private View mContent;
+ private View mError;
private boolean mUseMyWallpaper;
private WallpaperInfo mCurrentHomeWallpaper;
private CurrentWallpaperInfoFactory mCurrentWallpaperFactory;
+ private TimeTicker mTicker;
@Override
public void onAttach(Context context) {
@@ -111,6 +119,9 @@
R.layout.fragment_theme_picker, container, /* attachToRoot */ false);
setUpToolbar(view);
+ mContent = view.findViewById(R.id.content_section);
+ mLoading = view.findViewById(R.id.loading_indicator);
+ mError = view.findViewById(R.id.error_section);
mCurrentWallpaperFactory = InjectorProvider.getInjector()
.getCurrentWallpaperFactory(getActivity().getApplicationContext());
mPreviewPager = view.findViewById(R.id.theme_preview_pager);
@@ -120,7 +131,6 @@
});
mUseMyWallpaperButton = view.findViewById(R.id.use_my_wallpaper);
mUseMyWallpaperButton.setOnCheckedChangeListener(this::onUseMyWallpaperCheckChanged);
-
setUpOptions(savedInstanceState);
return view;
@@ -148,7 +158,23 @@
@Override
public void onResume() {
super.onResume();
+ mTicker = TimeTicker.registerNewReceiver(getContext(), this::updateTime);
reloadWallpaper();
+ updateTime();
+ }
+
+ private void updateTime() {
+ if (mAdapter != null) {
+ mAdapter.updateTime();
+ }
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ if (getContext() != null) {
+ getContext().unregisterReceiver(mTicker);
+ }
}
@Override
@@ -215,48 +241,73 @@
private void updateButtonsVisibility() {
mUseMyWallpaperButton.setVisibility(mSelectedTheme instanceof CustomTheme
- ? View.GONE : View.VISIBLE);
+ ? View.INVISIBLE : View.VISIBLE);
+ }
+
+ private void hideError() {
+ mContent.setVisibility(View.VISIBLE);
+ mError.setVisibility(View.GONE);
+ }
+
+ private void showError() {
+ mLoading.hide();
+ mContent.setVisibility(View.GONE);
+ mError.setVisibility(View.VISIBLE);
}
private void setUpOptions(@Nullable Bundle savedInstanceState) {
- mThemeManager.fetchOptions(options -> {
- mOptionsController = new OptionSelectorController<>(mOptionsContainer, options);
- mOptionsController.addListener(selected -> {
- if (selected instanceof CustomTheme && !((CustomTheme) selected).isDefined()) {
- navigateToCustomTheme((CustomTheme) selected);
- } else {
- mSelectedTheme = (ThemeBundle) selected;
- if (mUseMyWallpaper || mSelectedTheme instanceof CustomTheme) {
- mSelectedTheme.setOverrideThemeWallpaper(mCurrentHomeWallpaper);
+ hideError();
+ mLoading.show();
+ mThemeManager.fetchOptions(new OptionsFetchedListener<ThemeBundle>() {
+ @Override
+ public void onOptionsLoaded(List<ThemeBundle> options) {
+ mOptionsController = new OptionSelectorController<>(mOptionsContainer, options);
+ mOptionsController.addListener(selected -> {
+ mLoading.hide();
+ if (selected instanceof CustomTheme && !((CustomTheme) selected).isDefined()) {
+ navigateToCustomTheme((CustomTheme) selected);
} else {
- mSelectedTheme.setOverrideThemeWallpaper(null);
+ mSelectedTheme = (ThemeBundle) selected;
+ if (mUseMyWallpaper || mSelectedTheme instanceof CustomTheme) {
+ mSelectedTheme.setOverrideThemeWallpaper(mCurrentHomeWallpaper);
+ } else {
+ mSelectedTheme.setOverrideThemeWallpaper(null);
+ }
+ mEventLogger.logThemeSelected(mSelectedTheme,
+ selected instanceof CustomTheme);
+ createAdapter(options);
+ updateButtonsVisibility();
}
- mEventLogger.logThemeSelected(mSelectedTheme, selected instanceof CustomTheme);
- createAdapter(options);
- updateButtonsVisibility();
+ });
+ mOptionsController.initOptions(mThemeManager);
+ String previouslySelected = savedInstanceState != null
+ ? savedInstanceState.getString(KEY_SELECTED_THEME) : null;
+ for (ThemeBundle theme : options) {
+ if (previouslySelected != null
+ && previouslySelected.equals(theme.getSerializedPackages())) {
+ mSelectedTheme = theme;
+ } else if (theme.isActive(mThemeManager)) {
+ mSelectedTheme = theme;
+ break;
+ }
}
- });
- mOptionsController.initOptions(mThemeManager);
- String previouslySelected = savedInstanceState != null
- ? savedInstanceState.getString(KEY_SELECTED_THEME) : null;
- for (ThemeBundle theme : options) {
- if (previouslySelected != null
- && previouslySelected.equals(theme.getSerializedPackages())) {
- mSelectedTheme = theme;
- } else if (theme.isActive(mThemeManager)) {
- mSelectedTheme = theme;
- break;
+ if (mSelectedTheme == null) {
+ // Select the default theme if there is no matching custom enabled theme
+ // TODO(b/124796742): default to custom if there is no matching theme bundle
+ mSelectedTheme = options.get(0);
+ } else {
+ // Only show show checkmark if we found a matching theme
+ mOptionsController.setAppliedOption(mSelectedTheme);
}
+ mOptionsController.setSelectedOption(mSelectedTheme);
}
- if (mSelectedTheme == null) {
- // Select the default theme if there is no matching custom enabled theme
- // TODO(b/124796742): default to custom if there is no matching theme bundle
- mSelectedTheme = options.get(0);
- } else {
- // Only show show checkmark if we found a matching theme
- mOptionsController.setAppliedOption(mSelectedTheme);
+ @Override
+ public void onError(@Nullable Throwable throwable) {
+ if (throwable != null) {
+ Log.e(TAG, "Error loading theme bundles", throwable);
+ }
+ showError();
}
- mOptionsController.setSelectedOption(mSelectedTheme);
}, false);
}
@@ -307,8 +358,10 @@
private int[] mColorTileIds = {
R.id.preview_color_qs_0_bg, R.id.preview_color_qs_1_bg, R.id.preview_color_qs_2_bg
};
- private int[] mColorTileIconIds = {
- R.id.preview_color_qs_0_icon, R.id.preview_color_qs_1_icon, R.id.preview_color_qs_2_icon
+ private int[][] mColorTileIconIds = {
+ new int[]{ R.id.preview_color_qs_0_icon, 0},
+ new int[]{ R.id.preview_color_qs_1_icon, 1},
+ new int[] { R.id.preview_color_qs_2_icon, 3}
};
private int[] mShapeIconIds = {
@@ -322,16 +375,20 @@
super(activity, R.layout.theme_preview_card);
final Resources res = activity.getResources();
final PreviewInfo previewInfo = theme.getPreviewInfo();
+
Drawable coverScrim = theme instanceof CustomTheme
- ? res.getDrawable(R.drawable.theme_cover_scrim_custom, activity.getTheme())
- : res.getDrawable(R.drawable.theme_cover_scrim, activity.getTheme());
+ ? res.getDrawable(R.drawable.theme_cover_scrim, activity.getTheme())
+ : null;
+
+ WallpaperPreviewLayoutListener wallpaperListener = new WallpaperPreviewLayoutListener(
+ theme, previewInfo, coverScrim, true);
addPage(new ThemeCoverPage(activity, theme.getTitle(),
previewInfo.resolveAccentColor(res), previewInfo.icons,
previewInfo.headlineFontFamily, previewInfo.bottomSheeetCornerRadius,
previewInfo.shapeDrawable, previewInfo.shapeAppIcons, editClickListener,
mColorButtonIds, mColorTileIds, mColorTileIconIds, mShapeIconIds,
- new WallpaperPreviewLayoutListener(theme, previewInfo, coverScrim)));
+ wallpaperListener, coverCardLayoutListener));
addPage(new ThemePreviewPage(activity, R.string.preview_name_font, R.drawable.ic_font,
R.layout.preview_card_font_content,
previewInfo.resolveAccentColor(res)) {
@@ -397,7 +454,7 @@
for (int i = 0; i < mColorTileIds.length && i < previewInfo.icons.size();
i++) {
- Drawable icon = previewInfo.icons.get(i)
+ Drawable icon = previewInfo.icons.get(mColorTileIconIds[i][1])
.getConstantState().newDrawable().mutate();
Drawable bgShape =
previewInfo.shapeDrawable.getConstantState().newDrawable();
@@ -405,7 +462,7 @@
ImageView bg = card.findViewById(mColorTileIds[i]);
bg.setImageDrawable(bgShape);
- ImageView fg = card.findViewById(mColorTileIconIds[i]);
+ ImageView fg = card.findViewById(mColorTileIconIds[i][0]);
fg.setImageDrawable(icon);
}
}
@@ -432,7 +489,7 @@
previewInfo.resolveAccentColor(res)) {
private final WallpaperPreviewLayoutListener mListener =
- new WallpaperPreviewLayoutListener(theme, previewInfo, null);
+ new WallpaperPreviewLayoutListener(theme, previewInfo, null, false);
@Override
protected boolean containsWallpaper() {
@@ -461,16 +518,26 @@
}
}
+ public void updateTime() {
+ for (ThemePreviewPage page : mPages) {
+ if (page instanceof TimeContainer) {
+ ((TimeContainer)page).updateTime();
+ }
+ }
+ }
+
private static class WallpaperPreviewLayoutListener implements OnLayoutChangeListener {
private final ThemeBundle mTheme;
private final PreviewInfo mPreviewInfo;
private final Drawable mScrim;
+ private final boolean mIsTranslucent;
public WallpaperPreviewLayoutListener(ThemeBundle theme, PreviewInfo previewInfo,
- Drawable scrim) {
+ Drawable scrim, boolean translucent) {
mTheme = theme;
mPreviewInfo = previewInfo;
mScrim = scrim;
+ mIsTranslucent = translucent;
}
@Override
@@ -493,11 +560,14 @@
private void setWallpaperBitmap(View view, Bitmap bitmap) {
Resources res = view.getContext().getResources();
Drawable background = new BitmapDrawable(res, bitmap);
+ if (mIsTranslucent) {
+ background.setAlpha(ThemeCoverPage.COVER_PAGE_WALLPAPER_ALPHA);
+ }
if (mScrim != null) {
background = new LayerDrawable(new Drawable[]{background, mScrim});
}
view.findViewById(R.id.theme_preview_card_background).setBackground(background);
- if (mScrim == null) {
+ if (mScrim == null && !mIsTranslucent) {
int colorsHint = WallpaperColors.fromBitmap(bitmap).getColorHints();
TextView header = view.findViewById(R.id.theme_preview_card_header);
if ((colorsHint & WallpaperColors.HINT_SUPPORTS_DARK_TEXT) == 0) {
diff --git a/src/com/android/customization/picker/theme/ThemePreviewPage.java b/src/com/android/customization/picker/theme/ThemePreviewPage.java
index 3c58079..79f2e9c 100644
--- a/src/com/android/customization/picker/theme/ThemePreviewPage.java
+++ b/src/com/android/customization/picker/theme/ThemePreviewPage.java
@@ -30,6 +30,11 @@
import java.util.TimeZone;
abstract class ThemePreviewPage extends PreviewPage {
+
+ public interface TimeContainer {
+ void updateTime();
+ }
+
@StringRes
final int nameResId;
@DrawableRes
@@ -71,7 +76,14 @@
protected abstract void bindBody(boolean forceRebind);
- static class ThemeCoverPage extends ThemePreviewPage {
+ static class ThemeCoverPage extends ThemePreviewPage implements TimeContainer {
+
+ public static final int COVER_PAGE_WALLPAPER_ALPHA = 0x66;
+ /**
+ * Maps which icon from ResourceConstants#ICONS_FOR_PREVIEW to use for each icon in the
+ * top bar (fake "status bar") of the cover page.
+ */
+ private static final int [] sTopBarIconToPreviewIcon = new int [] { 0, 6, 7 };
private final Typeface mHeadlineFont;
private final List<Drawable> mIcons;
@@ -79,12 +91,12 @@
private Drawable mShapeDrawable;
private final int[] mColorButtonIds;
private final int[] mColorTileIds;
- private final int[] mColorTileIconIds;
+ private final int[][] mColorTileIconIds;
private final int[] mShapeIconIds;
private final Resources mRes;
private String mTitle;
private OnClickListener mEditClickListener;
- private final OnLayoutChangeListener mListener;
+ private final OnLayoutChangeListener[] mListeners;
private final int mCornerRadius;
private final ColorStateList mTintList;
@@ -93,8 +105,8 @@
Drawable shapeDrawable,
List<Drawable> shapeAppIcons,
OnClickListener editClickListener,
- int[] colorButtonIds, int[] colorTileIds, int[] colorTileIconIds,
- int[] shapeIconIds, OnLayoutChangeListener wallpaperListener) {
+ int[] colorButtonIds, int[] colorTileIds, int[][] colorTileIconIds,
+ int[] shapeIconIds, OnLayoutChangeListener... wallpaperListeners) {
super(context, 0, 0, R.layout.preview_card_cover_content, accentColor);
mRes = context.getResources();
mTitle = title;
@@ -108,7 +120,7 @@
mColorTileIds = colorTileIds;
mColorTileIconIds = colorTileIconIds;
mShapeIconIds = shapeIconIds;
- mListener = wallpaperListener;
+ mListeners = wallpaperListeners;
// Color QS icons:
int controlGreyColor = mRes.getColor(R.color.control_grey, null);
mTintList = new ColorStateList(
@@ -130,8 +142,14 @@
if (card == null) {
return;
}
+ if (mListeners != null) {
+ for (OnLayoutChangeListener listener : mListeners) {
+ if (listener != null) {
+ card.addOnLayoutChangeListener(listener);
+ }
+ }
+ }
- card.addOnLayoutChangeListener(mListener);
if (forceRebind) {
card.requestLayout();
}
@@ -143,14 +161,14 @@
}
}
for (int i = 0; i < 3 && i < mIcons.size(); i++) {
- Drawable icon =
- mIcons.get(i).getConstantState().newDrawable().mutate();
+ Drawable icon = mIcons.get(mColorTileIconIds[i][1]).getConstantState()
+ .newDrawable().mutate();
Drawable bgShape = mShapeDrawable.getConstantState().newDrawable();
bgShape.setTint(accentColor);
ImageView bg = card.findViewById(mColorTileIds[i]);
bg.setImageDrawable(bgShape);
- ImageView fg = card.findViewById(mColorTileIconIds[i]);
+ ImageView fg = card.findViewById(mColorTileIconIds[i][0]);
fg.setImageDrawable(icon);
}
@@ -176,9 +194,15 @@
ViewGroup iconsContainer = card.findViewById(R.id.theme_preview_top_bar_icons);
- for (int i = 0; i < iconsContainer.getChildCount() && i < mIcons.size(); i++) {
- ((ImageView) iconsContainer.getChildAt(i))
- .setImageDrawable(mIcons.get(i).getConstantState().newDrawable().mutate());
+ for (int i = 0; i < iconsContainer.getChildCount(); i++) {
+ int iconIndex = sTopBarIconToPreviewIcon[i];
+ if (iconIndex < mIcons.size()) {
+ ((ImageView) iconsContainer.getChildAt(i))
+ .setImageDrawable(mIcons.get(iconIndex).getConstantState()
+ .newDrawable().mutate());
+ } else {
+ iconsContainer.getChildAt(i).setVisibility(View.GONE);
+ }
}
ViewGroup body = card.findViewById(R.id.theme_preview_card_body_container);
@@ -206,6 +230,14 @@
}
}
+ @Override
+ public void updateTime() {
+ if (card != null) {
+ ((TextView) card.findViewById(R.id.theme_preview_clock)).setText(
+ getFormattedTime());
+ }
+ }
+
private boolean useRoundedQSB(int cornerRadius) {
return cornerRadius >=
card.getResources().getDimensionPixelSize(R.dimen.roundCornerThreshold);
diff --git a/src/com/android/customization/widget/PreviewPager.java b/src/com/android/customization/widget/PreviewPager.java
index 9bf7651..73a5554 100644
--- a/src/com/android/customization/widget/PreviewPager.java
+++ b/src/com/android/customization/widget/PreviewPager.java
@@ -117,7 +117,7 @@
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- if (mPageStyle == STYLE_ASPECT_RATIO && mViewPager.getMeasuredWidth() == 0) {
+ if (mPageStyle == STYLE_ASPECT_RATIO) {
int availableWidth = MeasureSpec.getSize(widthMeasureSpec);
int availableHeight = MeasureSpec.getSize(heightMeasureSpec);
int indicatorHeight = mPageIndicator.getVisibility() == VISIBLE
diff --git a/src_override/com/android/wallpaper/module/WallpapersInjector.java b/src_override/com/android/wallpaper/module/WallpapersInjector.java
index 67b07fd..1ffca80 100755
--- a/src_override/com/android/wallpaper/module/WallpapersInjector.java
+++ b/src_override/com/android/wallpaper/module/WallpapersInjector.java
@@ -65,6 +65,7 @@
@Override
public Fragment getPreviewFragment(
+ Context context,
WallpaperInfo wallpaperInfo,
int mode,
boolean testingModeEnabled) {