diff options
Diffstat (limited to 'src/com/android/customization/model/grid/ui/fragment')
-rw-r--r-- | src/com/android/customization/model/grid/ui/fragment/GridFragment2.kt | 82 |
1 files changed, 80 insertions, 2 deletions
diff --git a/src/com/android/customization/model/grid/ui/fragment/GridFragment2.kt b/src/com/android/customization/model/grid/ui/fragment/GridFragment2.kt index 6ab561f3..9e99efee 100644 --- a/src/com/android/customization/model/grid/ui/fragment/GridFragment2.kt +++ b/src/com/android/customization/model/grid/ui/fragment/GridFragment2.kt @@ -18,14 +18,24 @@ package com.android.customization.model.grid.ui.fragment import android.os.Bundle +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button +import android.widget.Toast +import androidx.core.content.ContextCompat +import androidx.core.view.isVisible import androidx.lifecycle.ViewModelProvider +import androidx.transition.Transition +import androidx.transition.doOnStart +import com.android.customization.model.CustomizationManager.Callback +import com.android.customization.model.grid.domain.interactor.GridInteractor import com.android.customization.model.grid.ui.binder.GridScreenBinder import com.android.customization.model.grid.ui.viewmodel.GridScreenViewModel import com.android.customization.module.ThemePickerInjector import com.android.wallpaper.R +import com.android.wallpaper.config.BaseFlags import com.android.wallpaper.module.CurrentWallpaperInfoFactory import com.android.wallpaper.module.CustomizationSections import com.android.wallpaper.module.InjectorProvider @@ -38,9 +48,13 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.suspendCancellableCoroutine +private val TAG = GridFragment2::class.java.simpleName + @OptIn(ExperimentalCoroutinesApi::class) class GridFragment2 : AppbarFragment() { + private lateinit var gridInteractor: GridInteractor + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -54,6 +68,8 @@ class GridFragment2 : AppbarFragment() { ) setUpToolbar(view) + val isGridApplyButtonEnabled = BaseFlags.get().isGridApplyButtonEnabled(requireContext()) + val injector = InjectorProvider.getInjector() as ThemePickerInjector val wallpaperInfoFactory = injector.getCurrentWallpaperInfoFactory(requireContext()) @@ -61,10 +77,12 @@ class GridFragment2 : AppbarFragment() { bindScreenPreview( view, wallpaperInfoFactory, - injector.getWallpaperInteractor(requireContext()) + injector.getWallpaperInteractor(requireContext()), + injector.getGridInteractor(requireContext()) ) val viewModelFactory = injector.getGridScreenViewModelFactory(requireContext()) + gridInteractor = injector.getGridInteractor(requireContext()) GridScreenBinder.bind( view = view, viewModel = @@ -80,11 +98,50 @@ class GridFragment2 : AppbarFragment() { bindScreenPreview( view, wallpaperInfoFactory, - injector.getWallpaperInteractor(requireContext()) + injector.getWallpaperInteractor(requireContext()), + gridInteractor, ) + if (isGridApplyButtonEnabled) { + val applyButton: Button = view.requireViewById(R.id.apply_button) + applyButton.isEnabled = !gridInteractor.isSelectedOptionApplied() + } + }, + isGridApplyButtonEnabled = isGridApplyButtonEnabled, + onOptionApplied = { + gridInteractor.applySelectedOption( + object : Callback { + override fun onSuccess() { + Toast.makeText( + context, + getString( + R.string.toast_of_changing_grid, + gridInteractor.getSelectOptionNonSuspend()?.title + ), + Toast.LENGTH_SHORT + ) + .show() + val applyButton: Button = view.requireViewById(R.id.apply_button) + applyButton.isEnabled = false + } + + override fun onError(throwable: Throwable?) { + val errorMsg = + getString( + R.string.toast_of_failure_to_change_grid, + gridInteractor.getSelectOptionNonSuspend()?.title + ) + Toast.makeText(context, errorMsg, Toast.LENGTH_SHORT).show() + Log.e(TAG, errorMsg, throwable) + } + } + ) } ) + (returnTransition as? Transition)?.doOnStart { + view.requireViewById<View>(R.id.preview).isVisible = false + } + return view } @@ -92,10 +149,19 @@ class GridFragment2 : AppbarFragment() { return getString(R.string.grid_title) } + override fun getToolbarColorId(): Int { + return android.R.color.transparent + } + + override fun getToolbarTextColor(): Int { + return ContextCompat.getColor(requireContext(), R.color.system_on_surface) + } + private fun bindScreenPreview( view: View, wallpaperInfoFactory: CurrentWallpaperInfoFactory, wallpaperInteractor: WallpaperInteractor, + gridInteractor: GridInteractor ): ScreenPreviewBinder.Binding { return ScreenPreviewBinder.bind( activity = requireActivity(), @@ -111,6 +177,11 @@ class GridFragment2 : AppbarFragment() { R.string.grid_control_metadata_name, ), ), + initialExtrasProvider = { + val bundle = Bundle() + bundle.putString("name", gridInteractor.getSelectOptionNonSuspend()?.name) + bundle + }, wallpaperInfoProvider = { suspendCancellableCoroutine { continuation -> wallpaperInfoFactory.createCurrentWallpaperInfos( @@ -129,4 +200,11 @@ class GridFragment2 : AppbarFragment() { onWallpaperPreviewDirty = { activity?.recreate() }, ) } + + override fun onBackPressed(): Boolean { + if (BaseFlags.get().isGridApplyButtonEnabled(requireContext())) { + gridInteractor.clearSelectedOption() + } + return super.onBackPressed() + } } |