summaryrefslogtreecommitdiff
path: root/src/com/android/customization/model/grid/ui/fragment
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/customization/model/grid/ui/fragment')
-rw-r--r--src/com/android/customization/model/grid/ui/fragment/GridFragment2.kt82
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()
+ }
}