-
-
Notifications
You must be signed in to change notification settings - Fork 24
/
WhatsNewDialogFragment.kt
78 lines (68 loc) · 2.62 KB
/
WhatsNewDialogFragment.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package com.noto.app.settings.whatsnew
import android.content.DialogInterface
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import com.noto.app.R
import com.noto.app.components.BaseDialogFragment
import com.noto.app.databinding.WhatsNewDialogFragmentBinding
import com.noto.app.domain.model.Release
import com.noto.app.domain.model.Release.Changelog
import com.noto.app.domain.model.Release_2_2_3
import com.noto.app.settings.SettingsViewModel
import com.noto.app.util.BounceEdgeEffectFactory
import com.noto.app.util.VerticalListItemAnimator
import com.noto.app.util.isScrollingAsFlow
import com.noto.app.util.stringResource
import com.noto.app.util.withBinding
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import org.koin.androidx.viewmodel.ext.android.viewModel
class WhatsNewDialogFragment : BaseDialogFragment() {
private val viewModel by viewModel<SettingsViewModel>()
private val currentRelease: Release? by lazy {
context?.let { context ->
val changelog = Changelog(context.stringResource(R.string.release_2_2_3))
Release_2_2_3(changelog)
}
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View = WhatsNewDialogFragmentBinding.inflate(inflater, container, false).withBinding {
setupState()
setupListeners()
}
private fun WhatsNewDialogFragmentBinding.setupState() {
rv.edgeEffectFactory = BounceEdgeEffectFactory()
rv.itemAnimator = VerticalListItemAnimator()
rv.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
tb.tvDialogTitle.text = context?.stringResource(R.string.whats_new)
rv.withModels {
currentRelease?.let { currentRelease ->
releaseItem {
id(currentRelease.version.toString())
release(currentRelease)
}
}
}
rv.isScrollingAsFlow()
.onEach { isScrolling -> tb.root.isSelected = isScrolling }
.launchIn(lifecycleScope)
}
private fun WhatsNewDialogFragmentBinding.setupListeners() {
btnOkay.setOnClickListener {
viewModel.updateLastVersion().invokeOnCompletion {
dismiss()
}
}
}
override fun onDismiss(dialog: DialogInterface) {
viewModel.updateLastVersion()
super.onDismiss(dialog)
}
}