simplifying the automatic transitions and matching iOS by scheduling the next transition once the page settles
- means there's always a 5 second delay when manually skipping toa page
This commit is contained in:
parent
a0bda02824
commit
70c82443ee
@ -23,6 +23,7 @@ import android.view.View
|
|||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
|
import androidx.viewpager2.widget.ViewPager2
|
||||||
import com.airbnb.mvrx.withState
|
import com.airbnb.mvrx.withState
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
import com.google.android.material.tabs.TabLayoutMediator
|
import com.google.android.material.tabs.TabLayoutMediator
|
||||||
@ -30,14 +31,14 @@ import im.vector.app.BuildConfig
|
|||||||
import im.vector.app.R
|
import im.vector.app.R
|
||||||
import im.vector.app.core.extensions.incrementByOneAndWrap
|
import im.vector.app.core.extensions.incrementByOneAndWrap
|
||||||
import im.vector.app.core.extensions.setCurrentItem
|
import im.vector.app.core.extensions.setCurrentItem
|
||||||
import im.vector.app.core.flow.tickerFlow
|
|
||||||
import im.vector.app.databinding.FragmentFtueSplashCarouselBinding
|
import im.vector.app.databinding.FragmentFtueSplashCarouselBinding
|
||||||
import im.vector.app.features.VectorFeatures
|
import im.vector.app.features.VectorFeatures
|
||||||
import im.vector.app.features.onboarding.OnboardingAction
|
import im.vector.app.features.onboarding.OnboardingAction
|
||||||
import im.vector.app.features.onboarding.OnboardingFlow
|
import im.vector.app.features.onboarding.OnboardingFlow
|
||||||
import im.vector.app.features.settings.VectorPreferences
|
import im.vector.app.features.settings.VectorPreferences
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.Job
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.delay
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
import org.matrix.android.sdk.api.failure.Failure
|
import org.matrix.android.sdk.api.failure.Failure
|
||||||
import java.net.UnknownHostException
|
import java.net.UnknownHostException
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
@ -81,10 +82,22 @@ class FtueAuthSplashCarouselFragment @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
views.splashCarousel.apply {
|
views.splashCarousel.apply {
|
||||||
val itemCount = carouselAdapter.itemCount
|
var scheduledTransition: Job? = null
|
||||||
tickerFlow(lifecycleScope, delayMillis = CAROUSEL_ROTATION_DELAY_MS)
|
registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
|
||||||
.onEach { setCurrentItem(currentItem.incrementByOneAndWrap(max = itemCount - 1), duration = CAROUSEL_TRANSITION_TIME_MS) }
|
override fun onPageSelected(position: Int) {
|
||||||
.launchIn(lifecycleScope)
|
scheduledTransition?.cancel()
|
||||||
|
scheduledTransition = scheduleCarouselTransition()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
scheduledTransition = scheduleCarouselTransition()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun ViewPager2.scheduleCarouselTransition(): Job {
|
||||||
|
val itemCount = adapter?.itemCount ?: throw IllegalStateException("An adapter must be set")
|
||||||
|
return lifecycleScope.launch {
|
||||||
|
delay(CAROUSEL_ROTATION_DELAY_MS)
|
||||||
|
setCurrentItem(currentItem.incrementByOneAndWrap(max = itemCount - 1), duration = CAROUSEL_TRANSITION_TIME_MS)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user