summaryrefslogtreecommitdiff
path: root/src/com/android/wallpaper/picker/preview/ui/binder/DualPreviewSelectorBinder.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/wallpaper/picker/preview/ui/binder/DualPreviewSelectorBinder.kt')
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/binder/DualPreviewSelectorBinder.kt95
1 files changed, 95 insertions, 0 deletions
diff --git a/src/com/android/wallpaper/picker/preview/ui/binder/DualPreviewSelectorBinder.kt b/src/com/android/wallpaper/picker/preview/ui/binder/DualPreviewSelectorBinder.kt
new file mode 100644
index 00000000..6d7c78d3
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/binder/DualPreviewSelectorBinder.kt
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2023 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.preview.ui.binder
+
+import android.content.Context
+import android.view.View
+import androidx.lifecycle.LifecycleOwner
+import androidx.viewpager.widget.ViewPager
+import com.android.wallpaper.picker.preview.ui.fragment.smallpreview.DualPreviewViewPager
+import com.android.wallpaper.picker.preview.ui.viewmodel.WallpaperPreviewViewModel
+import kotlinx.coroutines.CoroutineScope
+
+/**
+ * This binder binds the data and view models for the dual preview collection on the small preview
+ * screen.
+ */
+object DualPreviewSelectorBinder {
+
+ fun bind(
+ tabsViewPager: ViewPager,
+ dualPreviewView: DualPreviewViewPager,
+ wallpaperPreviewViewModel: WallpaperPreviewViewModel,
+ applicationContext: Context,
+ viewLifecycleOwner: LifecycleOwner,
+ mainScope: CoroutineScope,
+ navigate: (View) -> Unit,
+ ) {
+ // set up tabs view pager
+ TabPagerBinder.bind(tabsViewPager)
+
+ // synchronize both view and tabs pager
+ synchronizePreviewAndTabsPager(tabsViewPager, dualPreviewView)
+
+ DualPreviewPagerBinder.bind(
+ dualPreviewView,
+ wallpaperPreviewViewModel,
+ applicationContext,
+ viewLifecycleOwner,
+ mainScope,
+ navigate,
+ )
+ }
+
+ private fun synchronizePreviewAndTabsPager(
+ tabsViewPager: ViewPager,
+ previewsViewPager: ViewPager,
+ ) {
+ val onPageChangeListenerTabs =
+ object : ViewPager.OnPageChangeListener {
+ override fun onPageSelected(position: Int) {
+ previewsViewPager.setCurrentItem(position, true)
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {}
+
+ override fun onPageScrollStateChanged(state: Int) {}
+ }
+
+ tabsViewPager.addOnPageChangeListener(onPageChangeListenerTabs)
+
+ val onPageChangeListenerPreviews =
+ object : ViewPager.OnPageChangeListener {
+ override fun onPageSelected(position: Int) {
+ tabsViewPager.setCurrentItem(position, true)
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {}
+
+ override fun onPageScrollStateChanged(state: Int) {}
+ }
+
+ previewsViewPager.addOnPageChangeListener(onPageChangeListenerPreviews)
+ }
+}