Skip to content

Commit 5199132

Browse files
committed
ui: only register contracts in constructors
Signed-off-by: Jason A. Donenfeld <[email protected]>
1 parent 33a8a51 commit 5199132

File tree

2 files changed

+21
-21
lines changed

2 files changed

+21
-21
lines changed

ui/src/main/java/com/wireguard/android/fragment/TunnelListFragment.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,8 @@ class TunnelListFragment : BaseFragment() {
8181
}
8282
}
8383

84+
private val snackbarUpdateShower = SnackbarUpdateShower(this)
85+
8486
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
8587
super.onViewCreated(view, savedInstanceState)
8688
if (savedInstanceState != null) {
@@ -125,12 +127,11 @@ class TunnelListFragment : BaseFragment() {
125127
bottomSheet.showNow(childFragmentManager, "BOTTOM_SHEET")
126128
}
127129
executePendingBindings()
130+
snackbarUpdateShower.attach(mainContainer, createFab)
128131
}
129132
backPressedCallback = requireActivity().onBackPressedDispatcher.addCallback(this) { actionMode?.finish() }
130133
backPressedCallback?.isEnabled = false
131134

132-
SnackbarUpdateShower.attachToActivity(requireActivity(), binding?.mainContainer!!, binding?.createFab)
133-
134135
return binding?.root
135136
}
136137

ui/src/main/java/com/wireguard/android/updater/SnackbarUpdateShower.kt

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,10 @@ package com.wireguard.android.updater
77

88
import android.view.View
99
import androidx.activity.result.contract.ActivityResultContracts
10-
import androidx.fragment.app.FragmentActivity
10+
import androidx.fragment.app.Fragment
1111
import androidx.lifecycle.lifecycleScope
1212
import com.google.android.material.snackbar.BaseTransientBottomBar
1313
import com.google.android.material.snackbar.Snackbar
14-
import com.wireguard.android.BuildConfig
1514
import com.wireguard.android.R
1615
import com.wireguard.android.util.ErrorMessages
1716
import com.wireguard.android.util.QuantityFormatter
@@ -21,15 +20,20 @@ import kotlinx.coroutines.flow.onEach
2120
import kotlinx.coroutines.launch
2221
import kotlin.time.Duration.Companion.seconds
2322

24-
object SnackbarUpdateShower {
25-
private class SwapableSnackbar(activity: FragmentActivity, view: View, anchor: View?) {
26-
val actionSnackbar = makeSnackbar(activity, view, anchor)
27-
val statusSnackbar = makeSnackbar(activity, view, anchor)
23+
class SnackbarUpdateShower(private val fragment: Fragment) {
24+
private var lastUserIntervention: Updater.Progress.NeedsUserIntervention? = null
25+
private val intentLauncher = fragment.registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
26+
lastUserIntervention?.markAsDone()
27+
}
28+
29+
private class SwapableSnackbar(fragment: Fragment, view: View, anchor: View?) {
30+
val actionSnackbar = makeSnackbar(fragment, view, anchor)
31+
val statusSnackbar = makeSnackbar(fragment, view, anchor)
2832
var showingAction: Boolean = false
2933
var showingStatus: Boolean = false
3034

31-
private fun makeSnackbar(activity: FragmentActivity, view: View, anchor: View?): Snackbar {
32-
val snackbar = Snackbar.make(activity, view, "", Snackbar.LENGTH_INDEFINITE)
35+
private fun makeSnackbar(fragment: Fragment, view: View, anchor: View?): Snackbar {
36+
val snackbar = Snackbar.make(fragment.requireContext(), view, "", Snackbar.LENGTH_INDEFINITE)
3337
if (anchor != null)
3438
snackbar.anchorView = anchor
3539
snackbar.setTextMaxLines(6)
@@ -45,7 +49,7 @@ object SnackbarUpdateShower {
4549
(snackbar == actionSnackbar && !showingAction) || (snackbar == statusSnackbar && !showingStatus)
4650
)
4751
return
48-
activity.lifecycleScope.launch {
52+
fragment.lifecycleScope.launch {
4953
delay(5.seconds)
5054
snackbar?.show()
5155
}
@@ -87,14 +91,9 @@ object SnackbarUpdateShower {
8791
}
8892
}
8993

90-
fun attachToActivity(activity: FragmentActivity, view: View, anchor: View?) {
91-
val snackbar = SwapableSnackbar(activity, view, anchor)
92-
val context = activity.applicationContext
93-
94-
var lastUserIntervention: Updater.Progress.NeedsUserIntervention? = null
95-
val intentLauncher = activity.registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
96-
lastUserIntervention?.markAsDone()
97-
}
94+
fun attach(view: View, anchor: View?) {
95+
val snackbar = SwapableSnackbar(fragment, view, anchor)
96+
val context = fragment.requireContext()
9897

9998
Updater.state.onEach { progress ->
10099
when (progress) {
@@ -138,11 +137,11 @@ object SnackbarUpdateShower {
138137
}
139138

140139
is Updater.Progress.Failure -> {
141-
snackbar.showText( context.getString(R.string.updater_failure, ErrorMessages[progress.error]))
140+
snackbar.showText(context.getString(R.string.updater_failure, ErrorMessages[progress.error]))
142141
delay(5.seconds)
143142
progress.retry()
144143
}
145144
}
146-
}.launchIn(activity.lifecycleScope)
145+
}.launchIn(fragment.lifecycleScope)
147146
}
148147
}

0 commit comments

Comments
 (0)