[automerger skipped] Import translations. DO NOT MERGE
am: 9c441a4054 -s ours
am skip reason: subject contains skip directive
Change-Id: I56f66c084eb1edf8f223fd36dcacff1ddaf12633
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..461a19e 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index b28e5c4..edc5264 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 4ba6689..d119172 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index e8de0e2..2c6bced 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 48bd436..dc3a8d8 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index e48b7bc..a44c7bf 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index d6599d0..e48f9d3 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index fc5f9f7..c3ae1e8 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 68f3928..416f1fa 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index f9cc32c..3de292b 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 5c5f492..2ffb142 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 552ea19..241b298 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index c4b44ad..f4c5bdc 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index fbab553..55dc19e 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 2208e8a..2e092ef 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 2208e8a..2e092ef 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 2208e8a..2e092ef 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index c854d47..23e5d9c 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index e572b9c..01cb456 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 59308e2..a53833d 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index df84512..4c5ed2c 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 9af1cdb..717b382 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index d2fd65b..0b33a4d 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 9ab562b..4d2e045 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 417eebd..51fa243 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 73b4ce1..c2ae8ba 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index d344bdd..a2f46c9 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</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..81f5402 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index fd3990f..d7747bd 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 3425778..07fa1cf 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 4d0e281..31279ea 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 32fa0ec..e97b054 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 02d46c7..9b0b014 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 3fd0c72..e24b840 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 5137153..1ea3b94 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index b792418..dacda95 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index 4bc9afb..08e0db8 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index a7e5291..c9573b8 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index 2a7e623..1bbf4aa 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 272d91e..dde11e6 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 80a24c0..cddfc2e 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index f13c07d..9399872 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 1ad275c..0373e16 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 997608e..4fcb5d6 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index a325e15..277a2d4 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 19b3c23..8e940d8 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index f1b8451..79ef993 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 5084797..c67faaf 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index b8bf7ce..3ea4c6c 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 8afa281..33a8030 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 4c280e7..14e12d4 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 534c219..1d91f1f 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 6d55db8..a480c5f 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 256faab..a67e00f 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index 07c67ef..488ab13 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 7903977..df71281 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 132119c..37d6a65 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 1bf6795..9b493e3 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 2a18739..6875a24 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index fac53b9..a724329 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index 7b4a6db..ada8809 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index c836aca..6359531 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 38be787..9cc2ee7 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index 8b199d9..daf97e3 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 3b6bf6d..1a49013 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index ea1e7f0..db41e6e 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 049a4e1..fa5141e 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index e9609b0..c0e2db8 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index bbf4026..e453dfe 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index cae0802..396e859 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index b6d174f..bb8cf62 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index ca6089f..0bb97d2 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 812a78b..ef7cfd1 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index cce806c..6d10452 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 88cd360..e3d5459 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 2fc7c83..9c54e71 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index f907108..7565044 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 34ddf83..27ee1ad 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index b0d12a0..2bf640c 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 8bf2d53..9edfd64 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -65,4 +65,6 @@
<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>
+ <!-- no translation found for something_went_wrong (529840112449799117) -->
+ <skip />
</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index ed05ee5..0c7f502 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -65,15 +65,20 @@
<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/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..d8c32ff 100644
--- a/src/com/android/customization/model/ResourceConstants.java
+++ b/src/com/android/customization/model/ResourceConstants.java
@@ -83,7 +83,8 @@
"ic_qs_dnd",
"ic_qs_flashlight",
"ic_qs_auto_rotate",
- "ic_qs_airplane"
+ "ic_qs_airplane",
+ "ic_signal_cellular_3_4_bar"
};
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..11e7f5c 100644
--- a/src/com/android/customization/model/theme/DefaultThemeProvider.java
+++ b/src/com/android/customization/model/theme/DefaultThemeProvider.java
@@ -33,6 +33,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,6 +84,7 @@
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 DEFAULT_THEME_NAME= "default";
@@ -181,7 +183,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 != Resources.ID_NULL) {
builder.setWallpaperInfo(mStubPackageName, wallpaperResName,
themeName, wallpaperResId,
mStubApkResources.getIdentifier(WALLPAPER_TITLE_PREFIX + themeName,
@@ -191,13 +197,14 @@
mStubPackageName),
mStubApkResources.getIdentifier(WALLPAPER_ACTION_PREFIX + themeName,
"string", mStubPackageName))
- .setWallpaperAsset(
- getDrawableResourceAsset(WALLPAPER_PREFIX, themeName));
+ .setWallpaperAsset(wallpaperThumbnailResId != Resources.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 != Resources.ID_NULL) {
String wpComponent = mStubApkResources.getString(wallpaperResId);
String[] componentParts = wpComponent.split("/");
Intent liveWpIntent = new Intent(WallpaperService.SERVICE_INTERFACE);
@@ -213,8 +220,10 @@
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 != Resources.ID_NULL ?
+ getDrawableResourceAsset(WALLPAPER_THUMB_PREFIX, themeName)
+ : liveInfo.getThumbAsset(mContext));
} catch (XmlPullParserException | IOException e) {
Log.w(TAG, "Skipping wallpaper " + resolveInfo.serviceInfo, e);
}
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/ThemeComponentOption.java b/src/com/android/customization/model/theme/custom/ThemeComponentOption.java
index 994b5f3..8966dc5 100644
--- a/src/com/android/customization/model/theme/custom/ThemeComponentOption.java
+++ b/src/com/android/customization/model/theme/custom/ThemeComponentOption.java
@@ -47,7 +47,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;
@@ -138,9 +140,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 +161,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 +219,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 +265,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 +309,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 +336,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 +377,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 +467,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/picker/CustomizationPickerActivity.java b/src/com/android/customization/picker/CustomizationPickerActivity.java
index b85948d..4b3c2c2 100644
--- a/src/com/android/customization/picker/CustomizationPickerActivity.java
+++ b/src/com/android/customization/picker/CustomizationPickerActivity.java
@@ -159,6 +159,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 +178,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
@@ -200,12 +197,16 @@
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 +215,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/CustomThemeNameFragment.java b/src/com/android/customization/picker/theme/CustomThemeNameFragment.java
index 04aac7d..5f7381a 100644
--- a/src/com/android/customization/picker/theme/CustomThemeNameFragment.java
+++ b/src/com/android/customization/picker/theme/CustomThemeNameFragment.java
@@ -36,6 +36,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 +64,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 +77,7 @@
private Asset mWallpaperAsset;
private ThemeCoverPage mCoverPage;
-
+ private TimeTicker mTicker;
private EditText mNameEditor;
@Override
@@ -106,6 +109,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);
diff --git a/src/com/android/customization/picker/theme/ThemeFragment.java b/src/com/android/customization/picker/theme/ThemeFragment.java
index 22fa1d4..bec3cf8 100644
--- a/src/com/android/customization/picker/theme/ThemeFragment.java
+++ b/src/com/android/customization/picker/theme/ThemeFragment.java
@@ -17,6 +17,7 @@
import android.app.Activity;
import android.app.WallpaperColors;
+import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.res.ColorStateList;
@@ -42,16 +43,21 @@
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.grid.GridOption;
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 +97,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 +121,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 +133,6 @@
});
mUseMyWallpaperButton = view.findViewById(R.id.use_my_wallpaper);
mUseMyWallpaperButton.setOnCheckedChangeListener(this::onUseMyWallpaperCheckChanged);
-
setUpOptions(savedInstanceState);
return view;
@@ -148,7 +160,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 +243,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 +360,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 = {
@@ -326,12 +381,15 @@
? res.getDrawable(R.drawable.theme_cover_scrim_custom, activity.getTheme())
: res.getDrawable(R.drawable.theme_cover_scrim, activity.getTheme());
+ WallpaperPreviewLayoutListener wallpaperListener = new WallpaperPreviewLayoutListener(
+ theme, previewInfo, coverScrim);
+
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 +455,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 +463,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);
}
}
@@ -461,6 +519,14 @@
}
}
+ 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;
diff --git a/src/com/android/customization/picker/theme/ThemePreviewPage.java b/src/com/android/customization/picker/theme/ThemePreviewPage.java
index 3c58079..224a8f8 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,13 @@
protected abstract void bindBody(boolean forceRebind);
- static class ThemeCoverPage extends ThemePreviewPage {
+ static class ThemeCoverPage extends ThemePreviewPage implements TimeContainer {
+
+ /**
+ * 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, 2 };
private final Typeface mHeadlineFont;
private final List<Drawable> mIcons;
@@ -79,12 +90,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 +104,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 +119,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 +141,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 +160,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 +193,10 @@
ViewGroup iconsContainer = card.findViewById(R.id.theme_preview_top_bar_icons);
- for (int i = 0; i < iconsContainer.getChildCount() && i < mIcons.size(); i++) {
+ for (int i = 0; i < iconsContainer.getChildCount(); i++) {
((ImageView) iconsContainer.getChildAt(i))
- .setImageDrawable(mIcons.get(i).getConstantState().newDrawable().mutate());
+ .setImageDrawable(mIcons.get(sTopBarIconToPreviewIcon[i]).getConstantState()
+ .newDrawable().mutate());
}
ViewGroup body = card.findViewById(R.id.theme_preview_card_body_container);
@@ -206,6 +224,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