diff options
author | Alejandro Nijamkin <nijamkin@google.com> | 2022-12-22 15:24:22 -0800 |
---|---|---|
committer | Alejandro Nijamkin <nijamkin@google.com> | 2022-12-27 12:27:17 -0800 |
commit | 2fe5f2def3238b9519bc9d98aa29cea2a65f17ee (patch) | |
tree | 907904f95b93b94b861309841195e4fc7a37e671 | |
parent | b169b2c1ea71d909ced467ab743f14d6de0616bd (diff) |
Unified screen preview section (2/3).
Implementation of a new section where we show the preview of the lock
screen and home screen and switch between them.
Fix: 263507648
Test: manually verified that switching between the lock screen and home
screen tabs properly updates the preview. Also, scrolling up and down
faithfully moves the preview view on on the screen without rendering
artifacts.
Change-Id: I59a2d70f4a1dee8dda12fdc94a1df03fe5fd4e72
6 files changed, 50 insertions, 36 deletions
diff --git a/src/com/android/customization/module/DefaultCustomizationSections.java b/src/com/android/customization/module/DefaultCustomizationSections.java index 1540a096..1097a716 100644 --- a/src/com/android/customization/module/DefaultCustomizationSections.java +++ b/src/com/android/customization/module/DefaultCustomizationSections.java @@ -23,7 +23,9 @@ 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 com.android.wallpaper.module.CurrentWallpaperInfoFactory; import com.android.wallpaper.module.CustomizationSections; +import com.android.wallpaper.picker.customization.ui.section.ScreenPreviewSectionController; import java.util.ArrayList; import java.util.List; @@ -54,14 +56,18 @@ public final class DefaultCustomizationSections implements CustomizationSections PermissionRequester permissionRequester, WallpaperPreviewNavigator wallpaperPreviewNavigator, CustomizationSectionNavigationController sectionNavigationController, - @Nullable Bundle savedInstanceState) { + @Nullable Bundle savedInstanceState, + CurrentWallpaperInfoFactory wallpaperInfoFactory) { List<CustomizationSectionController<?>> sectionControllers = new ArrayList<>(); // Wallpaper section. - sectionControllers.add(new WallpaperSectionController( - activity, lifecycleOwner, permissionRequester, wallpaperColorsViewModel, - workspaceViewModel, sectionNavigationController, wallpaperPreviewNavigator, - savedInstanceState)); + sectionControllers.add( + new ScreenPreviewSectionController( + activity, + lifecycleOwner, + screen, + wallpaperInfoFactory, + wallpaperColorsViewModel)); // Theme color section. sectionControllers.add(new ColorSectionController( diff --git a/src/com/android/customization/module/ThemePickerInjector.java b/src/com/android/customization/module/ThemePickerInjector.java index 93c4d5fa..a33541c5 100644 --- a/src/com/android/customization/module/ThemePickerInjector.java +++ b/src/com/android/customization/module/ThemePickerInjector.java @@ -170,7 +170,8 @@ public class ThemePickerInjector extends WallpaperPicker2Injector new KeyguardQuickAffordancePickerViewModel.Factory( context, getKeyguardQuickAffordancePickerInteractor(context), - getUndoInteractor(context)); + getUndoInteractor(context), + getCurrentWallpaperInfoFactory(context)); } return mKeyguardQuickAffordancePickerViewModelFactory; } diff --git a/src/com/android/customization/picker/quickaffordance/ui/binder/KeyguardQuickAffordancePreviewBinder.kt b/src/com/android/customization/picker/quickaffordance/ui/binder/KeyguardQuickAffordancePreviewBinder.kt index c6cdcaa1..c8fea0f7 100644 --- a/src/com/android/customization/picker/quickaffordance/ui/binder/KeyguardQuickAffordancePreviewBinder.kt +++ b/src/com/android/customization/picker/quickaffordance/ui/binder/KeyguardQuickAffordancePreviewBinder.kt @@ -27,7 +27,6 @@ import androidx.lifecycle.lifecycleScope import com.android.customization.picker.quickaffordance.ui.viewmodel.KeyguardQuickAffordancePickerViewModel import com.android.systemui.shared.quickaffordance.shared.model.KeyguardQuickAffordancePreviewConstants import com.android.wallpaper.R -import com.android.wallpaper.model.WallpaperInfo import com.android.wallpaper.picker.customization.ui.binder.ScreenPreviewBinder import kotlinx.coroutines.launch @@ -40,7 +39,6 @@ object KeyguardQuickAffordancePreviewBinder { previewView: CardView, viewModel: KeyguardQuickAffordancePickerViewModel, lifecycleOwner: LifecycleOwner, - wallpaperInfoProvider: suspend () -> WallpaperInfo?, ) { val binding = ScreenPreviewBinder.bind( @@ -48,7 +46,6 @@ object KeyguardQuickAffordancePreviewBinder { previewView = previewView, viewModel = viewModel.preview, lifecycleOwner = lifecycleOwner, - wallpaperInfoProvider = wallpaperInfoProvider, ) previewView.contentDescription = diff --git a/src/com/android/customization/picker/quickaffordance/ui/fragment/KeyguardQuickAffordancePickerFragment.kt b/src/com/android/customization/picker/quickaffordance/ui/fragment/KeyguardQuickAffordancePickerFragment.kt index f37b246d..d2245db1 100644 --- a/src/com/android/customization/picker/quickaffordance/ui/fragment/KeyguardQuickAffordancePickerFragment.kt +++ b/src/com/android/customization/picker/quickaffordance/ui/fragment/KeyguardQuickAffordancePickerFragment.kt @@ -32,7 +32,6 @@ import com.android.wallpaper.module.InjectorProvider import com.android.wallpaper.picker.AppbarFragment import com.android.wallpaper.picker.undo.ui.binder.RevertToolbarButtonBinder import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.suspendCancellableCoroutine @OptIn(ExperimentalCoroutinesApi::class) class KeyguardQuickAffordancePickerFragment : AppbarFragment() { @@ -57,7 +56,6 @@ class KeyguardQuickAffordancePickerFragment : AppbarFragment() { ) setUpToolbar(view) val injector = InjectorProvider.getInjector() as ThemePickerInjector - val wallpaperInfoFactory = injector.getCurrentWallpaperInfoFactory(requireContext()) val viewModel: KeyguardQuickAffordancePickerViewModel = ViewModelProvider( requireActivity(), @@ -76,16 +74,6 @@ class KeyguardQuickAffordancePickerFragment : AppbarFragment() { previewView = view.requireViewById(R.id.preview), viewModel = viewModel, lifecycleOwner = this, - wallpaperInfoProvider = { - suspendCancellableCoroutine { continuation -> - wallpaperInfoFactory.createCurrentWallpaperInfos( - { homeWallpaper, lockWallpaper, _ -> - continuation.resume(lockWallpaper ?: homeWallpaper, null) - }, - /* forceRefresh= */ true, - ) - } - }, ) KeyguardQuickAffordancePickerBinder.bind( view = view, diff --git a/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModel.kt b/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModel.kt index aa64d9be..f87c0990 100644 --- a/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModel.kt +++ b/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModel.kt @@ -31,9 +31,11 @@ import com.android.systemui.shared.keyguard.shared.model.KeyguardQuickAffordance import com.android.systemui.shared.quickaffordance.data.content.KeyguardQuickAffordanceProviderContract as Contract import com.android.systemui.shared.quickaffordance.shared.model.KeyguardQuickAffordancePreviewConstants import com.android.wallpaper.R +import com.android.wallpaper.module.CurrentWallpaperInfoFactory import com.android.wallpaper.picker.customization.ui.viewmodel.ScreenPreviewViewModel import com.android.wallpaper.picker.undo.domain.interactor.UndoInteractor import com.android.wallpaper.picker.undo.ui.viewmodel.UndoViewModel +import com.android.wallpaper.util.PreviewUtils import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow @@ -42,6 +44,7 @@ import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch +import kotlinx.coroutines.suspendCancellableCoroutine /** Models UI state for a lock screen quick affordance picker experience. */ @OptIn(ExperimentalCoroutinesApi::class) @@ -50,25 +53,40 @@ private constructor( context: Context, private val quickAffordanceInteractor: KeyguardQuickAffordancePickerInteractor, undoInteractor: UndoInteractor, + private val wallpaperInfoFactory: CurrentWallpaperInfoFactory, ) : ViewModel() { @SuppressLint("StaticFieldLeak") private val applicationContext = context.applicationContext - val preview: ScreenPreviewViewModel - get() = - ScreenPreviewViewModel( - contentProviderAuthorityProvider = { - applicationContext.getString(R.string.lock_screen_preview_provider_authority) - }, - initialExtrasProvider = { - Bundle().apply { - putString( - KeyguardQuickAffordancePreviewConstants.KEY_INITIALLY_SELECTED_SLOT_ID, - selectedSlotId.value, - ) - } - }, - ) + val preview = + ScreenPreviewViewModel( + previewUtils = + PreviewUtils( + context = applicationContext, + authority = + applicationContext.getString( + R.string.lock_screen_preview_provider_authority, + ), + ), + initialExtrasProvider = { + Bundle().apply { + putString( + KeyguardQuickAffordancePreviewConstants.KEY_INITIALLY_SELECTED_SLOT_ID, + selectedSlotId.value, + ) + } + }, + wallpaperInfoProvider = { + suspendCancellableCoroutine { continuation -> + wallpaperInfoFactory.createCurrentWallpaperInfos( + { homeWallpaper, lockWallpaper, _ -> + continuation.resume(lockWallpaper ?: homeWallpaper, null) + }, + /* forceRefresh= */ true, + ) + } + }, + ) val undo: UndoViewModel = UndoViewModel( @@ -349,6 +367,7 @@ private constructor( private val context: Context, private val quickAffordanceInteractor: KeyguardQuickAffordancePickerInteractor, private val undoInteractor: UndoInteractor, + private val wallpaperInfoFactory: CurrentWallpaperInfoFactory, ) : ViewModelProvider.Factory { override fun <T : ViewModel> create(modelClass: Class<T>): T { @Suppress("UNCHECKED_CAST") @@ -356,6 +375,7 @@ private constructor( context = context, quickAffordanceInteractor = quickAffordanceInteractor, undoInteractor = undoInteractor, + wallpaperInfoFactory = wallpaperInfoFactory, ) as T } diff --git a/tests/src/com/android/customization/model/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModelTest.kt b/tests/src/com/android/customization/model/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModelTest.kt index 3ec893af..9c3e87cc 100644 --- a/tests/src/com/android/customization/model/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModelTest.kt +++ b/tests/src/com/android/customization/model/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModelTest.kt @@ -33,6 +33,7 @@ import com.android.systemui.shared.quickaffordance.data.content.KeyguardQuickAff import com.android.wallpaper.picker.undo.data.repository.UndoRepository import com.android.wallpaper.picker.undo.domain.interactor.UndoInteractor import com.android.wallpaper.testing.FAKE_RESTORERS +import com.android.wallpaper.testing.TestCurrentWallpaperInfoFactory import com.android.wallpaper.testing.collectLastValue import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertWithMessage @@ -97,6 +98,7 @@ class KeyguardQuickAffordancePickerViewModelTest { context = context, quickAffordanceInteractor = quickAffordanceInteractor, undoInteractor = undoInteractor, + wallpaperInfoFactory = TestCurrentWallpaperInfoFactory(context), ) .create(KeyguardQuickAffordancePickerViewModel::class.java) } |