Fix crash when workspace preview arrives later than expected. am: 0c26b0e979
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/WallpaperPicker2/+/15048682
Change-Id: I1172a78e8a306d61388959308359d7fc99f4754e
diff --git a/Android.bp b/Android.bp
index 1776e05..871e193 100644
--- a/Android.bp
+++ b/Android.bp
@@ -82,6 +82,13 @@
+ "$(location soong_zip) -o $(out) -C $$RES_DIR -D $$RES_DIR"
}
+filegroup {
+ name: "WallpaperPicker2_Manifest",
+ srcs: [
+ "AndroidManifest.xml",
+ ],
+}
+
java_defaults {
name: "WallpaperPicker2_defaults",
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index d2d81ec..5c020af 100755
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -61,11 +61,18 @@
android:label="@string/app_name"
android:theme="@style/WallpaperTheme.NoBackground"
android:resizeableActivity="false"
- android:exported="true">
- <intent-filter>
- <action android:name="android.intent.action.SET_WALLPAPER"/>
- <category android:name="android.intent.category.DEFAULT"/>
- </intent-filter>
+ android:exported="false">
+ </activity>
+
+ <activity android:name="com.android.wallpaper.picker.CustomizationPickerActivity"
+ android:label="@string/app_name"
+ android:resizeableActivity="false"
+ android:theme="@style/WallpaperTheme.NoBackground"
+ android:exported="true">
+ <intent-filter>
+ <action android:name="android.intent.action.SET_WALLPAPER"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+ </intent-filter>
</activity>
<activity android:name="com.android.wallpaper.picker.DeepLinkActivity"
diff --git a/res/drawable/btn_transparent_background.xml b/res/drawable/btn_transparent_background.xml
index 7ddff6b..f71b9d8 100644
--- a/res/drawable/btn_transparent_background.xml
+++ b/res/drawable/btn_transparent_background.xml
@@ -17,11 +17,10 @@
-->
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?android:colorControlHighlight">
-
<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<solid android:color="@android:color/white"/>
- <corners android:radius="?android:attr/buttonCornerRadius"/>
+ <corners android:radius="@dimen/bottom_action_button_radius" />
</shape>
</item>
</ripple>
diff --git a/res/drawable/section_divider.xml b/res/drawable/section_divider.xml
new file mode 100644
index 0000000..b37ec1b
--- /dev/null
+++ b/res/drawable/section_divider.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+ Copyright (C) 2021 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.
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+ <solid android:color="@android:color/transparent"/>
+ <size android:height="8dp" android:width="1dp" />
+</shape>
\ No newline at end of file
diff --git a/res/font/clock.xml b/res/font/clock.xml
new file mode 100644
index 0000000..8ef49bd
--- /dev/null
+++ b/res/font/clock.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+ Copyright (C) 2021 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.
+-->
+<font-family xmlns:android="http://schemas.android.com/apk/res/android">
+ <font android:typeface="monospace"/>
+</font-family>
\ No newline at end of file
diff --git a/res/layout/activity_customization_picker.xml b/res/layout/activity_customization_picker.xml
new file mode 100755
index 0000000..ae70d61
--- /dev/null
+++ b/res/layout/activity_customization_picker.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2021 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.
+-->
+<FrameLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <FrameLayout
+ android:id="@+id/fragment_container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="?android:colorBackground" />
+
+ <include layout="@layout/bottom_action_bar" />
+
+</FrameLayout>
diff --git a/res/layout/bottom_actions_layout.xml b/res/layout/bottom_actions_layout.xml
index 2d317a9..91e8f1d 100644
--- a/res/layout/bottom_actions_layout.xml
+++ b/res/layout/bottom_actions_layout.xml
@@ -154,8 +154,22 @@
android:visibility="gone"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toStartOf="@id/action_apply_text_button"
+ app:layout_constraintStart_toEndOf="@id/action_progress"/>
+
+ <Button
+ android:id="@+id/action_apply_text_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:background="@drawable/btn_transparent_background"
+ android:textColor="?android:attr/colorAccent"
+ android:text="@string/bottom_action_bar_apply"
+ android:visibility="gone"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintStart_toEndOf="@id/action_progress" />
+ app:layout_constraintStart_toEndOf="@id/action_apply"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</RelativeLayout>
diff --git a/res/layout/fragment_customization_picker.xml b/res/layout/fragment_customization_picker.xml
new file mode 100755
index 0000000..17a8f80
--- /dev/null
+++ b/res/layout/fragment_customization_picker.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2021 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.
+-->
+<androidx.core.widget.NestedScrollView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/scroll_container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@android:color/transparent">
+ <LinearLayout
+ android:id="@+id/section_container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_marginVertical="@dimen/section_container_vertical_margin"
+ android:divider="@drawable/section_divider"
+ android:showDividers="middle"
+ android:orientation="vertical" />
+</androidx.core.widget.NestedScrollView>
diff --git a/res/layout/fragment_image_preview_v2.xml b/res/layout/fragment_image_preview_v2.xml
index 63fd1f2..ead02b9 100644
--- a/res/layout/fragment_image_preview_v2.xml
+++ b/res/layout/fragment_image_preview_v2.xml
@@ -22,89 +22,60 @@
android:background="?android:colorBackground">
<FrameLayout
+ android:id="@+id/pill_tabs_container"
android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_height="wrap_content"
+ android:layout_gravity="bottom"
+ android:layout_marginBottom="@dimen/bottom_actions_height"
+ android:paddingHorizontal="@dimen/pill_tabs_horizontal_margin">
+ <include layout="@layout/pill_tabs" />
+ </FrameLayout>
- <FrameLayout
- android:id="@+id/pill_tabs_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom"
- android:layout_marginBottom="@dimen/bottom_actions_height"
- android:paddingHorizontal="@dimen/pill_tabs_horizontal_margin">
- <include layout="@layout/pill_tabs" />
- </FrameLayout>
+ <FrameLayout
+ android:id="@+id/screen_preview_layout"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_marginTop="?android:attr/actionBarSize"
+ android:layout_marginBottom="@dimen/bottom_actions_plus_pill_tabs">
- <FrameLayout
- android:id="@+id/screen_preview_layout"
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_marginTop="?android:attr/actionBarSize"
- android:layout_marginBottom="@dimen/bottom_actions_plus_pill_tabs">
+ android:layout_gravity="center"
+ android:clipChildren="false"
+ android:clipToPadding="false"
+ android:paddingVertical="@dimen/full_preview_page_default_padding_top">
- <FrameLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent">
+ <com.android.wallpaper.picker.TouchForwardingLayout
+ android:id="@+id/touch_forwarding_layout"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:background="@android:color/transparent"
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintRight_toRightOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toBottomOf="parent">
+ <include layout="@layout/wallpaper_preview_card" />
+ </com.android.wallpaper.picker.TouchForwardingLayout>
+ </androidx.constraintlayout.widget.ConstraintLayout>
+ </FrameLayout>
- <ImageView
- android:id="@+id/low_res_image"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:scaleType="centerCrop"
- android:background="@android:color/black" />
+ <FrameLayout
+ android:id="@+id/section_header_container"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content">
+ <include layout="@layout/section_header" android:id="@+id/toolbar_container"/>
+ </FrameLayout>
- <com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
- android:id="@+id/full_res_image"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
-
- <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_gravity="center"
- android:indeterminate="true"/>
- </FrameLayout>
-
- <androidx.constraintlayout.widget.ConstraintLayout
- android:id="@+id/container"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingVertical="@dimen/full_preview_page_default_padding_top"
- android:clipChildren="false"
- android:clipToPadding="false">
-
- <com.android.wallpaper.picker.TouchForwardingLayout
- android:id="@+id/touch_forwarding_layout"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- app:layout_constraintLeft_toLeftOf="parent"
- app:layout_constraintRight_toRightOf="parent"
- app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintBottom_toBottomOf="parent">
- <include layout="@layout/wallpaper_preview_card" />
- </com.android.wallpaper.picker.TouchForwardingLayout>
- </androidx.constraintlayout.widget.ConstraintLayout>
- </FrameLayout>
-
- <FrameLayout
- android:id="@+id/section_header_container"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content">
- <include layout="@layout/section_header" android:id="@+id/toolbar_container"/>
- </FrameLayout>
-
- <FrameLayout
- android:id="@+id/fullscreen_buttons_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom|center"
- android:layout_marginBottom="@dimen/fullscreen_preview_button_margin"
- android:paddingHorizontal="@dimen/pill_tabs_horizontal_margin">
- <include layout="@layout/fullscreen_buttons" />
- </FrameLayout>
-
+ <FrameLayout
+ android:id="@+id/fullscreen_buttons_container"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="bottom|center"
+ android:layout_marginBottom="@dimen/fullscreen_preview_button_margin"
+ android:paddingHorizontal="@dimen/pill_tabs_horizontal_margin">
+ <include layout="@layout/fullscreen_buttons" />
</FrameLayout>
<FrameLayout
diff --git a/res/layout/fragment_live_preview_v2.xml b/res/layout/fragment_live_preview_v2.xml
index 71a44f4..81c49f4 100644
--- a/res/layout/fragment_live_preview_v2.xml
+++ b/res/layout/fragment_live_preview_v2.xml
@@ -22,84 +22,64 @@
android:background="?android:colorBackground">
<FrameLayout
+ android:id="@+id/pill_tabs_container"
android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_height="wrap_content"
+ android:layout_gravity="bottom"
+ android:layout_marginBottom="@dimen/bottom_actions_height"
+ android:paddingHorizontal="@dimen/pill_tabs_horizontal_margin">
+ <include layout="@layout/pill_tabs" />
+ </FrameLayout>
- <FrameLayout
- android:id="@+id/pill_tabs_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom"
- android:layout_marginBottom="@dimen/bottom_actions_height"
- android:paddingHorizontal="@dimen/pill_tabs_horizontal_margin">
- <include layout="@layout/pill_tabs" />
- </FrameLayout>
+ <FrameLayout
+ android:id="@+id/screen_preview_layout"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_marginTop="?android:attr/actionBarSize"
+ android:layout_marginBottom="@dimen/bottom_actions_plus_pill_tabs">
- <FrameLayout
- android:id="@+id/screen_preview_layout"
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:id="@+id/live_wallpaper_preview"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_marginTop="?android:attr/actionBarSize"
- android:layout_marginBottom="@dimen/bottom_actions_plus_pill_tabs">
+ android:layout_gravity="center"
+ android:clipChildren="false"
+ android:clipToPadding="false"
+ android:paddingVertical="@dimen/full_preview_page_default_padding_top">
- <androidx.constraintlayout.widget.ConstraintLayout
- android:id="@+id/live_wallpaper_preview"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_gravity="center"
- android:clipChildren="false"
- android:clipToPadding="false"
- android:paddingVertical="@dimen/full_preview_page_default_padding_top">
+ <com.android.wallpaper.picker.TouchForwardingLayout
+ android:id="@+id/touch_forwarding_layout"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:background="@android:color/transparent"
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintRight_toRightOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toBottomOf="parent">
- <com.android.wallpaper.picker.TouchForwardingLayout
- android:id="@+id/touch_forwarding_layout"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- app:layout_constraintLeft_toLeftOf="parent"
- app:layout_constraintRight_toRightOf="parent"
- app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintBottom_toBottomOf="parent">
-
- <include
- android:id="@+id/wallpaper_full_preview_card"
- layout="@layout/wallpaper_preview_card" />
- </com.android.wallpaper.picker.TouchForwardingLayout>
- </androidx.constraintlayout.widget.ConstraintLayout>
-
- </FrameLayout>
-
- <FrameLayout
- android:id="@+id/section_header_container"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content">
- <include layout="@layout/section_header" android:id="@+id/toolbar_container"/>
- </FrameLayout>
-
- <FrameLayout
- android:id="@+id/fullscreen_buttons_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom|center"
- android:layout_marginBottom="@dimen/fullscreen_preview_button_margin"
- android:paddingHorizontal="@dimen/pill_tabs_horizontal_margin">
- <include layout="@layout/fullscreen_buttons" />
- </FrameLayout>
+ <include
+ android:id="@+id/wallpaper_full_preview_card"
+ layout="@layout/wallpaper_preview_card" />
+ </com.android.wallpaper.picker.TouchForwardingLayout>
+ </androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout>
<FrameLayout
- android:id="@+id/loading"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:forceHasOverlappingRendering="false">
+ android:id="@+id/section_header_container"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content">
+ <include layout="@layout/section_header" android:id="@+id/toolbar_container"/>
+ </FrameLayout>
- <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_gravity="center"
- android:indeterminate="true" />
+ <FrameLayout
+ android:id="@+id/fullscreen_buttons_container"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="bottom|center"
+ android:layout_marginBottom="@dimen/fullscreen_preview_button_margin"
+ android:paddingHorizontal="@dimen/pill_tabs_horizontal_margin">
+ <include layout="@layout/fullscreen_buttons" />
</FrameLayout>
<FrameLayout
diff --git a/res/layout/fullscreen_wallpaper_preview.xml b/res/layout/fullscreen_wallpaper_preview.xml
index 3dc9bc0..21b087f 100644
--- a/res/layout/fullscreen_wallpaper_preview.xml
+++ b/res/layout/fullscreen_wallpaper_preview.xml
@@ -23,7 +23,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
- android:background="?android:colorSecondary" />
+ android:background="?android:colorBackground" />
<com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
android:id="@+id/full_res_image"
diff --git a/res/layout/lock_screen_preview.xml b/res/layout/lock_screen_preview.xml
index d50b012..8c90877 100644
--- a/res/layout/lock_screen_preview.xml
+++ b/res/layout/lock_screen_preview.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?><!--
- Copyright (C) 2020 The Android Open Source Project
+ Copyright (C) 2021 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.
@@ -13,48 +13,50 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<androidx.constraintlayout.widget.ConstraintLayout
+<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/lock_overlay"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/lock_screen_scrim_color">
- <ImageView
- android:id="@+id/lock_icon"
- android:layout_width="@dimen/lock_screen_preview_lock_icon_size"
- android:layout_height="@dimen/lock_screen_preview_lock_icon_size"
- android:src="@drawable/ic_lock_outline_24px"
- android:tint="@color/lock_screen_text_color"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintVertical_bias="0.1" />
-
- <TextView
- android:id="@+id/lock_time"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:textAppearanceListItemSmall"
- android:textColor="@color/lock_screen_text_color"
- android:textSize="@dimen/lock_screen_preview_time_text_size"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintVertical_bias="0.3" />
-
<TextView
android:id="@+id/lock_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:textAppearance="?android:textAppearanceListItemSmall"
+ android:layout_marginStart="32dp"
+ android:layout_marginTop="84dp"
+ android:paddingVertical="16dp"
+ android:gravity="center"
+ android:fontFamily="@*android:string/config_headlineFontFamily"
android:textColor="@color/lock_screen_text_color"
android:textSize="@dimen/lock_screen_preview_date_text_size"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/lock_time" />
+ android:lineHeight="@dimen/lock_screen_preview_date_line_height" />
-</androidx.constraintlayout.widget.ConstraintLayout>
+ <!-- Not going to depend on dp but ratio to keep clock always at the same position. -->
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+ <!-- Must specify android.widget.TextView to make android:fontVariationSettings work. -->
+ <android.widget.TextView
+ android:id="@+id/lock_time"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:gravity="center_horizontal"
+ android:fontFamily="@font/clock"
+ android:textColor="?androidprv:attr/colorAccentPrimary"
+ android:typeface="monospace"
+ android:textSize="@dimen/lock_screen_preview_time_text_size"
+ android:lineSpacingMultiplier="0.7"
+ android:elegantTextHeight="false"
+ android:fontVariationSettings="'wght' 300"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_bias="0.57"/>
+ </androidx.constraintlayout.widget.ConstraintLayout>
+</FrameLayout>
\ No newline at end of file
diff --git a/res/layout/lock_screen_preview2.xml b/res/layout/lock_screen_preview2.xml
deleted file mode 100644
index f738d15..0000000
--- a/res/layout/lock_screen_preview2.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><!--
- Copyright (C) 2021 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.
--->
-<androidx.constraintlayout.widget.ConstraintLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
- android:id="@+id/lock_overlay"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingHorizontal="24dp"
- android:background="@color/lock_screen_scrim_color">
-
- <TextView
- android:id="@+id/lock_date"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:textAppearanceListItemSmall"
- android:textColor="@color/lock_screen_text_color"
- android:textSize="@dimen/lock_screen_preview2_date_text_size"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintVertical_bias="0.2" />
-
- <TextView
- android:id="@+id/lock_time"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textSize="@dimen/lock_screen_preview2_time_text_size"
- android:fontFamily="@*android:string/config_headlineFontFamily"
- android:textColor="?androidprv:attr/colorAccentPrimary"
- android:elegantTextHeight="false"
- android:lineSpacingMultiplier="0.75"
- android:letterSpacing="-0.05"
- android:includeFontPadding="false"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/lock_date" />
-
-</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/res/layout/wallpaper_preview_card.xml b/res/layout/wallpaper_preview_card.xml
index 2385ba0..229b26b 100644
--- a/res/layout/wallpaper_preview_card.xml
+++ b/res/layout/wallpaper_preview_card.xml
@@ -17,14 +17,9 @@
style="@style/FullContentPreviewCard"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:clipChildren="true"
android:contentDescription="@string/wallpaper_preview_card_content_description">
- <ImageView
- android:id="@+id/wallpaper_preview_image"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="?android:colorPrimary" />
-
<SurfaceView
android:id="@+id/wallpaper_surface"
android:layout_width="match_parent"
@@ -42,16 +37,10 @@
android:layout_height="match_parent"
android:importantForAccessibility="noHideDescendants" />
- <View
- android:id="@+id/fade_cover"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:alpha="0"
- android:background="?android:colorSecondary" />
-
<androidx.core.widget.ContentLoadingProgressBar
android:id="@+id/wallpaper_preview_spinner"
style="?android:progressBarStyleLarge"
+ android:background="@android:color/transparent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
diff --git a/res/layout/wallpaper_section_view.xml b/res/layout/wallpaper_section_view.xml
index e963b3a..54fd6d8 100644
--- a/res/layout/wallpaper_section_view.xml
+++ b/res/layout/wallpaper_section_view.xml
@@ -68,6 +68,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginVertical="@dimen/wallpaper_picker_entry_margin_vertical"
+ android:paddingHorizontal="@dimen/wallpaper_picker_entry_horizontal_padding"
android:background="@drawable/btn_transparent_background"
android:textColor="?android:attr/colorAccent"
android:drawablePadding="@dimen/wallpaper_picker_entry_drawable_padding"
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index f883d34..37c70df 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Muurpapier"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Muurpapiervoorskou"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Die versameling bestaan nie"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Versteek UI-voorskou"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Wys UI-voorskou"</string>
</resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index aed7c2c..11c6662 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"ልጣፍ"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"የልጣፍ ቅድመ-እይታ"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"ስብስቡ የለም"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"የዩአይ ቅድመ-ዕይታን ደብቅ"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"የዩአይ ቅድመ-ዕይታን አሳይ"</string>
</resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 68693aa..10b0666 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"الخلفية"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"معاينة عرض الشرائح"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"المجموعة غير متوفرة."</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"إخفاء معاينة واجهة المستخدم"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"عرض معاينة واجهة المستخدم"</string>
</resources>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index 1649415..ba49311 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"ৱালপেপাৰ"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"ৱালপেপাৰৰ পূৰ্বদৰ্শন"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"এই সংগ্ৰহটোৰ অস্তিত্ব নাই"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"UIৰ পূৰ্বদৰ্শন লুকুৱাওক"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"UIৰ পূৰ্বদৰ্শন দেখুৱাওক"</string>
</resources>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 6e510ba..4e334f6 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Divar kağızı"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Divar Kağızı önizləməsi"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Kolleksiya mövcud deyil"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"UI Önizləməsini gizlədin"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"UI Önizləməsini göstərin"</string>
</resources>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index d40bda5..ed43ea2 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Pozadina"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Pregled pozadine"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Kolekcija ne postoji"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Sakrij korisnički interfejs"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Prikaži korisnički interfejs"</string>
</resources>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 73a6fbd..e218462 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Шпалеры"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Перадпрагляд шпалер"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Калекцыя не існуе"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Схаваць перадпрагляд UI"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Паказаць перадпрагляд UI"</string>
</resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 9bdb277..1e087e5 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Тапет"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Визуализация на тапета"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Колекцията не съществува"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Скриване на визуал. на ПИ"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Показване на визуал. на ПИ"</string>
</resources>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index 3c8a345..c0fd9b6 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"ওয়ালপেপার"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"ওয়ালপেপার প্রিভিউ করুন"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"কালেকশন উপলভ্য নেই"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"UI প্রিভিউ লুকান"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"UI প্রিভিউ দেখুন"</string>
</resources>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 882428a..5d8ff9f 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Pozadinska slika"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Pregled pozadinske slike"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Kolekcija ne postoji"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Sakrij pregled UI-a"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Prikaži pregled UI-a"</string>
</resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 607c71f..5c1139a 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Fons de pantalla"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Previsualitz. fons de pantalla"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"La col·lecció no existeix"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Amaga la previsualització de IU"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Mostra la previsualització de IU"</string>
</resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 814a0f3..81e606f 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Tapeta"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Náhled prezentace"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Sbírka neexistuje"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Skrýt náhled rozhraní"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Zobrazit náhled rozhraní"</string>
</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 0efa961..0efbc9b 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Baggrund"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Forhåndsvisning af baggrund"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Samlingen eksisterer ikke"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Skjul forhåndsvisning af brugerflade"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Vis forhåndsvisning af brugerflade"</string>
</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index f0bca06..4bdd8f2 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Hintergrund"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Hintergrundvorschau"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Die Sammlung existiert nicht"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"UI-Vorschau ausblenden"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"UI-Vorschau einblenden"</string>
</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 5b9dda0..cf1df9e 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Ταπετσαρία"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Προεπισκόπηση ταπετσαρίας"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Η συλλογή δεν υπάρχει."</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Απόκρυψη προεπ/σης διεπ.χρήστη"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Εμφάνιση προεπ/σης διεπ.χρήστη"</string>
</resources>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 750a2d0..d96b025 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Wallpaper"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Wallpaper preview"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"The collection doesn\'t exist"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Hide UI preview"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Show UI preview"</string>
</resources>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index 750a2d0..d96b025 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Wallpaper"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Wallpaper preview"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"The collection doesn\'t exist"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Hide UI preview"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Show UI preview"</string>
</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 750a2d0..d96b025 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Wallpaper"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Wallpaper preview"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"The collection doesn\'t exist"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Hide UI preview"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Show UI preview"</string>
</resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 750a2d0..d96b025 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Wallpaper"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Wallpaper preview"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"The collection doesn\'t exist"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Hide UI preview"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Show UI preview"</string>
</resources>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index ff487a5..961db68 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Wallpaper"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Wallpaper preview"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"The collection doesn\'t exist"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Hide UI Preview"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Show UI Preview"</string>
</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index b81d3a7..249a162 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -30,11 +30,11 @@
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Fondo de pantalla diario"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Pantalla principal y de bloqueo"</string>
<string name="home_screen_message" msgid="106444102822522813">"Pantalla principal"</string>
- <string name="lock_screen_message" msgid="1534506081955058013">"Pantalla de bloqueo"</string>
+ <string name="lock_screen_message" msgid="1534506081955058013">"Pantalla bloqueada"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Pantalla principal y bloqueada"</string>
<string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"Establecer como fondo de pantalla en"</string>
<string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"Pantalla principal"</string>
- <string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"Pantalla de bloqueo"</string>
+ <string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"Pantalla bloqueada"</string>
<string name="set_wallpaper_both_destination" msgid="233216830256235288">"Página principal y bloqueada"</string>
<string name="no_backup_image_wallpaper_label" msgid="6316627676107284851">"Fondo de pantalla rotatorio con imágenes"</string>
<string name="permission_needed_explanation" msgid="139166837541426823">"Para mostrar el fondo de pantalla actual aquí, <xliff:g id="APP_NAME">%1$s</xliff:g> necesita acceso al almacenamiento de tu dispositivo."</string>
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Fondo de pantalla"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Vista previa del fondo"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"La colección no existe"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Ocultar vista previa de la IU"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Mostrar vista previa de la IU"</string>
</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 01bec6a..3eabae8 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Fondo de pantalla"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Vista previa de fondo"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"La colección no existe"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Ocultar vista previa de UI"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Mostrar vista previa de UI"</string>
</resources>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 9c92c68..012ce9d 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Taustapilt"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Taustapildi eelvaade"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Kogu pole olemas"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Peida kasutajaliidese eelvaade"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Kuva kasutajaliidese eelvaade"</string>
</resources>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 2bfc243..f3349af 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Horma-papera"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Horma-paperaren aurrebista"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Ez dago bildumarik"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Ezkutatu EIaren aurrebista"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Erakutsi EIaren aurrebista"</string>
</resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 620edaa..b995635 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"کاغذدیواری"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"پیشنمای کاغذدیواری"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"مجموعه وجود ندارد"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"پنهان کردن پیشنمای رابط کاربری"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"نمایش دادن پیشنمای رابط کاربری"</string>
</resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 5c1e9c9..4d9c0a0 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Taustakuva"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Taustakuvan esikatselu"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Kyseistä kokoelmaa ei ole olemassa"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Piilota UI:n esikatselu"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Näytä UI:n esikatselu"</string>
</resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 795294c..576714c 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Fond d\'écran"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Aperçu du fond d\'écran"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"La collection n\'existe pas"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Masquer l\'aperçu de l\'IU"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Afficher l\'aperçu de l\'IU"</string>
</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 8664237..ffe0f76 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Fond d\'écran"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Aperçu du fond d\'écran"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Cette collection n\'existe pas"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Masquer l\'aperçu de l\'UI"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Afficher l\'aperçu de l\'UI"</string>
</resources>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 2c431cc..2600075 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Fondo de pantalla"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Vista previa do fondo"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"A colección non existe"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Ocultar vista previa da IU"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Mostrar vista previa da IU"</string>
</resources>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 8eabd24..491df07 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"વૉલપેપર"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"વૉલપેપરનો પ્રીવ્યૂ કરો"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"સંગ્રહ અસ્તિત્વમાં નથી"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"UIનો પ્રીવ્યૂ છુપાવો"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"UIનો પ્રીવ્યૂ બતાવો"</string>
</resources>
diff --git a/res/values-h700dp/dimens.xml b/res/values-h700dp/dimens.xml
new file mode 100644
index 0000000..b4daf92
--- /dev/null
+++ b/res/values-h700dp/dimens.xml
@@ -0,0 +1,20 @@
+<!--
+ ~ Copyright (C) 2021 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>
+ <!-- Lock screen clock maximum font size (dp is intentional, to prevent any further scaling) -->
+ <dimen name="lock_screen_preview_time_text_size">170dp</dimen>
+</resources>
\ No newline at end of file
diff --git a/res/values-h800dp/dimens.xml b/res/values-h800dp/dimens.xml
new file mode 100644
index 0000000..92ddfbf
--- /dev/null
+++ b/res/values-h800dp/dimens.xml
@@ -0,0 +1,20 @@
+<!--
+ ~ Copyright (C) 2021 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>
+ <!-- Lock screen clock maximum font size (dp is intentional, to prevent any further scaling) -->
+ <dimen name="lock_screen_preview_time_text_size">200dp</dimen>
+</resources>
\ No newline at end of file
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 8877c1c..6c0f15a 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"वॉलपेपर"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"वॉलपेपर की झलक देखें"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"वॉलपेपर का संग्रह मौजूद नहीं है"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"यूज़र इंटरफ़ेस की झलक छिपाएं"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"यूज़र इंटरफ़ेस की झलक दिखाएं"</string>
</resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 31052b9..ea8ff24 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Pozadina"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Pregled pozadine"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Zbirka ne postoji"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Sakrij pregled koris. sučelja"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Prikaži pregled koris. sučelja"</string>
</resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 50ca3fa..742efba 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Háttérkép"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Háttérkép előnézete"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Nincs ilyen gyűjtemény"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"UI előnézetének elrejtése"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"UI előnézetének megjelenítése"</string>
</resources>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index ae654bf..e3d2a07 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Պաստառ"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Պաստառի նախադիտում"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Հավաքածուն գոյություն չունի"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Թաքցնել նախադիտման էկրանը"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Ցուցադրել նախադիտման էկրանը"</string>
</resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index b7dd161..70150cb 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Wallpaper"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Pratinjau wallpaper"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Koleksi tidak ada"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Sembunyikan Pratinjau UI"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Tampilkan Pratinjau UI"</string>
</resources>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 9f80b25..04031ef 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Veggfóður"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Forskoðun veggfóðurs"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Safnið er ekki til"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Fela forskoðun notendaviðmóts"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Sýna forskoðun notendaviðmóts"</string>
</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index a1d73c9..8b5ce43 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Sfondo"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Anteprima sfondo"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"La raccolta non esiste"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Nascondi UI Anteprima"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Mostra UI Anteprima"</string>
</resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index c85ab18..d5d97e5 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"טפט"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"תצוגה מקדימה של הטפט"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"האוסף לא קיים"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"ללא תצוגה מקדימה בממשק המשתמש"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"עם תצוגה מקדימה בממשק המשתמש"</string>
</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 9d884b4..a73f2ee 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"壁紙"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"壁紙のプレビュー"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"コレクションは存在しません"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"UI プレビューを非表示"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"UI プレビューを表示"</string>
</resources>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index 408a26b..09cf8ce 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"ფონი"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"ფონის გადახედვა"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"კოლექცია არ არსებობს"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"UI გადახედვის დამალვა"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"UI გადახედვის გამოჩენა"</string>
</resources>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index 8da40a4..2e8e6dc 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Тұсқағаз"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Тұсқағазды алдын ала қарау"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Жинақ жоқ."</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Алдын ала қарау экранын жасыру"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Алдын ала қарау экранын көрсету"</string>
</resources>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index 4ec72a8..aac84ab 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"ផ្ទាំងរូបភាព"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"ការមើលផ្ទាំងរូបភាពសាកល្បង"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"បណ្ដុំមិនមានទេ"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"លាក់ការមើល UI សាកល្បង"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"បង្ហាញការមើល UI សាកល្បង"</string>
</resources>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 9d3638c..d247d76 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"ವಾಲ್ಪೇಪರ್"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"ವಾಲ್ಪೇಪರ್ ಪೂರ್ವವೀಕ್ಷಣೆ"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"ಸಂಗ್ರಹಣೆ ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"UI ಪೂರ್ವವೀಕ್ಷಣೆಯನ್ನು ಮರೆಮಾಡಿ"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"UI ಪೂರ್ವವೀಕ್ಷಣೆಯನ್ನು ತೋರಿಸಿ"</string>
</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 15e9008..8650033 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"배경화면"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"배경화면 미리보기"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"컬렉션이 없습니다."</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"UI 미리보기 숨기기"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"UI 미리보기 표시"</string>
</resources>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index 6701529..060bf09 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Тушкагаз"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Тушкагазды алдын ала көрүү"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Мындай жыйнак жок"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Алдын ала көрүү экранын жашыруу"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Алдын ала көрүү экранын көрсөтүү"</string>
</resources>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 3ab17f6..1d885fa 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"ຮູບພື້ນຫຼັງ"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"ຕົວຢ່າງຮູບພື້ນຫຼັງ"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"ບໍ່ມິຄໍເລັກຊັນ"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"ເຊື່ອງຕົວຢ່າງສ່ວນຕິດຕໍ່ຜູ້ໃຊ້"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"ສະແດງຕົວຢ່າງສ່ວນຕິດຕໍ່ຜູ້ໃຊ້"</string>
</resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 9c17903..def2202 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Ekrano fonas"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Ekrano fono peržiūra"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Rinkinio nėra"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Slėpti NS peržiūrą"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Rodyti NS peržiūrą"</string>
</resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 741b792..16dab29 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Fona tapete"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Fona tapetes priekšskatījums"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Kolekcija nepastāv"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Paslēpt saskarnes priekšskatījumu"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Rādīt saskarnes priekšskatījumu"</string>
</resources>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 9f63cfc..63df2c1 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Тапет"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Преглед на тапет"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Збирката не постои"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Сокриј го прегледот на UI"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Прикажи го прегледот на UI"</string>
</resources>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index 562c761..99a2ff7 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"വാൾപേപ്പർ"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"വാൾപേപ്പർ പ്രിവ്യൂ"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"ശേഖരം നിലവിലില്ല"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"UI പ്രിവ്യൂ മറയ്ക്കുക"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"UI പ്രിവ്യൂ കാണിക്കുക"</string>
</resources>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index e02cae6..680faa6 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Дэлгэцийн зураг"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Дэлгэцийн зургийг урьдчилан үзэх"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Ийм цуглуулга байхгүй"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"UI урьдчилан үзэлтийг нуух"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"UI урьдчилан үзэлтийг харуулах"</string>
</resources>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index bf7ea38..4ae38e8 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"वॉलपेपर"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"वॉलपेपर पूर्वावलोकन"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"संग्रह अस्तित्वात नाही"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"UI पूर्वावलोकन लपवा"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"UI पूर्वावलोकन दाखवा"</string>
</resources>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 7b9d14e..484e4cf 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Kertas dinding"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Pratonton kertas dinding"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Koleksi tersebut tidak wujud"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Sembunyikan Pratontotn UI"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Tunjukkan Pratonton UI"</string>
</resources>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index fbb2076..b220147 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"နောက်ခံ"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"နောက်ခံပုံ အစမ်းကြည့်ရှုခြင်း"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"ဤစုစည်းမှု မရှိပါ"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"UI အစမ်းကြည့်ခြင်းကို ဝှက်ရန်"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"UI အစမ်းကြည့်ခြင်းကို ပြရန်"</string>
</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 950cf23..3b23d21 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Bakgrunn"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Forhåndsvisning av bakgrunn"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Samlingen eksisterer ikke"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Skjul UI-forhåndsvisning"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Vis UI-forhåndsvisning"</string>
</resources>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index d964ec9..f5b3081 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -94,8 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"वालपेपर"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"वालपेपरको प्रिभ्यु"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"यो सङ्ग्रह छैन"</string>
- <!-- no translation found for hide_ui_preview_text (6766076482511252295) -->
- <skip />
- <!-- no translation found for show_ui_preview_text (5993063062417070806) -->
- <skip />
</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 0f0740e..3b15f2d 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Achtergrond"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Achtergrondvoorbeeld"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"De collectie bestaat niet"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Voorbeeld van UI verbergen"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Voorbeeld van UI tonen"</string>
</resources>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 555bb64..f707023 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"ୱାଲପେପର୍"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"ୱାଲପେପରର ପ୍ରିଭ୍ୟୁ"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"ସଂଗ୍ରହ ଉପଲବ୍ଧ ନାହିଁ"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"UI ପ୍ରିଭ୍ୟୁକୁ ଲୁଚାନ୍ତୁ"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"UI ପ୍ରିଭ୍ୟୁ ଦେଖାନ୍ତୁ"</string>
</resources>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index c5a6864..9f82470 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"ਵਾਲਪੇਪਰ"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"ਵਾਲਪੇਪਰ ਦੀ ਪੂਰਵ-ਝਲਕ"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"ਸੰਗ੍ਰਹਿ ਮੌਜੂਦ ਨਹੀਂ ਹੈ"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"UI ਦੀ ਪੂਰਵ-ਝਲਕ ਲੁਕਾਓ"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"UI ਦੀ ਪੂਰਵ-ਝਲਕ ਦਿਖਾਓ"</string>
</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index ad7fd31..ed50411 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Tapeta"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Podgląd tapety"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Taka kolekcja nie istnieje"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Ukryj podgląd UI"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Pokaż podgląd UI"</string>
</resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 3eab136..060f60d 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Imagem de fundo"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Pré-visual. da imagem de fundo"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"A coleção não existe."</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Ocultar pré-visualização da IU"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Mostrar pré-visualização da IU"</string>
</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 8b27103..df1d052 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Plano de fundo"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Visualização do plano de fundo"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"A coleção não existe"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Ocultar visualização da IU"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Mostrar visualização da IU"</string>
</resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index ae2b870..eaaf4c0 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Imagine de fundal"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Previzualizarea imaginii de fundal"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Colecția nu există"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Ascunde previzualizarea IU"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Afișează previzualizarea IU"</string>
</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index e333566..62d17ba 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Обои"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Предварительный просмотр обоев"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Такой подборки не существует."</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Скрыть экран предпросмотра"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Предпросмотр интерфейса"</string>
</resources>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index 1c3f458..bf81b00 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"වෝල්පේපරය"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"වෝල්පේපර පෙරදසුන"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"එකතුව නොපවතී"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"UI පෙරදසුන සඟවන්න"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"UI පෙරදසුන පෙන්වන්න"</string>
</resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index e8b5d8d..89b45d4 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Tapeta"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Ukážka tapety"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Zbierka neexistuje"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Skryť ukážku použ. rozhrania"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Zobr. ukážku použ. rozhrania"</string>
</resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 898e4c5..2c90b21 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Zaslonsko ozadje"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Predogled zaslonskih ozadij"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Zbirka ne obstaja"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Skrij predogled upor. vmesnika"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Pokaži predogled upo. vmesnika"</string>
</resources>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index 4820403..ff4a9d9 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Imazhi i sfondit"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Pamja paraprake e imazhit të sfondit"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Koleksioni nuk ekziston"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Fshih pamjen paraprake të ndërfaqes së përdoruesit"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Shfaq pamjen paraprake të ndërfaqes së përdoruesit"</string>
</resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 8d5adda..ecd2f51 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Позадина"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Преглед позадине"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Колекција не постоји"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Сакриј кориснички интерфејс"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Прикажи кориснички интерфејс"</string>
</resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 8eb236f..7bc5221 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -44,7 +44,7 @@
<string name="daily_refresh_tile_title" msgid="3270456074558525091">"Dagens bakgrund"</string>
<string name="daily_refresh_tile_subtitle" msgid="3976682014885446443">"Tryck för att aktivera"</string>
<string name="start_rotation_dialog_body_live_wallpaper_needed" msgid="5132580257563846082">"Bakgrunden ändras automatiskt varje dag. Slutför konfigurationen genom att trycka på <strong>Använd som bakgrund</strong> på nästa skärm."</string>
- <string name="start_rotation_dialog_wifi_only_option_message" msgid="3126269859713666225">"Ladda bara ned bakgrunder via wifi i framtiden"</string>
+ <string name="start_rotation_dialog_wifi_only_option_message" msgid="3126269859713666225">"Ladda bara ned bakgrunder via Wi-Fi i framtiden"</string>
<string name="start_rotation_dialog_continue" msgid="276678987852274872">"Fortsätt"</string>
<string name="start_rotation_progress_message" msgid="7872623873682262083">"Den första bakgrunden laddas ned …"</string>
<string name="start_rotation_error_message" msgid="3053799836719618972">"Det gick inte att ladda ned den första bakgrunden. Kontrollera nätverksinställningarna och försök igen."</string>
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Bakgrund"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Förhandsgranska bakgrunden"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Samlingen finns inte"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Dölj förhandsgranskning av UI"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Visa förhandsgranskning av UI"</string>
</resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 685d17e..8ca6e68 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Mandhari"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Onyesho la kukagua mandhari"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Mkusanyiko huu haupo"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Ficha Onyesho la Kukagua Kiolesura"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Onyesha Onyesho la Kukagua Kiolesura"</string>
</resources>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index e515c4c..4a5b096 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"வால்பேப்பர்"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"வால்பேப்பர் மாதிரிக்காட்சி"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"இந்தத் தொகுப்பு இல்லை"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"UI மாதிரிக்காட்சியை மறை"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"UI மாதிரிக்காட்சியைக் காட்டு"</string>
</resources>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index a43d84c..e8b2d1c 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"వాల్పేపర్"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"వాల్పేపర్ ప్రివ్యూ"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"ఈ సేకరణ అందుబాటులో లేదు"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"UI ప్రివ్యూని దాచిపెట్టు"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"UI ప్రివ్యూని చూపించు"</string>
</resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 340031e..a027d64 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"วอลเปเปอร์"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"พรีวิววอลเปเปอร์"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"ไม่มีคอลเล็กชัน"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"ซ่อนตัวอย่าง UI"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"แสดงตัวอย่าง UI"</string>
</resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 8345260..3cabd22 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Wallpaper"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Preview ng wallpaper"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Wala ang koleksyon"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Itago ang Preview ng UI"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Ipakita ang Preview ng UI"</string>
</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index ea8a3dd..008de95 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Duvar kağıdı"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Duvar kağıdı ön izleme"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Koleksiyon mevcut değil"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Arayüz Önizlemesini Gizle"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Arayüz Önizlemesini Göster"</string>
</resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 978c09b..9021401 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Фоновий малюнок"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Перегляд фонового малюнка"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Колекція не існує"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Сховати інтерфейс перегляду"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Показати інтерфейс перегляду"</string>
</resources>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index 57dacea..c95c1d5 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"وال پیپر"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"وال پیپر کا پیش منظر"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"مجموعہ موجود نہیں ہے"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"UI کا پیش منظر چھپائیں"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"UI کا پیش منظر دکھائیں"</string>
</resources>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 7165716..2fb79b0 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Fon rasmi"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Fon rasmiga razm solish"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Bunday terma mavjud emas"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Interfeys namunasini berkitish"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Interfeys namunasini chiqarish"</string>
</resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 3b29b08..1c072d5 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Hình nền"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Xem trước hình nền"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Bộ sưu tập không tồn tại"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Ẩn giao diện người dùng xem trước"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Hiện giao diện người dùng xem trước"</string>
</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 02e1df2..24d4bf7 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"壁纸"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"壁纸预览"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"该集合不存在"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"隐藏界面预览"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"显示界面预览"</string>
</resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index dcad964..6e2f7f7 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"桌布"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"預覽桌布"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"桌布集不存在"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"隱藏使用者介面預覽"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"顯示使用者介面預覽"</string>
</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index c2b99ad..8ce3524 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -29,11 +29,11 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"目前設定的桌布"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"每日桌布"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"主螢幕和螢幕鎖定"</string>
- <string name="home_screen_message" msgid="106444102822522813">"主畫面"</string>
+ <string name="home_screen_message" msgid="106444102822522813">"主螢幕"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"螢幕鎖定"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"主螢幕和螢幕鎖定"</string>
<string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"設定以下畫面的桌布:"</string>
- <string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"主畫面"</string>
+ <string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"主螢幕"</string>
<string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"螢幕鎖定"</string>
<string name="set_wallpaper_both_destination" msgid="233216830256235288">"主畫面和螢幕鎖定畫面"</string>
<string name="no_backup_image_wallpaper_label" msgid="6316627676107284851">"輪播圖片桌布"</string>
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"桌布"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"桌布預覽"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"這個系列不存在"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"隱藏使用者介面預覽畫面"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"顯示使用者介面預覽畫面"</string>
</resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 890b986..3d693f5 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -94,6 +94,4 @@
<string name="wallpaper_title" msgid="6754214682228331092">"Isithombe sangemuva"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Ukubuka kuqala kwesithombe sangemuva"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Uqoqo alutholakali"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Fihla ukuhlola kuqala kwe-UI"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Bonisa ukuhlola kuqala kwe-UI"</string>
</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 34c327d..a09f46c 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -185,14 +185,10 @@
<dimen name="fullscreen_preview_button_margin_bottom">28dp</dimen>
<!-- The size of lock screen widget on the full screen. -->
- <dimen name="lock_screen_preview_lock_icon_size">42dp</dimen>
- <dimen name="lock_screen_preview_time_text_size">54dp</dimen>
- <dimen name="lock_screen_preview_date_text_size">18dp</dimen>
<dimen name="smartspace_preview_key_ambient_shadow_blur">1.5dp</dimen>
-
- <!-- The size of lock screen preview 2 on the full screen. -->
- <dimen name="lock_screen_preview2_date_text_size">20dp</dimen>
- <dimen name="lock_screen_preview2_time_text_size">170dp</dimen>
+ <dimen name="lock_screen_preview_date_text_size">20dp</dimen>
+ <dimen name="lock_screen_preview_date_line_height">24dp</dimen>
+ <dimen name="lock_screen_preview_time_text_size">150dp</dimen>
<!-- Common dimensions for option sections -->
<dimen name="section_container_vertical_margin">24dp</dimen>
@@ -204,5 +200,6 @@
<!-- For the wallpaper section -->
<dimen name="wallpaper_preview_margin_top">24dp</dimen>
<dimen name="wallpaper_picker_entry_drawable_padding">8dp</dimen>
+ <dimen name="wallpaper_picker_entry_horizontal_padding">16dp</dimen>
<dimen name="wallpaper_picker_entry_margin_vertical">18dp</dimen>
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4f3d62e..f370463 100755
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -321,7 +321,7 @@
<!-- Content description of "slideshow wallpaper" button on the bottom action bar. [CHAR LIMIT=50] -->
<string name="bottom_action_bar_slideshow_wallpaper">Slideshow Wallpaper</string>
- <!-- Content description of apply button on the bottom action bar. [CHAR LIMIT=30] -->
+ <!-- Apply button on the bottom action bar. [CHAR LIMIT=30] -->
<string name="bottom_action_bar_apply">Apply</string>
<!-- Accessibility label for paging indicator in theme picker preview [CHAR LIMIT=NONE] -->
diff --git a/src/com/android/wallpaper/asset/Asset.java b/src/com/android/wallpaper/asset/Asset.java
index f600e84..0b87084 100755
--- a/src/com/android/wallpaper/asset/Asset.java
+++ b/src/com/android/wallpaper/asset/Asset.java
@@ -32,6 +32,7 @@
import android.widget.ImageView;
import androidx.annotation.Nullable;
+import androidx.annotation.WorkerThread;
import com.android.wallpaper.module.BitmapCropper;
import com.android.wallpaper.module.InjectorProvider;
@@ -127,6 +128,17 @@
}
/**
+ * Returns a Bitmap from the separate low resolution data source (if there is one) or
+ * {@code null} otherwise.
+ * This could be an I/O operation so DO NOT CALL ON UI THREAD
+ */
+ @WorkerThread
+ @Nullable
+ public Bitmap getLowResBitmap(Context context) {
+ return null;
+ }
+
+ /**
* Returns whether the asset supports rendering tile regions at varying pixel densities.
*/
public abstract boolean supportsTiling();
diff --git a/src/com/android/wallpaper/asset/CurrentWallpaperAssetVN.java b/src/com/android/wallpaper/asset/CurrentWallpaperAssetVN.java
index d7460d6..8f30cae 100755
--- a/src/com/android/wallpaper/asset/CurrentWallpaperAssetVN.java
+++ b/src/com/android/wallpaper/asset/CurrentWallpaperAssetVN.java
@@ -15,26 +15,35 @@
*/
package com.android.wallpaper.asset;
+import android.app.Activity;
import android.app.WallpaperManager;
import android.content.Context;
+import android.graphics.Bitmap;
import android.graphics.Point;
import android.graphics.Rect;
+import android.graphics.drawable.ColorDrawable;
import android.os.ParcelFileDescriptor;
import android.os.ParcelFileDescriptor.AutoCloseInputStream;
import android.util.Log;
import android.widget.ImageView;
+import androidx.annotation.WorkerThread;
+
import com.android.wallpaper.compat.WallpaperManagerCompat;
import com.android.wallpaper.compat.WallpaperManagerCompat.WallpaperLocation;
import com.android.wallpaper.util.WallpaperCropUtils;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.Key;
+import com.bumptech.glide.load.MultiTransformation;
+import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
+import com.bumptech.glide.load.resource.bitmap.FitCenter;
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
import com.bumptech.glide.request.RequestOptions;
import java.io.InputStream;
import java.security.MessageDigest;
+import java.util.concurrent.ExecutionException;
/**
* Asset representing the currently-set image wallpaper on N+ devices, including when daily rotation
@@ -88,6 +97,35 @@
return false;
}
+
+ @Override
+ public void loadLowResDrawable(Activity activity, ImageView imageView, int placeholderColor,
+ BitmapTransformation transformation) {
+ MultiTransformation<Bitmap> multiTransformation =
+ new MultiTransformation<>(new FitCenter(), transformation);
+ Glide.with(activity)
+ .asDrawable()
+ .load(this)
+ .apply(RequestOptions.bitmapTransform(multiTransformation)
+ .placeholder(new ColorDrawable(placeholderColor)))
+ .into(imageView);
+ }
+
+ @Override
+ @WorkerThread
+ public Bitmap getLowResBitmap(Context context) {
+ try {
+ return Glide.with(context)
+ .asBitmap()
+ .load(this)
+ .submit()
+ .get();
+ } catch (InterruptedException | ExecutionException e) {
+ Log.w(TAG, "Couldn't obtain low res bitmap", e);
+ }
+ return null;
+ }
+
@Override
public void loadDrawable(Context context, ImageView imageView,
int unusedPlaceholderColor) {
diff --git a/src/com/android/wallpaper/asset/ExifInterfaceCompat.java b/src/com/android/wallpaper/asset/ExifInterfaceCompat.java
index 6b2938e..30e2a44 100644
--- a/src/com/android/wallpaper/asset/ExifInterfaceCompat.java
+++ b/src/com/android/wallpaper/asset/ExifInterfaceCompat.java
@@ -1,12 +1,12 @@
package com.android.wallpaper.asset;
-import com.android.wallpaper.compat.BuildCompat;
+import android.os.Build;
+
+import androidx.exifinterface.media.ExifInterface;
import java.io.IOException;
import java.io.InputStream;
-import androidx.exifinterface.media.ExifInterface;
-
/**
* Provides access to basic ExifInterface APIs using {@link android.media.ExifInterface} in OMR1+
* SDK or SupportLibrary's {@link ExifInterface} for earlier SDK versions.
@@ -29,7 +29,7 @@
public ExifInterfaceCompat(InputStream inputStream) throws IOException {
// O-MR1 added support for more formats (HEIF), which Support Library cannot implement,
// so use the framework version for SDK 27+
- if (BuildCompat.isAtLeastOMR1()) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
mFrameworkExifInterface = new android.media.ExifInterface(inputStream);
} else {
mSupportExifInterface = new ExifInterface(inputStream);
diff --git a/src/com/android/wallpaper/asset/LiveWallpaperThumbAsset.java b/src/com/android/wallpaper/asset/LiveWallpaperThumbAsset.java
index 3d59d1c..227f8b8 100755
--- a/src/com/android/wallpaper/asset/LiveWallpaperThumbAsset.java
+++ b/src/com/android/wallpaper/asset/LiveWallpaperThumbAsset.java
@@ -21,6 +21,7 @@
import android.content.res.AssetFileDescriptor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable;
@@ -30,9 +31,12 @@
import android.util.Log;
import android.widget.ImageView;
+import androidx.annotation.WorkerThread;
+
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.Key;
import com.bumptech.glide.load.MultiTransformation;
+import com.bumptech.glide.load.Transformation;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
import com.bumptech.glide.load.resource.bitmap.FitCenter;
@@ -41,18 +45,22 @@
import java.io.IOException;
import java.security.MessageDigest;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
/**
* Asset wrapping a drawable for a live wallpaper thumbnail.
*/
public class LiveWallpaperThumbAsset extends Asset {
private static final String TAG = "LiveWallpaperThumbAsset";
+ private static final int LOW_RES_THUMB_TIMEOUT_SECONDS = 2;
protected final Context mContext;
protected final android.app.WallpaperInfo mInfo;
// The content Uri of thumbnail
protected Uri mUri;
- private BitmapDrawable mThumbnailDrawable;
+ private Drawable mThumbnailDrawable;
public LiveWallpaperThumbAsset(Context context, android.app.WallpaperInfo info) {
mContext = context.getApplicationContext();
@@ -112,16 +120,53 @@
@Override
public void loadLowResDrawable(Activity activity, ImageView imageView, int placeholderColor,
BitmapTransformation transformation) {
- MultiTransformation multiTransformation =
- new MultiTransformation(new FitCenter(), transformation);
+ Transformation<Bitmap> finalTransformation = (transformation == null)
+ ? new FitCenter()
+ : new MultiTransformation<>(new FitCenter(), transformation);
Glide.with(activity)
.asDrawable()
.load(LiveWallpaperThumbAsset.this)
- .apply(RequestOptions.bitmapTransform(multiTransformation)
+ .apply(RequestOptions.bitmapTransform(finalTransformation)
.placeholder(new ColorDrawable(placeholderColor)))
.into(imageView);
}
+ @Override
+ @WorkerThread
+ public Bitmap getLowResBitmap(Context context) {
+ try {
+ Drawable drawable = Glide.with(context)
+ .asDrawable()
+ .load(this)
+ .submit()
+ .get(LOW_RES_THUMB_TIMEOUT_SECONDS, TimeUnit.SECONDS);
+
+ if (drawable instanceof BitmapDrawable) {
+ BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
+ Bitmap bitmap = bitmapDrawable.getBitmap();
+ if (bitmap != null) {
+ return bitmap;
+ }
+ }
+ Bitmap bitmap;
+ // If not a bitmap, draw the drawable into a bitmap
+ if (drawable.getIntrinsicWidth() <= 0 || drawable.getIntrinsicHeight() <= 0) {
+ return null;
+ } else {
+ bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
+ drawable.getIntrinsicHeight(), Bitmap.Config.RGB_565);
+ }
+
+ Canvas canvas = new Canvas(bitmap);
+ drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
+ drawable.draw(canvas);
+ return bitmap;
+ } catch (InterruptedException | ExecutionException | TimeoutException e) {
+ Log.w(TAG, "Couldn't obtain low res bitmap", e);
+ }
+ return null;
+ }
+
/**
* Returns a Glide cache key.
*/
@@ -134,10 +179,10 @@
* the main UI thread.
*/
protected Drawable getThumbnailDrawable() {
+ if (mThumbnailDrawable != null) {
+ return mThumbnailDrawable;
+ }
if (mUri != null) {
- if (mThumbnailDrawable != null) {
- return mThumbnailDrawable;
- }
try (AssetFileDescriptor assetFileDescriptor =
mContext.getContentResolver().openAssetFileDescriptor(mUri, "r")) {
if (assetFileDescriptor != null) {
@@ -149,7 +194,8 @@
Log.w(TAG, "Not found thumbnail from URI.");
}
}
- return mInfo.loadThumbnail(mContext.getPackageManager());
+ mThumbnailDrawable = mInfo.loadThumbnail(mContext.getPackageManager());
+ return mThumbnailDrawable;
}
/**
diff --git a/src/com/android/wallpaper/backup/MissingHashCodeGenerator.java b/src/com/android/wallpaper/backup/MissingHashCodeGenerator.java
index f934fe7..0c16572 100755
--- a/src/com/android/wallpaper/backup/MissingHashCodeGenerator.java
+++ b/src/com/android/wallpaper/backup/MissingHashCodeGenerator.java
@@ -20,8 +20,8 @@
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
+import android.os.Build;
-import com.android.wallpaper.compat.BuildCompat;
import com.android.wallpaper.module.Injector;
import com.android.wallpaper.module.InjectorProvider;
import com.android.wallpaper.module.WallpaperPreferences;
@@ -42,7 +42,7 @@
// This receiver is a no-op on pre-N Android and should only respond to a MY_PACKAGE_REPLACED
// intent.
if (!intent.getAction().equals(Intent.ACTION_MY_PACKAGE_REPLACED)
- || !BuildCompat.isAtLeastN()) {
+ || Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
return;
}
diff --git a/src/com/android/wallpaper/compat/BuildCompat.java b/src/com/android/wallpaper/compat/BuildCompat.java
deleted file mode 100755
index fd1a1c5..0000000
--- a/src/com/android/wallpaper/compat/BuildCompat.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2017 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.
- */
-package com.android.wallpaper.compat;
-
-import android.os.Build;
-import android.os.Build.VERSION;
-import android.os.Build.VERSION_CODES;
-
-/**
- * Provides the SDK version in a manner that can be stubbed out in a test environment.
- */
-public class BuildCompat {
- public static final int JB_MR2_SDK_VERSION = VERSION_CODES.JELLY_BEAN_MR2;
- public static final int L_SDK_VERSION = VERSION_CODES.LOLLIPOP;
- public static final int N_SDK_VERSION = Build.VERSION_CODES.N;
- public static final int N_MR1_SDK_VERSION = Build.VERSION_CODES.N_MR1;
-
- private static int sSdk = Build.VERSION.SDK_INT;
-
- /**
- * Returns whether the framework on the current Android device is JellyBean MR2 (API 18) or
- * higher. Used to determine if it's safe to use APIs added in that API version such as
- * HandlerThread#quitSafely.
- */
- public static boolean isAtLeastJBMR2() {
- return sSdk >= JB_MR2_SDK_VERSION;
- }
-
- /**
- * Returns whether the framework on the current Android device is L (API 21) or higher. Used to
- * determine whether framework classes introduced in L such as JobScheduler can be used on this
- * device.
- */
- public static boolean isAtLeastL() {
- return sSdk >= L_SDK_VERSION;
- }
-
- /**
- * Returns whether the framework on the current Android device is N or higher. Used to determine
- * whether new N-specific wallpaper APIs are available.
- */
- public static boolean isAtLeastN() {
- return sSdk >= N_SDK_VERSION;
- }
-
- /**
- * Returns whether the framework on the current Android device is N-MR1 or higher. Used to
- * determine whether new N-MR1-specific wallpaper APIs are available.
- */
- public static boolean isAtLeastNMR1() {
- return sSdk >= N_MR1_SDK_VERSION;
- }
-
- /**
- * Returns whether the framework on the current Android device is N-MR2 or higher. Used to
- * determine if new N-MR2 specific API behavior is present on the device.
- */
- public static boolean isAtLeastNMR2() {
- return sSdk > N_MR1_SDK_VERSION
- || (sSdk == N_MR1_SDK_VERSION && VERSION.RELEASE.equals("7.1.2"));
- }
-
- /**
- * Returns whether the framework on the current Android device is O or higher.
- */
- public static boolean isAtLeastO() {
- return sSdk >= Build.VERSION_CODES.O;
- }
-
- /**
- * Returns whether the framework on the current Android device is O-MR1 or higher.
- */
- public static boolean isAtLeastOMR1() {
- return sSdk >= VERSION_CODES.O_MR1;
- }
-
- /**
- * Sets the SDK version that BuildCompat will consider the current device to be on. Used for
- * testing only.
- */
- public static void setSdkVersionForTesting(int sdk) {
- sSdk = sdk;
- }
-
- public static boolean isAtLeastQ() {
- return sSdk >= VERSION_CODES.Q;
- }
-
- /**
- * Returns whether the framework on the current Android device is S or higher.
- */
- public static boolean isAtLeastS() {
- return sSdk >= VERSION_CODES.S
- || "S".equals(VERSION.CODENAME); // TODO: remove once build version for S is updated
- }
-}
diff --git a/src/com/android/wallpaper/compat/WallpaperManagerCompat.java b/src/com/android/wallpaper/compat/WallpaperManagerCompat.java
index ef834a1..c0b6a9e 100755
--- a/src/com/android/wallpaper/compat/WallpaperManagerCompat.java
+++ b/src/com/android/wallpaper/compat/WallpaperManagerCompat.java
@@ -20,13 +20,14 @@
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
+import android.os.Build;
import android.os.ParcelFileDescriptor;
+import androidx.annotation.IntDef;
+
import java.io.IOException;
import java.io.InputStream;
-import androidx.annotation.IntDef;
-
/**
* An abstraction over WallpaperManager to allow for the transitional state in which the N SDK
* is not yet ready but we need to use new N API methods. Provides wrapper methods for the new
@@ -41,7 +42,7 @@
public static WallpaperManagerCompat getInstance(Context context) {
synchronized (sInstanceLock) {
if (sInstance == null) {
- if (BuildCompat.isAtLeastN()) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
sInstance = new WallpaperManagerCompatVN(context.getApplicationContext());
} else {
sInstance = new WallpaperManagerCompatV16(context.getApplicationContext());
diff --git a/src/com/android/wallpaper/model/AppResourceWallpaperInfo.java b/src/com/android/wallpaper/model/AppResourceWallpaperInfo.java
index 20d0f2b..59f39c9 100755
--- a/src/com/android/wallpaper/model/AppResourceWallpaperInfo.java
+++ b/src/com/android/wallpaper/model/AppResourceWallpaperInfo.java
@@ -65,6 +65,7 @@
}
private AppResourceWallpaperInfo(Parcel in) {
+ super(in);
mPackageName = in.readString();
mThumbRes = in.readInt();
mFullRes = in.readInt();
@@ -181,6 +182,7 @@
@Override
public void writeToParcel(Parcel parcel, int i) {
+ super.writeToParcel(parcel, i);
parcel.writeString(mPackageName);
parcel.writeInt(mThumbRes);
parcel.writeInt(mFullRes);
diff --git a/src/com/android/wallpaper/model/CategoryProvider.java b/src/com/android/wallpaper/model/CategoryProvider.java
index 78899d8..93158a3 100755
--- a/src/com/android/wallpaper/model/CategoryProvider.java
+++ b/src/com/android/wallpaper/model/CategoryProvider.java
@@ -62,8 +62,10 @@
/**
* Resets the fetched categories if needed.
+ *
+ * @return {@code true} if the fetched categories are reset; {@code false} otherwise.
*/
- void resetIfNeeded();
+ boolean resetIfNeeded();
/**
* Checks if featured collection available.
diff --git a/src/com/android/wallpaper/model/CurrentWallpaperInfoVN.java b/src/com/android/wallpaper/model/CurrentWallpaperInfoVN.java
index bf54bfd..cc2677a 100755
--- a/src/com/android/wallpaper/model/CurrentWallpaperInfoVN.java
+++ b/src/com/android/wallpaper/model/CurrentWallpaperInfoVN.java
@@ -83,6 +83,7 @@
}
private CurrentWallpaperInfoVN(Parcel in) {
+ super(in);
mAttributions = new ArrayList<>();
in.readStringList(mAttributions);
//noinspection ResourceType
@@ -164,6 +165,7 @@
@Override
public void writeToParcel(Parcel parcel, int flags) {
+ super.writeToParcel(parcel, flags);
parcel.writeStringList(mAttributions);
parcel.writeInt(mWallpaperManagerFlag);
parcel.writeString(mActionUrl);
diff --git a/src/com/android/wallpaper/model/HubSectionController.java b/src/com/android/wallpaper/model/CustomizationSectionController.java
similarity index 70%
rename from src/com/android/wallpaper/model/HubSectionController.java
rename to src/com/android/wallpaper/model/CustomizationSectionController.java
index e271254..b01f098 100644
--- a/src/com/android/wallpaper/model/HubSectionController.java
+++ b/src/com/android/wallpaper/model/CustomizationSectionController.java
@@ -24,25 +24,19 @@
import com.android.wallpaper.picker.SectionView;
/**
- * The interface for the behavior of section in the Customization hub.
+ * The interface for the behavior of section in the customization picker.
*
* @param <T> the {@link SectionView} to create for the section
*/
-public interface HubSectionController<T extends SectionView> {
+public interface CustomizationSectionController<T extends SectionView> {
- /** Interface for Customization hub section navigation. */
- interface HubSectionNavigationController {
+ /** Interface for customization section navigation. */
+ interface CustomizationSectionNavigationController {
/** Navigates to the given {@code fragment}. */
void navigateTo(Fragment fragment);
}
- /** Interface for Customization hub section's dark mode responding to battery saver. */
- interface HubSectionBatterySaverListener {
- /** Callback when battery saver's state changed with given {@code isEnabled}. */
- void onBatterySaverStateChanged(boolean isEnabled);
- }
-
- /** Returns {@code true} if the Customization hub section is available. */
+ /** Returns {@code true} if the customization section is available. */
boolean isAvailable(@Nullable Context context);
/**
@@ -57,4 +51,7 @@
/** Releases the controller. */
default void release() {}
+
+ /** Gets called when the section gets transitioned out. */
+ default void onTransitionOut() {}
}
diff --git a/src/com/android/wallpaper/model/DefaultWallpaperInfo.java b/src/com/android/wallpaper/model/DefaultWallpaperInfo.java
index 78f1575..6ed0eeb 100755
--- a/src/com/android/wallpaper/model/DefaultWallpaperInfo.java
+++ b/src/com/android/wallpaper/model/DefaultWallpaperInfo.java
@@ -37,7 +37,7 @@
new Creator<DefaultWallpaperInfo>() {
@Override
public DefaultWallpaperInfo createFromParcel(Parcel in) {
- return new DefaultWallpaperInfo();
+ return new DefaultWallpaperInfo(in);
}
@Override
@@ -47,6 +47,12 @@
};
private Asset mAsset;
+ public DefaultWallpaperInfo() {}
+
+ private DefaultWallpaperInfo(Parcel in) {
+ super(in);
+ }
+
@Override
public List<String> getAttributions(Context context) {
return Arrays.asList(context.getResources().getString(R.string.fallback_wallpaper_title));
@@ -100,5 +106,6 @@
@Override
public void writeToParcel(Parcel parcel, int i) {
+ super.writeToParcel(parcel, i);
}
}
diff --git a/src/com/android/wallpaper/model/ImageWallpaperInfo.java b/src/com/android/wallpaper/model/ImageWallpaperInfo.java
index e4e96ae..8449edf 100755
--- a/src/com/android/wallpaper/model/ImageWallpaperInfo.java
+++ b/src/com/android/wallpaper/model/ImageWallpaperInfo.java
@@ -73,6 +73,7 @@
}
protected ImageWallpaperInfo(Parcel in) {
+ super(in);
mUri = Uri.parse(in.readString());
}
@@ -174,6 +175,7 @@
@Override
public void writeToParcel(Parcel parcel, int i) {
+ super.writeToParcel(parcel, i);
parcel.writeString(mUri.toString());
}
}
diff --git a/src/com/android/wallpaper/model/LegacyPartnerWallpaperInfo.java b/src/com/android/wallpaper/model/LegacyPartnerWallpaperInfo.java
index 6eda554..c3bf44b 100755
--- a/src/com/android/wallpaper/model/LegacyPartnerWallpaperInfo.java
+++ b/src/com/android/wallpaper/model/LegacyPartnerWallpaperInfo.java
@@ -63,6 +63,7 @@
}
private LegacyPartnerWallpaperInfo(Parcel in) {
+ super(in);
mThumbName = in.readString();
mFullName = in.readString();
}
@@ -178,6 +179,7 @@
@Override
public void writeToParcel(Parcel parcel, int i) {
+ super.writeToParcel(parcel, i);
parcel.writeString(mThumbName);
parcel.writeString(mFullName);
}
diff --git a/src/com/android/wallpaper/model/LiveWallpaperInfo.java b/src/com/android/wallpaper/model/LiveWallpaperInfo.java
index 0bc467f..bfa1318 100755
--- a/src/com/android/wallpaper/model/LiveWallpaperInfo.java
+++ b/src/com/android/wallpaper/model/LiveWallpaperInfo.java
@@ -24,6 +24,7 @@
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
import android.net.Uri;
+import android.os.Build;
import android.os.Parcel;
import android.service.wallpaper.WallpaperService;
import android.text.TextUtils;
@@ -35,7 +36,6 @@
import com.android.wallpaper.R;
import com.android.wallpaper.asset.Asset;
import com.android.wallpaper.asset.LiveWallpaperThumbAsset;
-import com.android.wallpaper.compat.BuildCompat;
import com.android.wallpaper.module.InjectorProvider;
import com.android.wallpaper.module.LiveWallpaperInfoFactory;
import com.android.wallpaper.util.ActivityUtils;
@@ -154,7 +154,8 @@
mCollectionId = collectionId;
}
- LiveWallpaperInfo(Parcel in) {
+ protected LiveWallpaperInfo(Parcel in) {
+ super(in);
mInfo = in.readParcelable(android.app.WallpaperInfo.class.getClassLoader());
mVisibleTitle = in.readInt() == 1;
mCollectionId = in.readString();
@@ -354,7 +355,7 @@
@Override
public String getActionUrl(Context context) {
- if (BuildCompat.isAtLeastNMR1()) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
try {
Uri wallpaperContextUri = mInfo.loadContextUri(context.getPackageManager());
if (wallpaperContextUri != null) {
@@ -408,6 +409,7 @@
@Override
public void writeToParcel(Parcel parcel, int i) {
+ super.writeToParcel(parcel, i);
parcel.writeParcelable(mInfo, 0 /* flags */);
parcel.writeInt(mVisibleTitle ? 1 : 0);
parcel.writeString(mCollectionId);
diff --git a/src/com/android/wallpaper/model/PartnerWallpaperInfo.java b/src/com/android/wallpaper/model/PartnerWallpaperInfo.java
index 513e3fe..63f9326 100755
--- a/src/com/android/wallpaper/model/PartnerWallpaperInfo.java
+++ b/src/com/android/wallpaper/model/PartnerWallpaperInfo.java
@@ -60,6 +60,7 @@
}
private PartnerWallpaperInfo(Parcel in) {
+ super(in);
mThumbRes = in.readInt();
mFullRes = in.readInt();
}
@@ -158,6 +159,7 @@
@Override
public void writeToParcel(Parcel parcel, int i) {
+ super.writeToParcel(parcel, i);
parcel.writeInt(mThumbRes);
parcel.writeInt(mFullRes);
}
diff --git a/src/com/android/wallpaper/model/SystemStaticWallpaperInfo.java b/src/com/android/wallpaper/model/SystemStaticWallpaperInfo.java
index db34abb..e892956 100755
--- a/src/com/android/wallpaper/model/SystemStaticWallpaperInfo.java
+++ b/src/com/android/wallpaper/model/SystemStaticWallpaperInfo.java
@@ -184,6 +184,7 @@
}
private SystemStaticWallpaperInfo(Parcel in) {
+ super(in);
mPackageName = in.readString();
mWallpaperId = in.readString();
mCollectionId = in.readString();
@@ -292,6 +293,7 @@
@Override
public void writeToParcel(Parcel dest, int flags) {
+ super.writeToParcel(dest, flags);
dest.writeString(mPackageName);
dest.writeString(mWallpaperId);
dest.writeString(mCollectionId);
diff --git a/src/com/android/wallpaper/model/WallpaperInfo.java b/src/com/android/wallpaper/model/WallpaperInfo.java
index 9f657af..c88c602 100755
--- a/src/com/android/wallpaper/model/WallpaperInfo.java
+++ b/src/com/android/wallpaper/model/WallpaperInfo.java
@@ -16,9 +16,13 @@
package com.android.wallpaper.model;
import android.app.Activity;
+import android.app.WallpaperColors;
import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.net.Uri;
+import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.DrawableRes;
@@ -29,12 +33,31 @@
import com.android.wallpaper.asset.Asset;
import java.util.List;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
/**
* Interface for wallpaper info model.
*/
public abstract class WallpaperInfo implements Parcelable {
+ private static final ExecutorService sExecutor = Executors.newCachedThreadPool();
+
+ private int mPlaceholderColor = Color.TRANSPARENT;
+
+ public WallpaperInfo() {}
+
+ protected WallpaperInfo(Parcel in) {
+ mPlaceholderColor = in.readInt();
+ }
+
+ @Override
+ public void writeToParcel(Parcel parcel, int flags) {
+ parcel.writeInt(mPlaceholderColor);
+ }
+
@DrawableRes
public static int getDefaultActionIcon() {
return R.drawable.ic_explore_24px;
@@ -180,6 +203,36 @@
public abstract void showPreview(Activity srcActivity, InlinePreviewIntentFactory factory,
int requestCode);
+
+ /**
+ * Returns a Future to obtain a placeholder color calculated in a background thread for this
+ * wallpaper's thumbnail.
+ * If it's already available, the Future will return the color immediately.
+ * This is intended to be a "best effort" attempt and might not obtain a color if no low res
+ * thumbnail is available.
+ */
+ public Future<Integer> computePlaceholderColor(Context context) {
+ if (mPlaceholderColor != Color.TRANSPARENT) {
+ return CompletableFuture.completedFuture(mPlaceholderColor);
+ }
+ final Context appContext = context.getApplicationContext();
+ return sExecutor.submit(() -> {
+ synchronized (WallpaperInfo.this) {
+ if (mPlaceholderColor != Color.TRANSPARENT) {
+ return mPlaceholderColor;
+ }
+ Asset thumbAsset = getThumbAsset(appContext);
+ Bitmap lowResBitmap = thumbAsset.getLowResBitmap(appContext);
+ if (lowResBitmap == null) {
+ return Color.TRANSPARENT;
+ }
+ mPlaceholderColor = WallpaperColors.fromBitmap(
+ lowResBitmap).getPrimaryColor().toArgb();
+ return mPlaceholderColor;
+ }
+ });
+ }
+
/**
* Whether backup is allowed for this type of wallpaper.
*/
diff --git a/src/com/android/wallpaper/model/WallpaperSectionController.java b/src/com/android/wallpaper/model/WallpaperSectionController.java
index 07f1eb4..f8bd2f3 100644
--- a/src/com/android/wallpaper/model/WallpaperSectionController.java
+++ b/src/com/android/wallpaper/model/WallpaperSectionController.java
@@ -61,10 +61,11 @@
import com.android.wallpaper.util.ResourceUtils;
import com.android.wallpaper.util.WallpaperConnection;
import com.android.wallpaper.util.WallpaperSurfaceCallback;
-import com.android.wallpaper.widget.LockScreenPreviewer2;
+import com.android.wallpaper.widget.LockScreenPreviewer;
/** The class to control the wallpaper section view. */
-public class WallpaperSectionController implements HubSectionController<WallpaperSectionView>,
+public class WallpaperSectionController implements
+ CustomizationSectionController<WallpaperSectionView>,
LifecycleObserver {
private static final String PERMISSION_READ_WALLPAPER_INTERNAL =
@@ -89,7 +90,7 @@
// The wallpaper information which is currently shown on the lock preview.
private WallpaperInfo mLockPreviewWallpaperInfo;
- private LockScreenPreviewer2 mLockScreenPreviewer;
+ private LockScreenPreviewer mLockScreenPreviewer;
private final Activity mActivity;
private final Context mAppContext;
@@ -97,14 +98,14 @@
private final PermissionRequester mPermissionRequester;
private final WallpaperColorsViewModel mWallpaperColorsViewModel;
private final WorkspaceViewModel mWorkspaceViewModel;
- private final HubSectionNavigationController mHubSectionNavigationController;
+ private final CustomizationSectionNavigationController mSectionNavigationController;
private final WallpaperPreviewNavigator mWallpaperPreviewNavigator;
private final Bundle mSavedInstanceState;
public WallpaperSectionController(Activity activity, LifecycleOwner lifecycleOwner,
PermissionRequester permissionRequester, WallpaperColorsViewModel colorsViewModel,
WorkspaceViewModel workspaceViewModel,
- HubSectionNavigationController hubSectionNavigationController,
+ CustomizationSectionNavigationController sectionNavigationController,
WallpaperPreviewNavigator wallpaperPreviewNavigator,
Bundle savedInstanceState) {
mActivity = activity;
@@ -113,7 +114,7 @@
mAppContext = mActivity.getApplicationContext();
mWallpaperColorsViewModel = colorsViewModel;
mWorkspaceViewModel = workspaceViewModel;
- mHubSectionNavigationController = hubSectionNavigationController;
+ mSectionNavigationController = sectionNavigationController;
mWallpaperPreviewNavigator = wallpaperPreviewNavigator;
mSavedInstanceState = savedInstanceState;
}
@@ -154,8 +155,6 @@
WallpaperSectionView wallpaperSectionView = (WallpaperSectionView) LayoutInflater.from(
context).inflate(R.layout.wallpaper_section_view, /* root= */ null);
mHomePreviewCard = wallpaperSectionView.findViewById(R.id.home_preview);
- // TODO(santie) completely remove wallpaper_preview_image once we get rid of the old ui
- mHomePreviewCard.findViewById(R.id.wallpaper_preview_image).setVisibility(View.GONE);
mHomePreviewCard.setContentDescription(mAppContext.getString(
R.string.wallpaper_preview_card_content_description));
mWorkspaceSurface = mHomePreviewCard.findViewById(R.id.workspace_surface);
@@ -175,7 +174,6 @@
R.string.lockscreen_wallpaper_preview_card_content_description));
mLockscreenPreviewProgress = mLockscreenPreviewCard.findViewById(
R.id.wallpaper_preview_spinner);
- mLockscreenPreviewCard.findViewById(R.id.wallpaper_preview_image).setVisibility(View.GONE);
mLockscreenPreviewCard.findViewById(R.id.workspace_surface).setVisibility(View.GONE);
mLockWallpaperSurface = mLockscreenPreviewCard.findViewById(R.id.wallpaper_surface);
mLockWallpaperSurfaceCallback = new WallpaperSurfaceCallback(mActivity,
@@ -187,7 +185,7 @@
mLockPreviewContainer = mLockscreenPreviewCard.findViewById(
R.id.lock_screen_preview_container);
mLockPreviewContainer.setVisibility(View.INVISIBLE);
- mLockScreenPreviewer = new LockScreenPreviewer2(mLifecycleOwner.getLifecycle(), context,
+ mLockScreenPreviewer = new LockScreenPreviewer(mLifecycleOwner.getLifecycle(), context,
mLockPreviewContainer);
setupCurrentWallpaperPreview(wallpaperSectionView);
@@ -199,7 +197,7 @@
updateWorkspaceSurface();
wallpaperSectionView.findViewById(R.id.wallpaper_picker_entry).setOnClickListener(
- v -> mHubSectionNavigationController.navigateTo(new CategorySelectorFragment()));
+ v -> mSectionNavigationController.navigateTo(new CategorySelectorFragment()));
mWorkspaceViewModel.getUpdateWorkspace().observe(mLifecycleOwner, update ->
updateWorkspacePreview(mWorkspaceSurface, mWorkspaceSurfaceCallback,
@@ -338,6 +336,10 @@
mLockPreviewWallpaperInfo =
lockWallpaper == null ? homeWallpaper : lockWallpaper;
+ mHomePreviewWallpaperInfo.computePlaceholderColor(mAppContext);
+ if (lockWallpaper != null) {
+ lockWallpaper.computePlaceholderColor(mAppContext);
+ }
updatePreview(mHomePreviewWallpaperInfo, true);
updatePreview(mLockPreviewWallpaperInfo, false);
@@ -372,7 +374,7 @@
? mHomeWallpaperSurfaceCallback : mLockWallpaperSurfaceCallback;
// Load thumb regardless of live wallpaper to make sure we have a placeholder while
// the live wallpaper initializes in that case.
- Asset thumbAsset = maybeLoadThumbnail(wallpaperInfo, surfaceCallback);
+ maybeLoadThumbnail(wallpaperInfo, surfaceCallback);
if (isHomeWallpaper) {
if (mWallpaperConnection != null) {
@@ -530,4 +532,23 @@
mLockPreviewContainer.setVisibility(visibility);
}
}
+
+ @Override
+ public void onTransitionOut() {
+ if (mHomeWallpaperSurface != null) {
+ mHomeWallpaperSurface.setUseAlpha();
+ mHomeWallpaperSurface.setAlpha(0f);
+ }
+ if (mLockWallpaperSurface != null) {
+ mLockWallpaperSurface.setUseAlpha();
+ mLockWallpaperSurface.setAlpha(0f);
+ }
+ if (mWorkspaceSurface != null) {
+ mWorkspaceSurface.setUseAlpha();
+ mWorkspaceSurface.setAlpha(0f);
+ }
+ if (mLockPreviewContainer != null) {
+ mLockPreviewContainer.setAlpha(0f);
+ }
+ }
}
diff --git a/src/com/android/wallpaper/module/BaseWallpaperInjector.java b/src/com/android/wallpaper/module/BaseWallpaperInjector.java
index de9ddb1..0dc5578 100755
--- a/src/com/android/wallpaper/module/BaseWallpaperInjector.java
+++ b/src/com/android/wallpaper/module/BaseWallpaperInjector.java
@@ -42,6 +42,7 @@
private PackageStatusNotifier mPackageStatusNotifier;
private LiveWallpaperInfoFactory mLiveWallpaperInfoFactory;
private DrawableLayerResolver mDrawableLayerResolver;
+ private CustomizationSections mCustomizationSections;
@Override
public synchronized BitmapCropper getBitmapCropper() {
@@ -177,4 +178,12 @@
}
return mDrawableLayerResolver;
}
+
+ @Override
+ public CustomizationSections getCustomizationSections() {
+ if (mCustomizationSections == null) {
+ mCustomizationSections = new WallpaperPickerSections();
+ }
+ return mCustomizationSections;
+ }
}
diff --git a/src/com/android/wallpaper/module/CustomizationSections.java b/src/com/android/wallpaper/module/CustomizationSections.java
new file mode 100644
index 0000000..c611d50
--- /dev/null
+++ b/src/com/android/wallpaper/module/CustomizationSections.java
@@ -0,0 +1,37 @@
+package com.android.wallpaper.module;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+import androidx.annotation.Nullable;
+import androidx.lifecycle.LifecycleOwner;
+
+import com.android.wallpaper.model.CustomizationSectionController;
+import com.android.wallpaper.model.CustomizationSectionController.CustomizationSectionNavigationController;
+import com.android.wallpaper.model.PermissionRequester;
+import com.android.wallpaper.model.WallpaperColorsViewModel;
+import com.android.wallpaper.model.WallpaperPreviewNavigator;
+import com.android.wallpaper.model.WorkspaceViewModel;
+
+import java.util.List;
+
+/** Interface for carry {@link CustomizationSectionController}s. */
+public interface CustomizationSections {
+
+ /**
+ * Gets a new instance of the section controller list.
+ *
+ * Note that the section views will be displayed by the list ordering.
+ *
+ * <p>Don't keep the section controllers as singleton since they contain views.
+ */
+ List<CustomizationSectionController<?>> getAllSectionControllers(
+ Activity activity,
+ LifecycleOwner lifecycleOwner,
+ WallpaperColorsViewModel wallpaperColorsViewModel,
+ WorkspaceViewModel workspaceViewModel,
+ PermissionRequester permissionRequester,
+ WallpaperPreviewNavigator wallpaperPreviewNavigator,
+ CustomizationSectionNavigationController sectionNavigationController,
+ @Nullable Bundle savedInstanceState);
+}
diff --git a/src/com/android/wallpaper/module/DailyLoggingAlarmScheduler.java b/src/com/android/wallpaper/module/DailyLoggingAlarmScheduler.java
index e3d7b06..dd3a013 100755
--- a/src/com/android/wallpaper/module/DailyLoggingAlarmScheduler.java
+++ b/src/com/android/wallpaper/module/DailyLoggingAlarmScheduler.java
@@ -15,6 +15,8 @@
*/
package com.android.wallpaper.module;
+import static android.app.PendingIntent.FLAG_IMMUTABLE;
+
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
@@ -30,7 +32,6 @@
public class DailyLoggingAlarmScheduler {
private static final int UNUSED_REQUEST_CODE = 0;
- private static final int UNUSED_REQUEST_FLAGS = 0;
/**
* Sets a new alarm to fire approximately 24 hours after the last one, or immediately if it has
@@ -79,7 +80,7 @@
private static PendingIntent createAlarmReceiverPendingIntent(Context appContext) {
Intent intent = new Intent(appContext, DailyLoggingAlarmReceiver.class);
return PendingIntent.getBroadcast(
- appContext, UNUSED_REQUEST_CODE, intent, UNUSED_REQUEST_FLAGS);
+ appContext, UNUSED_REQUEST_CODE, intent, FLAG_IMMUTABLE);
}
}
diff --git a/src/com/android/wallpaper/module/DefaultCategoryProvider.java b/src/com/android/wallpaper/module/DefaultCategoryProvider.java
index dc9b227..e82045d 100755
--- a/src/com/android/wallpaper/module/DefaultCategoryProvider.java
+++ b/src/com/android/wallpaper/module/DefaultCategoryProvider.java
@@ -142,12 +142,14 @@
}
@Override
- public void resetIfNeeded() {
+ public boolean resetIfNeeded() {
if (mNetworkStatus != mNetworkStatusNotifier.getNetworkStatus()
|| mLocale != getLocale()) {
mCategories.clear();
mFetchedCategories = false;
+ return true;
}
+ return false;
}
@Override
diff --git a/src/com/android/wallpaper/module/DefaultWallpaperPersister.java b/src/com/android/wallpaper/module/DefaultWallpaperPersister.java
index bf86585..52b86aa 100755
--- a/src/com/android/wallpaper/module/DefaultWallpaperPersister.java
+++ b/src/com/android/wallpaper/module/DefaultWallpaperPersister.java
@@ -28,6 +28,7 @@
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.os.AsyncTask;
+import android.os.Build;
import android.os.ParcelFileDescriptor;
import android.util.Log;
import android.view.Display;
@@ -41,7 +42,6 @@
import com.android.wallpaper.asset.BitmapUtils;
import com.android.wallpaper.asset.StreamableAsset;
import com.android.wallpaper.asset.StreamableAsset.StreamReceiver;
-import com.android.wallpaper.compat.BuildCompat;
import com.android.wallpaper.compat.WallpaperManagerCompat;
import com.android.wallpaper.model.WallpaperInfo;
import com.android.wallpaper.module.BitmapCropper.Callback;
@@ -695,7 +695,7 @@
&& mWallpaperPreferences.getWallpaperPresentationMode()
== WallpaperPreferences.PRESENTATION_MODE_ROTATING
&& !wasLockWallpaperSet
- && BuildCompat.isAtLeastN()) {
+ && Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
copyRotatingWallpaperToLock();
}
setImageWallpaperMetadata(mDestination, wallpaperId);
@@ -785,7 +785,7 @@
}
private void setImageWallpaperHomeMetadata(int homeWallpaperId) {
- if (BuildCompat.isAtLeastN()) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
mWallpaperPreferences.setHomeWallpaperManagerId(homeWallpaperId);
}
diff --git a/src/com/android/wallpaper/module/DefaultWallpaperRefresher.java b/src/com/android/wallpaper/module/DefaultWallpaperRefresher.java
index d85e04e..5a43af1 100755
--- a/src/com/android/wallpaper/module/DefaultWallpaperRefresher.java
+++ b/src/com/android/wallpaper/module/DefaultWallpaperRefresher.java
@@ -22,12 +22,12 @@
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.os.AsyncTask;
+import android.os.Build;
import android.os.ParcelFileDescriptor;
import android.util.Log;
import com.android.wallpaper.R;
import com.android.wallpaper.asset.BitmapUtils;
-import com.android.wallpaper.compat.BuildCompat;
import com.android.wallpaper.compat.WallpaperManagerCompat;
import com.android.wallpaper.model.WallpaperMetadata;
@@ -101,7 +101,9 @@
boolean isLockScreenWallpaperCurrentlySet = LockWallpaperStatusChecker
.isLockWallpaperSet(mAppContext);
- if (!BuildCompat.isAtLeastN() || !isLockScreenWallpaperCurrentlySet) {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N
+ || !isLockScreenWallpaperCurrentlySet) {
+
// Return only home metadata if pre-N device or lock screen wallpaper is not explicitly set.
wallpaperMetadatas.add(new WallpaperMetadata(
mWallpaperPreferences.getHomeWallpaperAttributions(),
@@ -164,7 +166,7 @@
Arrays.asList(mAppContext.getResources().getString(R.string.fallback_wallpaper_title)));
// Set wallpaper ID if at least N or set a hash code if an earlier version of Android.
- if (BuildCompat.isAtLeastN()) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
mWallpaperPreferences.setHomeWallpaperManagerId(mWallpaperManagerCompat.getWallpaperId(
WallpaperManagerCompat.FLAG_SYSTEM));
} else {
@@ -277,7 +279,7 @@
// Use WallpaperManager IDs to check same-ness of image wallpaper on N+ versions of Android
// only when there is no saved bitmap hash code (which could be leftover from a previous build
// of the app that did not use wallpaper IDs).
- if (BuildCompat.isAtLeastN() && savedBitmapHash == 0) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && savedBitmapHash == 0) {
return mWallpaperPreferences.getHomeWallpaperManagerId()
== mWallpaperManagerCompat.getWallpaperId(WallpaperManagerCompat.FLAG_SYSTEM);
}
diff --git a/src/com/android/wallpaper/module/Injector.java b/src/com/android/wallpaper/module/Injector.java
index b85c279..1c40e93 100755
--- a/src/com/android/wallpaper/module/Injector.java
+++ b/src/com/android/wallpaper/module/Injector.java
@@ -88,4 +88,6 @@
Intent getDeepLinkRedirectIntent(Context context, Uri uri);
String getDownloadableIntentAction();
+
+ CustomizationSections getCustomizationSections();
}
diff --git a/src/com/android/wallpaper/module/LockWallpaperStatusChecker.java b/src/com/android/wallpaper/module/LockWallpaperStatusChecker.java
index 2ae93b0..754c95a 100755
--- a/src/com/android/wallpaper/module/LockWallpaperStatusChecker.java
+++ b/src/com/android/wallpaper/module/LockWallpaperStatusChecker.java
@@ -16,10 +16,10 @@
package com.android.wallpaper.module;
import android.content.Context;
+import android.os.Build;
import android.os.ParcelFileDescriptor;
import android.util.Log;
-import com.android.wallpaper.compat.BuildCompat;
import com.android.wallpaper.compat.WallpaperManagerCompat;
import java.io.IOException;
@@ -37,7 +37,7 @@
*/
public static boolean isLockWallpaperSet(Context context) {
// Lock screen wallpapers are not supported until Android N.
- if (!BuildCompat.isAtLeastN()) {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
return false;
}
diff --git a/src/com/android/wallpaper/module/RotationWallpaperUpdateReceiver.java b/src/com/android/wallpaper/module/RotationWallpaperUpdateReceiver.java
index 4fbc20d..c372d25 100644
--- a/src/com/android/wallpaper/module/RotationWallpaperUpdateReceiver.java
+++ b/src/com/android/wallpaper/module/RotationWallpaperUpdateReceiver.java
@@ -20,8 +20,8 @@
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
+import android.os.Build;
-import com.android.wallpaper.compat.BuildCompat;
import com.android.wallpaper.util.DiskBasedLogger;
import com.android.wallpaper.util.FileMover;
@@ -46,7 +46,7 @@
if (intent.getAction() == null
|| !(intent.getAction().equals(Intent.ACTION_MY_PACKAGE_REPLACED)
|| intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED))
- || !BuildCompat.isAtLeastN()) {
+ || Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
DiskBasedLogger.e(
TAG,
"Unexpected action or Android version!",
diff --git a/src/com/android/wallpaper/module/WallpaperPickerSections.java b/src/com/android/wallpaper/module/WallpaperPickerSections.java
new file mode 100644
index 0000000..b5e8d17
--- /dev/null
+++ b/src/com/android/wallpaper/module/WallpaperPickerSections.java
@@ -0,0 +1,39 @@
+package com.android.wallpaper.module;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+import androidx.annotation.Nullable;
+import androidx.lifecycle.LifecycleOwner;
+
+import com.android.wallpaper.model.CustomizationSectionController;
+import com.android.wallpaper.model.CustomizationSectionController.CustomizationSectionNavigationController;
+import com.android.wallpaper.model.PermissionRequester;
+import com.android.wallpaper.model.WallpaperColorsViewModel;
+import com.android.wallpaper.model.WallpaperPreviewNavigator;
+import com.android.wallpaper.model.WallpaperSectionController;
+import com.android.wallpaper.model.WorkspaceViewModel;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/** {@link CustomizationSections} for the wallpaper picker. */
+public final class WallpaperPickerSections implements CustomizationSections {
+
+ @Override
+ public List<CustomizationSectionController<?>> getAllSectionControllers(Activity activity,
+ LifecycleOwner lifecycleOwner, WallpaperColorsViewModel wallpaperColorsViewModel,
+ WorkspaceViewModel workspaceViewModel, PermissionRequester permissionRequester,
+ WallpaperPreviewNavigator wallpaperPreviewNavigator,
+ CustomizationSectionNavigationController sectionNavigationController,
+ @Nullable Bundle savedInstanceState) {
+ List<CustomizationSectionController<?>> sectionControllers = new ArrayList<>();
+
+ sectionControllers.add(new WallpaperSectionController(
+ activity, lifecycleOwner, permissionRequester, wallpaperColorsViewModel,
+ workspaceViewModel, sectionNavigationController, wallpaperPreviewNavigator,
+ savedInstanceState));
+
+ return sectionControllers;
+ }
+}
diff --git a/src/com/android/wallpaper/picker/BasePreviewActivity.java b/src/com/android/wallpaper/picker/BasePreviewActivity.java
index 361a095..2195909 100755
--- a/src/com/android/wallpaper/picker/BasePreviewActivity.java
+++ b/src/com/android/wallpaper/picker/BasePreviewActivity.java
@@ -33,7 +33,7 @@
public abstract class BasePreviewActivity extends BaseActivity {
public static final String EXTRA_WALLPAPER_INFO =
"com.android.wallpaper.picker.wallpaper_info";
- public static final String EXTRA_VIEW_AS_HODE =
+ public static final String EXTRA_VIEW_AS_HOME =
"com.android.wallpaper.picker.view_as_home";
public static final String EXTRA_TESTING_MODE_ENABLED =
"com.android.wallpaper.picker.testing_mode_enabled";
diff --git a/src/com/android/wallpaper/picker/BottomActionBarFragment.java b/src/com/android/wallpaper/picker/BottomActionBarFragment.java
index 24aa3ea..6802b76 100644
--- a/src/com/android/wallpaper/picker/BottomActionBarFragment.java
+++ b/src/com/android/wallpaper/picker/BottomActionBarFragment.java
@@ -54,10 +54,6 @@
/** Returns {@code true} if the fragment would handle the event. */
public boolean onBackPressed() {
- if (mBottomActionBar != null && mBottomActionBar.isVisible()) {
- mBottomActionBar.hide();
- return true;
- }
return false;
}
diff --git a/src/com/android/wallpaper/picker/CategoryFragment.java b/src/com/android/wallpaper/picker/CategoryFragment.java
index cb3b2d7..4cbde9d 100755
--- a/src/com/android/wallpaper/picker/CategoryFragment.java
+++ b/src/com/android/wallpaper/picker/CategoryFragment.java
@@ -68,7 +68,7 @@
import com.android.wallpaper.util.WallpaperConnection;
import com.android.wallpaper.util.WallpaperConnection.WallpaperConnectionListener;
import com.android.wallpaper.util.WallpaperSurfaceCallback;
-import com.android.wallpaper.widget.LockScreenPreviewer2;
+import com.android.wallpaper.widget.LockScreenPreviewer;
import com.android.wallpaper.widget.PreviewPager;
import com.android.wallpaper.widget.WallpaperColorsLoader;
import com.android.wallpaper.widget.WallpaperPickerRecyclerViewAccessibilityDelegate;
@@ -121,12 +121,10 @@
private static final String PERMISSION_READ_WALLPAPER_INTERNAL =
"android.permission.READ_WALLPAPER_INTERNAL";
- private ImageView mHomePreview;
private SurfaceView mWorkspaceSurface;
private WorkspaceSurfaceHolderCallback mWorkspaceSurfaceCallback;
private SurfaceView mWallpaperSurface;
private WallpaperSurfaceCallback mWallpaperSurfaceCallback;
- private ImageView mLockscreenPreview;
private PreviewPager mPreviewPager;
private List<View> mWallPaperPreviews;
private WallpaperConnection mWallpaperConnection;
@@ -142,7 +140,7 @@
// The wallpaper information which is currently shown on the lock preview.
private WallpaperInfo mLockPreviewWallpaperInfo;
- private LockScreenPreviewer2 mLockScreenPreviewer;
+ private LockScreenPreviewer mLockScreenPreviewer;
private View mRootContainer;
private final Rect mPreviewLocalRect = new Rect();
@@ -162,24 +160,22 @@
mWallPaperPreviews = new ArrayList<>();
CardView homePreviewCard = (CardView) inflater.inflate(
R.layout.wallpaper_preview_card, null);
- mHomePreview = homePreviewCard.findViewById(R.id.wallpaper_preview_image);
mWorkspaceSurface = homePreviewCard.findViewById(R.id.workspace_surface);
mWorkspaceSurfaceCallback = new WorkspaceSurfaceHolderCallback(
mWorkspaceSurface, getContext());
mWallpaperSurface = homePreviewCard.findViewById(R.id.wallpaper_surface);
- mWallpaperSurfaceCallback = new WallpaperSurfaceCallback(getContext(), mHomePreview,
+ mWallpaperSurfaceCallback = new WallpaperSurfaceCallback(getContext(), homePreviewCard,
mWallpaperSurface);
mWallPaperPreviews.add(homePreviewCard);
CardView lockscreenPreviewCard = (CardView) inflater.inflate(
R.layout.wallpaper_preview_card, null);
- mLockscreenPreview = lockscreenPreviewCard.findViewById(R.id.wallpaper_preview_image);
lockscreenPreviewCard.findViewById(R.id.workspace_surface).setVisibility(View.GONE);
lockscreenPreviewCard.findViewById(R.id.wallpaper_surface).setVisibility(View.GONE);
ViewGroup lockPreviewContainer = lockscreenPreviewCard.findViewById(
R.id.lock_screen_preview_container);
lockPreviewContainer.setVisibility(View.VISIBLE);
- mLockScreenPreviewer = new LockScreenPreviewer2(getLifecycle(), getContext(),
+ mLockScreenPreviewer = new LockScreenPreviewer(getLifecycle(), getContext(),
lockPreviewContainer);
mWallPaperPreviews.add(lockscreenPreviewCard);
@@ -245,13 +241,12 @@
int minimumHeight = mRootContainer.getHeight() - mPreviewPager.getMeasuredHeight();
mBottomSheetBehavior.setPeekHeight(minimumHeight);
containerView.setMinimumHeight(minimumHeight);
- ((CardView) mHomePreview.getParent())
- .setRadius(SizeCalculator.getPreviewCornerRadius(
+ homePreviewCard.setRadius(SizeCalculator.getPreviewCornerRadius(
getActivity(), homePreviewCard.getMeasuredWidth()));
- if (mLockscreenPreview != null) {
- ((CardView) mLockscreenPreview.getParent())
+ if (lockscreenPreviewCard != null) {
+ lockscreenPreviewCard
.setRadius(SizeCalculator.getPreviewCornerRadius(
- getActivity(), mLockscreenPreview.getMeasuredWidth()));
+ getActivity(), lockPreviewContainer.getMeasuredWidth()));
}
}});
fragmentContainer.setOnApplyWindowInsetsListener((v, windowInsets) -> {
@@ -456,8 +451,8 @@
mHomePreviewWallpaperInfo = wallpaperInfo;
mLockPreviewWallpaperInfo = wallpaperInfo;
- updateThumbnail(mHomePreviewWallpaperInfo, mHomePreview, true);
- updateThumbnail(mLockPreviewWallpaperInfo, mLockscreenPreview, false);
+ updateThumbnail(mHomePreviewWallpaperInfo,
+ mWallpaperSurfaceCallback.getHomeImageWallpaper(), true);
mShowSelectedWallpaper = true;
});
}
@@ -621,8 +616,8 @@
mHomePreviewWallpaperInfo = homeWallpaper;
mLockPreviewWallpaperInfo =
lockWallpaper == null ? homeWallpaper : lockWallpaper;
- updateThumbnail(mHomePreviewWallpaperInfo, mHomePreview, true);
- updateThumbnail(mLockPreviewWallpaperInfo, mLockscreenPreview, false);
+ updateThumbnail(mHomePreviewWallpaperInfo,
+ mWallpaperSurfaceCallback.getHomeImageWallpaper(), true);
}
});
}
@@ -639,7 +634,7 @@
}
if (WallpaperConnection.isPreviewAvailable()) {
- ImageView previewView = mWallpaperIndex == 0 ? mHomePreview : mLockscreenPreview;
+ ImageView previewView = mWallpaperSurfaceCallback.getHomeImageWallpaper();
mWallpaperConnection = new WallpaperConnection(
getWallpaperIntent(homeWallpaper.getWallpaperComponent()), activity,
new WallpaperConnectionListener() {
diff --git a/src/com/android/wallpaper/picker/CustomizationPickerActivity.java b/src/com/android/wallpaper/picker/CustomizationPickerActivity.java
new file mode 100644
index 0000000..16bfffe
--- /dev/null
+++ b/src/com/android/wallpaper/picker/CustomizationPickerActivity.java
@@ -0,0 +1,384 @@
+/*
+ * Copyright (C) 2021 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.
+ */
+package com.android.wallpaper.picker;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Build;
+import android.os.Bundle;
+import android.provider.Settings;
+import android.text.TextUtils;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.core.view.WindowCompat;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
+import androidx.fragment.app.FragmentManager;
+
+import com.android.wallpaper.R;
+import com.android.wallpaper.model.Category;
+import com.android.wallpaper.model.PermissionRequester;
+import com.android.wallpaper.model.WallpaperCategory;
+import com.android.wallpaper.model.WallpaperInfo;
+import com.android.wallpaper.model.WallpaperPreviewNavigator;
+import com.android.wallpaper.module.DailyLoggingAlarmScheduler;
+import com.android.wallpaper.module.Injector;
+import com.android.wallpaper.module.InjectorProvider;
+import com.android.wallpaper.module.NetworkStatusNotifier;
+import com.android.wallpaper.module.NetworkStatusNotifier.NetworkStatus;
+import com.android.wallpaper.module.UserEventLogger;
+import com.android.wallpaper.picker.AppbarFragment.AppbarFragmentHost;
+import com.android.wallpaper.picker.CategoryFragment.CategoryFragmentHost;
+import com.android.wallpaper.picker.CategorySelectorFragment.CategorySelectorFragmentHost;
+import com.android.wallpaper.picker.MyPhotosStarter.PermissionChangedListener;
+import com.android.wallpaper.picker.individual.IndividualPickerFragment.IndividualPickerFragmentHost;
+import com.android.wallpaper.util.DeepLinkUtils;
+import com.android.wallpaper.util.LaunchUtils;
+import com.android.wallpaper.widget.BottomActionBar;
+import com.android.wallpaper.widget.BottomActionBar.BottomActionBarHost;
+
+/**
+ * Main Activity allowing containing view sections for the user to switch between the different
+ * Fragments providing customization options.
+ */
+public class CustomizationPickerActivity extends FragmentActivity implements AppbarFragmentHost,
+ WallpapersUiContainer, CategoryFragmentHost, BottomActionBarHost,
+ FragmentTransactionChecker, PermissionRequester, CategorySelectorFragmentHost,
+ IndividualPickerFragmentHost, WallpaperPreviewNavigator {
+
+ public static final String WALLPAPER_FLAVOR_EXTRA =
+ "com.android.launcher3.WALLPAPER_FLAVOR";
+ public static final String WALLPAPER_FOCUS = "focus_wallpaper";
+
+ private static final String TAG = "CustomizationPickerActivity";
+ private static final String WALLPAPER_ONLY = "wallpaper_only";
+
+ private WallpaperPickerDelegate mDelegate;
+ private UserEventLogger mUserEventLogger;
+ private NetworkStatusNotifier mNetworkStatusNotifier;
+ private NetworkStatusNotifier.Listener mNetworkStatusListener;
+ @NetworkStatus private int mNetworkStatus;
+
+ private BottomActionBar mBottomActionBar;
+ private boolean mIsSafeToCommitFragmentTransaction;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ Injector injector = InjectorProvider.getInjector();
+ mDelegate = new WallpaperPickerDelegate(this, this, injector);
+ mUserEventLogger = injector.getUserEventLogger(this);
+ mNetworkStatusNotifier = injector.getNetworkStatusNotifier(this);
+ mNetworkStatus = mNetworkStatusNotifier.getNetworkStatus();
+
+ // Restore this Activity's state before restoring contained Fragments state.
+ super.onCreate(savedInstanceState);
+ if (WALLPAPER_ONLY.equals(getIntent().getStringExtra(WALLPAPER_FLAVOR_EXTRA))
+ || !supportCustomizationSections()) {
+ skipToWallpaperPicker();
+ return;
+ }
+
+ setContentView(R.layout.activity_customization_picker);
+ mBottomActionBar = findViewById(R.id.bottom_actionbar);
+
+ // See go/pdr-edge-to-edge-guide.
+ WindowCompat.setDecorFitsSystemWindows(getWindow(), /* decorFitsSystemWindows= */ false);
+
+ Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
+ if (fragment == null) {
+ // App launch specific logic: log the "app launch source" event.
+ if (getIntent() != null) {
+ mUserEventLogger.logAppLaunched(getIntent());
+ }
+ injector.getPreferences(this).incrementAppLaunched();
+ DailyLoggingAlarmScheduler.setAlarm(getApplicationContext());
+
+ // Switch to the customization picker fragment.
+ switchFragment(CustomizationPickerFragment.newInstance(getString(R.string.app_name)));
+ }
+
+ // Deep link case
+ Intent intent = getIntent();
+ String deepLinkCollectionId = DeepLinkUtils.getCollectionId(intent);
+ if (!TextUtils.isEmpty(deepLinkCollectionId)) {
+ switchFragmentWithBackStack(new CategorySelectorFragment());
+ switchFragmentWithBackStack(InjectorProvider.getInjector().getIndividualPickerFragment(
+ deepLinkCollectionId));
+ intent.setData(null);
+ }
+ mDelegate.prefetchCategories();
+ }
+
+ @Override
+ protected void onStart() {
+ super.onStart();
+ if (mNetworkStatusListener == null) {
+ mNetworkStatusListener = status -> {
+ if (status == mNetworkStatus) {
+ return;
+ }
+ Log.i(TAG, "Network status changes, refresh wallpaper categories.");
+ mNetworkStatus = status;
+ mDelegate.initialize(/* forceCategoryRefresh= */ true);
+ };
+ // Upon registering a listener, the onNetworkChanged method is immediately called with
+ // the initial network status.
+ mNetworkStatusNotifier.registerListener(mNetworkStatusListener);
+ }
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ mIsSafeToCommitFragmentTransaction = true;
+ boolean wallpaperOnly =
+ WALLPAPER_ONLY.equals(getIntent().getStringExtra(WALLPAPER_FLAVOR_EXTRA));
+ boolean provisioned = Settings.Global.getInt(getContentResolver(),
+ Settings.Global.DEVICE_PROVISIONED, 0) != 0;
+
+ mUserEventLogger.logResumed(provisioned, wallpaperOnly);
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ mIsSafeToCommitFragmentTransaction = false;
+ }
+
+ @Override
+ protected void onStop() {
+ mUserEventLogger.logStopped();
+ if (mNetworkStatusListener != null) {
+ mNetworkStatusNotifier.unregisterListener(mNetworkStatusListener);
+ mNetworkStatusListener = null;
+ }
+ super.onStop();
+ }
+
+ @Override
+ 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();
+ }
+ }
+
+ private void skipToWallpaperPicker() {
+ Intent intent = new Intent(this, TopLevelPickerActivity.class);
+
+ if (getIntent() != null && getIntent().getExtras() != null) {
+ intent.putExtras(getIntent().getExtras());
+ }
+
+ if (DeepLinkUtils.isDeepLink(getIntent())) {
+ intent.setData(getIntent().getData());
+ }
+ startActivity(intent);
+ finish();
+ }
+
+ private boolean supportCustomizationSections() {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S
+ || "S".equals(Build.VERSION.CODENAME)) {
+ return true;
+ }
+ Log.d(TAG, "Build version < S, customization sections feature is not supported");
+ return false;
+ }
+
+ @Override
+ public void onBackPressed() {
+ Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
+ if (fragment instanceof BottomActionBarFragment
+ && ((BottomActionBarFragment) fragment).onBackPressed()) {
+ return;
+ }
+
+ if (getSupportFragmentManager().popBackStackImmediate()) {
+ return;
+ }
+ if (moveTaskToBack(false)) {
+ return;
+ }
+ super.onBackPressed();
+ }
+
+ private void switchFragment(Fragment fragment) {
+ getSupportFragmentManager()
+ .beginTransaction()
+ .replace(R.id.fragment_container, fragment)
+ .commitNow();
+ }
+
+ private void switchFragmentWithBackStack(Fragment fragment) {
+ getSupportFragmentManager()
+ .beginTransaction()
+ .replace(R.id.fragment_container, fragment)
+ .addToBackStack(null)
+ .commit();
+ getSupportFragmentManager().executePendingTransactions();
+ }
+
+
+ @Override
+ public void requestExternalStoragePermission(PermissionChangedListener listener) {
+ mDelegate.requestExternalStoragePermission(listener);
+ }
+
+ @Override
+ public boolean isReadExternalStoragePermissionGranted() {
+ return mDelegate.isReadExternalStoragePermissionGranted();
+ }
+
+ @Override
+ public void showViewOnlyPreview(WallpaperInfo wallpaperInfo, boolean isViewAsHome) {
+ mDelegate.showViewOnlyPreview(wallpaperInfo, isViewAsHome);
+ }
+
+ @Override
+ public void show(String collectionId) {
+ mDelegate.show(collectionId);
+ }
+
+ @Override
+ public void requestCustomPhotoPicker(PermissionChangedListener listener) {
+ mDelegate.requestCustomPhotoPicker(listener);
+ }
+
+ @Override
+ public void show(Category category) {
+ if (!(category instanceof WallpaperCategory)) {
+ show(category.getCollectionId());
+ return;
+ }
+ switchFragmentWithBackStack(InjectorProvider.getInjector().getIndividualPickerFragment(
+ category.getCollectionId()));
+ }
+
+ @Override
+ public boolean isHostToolbarShown() {
+ return false;
+ }
+
+ @Override
+ public void setToolbarTitle(CharSequence title) {
+
+ }
+
+ @Override
+ public void setToolbarMenu(int menuResId) {
+
+ }
+
+ @Override
+ public void removeToolbarMenu() {
+
+ }
+
+ @Override
+ public void moveToPreviousFragment() {
+ getSupportFragmentManager().popBackStack();
+ }
+
+ @Override
+ public void fetchCategories() {
+ mDelegate.initialize(!mDelegate.getCategoryProvider().isCategoriesFetched());
+ }
+
+ @Override
+ public void cleanUp() {
+ mDelegate.cleanUp();
+ }
+
+ @Override
+ public void onWallpapersReady() {
+
+ }
+
+ @Nullable
+ @Override
+ public CategorySelectorFragment getCategorySelectorFragment() {
+ FragmentManager fm = getSupportFragmentManager();
+ Fragment fragment = fm.findFragmentById(R.id.fragment_container);
+ if (fragment instanceof CategorySelectorFragment) {
+ return (CategorySelectorFragment) fragment;
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ }
+
+ @Override
+ public void doneFetchingCategories() {
+
+ }
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
+ @NonNull int[] grantResults) {
+ mDelegate.onRequestPermissionsResult(requestCode, permissions, grantResults);
+ }
+
+ @Override
+ public MyPhotosStarter getMyPhotosStarter() {
+ return mDelegate;
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (mDelegate.handleActivityResult(requestCode, resultCode, data)) {
+ finishActivityWithResultOk();
+ }
+ }
+
+ private void finishActivityWithResultOk() {
+ overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
+ setResult(Activity.RESULT_OK);
+ finish();
+
+ // Go back to launcher home
+ LaunchUtils.launchHome(this);
+ }
+
+ @Override
+ public BottomActionBar getBottomActionBar() {
+ return mBottomActionBar;
+ }
+
+ @Override
+ public boolean isSafeToCommitFragmentTransaction() {
+ return mIsSafeToCommitFragmentTransaction;
+ }
+
+ @Override
+ public void onUpArrowPressed() {
+ // TODO(b/189166781): Remove interface AppbarFragmentHost#onUpArrowPressed.
+ onBackPressed();
+ }
+
+ @Override
+ public boolean isUpArrowSupported() {
+ return true;
+ }
+}
diff --git a/src/com/android/wallpaper/picker/CustomizationPickerFragment.java b/src/com/android/wallpaper/picker/CustomizationPickerFragment.java
new file mode 100644
index 0000000..75f1b46
--- /dev/null
+++ b/src/com/android/wallpaper/picker/CustomizationPickerFragment.java
@@ -0,0 +1,185 @@
+/*
+ * Copyright (C) 2021 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.
+ */
+package com.android.wallpaper.picker;
+
+import android.os.Bundle;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.Nullable;
+import androidx.core.widget.NestedScrollView;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.lifecycle.ViewModelProvider;
+
+import com.android.wallpaper.R;
+import com.android.wallpaper.model.CustomizationSectionController;
+import com.android.wallpaper.model.CustomizationSectionController.CustomizationSectionNavigationController;
+import com.android.wallpaper.model.PermissionRequester;
+import com.android.wallpaper.model.WallpaperColorsViewModel;
+import com.android.wallpaper.model.WallpaperPreviewNavigator;
+import com.android.wallpaper.model.WorkspaceViewModel;
+import com.android.wallpaper.module.CustomizationSections;
+import com.android.wallpaper.module.InjectorProvider;
+import com.android.wallpaper.util.ActivityUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/** The Fragment UI for customization sections. */
+public class CustomizationPickerFragment extends AppbarFragment implements
+ CustomizationSectionNavigationController {
+
+ private static final String TAG = "CustomizationPickerFragment";
+ private static final String SCROLL_POSITION_Y = "SCROLL_POSITION_Y";
+
+ // Note that the section views will be displayed by the list ordering.
+ private final List<CustomizationSectionController<?>> mSectionControllers = new ArrayList<>();
+ private NestedScrollView mNestedScrollView;
+
+ /** Initiates CustomizationPickerFragment instance. */
+ public static CustomizationPickerFragment newInstance(CharSequence title) {
+ CustomizationPickerFragment fragment = new CustomizationPickerFragment();
+ fragment.setArguments(AppbarFragment.createArguments(title));
+ return fragment;
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ final View view = inflater.inflate(R.layout.collapsing_toolbar_base_layout,
+ container, /* attachToRoot= */ false);
+ setContentView(view, R.layout.fragment_customization_picker);
+ setUpToolbar(view, ActivityUtils.isLaunchedFromSettingsRelated(getActivity().getIntent()));
+
+ ViewGroup sectionContainer = view.findViewById(R.id.section_container);
+ sectionContainer.setOnApplyWindowInsetsListener((v, windowInsets) -> {
+ v.setPadding(
+ v.getPaddingLeft(),
+ v.getPaddingTop(),
+ v.getPaddingRight(),
+ windowInsets.getSystemWindowInsetBottom());
+ return windowInsets.consumeSystemWindowInsets();
+ });
+ mNestedScrollView = view.findViewById(R.id.scroll_container);
+
+ initSections(savedInstanceState);
+ mSectionControllers.forEach(controller ->
+ sectionContainer.addView(controller.createView(getContext())));
+ restoreViewState(savedInstanceState);
+ return view;
+ }
+
+ private void setContentView(View view, int layoutResId) {
+ final ViewGroup parent = view.findViewById(R.id.content_frame);
+ if (parent != null) {
+ parent.removeAllViews();
+ }
+ LayoutInflater.from(view.getContext()).inflate(layoutResId, parent);
+ }
+
+ private void restoreViewState(@Nullable Bundle savedInstanceState) {
+ if (savedInstanceState != null) {
+ mNestedScrollView.post(() ->
+ mNestedScrollView.setScrollY(savedInstanceState.getInt(SCROLL_POSITION_Y)));
+ }
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle savedInstanceState) {
+ if (mNestedScrollView != null) {
+ savedInstanceState.putInt(SCROLL_POSITION_Y, mNestedScrollView.getScrollY());
+ }
+ mSectionControllers.forEach(c -> c.onSaveInstanceState(savedInstanceState));
+ super.onSaveInstanceState(savedInstanceState);
+ }
+
+ @Override
+ protected int getToolbarId() {
+ return R.id.action_bar;
+ }
+
+ @Override
+ public boolean onBackPressed() {
+ // TODO(b/191120122) Improve glitchy animation in Settings.
+ if (ActivityUtils.isLaunchedFromSettingsSearch(getActivity().getIntent())) {
+ mSectionControllers.forEach(CustomizationSectionController::onTransitionOut);
+ }
+ return super.onBackPressed();
+ }
+
+ @Override
+ public void onDestroyView() {
+ mSectionControllers.forEach(CustomizationSectionController::release);
+ mSectionControllers.clear();
+ super.onDestroyView();
+ }
+
+ @Override
+ public void navigateTo(Fragment fragment) {
+ FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
+ fragmentManager
+ .beginTransaction()
+ .replace(R.id.fragment_container, fragment)
+ .addToBackStack(null)
+ .commit();
+ fragmentManager.executePendingTransactions();
+ }
+
+ private void initSections(@Nullable Bundle savedInstanceState) {
+ // Release and clear if any.
+ mSectionControllers.forEach(CustomizationSectionController::release);
+ mSectionControllers.clear();
+
+ WallpaperColorsViewModel wcViewModel = new ViewModelProvider(getActivity())
+ .get(WallpaperColorsViewModel.class);
+ WorkspaceViewModel workspaceViewModel = new ViewModelProvider(getActivity())
+ .get(WorkspaceViewModel.class);
+
+ CustomizationSections sections = InjectorProvider.getInjector().getCustomizationSections();
+ List<CustomizationSectionController<?>> allSectionControllers =
+ sections.getAllSectionControllers(getActivity(), getViewLifecycleOwner(),
+ wcViewModel, workspaceViewModel, getPermissionRequester(),
+ getWallpaperPreviewNavigator(), this, savedInstanceState);
+
+ mSectionControllers.addAll(getAvailableSections(allSectionControllers));
+ }
+
+ private List<CustomizationSectionController<?>> getAvailableSections (
+ List<CustomizationSectionController<?>> controllers) {
+ return controllers.stream()
+ .filter(controller -> {
+ if(controller.isAvailable(getContext())) {
+ return true;
+ } else {
+ controller.release();
+ Log.d(TAG, "Section is not available: " + controller);
+ return false;
+ }})
+ .collect(Collectors.toList());
+ }
+
+ private PermissionRequester getPermissionRequester() {
+ return (PermissionRequester) getActivity();
+ }
+
+ private WallpaperPreviewNavigator getWallpaperPreviewNavigator() {
+ return (WallpaperPreviewNavigator) getActivity();
+ }
+}
diff --git a/src/com/android/wallpaper/picker/ImagePreviewFragment.java b/src/com/android/wallpaper/picker/ImagePreviewFragment.java
index b0a5a4f..feb3699 100755
--- a/src/com/android/wallpaper/picker/ImagePreviewFragment.java
+++ b/src/com/android/wallpaper/picker/ImagePreviewFragment.java
@@ -69,7 +69,7 @@
import com.android.wallpaper.util.WallpaperCropUtils;
import com.android.wallpaper.widget.BottomActionBar;
import com.android.wallpaper.widget.BottomActionBar.AccessibilityCallback;
-import com.android.wallpaper.widget.LockScreenPreviewer2;
+import com.android.wallpaper.widget.LockScreenPreviewer;
import com.android.wallpaper.widget.WallpaperInfoView;
import com.bumptech.glide.Glide;
@@ -78,6 +78,8 @@
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView;
import java.util.Locale;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
import java.util.concurrent.atomic.AtomicInteger;
/**
@@ -106,12 +108,14 @@
protected SurfaceView mWorkspaceSurface;
protected WorkspaceSurfaceHolderCallback mWorkspaceSurfaceCallback;
protected ViewGroup mLockPreviewContainer;
- protected LockScreenPreviewer2 mLockScreenPreviewer;
+ protected LockScreenPreviewer mLockScreenPreviewer;
+ private Future<Integer> mPlaceholderColorFuture;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mWallpaperAsset = mWallpaper.getAsset(requireContext().getApplicationContext());
+ mPlaceholderColorFuture = mWallpaper.computePlaceholderColor(requireContext());
}
@Override
@@ -120,11 +124,6 @@
}
@Override
- protected int getLoadingIndicatorResId() {
- return R.id.loading_indicator;
- }
-
- @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);
@@ -133,10 +132,6 @@
mScreenSize = ScreenSizeCalculator.getInstance().getScreenSize(
activity.getWindowManager().getDefaultDisplay());
- // TODO: Consider moving some part of this to the base class when live preview is ready.
- view.findViewById(R.id.low_res_image).setVisibility(View.GONE);
- view.findViewById(R.id.full_res_image).setVisibility(View.GONE);
- mLoadingProgressBar.hide();
mContainer = view.findViewById(R.id.container);
mTouchForwardingLayout = mContainer.findViewById(R.id.touch_forwarding_layout);
mTouchForwardingLayout.setForwardingEnabled(true);
@@ -152,9 +147,14 @@
mWorkspaceSurfaceCallback = createWorkspaceSurfaceCallback(mWorkspaceSurface);
mWallpaperSurface = mContainer.findViewById(R.id.wallpaper_surface);
mLockPreviewContainer = mContainer.findViewById(R.id.lock_screen_preview_container);
- mLockScreenPreviewer = new LockScreenPreviewer2(getLifecycle(), getContext(),
+ int placeHolderColor = ResourceUtils.getColorAttr(getContext(),
+ android.R.attr.colorBackground);
+ mWorkspaceSurface.setResizeBackgroundColor(placeHolderColor);
+ mLockScreenPreviewer = new LockScreenPreviewer(getLifecycle(), getContext(),
mLockPreviewContainer);
-
+ mLockScreenPreviewer.setDateViewVisibility(!mFullScreenAnimation.isFullScreen());
+ mFullScreenAnimation.setFullScreenStatusListener(
+ isFullScreen -> mLockScreenPreviewer.setDateViewVisibility(!isFullScreen));
setUpTabs(view.findViewById(R.id.pill_tabs));
view.measure(makeMeasureSpec(mScreenSize.x, EXACTLY),
@@ -168,7 +168,6 @@
// Trim some memory from Glide to make room for the full-size image in this fragment.
Glide.get(activity).setMemoryCategory(MemoryCategory.LOW);
- setUpLoadingIndicator();
return view;
}
@@ -176,27 +175,6 @@
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
- mWallpaperAsset.decodeRawDimensions(getActivity(), dimensions -> {
- // Don't continue loading the wallpaper if the Fragment is detached.
- if (getActivity() == null) {
- return;
- }
-
- // Return early and show a dialog if dimensions are null (signaling a decoding error).
- if (dimensions == null) {
- showLoadWallpaperErrorDialog();
- return;
- }
-
- // To avoid applying the wallpaper when it's not parsed. Now it's parsed, enable the
- // bottom action bar to allow applying the wallpaper.
- if (mBottomActionBar != null) {
- mBottomActionBar.enableActions();
- }
-
- mRawWallpaperSize = dimensions;
- initFullResView();
- });
}
protected void onWallpaperColorsChanged(@Nullable WallpaperColors colors) {
@@ -228,14 +206,15 @@
@Override
public void onDestroy() {
super.onDestroy();
- if (mLoadingProgressBar != null) {
- mLoadingProgressBar.hide();
- }
if (mFullResImageView != null) {
mFullResImageView.recycle();
}
+ if (mLockScreenPreviewer != null) {
+ mLockScreenPreviewer.release();
+ }
+
mWallpaperSurfaceCallback.cleanUp();
mWorkspaceSurfaceCallback.cleanUp();
}
@@ -297,14 +276,6 @@
// disallow user to pan outside the view we show the wallpaper in.
mFullResImageView.setPanLimit(SubsamplingScaleImageView.PAN_LIMIT_INSIDE);
- // Set a solid black "page bitmap" so MosaicView draws a black background while waiting
- // for the image to load or a transparent one if a thumbnail already loaded.
- Bitmap backgroundBitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);
- int preColor = ResourceUtils.getColorAttr(getActivity(), android.R.attr.colorSecondary);
- int color = (mLowResImageView.getDrawable() == null) ? preColor : Color.TRANSPARENT;
- backgroundBitmap.setPixel(0, 0, color);
- mFullResImageView.setImage(ImageSource.bitmap(backgroundBitmap));
-
// Then set a fallback "page bitmap" to cover the whole MosaicView, which is an actual
// (lower res) version of the image to be displayed.
Point targetPageBitmapSize = new Point(mRawWallpaperSize);
@@ -315,17 +286,15 @@
return;
}
- // Some of these may be null depending on if the Fragment is paused, stopped,
- // or destroyed.
- if (mLoadingProgressBar != null) {
- mLoadingProgressBar.hide();
- }
// The page bitmap may be null if there was a decoding error, so show an
// error dialog.
if (pageBitmap == null) {
showLoadWallpaperErrorDialog();
return;
}
+ // Some of these may be null depending on if the Fragment is paused, stopped,
+ // or destroyed.
+ mWallpaperSurface.setBackgroundColor(Color.TRANSPARENT);
if (mFullResImageView != null) {
// Set page bitmap.
mFullResImageView.setImage(ImageSource.bitmap(pageBitmap));
@@ -418,6 +387,7 @@
mFullResImageView.setAlpha(0f);
mFullResImageView.animate()
.alpha(1f)
+ .setInterpolator(ALPHA_OUT)
.setDuration(shortAnimationDuration)
.setListener(new AnimatorListenerAdapter() {
@Override
@@ -429,18 +399,6 @@
}
}
});
-
- mLoadingProgressBar.animate()
- .alpha(0f)
- .setDuration(shortAnimationDuration)
- .setListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- if (mLoadingProgressBar != null) {
- mLoadingProgressBar.hide();
- }
- }
- });
}
/**
@@ -506,9 +464,8 @@
Resources res = appContext.getResources();
Point cropSurfaceSize = WallpaperCropUtils.calculateCropSurfaceSize(res, maxCrop, minCrop);
- Rect cropRect = WallpaperCropUtils.calculateCropRect(appContext, hostViewSize,
+ return WallpaperCropUtils.calculateCropRect(appContext, hostViewSize,
cropSurfaceSize, mRawWallpaperSize, visibleFileRect, wallpaperZoom);
- return cropRect;
}
@Override
@@ -553,7 +510,28 @@
R.layout.fullscreen_wallpaper_preview, null);
mFullResImageView = wallpaperPreviewContainer.findViewById(R.id.full_res_image);
mLowResImageView = wallpaperPreviewContainer.findViewById(R.id.low_res_image);
- initFullResView();
+ mWallpaperAsset.decodeRawDimensions(getActivity(), dimensions -> {
+ // Don't continue loading the wallpaper if the Fragment is detached.
+ if (getActivity() == null) {
+ return;
+ }
+
+ // Return early and show a dialog if dimensions are null (signaling a decoding
+ // error).
+ if (dimensions == null) {
+ showLoadWallpaperErrorDialog();
+ return;
+ }
+
+ // To avoid applying the wallpaper when it's not parsed. Now it's parsed, enable
+ // the bottom action bar to allow applying the wallpaper.
+ if (mBottomActionBar != null) {
+ mBottomActionBar.enableActions();
+ }
+
+ mRawWallpaperSize = dimensions;
+ initFullResView();
+ });
// Scale the mWallpaperSurface based on system zoom's scale so that the wallpaper is
// rendered in a larger surface than what preview shows, simulating the behavior of
// the actual wallpaper surface.
@@ -579,12 +557,23 @@
// Load a low-res placeholder image if there's a thumbnail available from the asset
// that can be shown to the user more quickly than the full-sized image.
- if (mWallpaperAsset.hasLowResDataSource()) {
- Activity activity = requireActivity();
- mWallpaperAsset.loadLowResDrawable(activity, mLowResImageView, Color.BLACK,
- new WallpaperPreviewBitmapTransformation(
- activity.getApplicationContext(), isRtl()));
+ Activity activity = requireActivity();
+ int placeHolderColor = ResourceUtils.getColorAttr(activity,
+ android.R.attr.colorBackground);
+ if (mPlaceholderColorFuture.isDone()) {
+ try {
+ placeHolderColor = mWallpaper.computePlaceholderColor(context).get();
+ } catch (InterruptedException | ExecutionException e) {
+ // Do nothing
+ }
}
+ mWallpaperSurface.setResizeBackgroundColor(placeHolderColor);
+ mWallpaperSurface.setBackgroundColor(placeHolderColor);
+
+ mWallpaperAsset.loadLowResDrawable(activity, mLowResImageView, placeHolderColor,
+ new WallpaperPreviewBitmapTransformation(
+ activity.getApplicationContext(), isRtl()));
+
wallpaperPreviewContainer.measure(
makeMeasureSpec(width, EXACTLY),
makeMeasureSpec(height, EXACTLY));
diff --git a/src/com/android/wallpaper/picker/LivePreviewFragment.java b/src/com/android/wallpaper/picker/LivePreviewFragment.java
index a7b45fa..27223cc 100644
--- a/src/com/android/wallpaper/picker/LivePreviewFragment.java
+++ b/src/com/android/wallpaper/picker/LivePreviewFragment.java
@@ -37,9 +37,8 @@
import android.content.pm.PackageManager;
import android.content.pm.ServiceInfo;
import android.graphics.Point;
-import android.graphics.drawable.ColorDrawable;
-import android.graphics.drawable.Drawable;
import android.net.Uri;
+import android.os.Build;
import android.os.Bundle;
import android.os.RemoteException;
import android.service.wallpaper.IWallpaperConnection;
@@ -52,7 +51,6 @@
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
-import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import androidx.annotation.NonNull;
@@ -66,7 +64,6 @@
import androidx.slice.widget.SliceView;
import com.android.wallpaper.R;
-import com.android.wallpaper.compat.BuildCompat;
import com.android.wallpaper.module.WallpaperPersister.SetWallpaperCallback;
import com.android.wallpaper.util.FullScreenAnimation;
import com.android.wallpaper.util.ResourceUtils;
@@ -76,11 +73,15 @@
import com.android.wallpaper.util.WallpaperSurfaceCallback;
import com.android.wallpaper.widget.BottomActionBar;
import com.android.wallpaper.widget.BottomActionBar.AccessibilityCallback;
-import com.android.wallpaper.widget.LockScreenPreviewer2;
+import com.android.wallpaper.widget.LockScreenPreviewer;
import com.android.wallpaper.widget.WallpaperColorsLoader;
import com.android.wallpaper.widget.WallpaperInfoView;
import java.util.Locale;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
/**
* Fragment which displays the UI for previewing an individual live wallpaper, its attribution
@@ -102,27 +103,28 @@
protected WallpaperConnection mWallpaperConnection;
protected WallpaperInfoView mWallpaperInfoView;
protected CardView mHomePreviewCard;
- protected ImageView mHomePreview;
protected SurfaceView mWorkspaceSurface;
protected WallpaperSurfaceCallback mWallpaperSurfaceCallback;
protected WorkspaceSurfaceHolderCallback mWorkspaceSurfaceCallback;
protected ViewGroup mLockPreviewContainer;
- protected LockScreenPreviewer2 mLockScreenPreviewer;
+ protected LockScreenPreviewer mLockScreenPreviewer;
private Intent mDeleteIntent;
private Intent mSettingsIntent;
private SliceView mSettingsSliceView;
private LiveData<Slice> mSettingsLiveData;
- private View mLoadingScrim;
private Point mScreenSize;
private ViewGroup mPreviewContainer;
private TouchForwardingLayout mTouchForwardingLayout;
private SurfaceView mWallpaperSurface;
+ private WallpaperPreviewBitmapTransformation mPreviewBitmapTransformation;
+ private Future<Integer> mPlaceholderColorFuture;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
android.app.WallpaperInfo info = mWallpaper.getWallpaperComponent();
+ mPlaceholderColorFuture = mWallpaper.computePlaceholderColor(getContext());
String deleteAction = getDeleteAction(info);
if (!TextUtils.isEmpty(deleteAction)) {
@@ -130,7 +132,8 @@
mDeleteIntent.setPackage(info.getPackageName());
mDeleteIntent.putExtra(EXTRA_LIVE_WALLPAPER_INFO, info);
}
-
+ mPreviewBitmapTransformation = new WallpaperPreviewBitmapTransformation(
+ requireContext().getApplicationContext(), isRtl());
String settingsActivity = getSettingsActivity(info);
if (settingsActivity != null) {
mSettingsIntent = new Intent();
@@ -161,10 +164,6 @@
Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);
- mLoadingScrim = view.findViewById(R.id.loading);
- mLoadingProgressBar.hide();
- setUpLoadingIndicator();
-
Activity activity = requireActivity();
mScreenSize = ScreenSizeCalculator.getInstance().getScreenSize(
activity.getWindowManager().getDefaultDisplay());
@@ -189,18 +188,20 @@
set.applyTo((ConstraintLayout) mPreviewContainer);
mHomePreviewCard = mPreviewContainer.findViewById(R.id.wallpaper_full_preview_card);
- mHomePreview = mHomePreviewCard.findViewById(R.id.wallpaper_preview_image);
- mTouchForwardingLayout.setTargetView(mHomePreview);
- mTouchForwardingLayout.setForwardingEnabled(true);
mLockPreviewContainer = mPreviewContainer.findViewById(R.id.lock_screen_preview_container);
- mLockScreenPreviewer = new LockScreenPreviewer2(getLifecycle(), getContext(),
+ mLockScreenPreviewer = new LockScreenPreviewer(getLifecycle(), getContext(),
mLockPreviewContainer);
+ mLockScreenPreviewer.setDateViewVisibility(!mFullScreenAnimation.isFullScreen());
+ mFullScreenAnimation.setFullScreenStatusListener(
+ isFullScreen -> mLockScreenPreviewer.setDateViewVisibility(!isFullScreen));
mWallpaperSurface = mHomePreviewCard.findViewById(R.id.wallpaper_surface);
+ mTouchForwardingLayout.setTargetView(mHomePreviewCard);
+ mTouchForwardingLayout.setForwardingEnabled(true);
mWorkspaceSurface = mHomePreviewCard.findViewById(R.id.workspace_surface);
mWorkspaceSurfaceCallback = createWorkspaceSurfaceCallback(mWorkspaceSurface);
mWallpaperSurfaceCallback = new WallpaperSurfaceCallback(getContext(),
- mHomePreview, mWallpaperSurface);
+ mHomePreviewCard, mWallpaperSurface, mPlaceholderColorFuture, null);
setUpTabs(view.findViewById(R.id.pill_tabs));
@@ -242,7 +243,7 @@
}
private void setupCurrentWallpaperPreview() {
- mHomePreview.setOnTouchListener((v, ev) -> {
+ mHomePreviewCard.setOnTouchListener((v, ev) -> {
if (mWallpaperConnection != null && mWallpaperConnection.getEngine() != null) {
float scaleRatio =
(float) mTouchForwardingLayout.getWidth() / (float) mScreenSize.x;
@@ -283,6 +284,9 @@
mWallpaperConnection.disconnect();
mWallpaperConnection = null;
}
+ if (mLockScreenPreviewer != null) {
+ mLockScreenPreviewer.release();
+ }
mWorkspaceSurfaceCallback.cleanUp();
mWorkspaceSurface.getHolder().removeCallback(mWorkspaceSurfaceCallback);
mWallpaperSurfaceCallback.cleanUp();
@@ -290,30 +294,33 @@
}
protected void previewLiveWallpaper(ImageView thumbnailView) {
- thumbnailView.post(() -> {
+ mWallpaperSurface.post(() -> {
Activity activity = getActivity();
if (activity == null) {
return;
}
if (mWallpaperSurfaceCallback.getHomeImageWallpaper() != null) {
+ Integer placeholderColor = null;
+ try {
+ placeholderColor = mPlaceholderColorFuture.get(50, TimeUnit.MILLISECONDS);
+ } catch (InterruptedException | ExecutionException | TimeoutException e) {
+ Log.i(TAG, "Couldn't obtain placeholder color", e);
+ }
mWallpaper.getThumbAsset(activity.getApplicationContext())
.loadLowResDrawable(activity,
mWallpaperSurfaceCallback.getHomeImageWallpaper(),
- ResourceUtils.getColorAttr(getActivity(),
- android.R.attr.colorSecondary),
- new WallpaperPreviewBitmapTransformation(
- activity.getApplicationContext(), isRtl()));
+ placeholderColor != null
+ ? placeholderColor
+ : ResourceUtils.getColorAttr(activity,
+ android.R.attr.colorBackground),
+ mPreviewBitmapTransformation);
}
-
- setUpLiveWallpaperPreview(mWallpaper, thumbnailView,
- new ColorDrawable(ResourceUtils.getColorAttr(getActivity(),
- android.R.attr.colorSecondary)));
+ setUpLiveWallpaperPreview(mWallpaper);
});
}
protected void setUpLiveWallpaperPreview(
- com.android.wallpaper.model.WallpaperInfo homeWallpaper, ImageView previewView,
- Drawable thumbnail) {
+ com.android.wallpaper.model.WallpaperInfo homeWallpaper) {
Activity activity = getActivity();
if (activity == null || activity.isFinishing()) {
return;
@@ -321,10 +328,6 @@
if (mWallpaperConnection != null) {
mWallpaperConnection.disconnect();
}
- if (thumbnail != null) {
- thumbnail.setBounds(previewView.getLeft(), previewView.getTop(), previewView.getRight(),
- previewView.getBottom());
- }
if (WallpaperConnection.isPreviewAvailable()) {
mWallpaperConnection = new WallpaperConnection(
@@ -340,17 +343,9 @@
homeWallpaper.getThumbAsset(activity),
mLockScreenPreviewer::setColor);
}
- mLoadingScrim.post(() -> mLoadingScrim.animate()
- .alpha(0f)
- .setStartDelay(50)
- .setDuration(250)
- .setInterpolator(AnimationUtils.loadInterpolator(getContext(),
- android.R.interpolator.fast_out_linear_in))
- .withEndAction(() -> {
- if (mWallpaperConnection != null && !mWallpaperConnection.connect()) {
- mWallpaperConnection = null;
- }
- }));
+ if (mWallpaperConnection != null && !mWallpaperConnection.connect()) {
+ mWallpaperConnection = null;
+ }
}
private void renderWorkspaceSurface() {
@@ -424,27 +419,11 @@
if (activity == null) {
return;
}
-
- mLoadingScrim.post(() -> mLoadingScrim.animate()
- .alpha(0f)
+ mWallpaperSurfaceCallback.getHomeImageWallpaper().animate()
+ .setStartDelay(250)
.setDuration(250)
- .setStartDelay(200)
- .setInterpolator(AnimationUtils.loadInterpolator(activity,
- android.R.interpolator.fast_out_linear_in))
- .withEndAction(() -> {
- mLoadingScrim.setVisibility(View.GONE);
- }));
- final Drawable placeholder = mHomePreview.getDrawable() == null
- ? new ColorDrawable(ResourceUtils.getColorAttr(getActivity(),
- android.R.attr.colorSecondary))
- : mHomePreview.getDrawable();
- mHomePreview.animate()
- .setStartDelay(0)
- .setDuration(150)
- .setInterpolator(AnimationUtils.loadInterpolator(activity,
- android.R.interpolator.fast_out_linear_in))
- .setUpdateListener(value -> placeholder.setAlpha(
- (int) (255 * (1 - value.getAnimatedFraction()))))
+ .alpha(0f)
+ .setInterpolator(ALPHA_OUT)
.start();
if (mBottomActionBar != null) {
@@ -470,7 +449,7 @@
@SuppressLint("NewApi") //Already checking with isAtLeastQ
protected Uri getSettingsSliceUri(android.app.WallpaperInfo info) {
- if (BuildCompat.isAtLeastQ()) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
return info.getSettingsSliceUri();
}
return null;
@@ -482,11 +461,6 @@
}
@Override
- protected int getLoadingIndicatorResId() {
- return R.id.loading_indicator;
- }
-
- @Override
protected void setCurrentWallpaper(int destination) {
mWallpaperSetter.setCurrentWallpaper(getActivity(), mWallpaper, null,
destination, 0, null, new SetWallpaperCallback() {
@@ -528,7 +502,7 @@
@Override
public void onStart() {
super.onStart();
- previewLiveWallpaper(mHomePreview);
+ previewLiveWallpaper(null);
}
@Override
diff --git a/src/com/android/wallpaper/picker/PreviewActivity.java b/src/com/android/wallpaper/picker/PreviewActivity.java
index 3f571c3..31db5e8 100755
--- a/src/com/android/wallpaper/picker/PreviewActivity.java
+++ b/src/com/android/wallpaper/picker/PreviewActivity.java
@@ -57,7 +57,7 @@
if (fragment == null) {
Intent intent = getIntent();
WallpaperInfo wallpaper = intent.getParcelableExtra(EXTRA_WALLPAPER_INFO);
- boolean viewAsHome = intent.getBooleanExtra(EXTRA_VIEW_AS_HODE, true);
+ boolean viewAsHome = intent.getBooleanExtra(EXTRA_VIEW_AS_HOME, true);
boolean testingModeEnabled = intent.getBooleanExtra(EXTRA_TESTING_MODE_ENABLED, false);
fragment = InjectorProvider.getInjector().getPreviewFragment(
/* context */ this,
diff --git a/src/com/android/wallpaper/picker/PreviewFragment.java b/src/com/android/wallpaper/picker/PreviewFragment.java
index 72d656f..1249a61 100755
--- a/src/com/android/wallpaper/picker/PreviewFragment.java
+++ b/src/com/android/wallpaper/picker/PreviewFragment.java
@@ -21,26 +21,23 @@
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
-import android.content.res.ColorStateList;
import android.content.res.Resources.NotFoundException;
-import android.content.res.TypedArray;
import android.os.Bundle;
import android.util.Log;
-import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
+import android.view.animation.Interpolator;
+import android.view.animation.PathInterpolator;
import android.widget.Button;
import android.widget.Toast;
import androidx.activity.OnBackPressedCallback;
import androidx.annotation.CallSuper;
-import androidx.annotation.IdRes;
import androidx.annotation.IntDef;
import androidx.annotation.LayoutRes;
import androidx.annotation.Nullable;
-import androidx.core.widget.ContentLoadingProgressBar;
import androidx.fragment.app.FragmentActivity;
import com.android.wallpaper.R;
@@ -68,6 +65,8 @@
SetWallpaperDialogFragment.Listener, SetWallpaperErrorDialogFragment.Listener,
LoadWallpaperErrorDialogFragment.Listener {
+ public static final Interpolator ALPHA_OUT = new PathInterpolator(0f, 0f, 0.8f, 1f);
+
/**
* User can view wallpaper and attributions in full screen, but "Set wallpaper" button is
* hidden.
@@ -136,7 +135,6 @@
protected WallpaperSetter mWallpaperSetter;
protected UserEventLogger mUserEventLogger;
protected BottomActionBar mBottomActionBar;
- protected ContentLoadingProgressBar mLoadingProgressBar;
protected Intent mExploreIntent;
protected CharSequence mActionLabel;
@@ -152,13 +150,6 @@
protected View mRootView;
protected FullScreenAnimation mFullScreenAnimation;
- protected static int getAttrColor(Context context, int attr) {
- TypedArray ta = context.obtainStyledAttributes(new int[]{attr});
- int colorAccent = ta.getColor(0, 0);
- ta.recycle();
- return colorAccent;
- }
-
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -180,7 +171,6 @@
if (attributions.size() > 0 && attributions.get(0) != null) {
activity.setTitle(attributions.get(0));
}
- setRetainInstance(true);
}
@Override
@@ -190,9 +180,6 @@
View view = inflater.inflate(getLayoutResId(), container, false);
setUpToolbar(view);
- mLoadingProgressBar = view.findViewById(getLoadingIndicatorResId());
- mLoadingProgressBar.show();
-
mRootView = view;
mFullScreenAnimation = new FullScreenAnimation(view);
@@ -273,13 +260,6 @@
@LayoutRes
protected abstract int getLayoutResId();
- @IdRes
- protected abstract int getLoadingIndicatorResId();
-
- protected int getDeviceDefaultTheme() {
- return android.R.style.Theme_DeviceDefault;
- }
-
protected WorkspaceSurfaceHolderCallback createWorkspaceSurfaceCallback(
SurfaceView workspaceSurface) {
return new WorkspaceSurfaceHolderCallback(workspaceSurface, getContext());
@@ -325,16 +305,6 @@
);
}
- /**
- * Configure loading indicator with a MaterialProgressDrawable.
- */
- protected void setUpLoadingIndicator() {
- mLoadingProgressBar.setProgressTintList(ColorStateList.valueOf(getAttrColor(
- new ContextThemeWrapper(requireContext(), getDeviceDefaultTheme()),
- android.R.attr.colorAccent)));
- mLoadingProgressBar.show();
- }
-
protected abstract boolean isLoaded();
@Override
diff --git a/src/com/android/wallpaper/picker/SectionView.java b/src/com/android/wallpaper/picker/SectionView.java
index 31a2014..46b4a68 100644
--- a/src/com/android/wallpaper/picker/SectionView.java
+++ b/src/com/android/wallpaper/picker/SectionView.java
@@ -21,10 +21,7 @@
import androidx.annotation.Nullable;
-/**
- * The SectionView base for views hosting in the {@link
- * com.android.customization.picker.hub.HubFragment}.
- */
+/** The SectionView base for views hosting in the {@link CustomizationPickerFragment}. */
public abstract class SectionView extends LinearLayout {
/** The callback for the section view updates. */
diff --git a/src/com/android/wallpaper/picker/StandalonePreviewActivity.java b/src/com/android/wallpaper/picker/StandalonePreviewActivity.java
index 43c92e2..8651df6 100755
--- a/src/com/android/wallpaper/picker/StandalonePreviewActivity.java
+++ b/src/com/android/wallpaper/picker/StandalonePreviewActivity.java
@@ -22,11 +22,9 @@
import android.os.Binder;
import android.os.Bundle;
import android.util.Log;
-import android.view.Window;
import android.view.WindowManager;
import androidx.annotation.NonNull;
-import androidx.core.view.WindowCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
diff --git a/src/com/android/wallpaper/picker/TopLevelPickerActivity.java b/src/com/android/wallpaper/picker/TopLevelPickerActivity.java
index f55a2f3..191a39f 100755
--- a/src/com/android/wallpaper/picker/TopLevelPickerActivity.java
+++ b/src/com/android/wallpaper/picker/TopLevelPickerActivity.java
@@ -48,7 +48,6 @@
import com.android.wallpaper.R;
import com.android.wallpaper.asset.Asset;
-import com.android.wallpaper.compat.BuildCompat;
import com.android.wallpaper.compat.ButtonDrawableSetterCompat;
import com.android.wallpaper.config.Flags;
import com.android.wallpaper.model.Category;
@@ -275,7 +274,7 @@
view.getPaddingRight(), view.getPaddingBottom());
// Consume only the top inset (status bar), to let other content in the Activity consume
// the nav bar (ie, by using "fitSystemWindows")
- if (BuildCompat.isAtLeastQ()) {
+ if (VERSION.SDK_INT >= VERSION_CODES.Q) {
WindowInsets.Builder builder = new WindowInsets.Builder(windowInsets);
builder.setSystemWindowInsets(Insets.of(windowInsets.getSystemWindowInsetLeft(),
0, windowInsets.getStableInsetRight(),
@@ -425,7 +424,7 @@
// tab for a category not yet repopulated.
mLastSelectedCategoryTabIndex = -1;
- mDelegate.populateCategories(true /* forceCategoryRefresh */);
+ mDelegate.populateCategories(/* forceRefresh= */ true);
setDesktopLoading(false);
setCurrentWallpapersExpanded(false);
diff --git a/src/com/android/wallpaper/picker/ViewOnlyPreviewActivity.java b/src/com/android/wallpaper/picker/ViewOnlyPreviewActivity.java
index 5e7e01d..67bb943 100755
--- a/src/com/android/wallpaper/picker/ViewOnlyPreviewActivity.java
+++ b/src/com/android/wallpaper/picker/ViewOnlyPreviewActivity.java
@@ -44,7 +44,7 @@
protected static Intent newIntent(Context context, WallpaperInfo wallpaper,
boolean isVewAsHome) {
- return newIntent(context, wallpaper).putExtra(EXTRA_VIEW_AS_HODE, isVewAsHome);
+ return newIntent(context, wallpaper).putExtra(EXTRA_VIEW_AS_HOME, isVewAsHome);
}
@Override
@@ -61,7 +61,7 @@
Intent intent = getIntent();
WallpaperInfo wallpaper = intent.getParcelableExtra(EXTRA_WALLPAPER_INFO);
boolean testingModeEnabled = intent.getBooleanExtra(EXTRA_TESTING_MODE_ENABLED, false);
- boolean viewAsHome = intent.getBooleanExtra(EXTRA_VIEW_AS_HODE, true);
+ boolean viewAsHome = intent.getBooleanExtra(EXTRA_VIEW_AS_HOME, true);
fragment = InjectorProvider.getInjector().getPreviewFragment(
/* context */ this,
wallpaper,
diff --git a/src/com/android/wallpaper/picker/WallpaperPickerDelegate.java b/src/com/android/wallpaper/picker/WallpaperPickerDelegate.java
index 273f0a6..adb9e54 100644
--- a/src/com/android/wallpaper/picker/WallpaperPickerDelegate.java
+++ b/src/com/android/wallpaper/picker/WallpaperPickerDelegate.java
@@ -117,7 +117,7 @@
if (mDownloadableIntentAction != null) {
mDownloadableWallpaperStatusListener = (packageName, status) -> {
if (status != PackageStatusNotifier.PackageStatus.REMOVED) {
- populateCategories(true);
+ populateCategories(/* forceRefresh= */ true);
}
};
mPackageStatusNotifier.addListener(
@@ -206,7 +206,7 @@
}
} else {
// CHANGED package, let's reload all categories as we could have more or fewer now
- populateCategories(true);
+ populateCategories(/* forceRefresh= */ true);
}
}
@@ -263,7 +263,7 @@
* they're cached when loading later.
*/
public void prefetchCategories() {
- mCategoryProvider.resetIfNeeded();
+ boolean forceRefresh = mCategoryProvider.resetIfNeeded();
mCategoryProvider.fetchCategories(new CategoryReceiver() {
@Override
public void onCategoryReceived(Category category) {
@@ -274,7 +274,7 @@
public void doneFetchingCategories() {
// Do nothing
}
- }, false);
+ }, forceRefresh);
}
/**
@@ -487,13 +487,14 @@
imageWallpaper.showPreview(mActivity, getPreviewIntentFactory(),
PREVIEW_WALLPAPER_REQUEST_CODE);
return false;
+ case PREVIEW_LIVE_WALLPAPER_REQUEST_CODE:
+ mWallpaperPersister.onLiveWallpaperSet();
+ populateCategories(/* forceRefresh= */ true);
+ // Fall through.
case VIEW_ONLY_PREVIEW_WALLPAPER_REQUEST_CODE:
// Fall through.
case PREVIEW_WALLPAPER_REQUEST_CODE:
- // Fall through.
- case PREVIEW_LIVE_WALLPAPER_REQUEST_CODE:
// User previewed and selected a wallpaper, so finish this activity.
- mWallpaperPersister.onLiveWallpaperSet();
return true;
default:
return false;
diff --git a/src/com/android/wallpaper/picker/WallpaperPreviewBitmapTransformation.java b/src/com/android/wallpaper/picker/WallpaperPreviewBitmapTransformation.java
index b8c51b9..fa5dea5 100755
--- a/src/com/android/wallpaper/picker/WallpaperPreviewBitmapTransformation.java
+++ b/src/com/android/wallpaper/picker/WallpaperPreviewBitmapTransformation.java
@@ -18,6 +18,7 @@
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Point;
+import android.graphics.Rect;
import android.view.WindowManager;
import androidx.annotation.NonNull;
@@ -56,16 +57,25 @@
float scale = WallpaperCropUtils.calculateMinZoom(
new Point(toTransform.getWidth(), toTransform.getHeight()),
mScreenSize);
+ Rect originalSize = new Rect(0, 0, toTransform.getWidth(),
+ toTransform.getHeight());
Point scaledThumbnailSize = new Point(Math.round(toTransform.getWidth() * scale),
Math.round(toTransform.getHeight() * scale));
Point scaledThumbnailToScreenSize = WallpaperCropUtils.calculateCenterPosition(
scaledThumbnailSize, mScreenSize, false /* alignStart */, mIsRtl);
- Bitmap cropped = Bitmap.createBitmap(toTransform,
- Math.round(scaledThumbnailToScreenSize.x / scale),
- Math.round(scaledThumbnailToScreenSize.y / scale),
- Math.round(mScreenSize.x / scale),
- Math.round(mScreenSize.y / scale));
+ int x = Math.round(scaledThumbnailToScreenSize.x / scale);
+ int y = Math.round(scaledThumbnailToScreenSize.y / scale);
+ Rect cropSize = new Rect(x, y, x + Math.round(mScreenSize.x / scale),
+ y + Math.round(mScreenSize.y / scale));
+ Bitmap cropped;
+ if (!originalSize.contains(cropSize)) {
+ // If crop size is not smaller than original, then use the original bitmap
+ cropped = toTransform;
+ } else {
+ cropped = Bitmap.createBitmap(toTransform, cropSize.left, cropSize.top,
+ cropSize.width(), cropSize.height());
+ }
return BitmapProcessor.blur(mContext, cropped, cropped.getWidth(), cropped.getHeight());
}
diff --git a/src/com/android/wallpaper/picker/WallpaperSectionView.java b/src/com/android/wallpaper/picker/WallpaperSectionView.java
index 1d20e08..ad97570 100644
--- a/src/com/android/wallpaper/picker/WallpaperSectionView.java
+++ b/src/com/android/wallpaper/picker/WallpaperSectionView.java
@@ -22,14 +22,11 @@
import androidx.cardview.widget.CardView;
-import com.android.wallpaper.picker.SectionView;
import com.android.wallpaper.R;
import com.android.wallpaper.util.ScreenSizeCalculator;
import com.android.wallpaper.util.SizeCalculator;
-/**
- * The wallpaper section view in the Customization Hub fragment.
- */
+/** The wallpaper section view in the customization picker fragment. */
public final class WallpaperSectionView extends SectionView {
private CardView mHomePreviewCard;
diff --git a/src/com/android/wallpaper/picker/individual/IndividualPickerFragment.java b/src/com/android/wallpaper/picker/individual/IndividualPickerFragment.java
index 989d7a5..97c2eaa 100755
--- a/src/com/android/wallpaper/picker/individual/IndividualPickerFragment.java
+++ b/src/com/android/wallpaper/picker/individual/IndividualPickerFragment.java
@@ -120,6 +120,8 @@
static final int SPECIAL_FIXED_TILE_ADAPTER_POSITION = 0;
static final String ARG_CATEGORY_COLLECTION_ID = "category_collection_id";
+ protected static final int MAX_CAPACITY_IN_FEWER_COLUMN_LAYOUT = 8;
+
private static final String TAG = "IndividualPickerFrgmnt";
private static final int UNUSED_REQUEST_CODE = 1;
private static final String TAG_START_ROTATION_DIALOG = "start_rotation_dialog";
@@ -129,7 +131,6 @@
private static final String TAG_SET_WALLPAPER_ERROR_DIALOG_FRAGMENT =
"individual_set_wallpaper_error_dialog";
private static final String KEY_NIGHT_MODE = "IndividualPickerFragment.NIGHT_MODE";
- private static final int MAX_CAPACITY_IN_FEWER_COLUMN_LAYOUT = 8;
/**
* An interface for updating the thumbnail with the specific wallpaper.
@@ -581,10 +582,23 @@
if (mCategory == null) {
return;
}
- // Skip if the adapter was already created
- if (mAdapter != null) {
+
+ // Wallpaper count could change, so we may need to change the layout(2 or 3 columns layout)
+ GridLayoutManager gridLayoutManager = (GridLayoutManager) mImageGrid.getLayoutManager();
+ boolean needUpdateLayout =
+ gridLayoutManager != null && gridLayoutManager.getSpanCount() != getNumColumns();
+
+ // Skip if the adapter was already created and don't need to change the layout
+ if (mAdapter != null && !needUpdateLayout) {
return;
}
+
+ // Clear the old decoration
+ int decorationCount = mImageGrid.getItemDecorationCount();
+ for (int i = 0; i < decorationCount; i++) {
+ mImageGrid.removeItemDecorationAt(i);
+ }
+
mImageGrid.addItemDecoration(new GridPaddingDecoration(getGridItemPaddingHorizontal(),
getGridItemPaddingBottom()));
int edgePadding = getEdgePadding();
@@ -1417,6 +1431,7 @@
int wallpaperIndex = (shouldShowRotationTile() || mCategory.supportsCustomPhotos())
? position - 1 : position;
WallpaperInfo wallpaper = mWallpapers.get(wallpaperIndex);
+ wallpaper.computePlaceholderColor(holder.itemView.getContext());
((IndividualHolder) holder).bindWallpaper(wallpaper);
boolean isWallpaperApplied = mAppliedWallpaperIds.contains(wallpaper.getWallpaperId());
diff --git a/src/com/android/wallpaper/util/ActivityUtils.java b/src/com/android/wallpaper/util/ActivityUtils.java
index c4d49f8..eb2adb2 100755
--- a/src/com/android/wallpaper/util/ActivityUtils.java
+++ b/src/com/android/wallpaper/util/ActivityUtils.java
@@ -83,7 +83,7 @@
*
* @param intent activity intent.
*/
- private static boolean isLaunchedFromSettingsSearch(Intent intent) {
+ public static boolean isLaunchedFromSettingsSearch(Intent intent) {
return (intent != null && intent.hasExtra(LAUNCH_SETTINGS_SEARCH));
}
diff --git a/src/com/android/wallpaper/util/DiskBasedLogger.java b/src/com/android/wallpaper/util/DiskBasedLogger.java
index 5111376..350aaff 100755
--- a/src/com/android/wallpaper/util/DiskBasedLogger.java
+++ b/src/com/android/wallpaper/util/DiskBasedLogger.java
@@ -24,7 +24,8 @@
import android.os.Process;
import android.util.Log;
-import com.android.wallpaper.compat.BuildCompat;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
import java.io.BufferedReader;
import java.io.Closeable;
@@ -41,9 +42,6 @@
import java.util.Locale;
import java.util.concurrent.TimeUnit;
-import androidx.annotation.Nullable;
-import androidx.annotation.VisibleForTesting;
-
/**
* Logs messages to logcat and for debuggable build types ("eng" or "userdebug") also mirrors logs
* to a disk-based log buffer.
@@ -72,7 +70,8 @@
if (sLoggerThread != null && sLoggerThread.isAlive()) {
// HandlerThread#quitSafely was added in JB-MR2, so prefer to use that instead of #quit.
- boolean isQuitSuccessful = BuildCompat.isAtLeastJBMR2()
+ boolean isQuitSuccessful =
+ Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2
? sLoggerThread.quitSafely()
: sLoggerThread.quit();
diff --git a/src/com/android/wallpaper/util/FullScreenAnimation.java b/src/com/android/wallpaper/util/FullScreenAnimation.java
index 3ce12ef..b3dd69e 100644
--- a/src/com/android/wallpaper/util/FullScreenAnimation.java
+++ b/src/com/android/wallpaper/util/FullScreenAnimation.java
@@ -16,6 +16,7 @@
package com.android.wallpaper.util;
+import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
@@ -63,6 +64,7 @@
private float mPillButtonsTranslation;
private int mStatusBarHeight;
private int mNavigationBarHeight;
+ private FullScreenStatusListener mFullScreenStatusListener;
private static final float HIDE_ICONS_TOP_RATIO = 0.2f;
@@ -86,6 +88,12 @@
FullScreenTextColor mFullScreenTextColor = FullScreenTextColor.DEFAULT;
private int mCurrentTextColor;
+ /** Callback for full screen status. */
+ public interface FullScreenStatusListener {
+ /** Gets called at animation end when full screen status gets changed. */
+ void onFullScreenStatusChange(boolean isFullScreen);
+ }
+
/**
* Constructor.
*
@@ -151,6 +159,11 @@
mView.findViewById(viewId).setLayoutParams(layoutParams);
}
+ /** Sets a {@param listener} to listen full screen state changes. */
+ public void setFullScreenStatusListener(FullScreenStatusListener listener) {
+ mFullScreenStatusListener = listener;
+ }
+
/**
* Informs the {@code FullScreenAnimation} object about the window insets of the current
* window.
@@ -427,6 +440,23 @@
animationRounding,
animationHide
);
+ animatorSet.addListener(new Animator.AnimatorListener() {
+ @Override
+ public void onAnimationCancel(Animator animator) {}
+
+ @Override
+ public void onAnimationEnd(Animator animator) {
+ if (mFullScreenStatusListener != null) {
+ mFullScreenStatusListener.onFullScreenStatusChange(toFullScreen);
+ }
+ }
+
+ @Override
+ public void onAnimationRepeat(Animator animator) {}
+
+ @Override
+ public void onAnimationStart(Animator animator) {}
+ });
animatorSet.start();
animateColor(toFullScreen);
diff --git a/src/com/android/wallpaper/util/LaunchUtils.java b/src/com/android/wallpaper/util/LaunchUtils.java
new file mode 100644
index 0000000..1f4dd6e
--- /dev/null
+++ b/src/com/android/wallpaper/util/LaunchUtils.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2021 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.
+ */
+package com.android.wallpaper.util;
+
+import android.content.Context;
+import android.content.Intent;
+
+/** Util class for launching activity. */
+public class LaunchUtils {
+
+ /** Goes to Launcher's Home. */
+ public static void launchHome(Context context) {
+ Intent launcherIntent = new Intent(Intent.ACTION_MAIN);
+ launcherIntent.addCategory(Intent.CATEGORY_HOME);
+ launcherIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
+ context.startActivity(launcherIntent);
+ }
+}
diff --git a/src/com/android/wallpaper/util/WallpaperSurfaceCallback.java b/src/com/android/wallpaper/util/WallpaperSurfaceCallback.java
index 9855b21..e043051 100644
--- a/src/com/android/wallpaper/util/WallpaperSurfaceCallback.java
+++ b/src/com/android/wallpaper/util/WallpaperSurfaceCallback.java
@@ -33,6 +33,9 @@
import com.android.wallpaper.module.InjectorProvider;
import com.android.wallpaper.module.PackageStatusNotifier;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+
/**
* Default implementation of {@link SurfaceHolder.Callback} to render a static wallpaper when the
* surface has been created.
@@ -59,13 +62,16 @@
private final SurfaceView mWallpaperSurface;
@Nullable
private final SurfaceListener mListener;
+ @Nullable
+ private final Future<Integer> mPlaceholderColor;
private boolean mSurfaceCreated;
private PackageStatusNotifier.Listener mAppStatusListener;
private PackageStatusNotifier mPackageStatusNotifier;
public WallpaperSurfaceCallback(Context context, View containerView,
- SurfaceView wallpaperSurface, @Nullable SurfaceListener listener) {
+ SurfaceView wallpaperSurface, @Nullable Future<Integer> placeholderColor,
+ @Nullable SurfaceListener listener) {
mContext = context.getApplicationContext();
mContainerView = containerView;
mWallpaperSurface = wallpaperSurface;
@@ -82,6 +88,12 @@
};
mPackageStatusNotifier.addListener(mAppStatusListener,
WallpaperService.SERVICE_INTERFACE);
+ mPlaceholderColor = placeholderColor;
+ }
+
+ public WallpaperSurfaceCallback(Context context, View containerView,
+ SurfaceView wallpaperSurface, @Nullable SurfaceListener listener) {
+ this(context, containerView, wallpaperSurface, null, listener);
}
public WallpaperSurfaceCallback(Context context, View containerView,
@@ -143,8 +155,16 @@
private void setupSurfaceWallpaper(boolean forceClean) {
mHomeImageWallpaper = new ImageView(mContext);
- mHomeImageWallpaper.setBackgroundColor(
- ResourceUtils.getColorAttr(mContext, android.R.attr.colorPrimary));
+ Integer placeholder = null;
+ if (mPlaceholderColor != null && mPlaceholderColor.isDone()) {
+ try {
+ placeholder = mPlaceholderColor.get();
+ } catch (InterruptedException | ExecutionException e) {
+ // Ignore
+ }
+ }
+ mHomeImageWallpaper.setBackgroundColor((placeholder != null) ? placeholder
+ : ResourceUtils.getColorAttr(mContext, android.R.attr.colorSecondary));
mHomeImageWallpaper.measure(makeMeasureSpec(mContainerView.getWidth(), EXACTLY),
makeMeasureSpec(mContainerView.getHeight(), EXACTLY));
mHomeImageWallpaper.layout(0, 0, mContainerView.getWidth(),
diff --git a/src/com/android/wallpaper/widget/BottomActionBar.java b/src/com/android/wallpaper/widget/BottomActionBar.java
index 76415bb..fda4c8b 100644
--- a/src/com/android/wallpaper/widget/BottomActionBar.java
+++ b/src/com/android/wallpaper/widget/BottomActionBar.java
@@ -95,7 +95,7 @@
// TODO(b/154299462): Separate downloadable related actions from WallpaperPicker.
/** The action items in the bottom action bar. */
public enum BottomAction {
- ROTATION, DELETE, INFORMATION, EDIT, CUSTOMIZE, DOWNLOAD, PROGRESS, APPLY
+ ROTATION, DELETE, INFORMATION, EDIT, CUSTOMIZE, DOWNLOAD, PROGRESS, APPLY, APPLY_TEXT
}
private final Map<BottomAction, View> mActionMap = new EnumMap<>(BottomAction.class);
@@ -123,6 +123,7 @@
mActionMap.put(BottomAction.DOWNLOAD, findViewById(R.id.action_download));
mActionMap.put(BottomAction.PROGRESS, findViewById(R.id.action_progress));
mActionMap.put(BottomAction.APPLY, findViewById(R.id.action_apply));
+ mActionMap.put(BottomAction.APPLY_TEXT, findViewById(R.id.action_apply_text_button));
mBottomSheetView = findViewById(R.id.action_bottom_sheet);
SizeCalculator.adjustBackgroundCornerRadius(mBottomSheetView);
diff --git a/src/com/android/wallpaper/widget/LockScreenPreviewer.java b/src/com/android/wallpaper/widget/LockScreenPreviewer.java
index 17ca99a..282a899 100644
--- a/src/com/android/wallpaper/widget/LockScreenPreviewer.java
+++ b/src/com/android/wallpaper/widget/LockScreenPreviewer.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2020 The Android Open Source Project
+ * Copyright (C) 2021 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.
@@ -20,7 +20,6 @@
import android.app.WallpaperColors;
import android.content.Context;
-import android.content.res.ColorStateList;
import android.content.res.Configuration;
import android.graphics.Point;
import android.text.format.DateFormat;
@@ -29,7 +28,6 @@
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
-import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.MainThread;
@@ -46,24 +44,27 @@
import java.util.Calendar;
import java.util.Locale;
import java.util.TimeZone;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
-/** A class to load the custom lockscreen view to the preview screen. */
+/** A class to load the new custom lockscreen view to the preview screen. */
public class LockScreenPreviewer implements LifecycleObserver {
private static final String DEFAULT_DATE_PATTERN = "EEE, MMM d";
+ private static final ExecutorService sExecutorService = Executors.newSingleThreadExecutor();
- private Context mContext;
- private String mDatePattern;
+ private final Lifecycle mLifecycle;
+ private final Context mContext;
+ private final String mDatePattern;
+ private final TextView mLockTime;
+ private final TextView mLockDate;
private TimeTicker mTicker;
- private ImageView mLockIcon;
- private TextView mLockTime;
- private TextView mLockDate;
public LockScreenPreviewer(Lifecycle lifecycle, Context context, ViewGroup previewContainer) {
+ mLifecycle = lifecycle;
mContext = context;
View contentView = LayoutInflater.from(mContext).inflate(
R.layout.lock_screen_preview, /* root= */ null);
- mLockIcon = contentView.findViewById(R.id.lock_icon);
mLockTime = contentView.findViewById(R.id.lock_time);
mLockDate = contentView.findViewById(R.id.lock_date);
mDatePattern = DateFormat.getBestDateTimePattern(Locale.getDefault(), DEFAULT_DATE_PATTERN);
@@ -72,13 +73,13 @@
Point screenSize = ScreenSizeCalculator.getInstance().getScreenSize(defaultDisplay);
Configuration config = mContext.getResources().getConfiguration();
- final boolean directionLTR = config.getLayoutDirection() == View.LAYOUT_DIRECTION_LTR;
+ boolean directionLTR = config.getLayoutDirection() == View.LAYOUT_DIRECTION_LTR;
View rootView = previewContainer.getRootView();
rootView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View view, int left, int top, int right, int bottom,
- int oldLeft, int oldTop, int oldRight, int oldBottom) {
+ int oldLeft, int oldTop, int oldRight, int oldBottom) {
int cardHeight = previewContainer.getMeasuredHeight();
int cardWidth = previewContainer.getMeasuredWidth();
@@ -105,22 +106,27 @@
rootView.removeOnLayoutChangeListener(this);
}
});
- lifecycle.addObserver(this);
+ mLifecycle.addObserver(this);
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
@MainThread
public void onResume() {
- mTicker = TimeTicker.registerNewReceiver(mContext, this::updateDateTime);
+ if (mTicker == null) {
+ sExecutorService.submit(() -> {
+ if (mContext != null && mLifecycle.getCurrentState().isAtLeast(
+ Lifecycle.State.RESUMED)) {
+ mTicker = TimeTicker.registerNewReceiver(mContext, this::updateDateTime);
+ }
+ });
+ }
updateDateTime();
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
@MainThread
public void onPause() {
- if (mContext != null) {
- mContext.unregisterReceiver(mTicker);
- }
+ unregisterReceiver();
}
/**
@@ -133,31 +139,45 @@
boolean useLightTextColor = colors == null
|| (colors.getColorHints() & WallpaperColors.HINT_SUPPORTS_DARK_TEXT) == 0;
int color = mContext.getColor(useLightTextColor
- ? android.R.color.white : android.R.color.black);
+ ? R.color.text_color_light : R.color.text_color_dark);
int textShadowColor = mContext.getColor(useLightTextColor
- ? android.R.color.tertiary_text_dark
- : android.R.color.transparent);
- mLockIcon.setImageTintList(ColorStateList.valueOf(color));
+ ? R.color.smartspace_preview_shadow_color_dark
+ : R.color.smartspace_preview_shadow_color_transparent);
mLockDate.setTextColor(color);
- mLockTime.setTextColor(color);
-
mLockDate.setShadowLayer(
mContext.getResources().getDimension(
R.dimen.smartspace_preview_key_ambient_shadow_blur),
/* dx = */ 0,
/* dy = */ 0,
textShadowColor);
- mLockTime.setShadowLayer(
- mContext.getResources().getDimension(
- R.dimen.smartspace_preview_key_ambient_shadow_blur),
- /* dx = */ 0,
- /* dy = */ 0,
- textShadowColor);
}
+ /** Sets visibility for date view. */
+ public void setDateViewVisibility(boolean visible) {
+ mLockDate.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
+ }
+
+ public void release() {
+ mLifecycle.removeObserver(this);
+ unregisterReceiver();
+ }
+
+ private void unregisterReceiver() {
+ if (mTicker == null) {
+ return;
+ }
+
+ sExecutorService.submit(() -> {
+ if (mContext != null && mTicker != null) {
+ mContext.unregisterReceiver(mTicker);
+ mTicker = null;
+ }
+ });
+ }
+
private void updateDateTime() {
Calendar calendar = Calendar.getInstance(TimeZone.getDefault());
- mLockTime.setText(TimeUtils.getFormattedTime(mContext, calendar));
mLockDate.setText(DateFormat.format(mDatePattern, calendar));
+ mLockTime.setText(TimeUtils.getDoubleLineFormattedTime(mLockTime.getContext(), calendar));
}
}
diff --git a/src/com/android/wallpaper/widget/LockScreenPreviewer2.java b/src/com/android/wallpaper/widget/LockScreenPreviewer2.java
deleted file mode 100644
index 360b6fd..0000000
--- a/src/com/android/wallpaper/widget/LockScreenPreviewer2.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Copyright (C) 2021 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.
- */
-package com.android.wallpaper.widget;
-
-import static android.view.View.MeasureSpec.EXACTLY;
-import static android.view.View.MeasureSpec.makeMeasureSpec;
-
-import android.app.WallpaperColors;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.graphics.Point;
-import android.text.SpannableString;
-import android.text.format.DateFormat;
-import android.text.style.ReplacementSpan;
-import android.view.Display;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.WindowManager;
-import android.widget.TextView;
-
-import androidx.annotation.MainThread;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.lifecycle.Lifecycle;
-import androidx.lifecycle.LifecycleObserver;
-import androidx.lifecycle.OnLifecycleEvent;
-
-import com.android.wallpaper.R;
-import com.android.wallpaper.util.ScreenSizeCalculator;
-import com.android.wallpaper.util.TimeUtils;
-import com.android.wallpaper.util.TimeUtils.TimeTicker;
-
-import java.util.Calendar;
-import java.util.Locale;
-import java.util.TimeZone;
-import java.util.concurrent.Executors;
-
-/** A class to load the new custom lockscreen view to the preview screen. */
-public class LockScreenPreviewer2 implements LifecycleObserver {
-
- private static final String DEFAULT_DATE_PATTERN = "EEE, MMM d";
-
- private final Lifecycle mLifecycle;
- private final Context mContext;
- private final String mDatePattern;
- private final TextView mLockTime;
- private final TextView mLockDate;
- private TimeTicker mTicker;
-
- public LockScreenPreviewer2(Lifecycle lifecycle, Context context, ViewGroup previewContainer) {
- mLifecycle = lifecycle;
- mContext = context;
- View contentView = LayoutInflater.from(mContext).inflate(
- R.layout.lock_screen_preview2, /* root= */ null);
- mLockTime = contentView.findViewById(R.id.lock_time);
- mLockDate = contentView.findViewById(R.id.lock_date);
- mDatePattern = DateFormat.getBestDateTimePattern(Locale.getDefault(), DEFAULT_DATE_PATTERN);
-
- Display defaultDisplay = mContext.getSystemService(WindowManager.class).getDefaultDisplay();
- Point screenSize = ScreenSizeCalculator.getInstance().getScreenSize(defaultDisplay);
-
- Configuration config = mContext.getResources().getConfiguration();
- boolean directionLTR = config.getLayoutDirection() == View.LAYOUT_DIRECTION_LTR;
-
- View rootView = previewContainer.getRootView();
- rootView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
- @Override
- public void onLayoutChange(View view, int left, int top, int right, int bottom,
- int oldLeft, int oldTop, int oldRight, int oldBottom) {
- int cardHeight = previewContainer.getMeasuredHeight();
- int cardWidth = previewContainer.getMeasuredWidth();
-
- // Relayout the content view to match full screen size.
- contentView.measure(
- makeMeasureSpec(screenSize.x, EXACTLY),
- makeMeasureSpec(screenSize.y, EXACTLY));
- contentView.layout(0, 0, screenSize.x, screenSize.y);
-
- // Scale the content view from full screen size to the container(card) size.
- float scale = cardHeight > 0 ? (float) cardHeight / screenSize.y
- : (float) cardWidth / screenSize.x;
- contentView.setScaleX(scale);
- contentView.setScaleY(scale);
- // The pivot point is centered by default, set to (0, 0).
- contentView.setPivotX(directionLTR ? 0f : contentView.getMeasuredWidth());
- contentView.setPivotY(0f);
-
- previewContainer.removeAllViews();
- previewContainer.addView(
- contentView,
- contentView.getMeasuredWidth(),
- contentView.getMeasuredHeight());
- rootView.removeOnLayoutChangeListener(this);
- }
- });
- mLifecycle.addObserver(this);
- }
-
- @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
- @MainThread
- public void onResume() {
- if (mContext != null) {
- Executors.newSingleThreadExecutor().submit(() -> {
- if (mContext != null && mLifecycle.getCurrentState().isAtLeast(
- Lifecycle.State.RESUMED)) {
- mTicker = TimeTicker.registerNewReceiver(mContext, this::updateDateTime);
- }
- });
-
- updateDateTime();
- }
- }
-
- @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
- @MainThread
- public void onPause() {
- if (mContext != null && mTicker != null) {
- mContext.unregisterReceiver(mTicker);
- }
- }
-
- /**
- * Sets the content's color based on the wallpaper's {@link WallpaperColors}.
- *
- * @param colors the {@link WallpaperColors} of the wallpaper which the lock screen overlay
- * will attach to, or {@code null} to use light color as default
- */
- public void setColor(@Nullable WallpaperColors colors) {
- boolean useLightTextColor = colors == null
- || (colors.getColorHints() & WallpaperColors.HINT_SUPPORTS_DARK_TEXT) == 0;
- int color = mContext.getColor(useLightTextColor
- ? R.color.text_color_light : R.color.text_color_dark);
- int textShadowColor = mContext.getColor(useLightTextColor
- ? R.color.smartspace_preview_shadow_color_dark
- : R.color.smartspace_preview_shadow_color_transparent);
- mLockDate.setTextColor(color);
- mLockDate.setShadowLayer(
- mContext.getResources().getDimension(
- R.dimen.smartspace_preview_key_ambient_shadow_blur),
- /* dx = */ 0,
- /* dy = */ 0,
- textShadowColor);
- }
-
- public void release() {
- mLifecycle.removeObserver(this);
- }
-
- private void updateDateTime() {
- Calendar calendar = Calendar.getInstance(TimeZone.getDefault());
- mLockDate.setText(DateFormat.format(mDatePattern, calendar));
- SpannableString timeWithMonospaceText = new SpannableString(
- TimeUtils.getDoubleLineFormattedTime(mContext, calendar));
- timeWithMonospaceText.setSpan(new MonospaceSpan(), /* start= */ 0,
- timeWithMonospaceText.length(), /* flag= */ 0);
- mLockTime.setText(timeWithMonospaceText);
- }
-
- /** Make text monospace without overriding the text fontFamily. */
- private static class MonospaceSpan extends ReplacementSpan {
-
- @Override
- public int getSize(@NonNull Paint paint, @NonNull CharSequence text, int start, int end,
- @Nullable Paint.FontMetricsInt fontMetricsInt) {
- if (fontMetricsInt != null) {
- paint.getFontMetricsInt(fontMetricsInt);
- }
- int count = end - start;
- if (text.charAt(start) == '\n') {
- count--;
- }
- if (text.charAt(end - 1) == '\n') {
- count--;
- }
- return getMaxCharWidth(paint, text, /* start= */ 0, text.length())
- * Math.max(count, 0);
- }
-
- @Override
- public void draw(@NonNull Canvas canvas, @NonNull CharSequence text, int start, int end,
- float x, int top, int y, int bottom, @NonNull Paint paint) {
- float[] widths = new float[end - start];
- paint.getTextWidths(text, start, end, widths);
- int maxCharWidth = getMaxCharWidth(paint, text, /* start= */ 0, text.length());
- for (int i = 0; i < end - start; ++i) {
- canvas.drawText(text, start + i, start + i + 1,
- x + maxCharWidth * i + (maxCharWidth - widths[i]) / 2, y, paint);
- }
- }
-
- private int getMaxCharWidth(Paint paint, CharSequence text, int start, int end) {
- float[] widths = new float[end - start];
- paint.getTextWidths(text, start, end, widths);
- float max = 0;
- for (float w : widths) {
- if (max < w) {
- max = w;
- }
- }
- return Math.round(max);
- }
- }
-}
diff --git a/src/com/android/wallpaper/widget/PreviewPager.java b/src/com/android/wallpaper/widget/PreviewPager.java
index 6b0d07d..231392c 100644
--- a/src/com/android/wallpaper/widget/PreviewPager.java
+++ b/src/com/android/wallpaper/widget/PreviewPager.java
@@ -107,10 +107,6 @@
// offset in (origin, rightBoundary)
alpha = (float) Math.abs(offset - origin) / Math.abs(rightBoundary - origin);
}
- View cover = view.findViewById(R.id.fade_cover);
- if (cover != null) {
- view.findViewById(R.id.fade_cover).setAlpha(alpha);
- }
}, LAYER_TYPE_NONE);
mViewPager.setPageMargin(res.getDimensionPixelOffset(R.dimen.preview_page_gap));
mViewPager.setClipToPadding(false);
diff --git a/tests/src/com/android/wallpaper/testing/TestCategoryProvider.java b/tests/src/com/android/wallpaper/testing/TestCategoryProvider.java
index d43a8a0..d6fa979 100644
--- a/tests/src/com/android/wallpaper/testing/TestCategoryProvider.java
+++ b/tests/src/com/android/wallpaper/testing/TestCategoryProvider.java
@@ -93,8 +93,9 @@
}
@Override
- public void resetIfNeeded() {
+ public boolean resetIfNeeded() {
mCategories.clear();
+ return true;
}
@Override
diff --git a/tests/src/com/android/wallpaper/testing/TestCurrentWallpaperInfoFactory.java b/tests/src/com/android/wallpaper/testing/TestCurrentWallpaperInfoFactory.java
index 3e8c665..63cdf29 100644
--- a/tests/src/com/android/wallpaper/testing/TestCurrentWallpaperInfoFactory.java
+++ b/tests/src/com/android/wallpaper/testing/TestCurrentWallpaperInfoFactory.java
@@ -16,8 +16,8 @@
package com.android.wallpaper.testing;
import android.content.Context;
+import android.os.Build;
-import com.android.wallpaper.compat.BuildCompat;
import com.android.wallpaper.model.WallpaperInfo;
import com.android.wallpaper.module.CurrentWallpaperInfoFactory;
import com.android.wallpaper.module.InjectorProvider;
@@ -48,7 +48,7 @@
homeWallpaperMetadata.getCollectionId());
WallpaperInfo lockWallpaper = null;
- if (lockWallpaperMetadata != null && BuildCompat.isAtLeastN()) {
+ if (lockWallpaperMetadata != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
lockWallpaper = createTestWallpaperInfo(
lockWallpaperMetadata.getAttributions(),
lockWallpaperMetadata.getActionUrl(),
diff --git a/tests/src/com/android/wallpaper/testing/TestInjector.java b/tests/src/com/android/wallpaper/testing/TestInjector.java
index cdc9a59..fd9f68a 100644
--- a/tests/src/com/android/wallpaper/testing/TestInjector.java
+++ b/tests/src/com/android/wallpaper/testing/TestInjector.java
@@ -31,6 +31,7 @@
import com.android.wallpaper.module.DrawableLayerResolver;
import com.android.wallpaper.module.ExploreIntentChecker;
import com.android.wallpaper.module.FormFactorChecker;
+import com.android.wallpaper.module.CustomizationSections;
import com.android.wallpaper.module.Injector;
import com.android.wallpaper.module.LiveWallpaperInfoFactory;
import com.android.wallpaper.module.LoggingOptInStatusProvider;
@@ -254,4 +255,9 @@
}
return mPerformanceMonitor;
}
+
+ @Override
+ public CustomizationSections getCustomizationSections() {
+ return null;
+ }
}
diff --git a/tests/src/com/android/wallpaper/testing/TestWallpaperInfo.java b/tests/src/com/android/wallpaper/testing/TestWallpaperInfo.java
index c0ccee6..c4328c5 100644
--- a/tests/src/com/android/wallpaper/testing/TestWallpaperInfo.java
+++ b/tests/src/com/android/wallpaper/testing/TestWallpaperInfo.java
@@ -73,6 +73,7 @@
}
private TestWallpaperInfo(Parcel in) {
+ super(in);
mPixelColor = in.readInt();
mAttributions = in.createStringArrayList();
mActionUrl = in.readString();
@@ -200,6 +201,7 @@
@Override
public void writeToParcel(Parcel parcel, int i) {
+ super.writeToParcel(parcel, i);
parcel.writeInt(mPixelColor);
parcel.writeStringList(mAttributions);
parcel.writeString(mActionUrl);
diff --git a/tests/src/com/android/wallpaper/testing/TestWallpaperRefresher.java b/tests/src/com/android/wallpaper/testing/TestWallpaperRefresher.java
index 97961fe..558c3cb 100644
--- a/tests/src/com/android/wallpaper/testing/TestWallpaperRefresher.java
+++ b/tests/src/com/android/wallpaper/testing/TestWallpaperRefresher.java
@@ -18,8 +18,8 @@
import android.app.WallpaperManager;
import android.content.Context;
+import android.os.Build;
-import com.android.wallpaper.compat.BuildCompat;
import com.android.wallpaper.model.WallpaperMetadata;
import com.android.wallpaper.module.InjectorProvider;
import com.android.wallpaper.module.WallpaperPreferences;
@@ -45,7 +45,7 @@
WallpaperPreferences prefs = InjectorProvider.getInjector().getPreferences(mAppContext);
- if (BuildCompat.isAtLeastN() && prefs.getLockWallpaperId() > 0) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && prefs.getLockWallpaperId() > 0) {
listener.onRefreshed(
new WallpaperMetadata(
prefs.getHomeWallpaperAttributions(),