Skip to content
This repository was archived by the owner on Jan 5, 2023. It is now read-only.

Commit 597cdc1

Browse files
committed
Stop using viewLifecycleScope in DialogFragments
Change-Id: I2fcf2567192257ae0ab05dc30a64a5edb7ea7f3a
1 parent 36f30ad commit 597cdc1

File tree

5 files changed

+70
-43
lines changed

5 files changed

+70
-43
lines changed

mobile/src/main/java/com/google/samples/apps/iosched/ui/map/MapVariantSelectionDialogFragment.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,14 @@ import android.view.WindowManager
2727
import androidx.appcompat.app.AppCompatDialogFragment
2828
import androidx.core.view.updateLayoutParams
2929
import androidx.fragment.app.viewModels
30+
import androidx.lifecycle.Lifecycle
31+
import androidx.lifecycle.lifecycleScope
32+
import androidx.lifecycle.repeatOnLifecycle
3033
import androidx.recyclerview.widget.RecyclerView
3134
import com.google.samples.apps.iosched.R
32-
import com.google.samples.apps.iosched.util.launchAndRepeatWithViewLifecycle
3335
import dagger.hilt.android.AndroidEntryPoint
3436
import kotlinx.coroutines.flow.collect
37+
import kotlinx.coroutines.launch
3538

3639
@AndroidEntryPoint
3740
class MapVariantSelectionDialogFragment : AppCompatDialogFragment() {
@@ -58,9 +61,11 @@ class MapVariantSelectionDialogFragment : AppCompatDialogFragment() {
5861
adapter = MapVariantAdapter(::selectMapVariant)
5962
view.findViewById<RecyclerView>(R.id.map_variant_list).adapter = adapter
6063

61-
launchAndRepeatWithViewLifecycle {
62-
mapViewModel.mapVariant.collect {
63-
adapter.currentSelection = it
64+
lifecycleScope.launch {
65+
lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
66+
mapViewModel.mapVariant.collect {
67+
adapter.currentSelection = it
68+
}
6469
}
6570
}
6671
}

mobile/src/main/java/com/google/samples/apps/iosched/ui/reservation/RemoveReservationDialogFragment.kt

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,16 @@ import android.view.ViewGroup
2525
import android.widget.Toast
2626
import androidx.appcompat.app.AppCompatDialogFragment
2727
import androidx.fragment.app.viewModels
28+
import androidx.lifecycle.Lifecycle
29+
import androidx.lifecycle.lifecycleScope
30+
import androidx.lifecycle.repeatOnLifecycle
2831
import com.google.android.material.dialog.MaterialAlertDialogBuilder
2932
import com.google.samples.apps.iosched.R
3033
import com.google.samples.apps.iosched.model.SessionId
31-
import com.google.samples.apps.iosched.util.launchAndRepeatWithViewLifecycle
3234
import com.google.samples.apps.iosched.util.makeBold
3335
import dagger.hilt.android.AndroidEntryPoint
3436
import kotlinx.coroutines.flow.collect
37+
import kotlinx.coroutines.launch
3538

3639
/**
3740
* Dialog that confirms the user really wants to cancel their reservation
@@ -86,16 +89,19 @@ class RemoveReservationDialogFragment : AppCompatDialogFragment() {
8689
return super.onCreateView(inflater, container, savedInstanceState)
8790
}
8891

89-
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
90-
super.onViewCreated(view, savedInstanceState)
92+
override fun onCreate(savedInstanceState: Bundle?) {
93+
super.onCreate(savedInstanceState)
9194

92-
launchAndRepeatWithViewLifecycle {
93-
viewModel.snackbarMessages.collect {
94-
// Using Toast instead of Snackbar as it's easier for DialogFragment
95-
Toast.makeText(
96-
view.context, it.messageId,
97-
if (it.longDuration) Toast.LENGTH_LONG else Toast.LENGTH_SHORT
98-
).show()
95+
lifecycleScope.launch {
96+
lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
97+
viewModel.snackbarMessages.collect {
98+
// Using Toast instead of Snackbar as it's easier for DialogFragment
99+
Toast.makeText(
100+
requireContext(),
101+
it.messageId,
102+
if (it.longDuration) Toast.LENGTH_LONG else Toast.LENGTH_SHORT
103+
).show()
104+
}
99105
}
100106
}
101107
}

mobile/src/main/java/com/google/samples/apps/iosched/ui/settings/ThemeSettingDialogFragment.kt

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,15 @@ import android.widget.ArrayAdapter
2222
import androidx.appcompat.app.AlertDialog
2323
import androidx.appcompat.app.AppCompatDialogFragment
2424
import androidx.fragment.app.viewModels
25+
import androidx.lifecycle.Lifecycle
26+
import androidx.lifecycle.lifecycleScope
27+
import androidx.lifecycle.repeatOnLifecycle
2528
import com.google.android.material.dialog.MaterialAlertDialogBuilder
2629
import com.google.samples.apps.iosched.R
2730
import com.google.samples.apps.iosched.model.Theme
28-
import com.google.samples.apps.iosched.util.launchAndRepeatWithViewLifecycle
2931
import dagger.hilt.android.AndroidEntryPoint
3032
import kotlinx.coroutines.flow.collect
33+
import kotlinx.coroutines.launch
3134

3235
@AndroidEntryPoint
3336
class ThemeSettingDialogFragment : AppCompatDialogFragment() {
@@ -58,22 +61,25 @@ class ThemeSettingDialogFragment : AppCompatDialogFragment() {
5861
super.onCreate(savedInstanceState)
5962

6063
// Note you don't need to use viewLifecycleOwner in DialogFragment.
61-
launchAndRepeatWithViewLifecycle {
62-
viewModel.availableThemes.collect { themes ->
63-
listAdapter.clear()
64-
listAdapter.addAll(
65-
themes.map {
66-
theme ->
67-
ThemeHolder(theme, getTitleForTheme(theme))
68-
}
69-
)
70-
71-
updateSelectedItem(viewModel.theme.value)
64+
lifecycleScope.launch {
65+
lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
66+
viewModel.availableThemes.collect { themes ->
67+
listAdapter.clear()
68+
listAdapter.addAll(
69+
themes.map { theme ->
70+
ThemeHolder(theme, getTitleForTheme(theme))
71+
}
72+
)
73+
74+
updateSelectedItem(viewModel.theme.value)
75+
}
7276
}
7377
}
7478

75-
launchAndRepeatWithViewLifecycle {
76-
viewModel.theme.collect { updateSelectedItem(it) }
79+
lifecycleScope.launch {
80+
lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
81+
viewModel.theme.collect { updateSelectedItem(it) }
82+
}
7783
}
7884
}
7985

mobile/src/main/java/com/google/samples/apps/iosched/ui/signin/SignInDialogFragment.kt

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,17 @@ import android.view.ViewGroup
2424
import androidx.appcompat.app.AlertDialog
2525
import androidx.appcompat.app.AppCompatDialogFragment
2626
import androidx.fragment.app.viewModels
27+
import androidx.lifecycle.Lifecycle
28+
import androidx.lifecycle.lifecycleScope
29+
import androidx.lifecycle.repeatOnLifecycle
2730
import com.google.android.material.dialog.MaterialAlertDialogBuilder
2831
import com.google.samples.apps.iosched.databinding.DialogSignInBinding
2932
import com.google.samples.apps.iosched.ui.signin.SignInNavigationAction.RequestSignIn
3033
import com.google.samples.apps.iosched.util.executeAfter
31-
import com.google.samples.apps.iosched.util.launchAndRepeatWithViewLifecycle
3234
import com.google.samples.apps.iosched.util.signin.SignInHandler
3335
import dagger.hilt.android.AndroidEntryPoint
3436
import kotlinx.coroutines.flow.collect
37+
import kotlinx.coroutines.launch
3538
import javax.inject.Inject
3639

3740
/**
@@ -66,14 +69,16 @@ class SignInDialogFragment : AppCompatDialogFragment() {
6669
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
6770
super.onViewCreated(view, savedInstanceState)
6871

69-
launchAndRepeatWithViewLifecycle {
70-
signInViewModel.signInNavigationActions.collect { action ->
71-
if (action == RequestSignIn) {
72-
activity?.startActivityForResult(
73-
signInHandler.makeSignInIntent(),
74-
REQUEST_CODE_SIGN_IN
75-
)
76-
dismiss()
72+
lifecycleScope.launch {
73+
lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
74+
signInViewModel.signInNavigationActions.collect { action ->
75+
if (action == RequestSignIn) {
76+
activity?.startActivityForResult(
77+
signInHandler.makeSignInIntent(),
78+
REQUEST_CODE_SIGN_IN
79+
)
80+
dismiss()
81+
}
7782
}
7883
}
7984
}

mobile/src/main/java/com/google/samples/apps/iosched/ui/signin/SignOutDialogFragment.kt

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,18 @@ import androidx.appcompat.app.AppCompatDialogFragment
2727
import androidx.core.view.isGone
2828
import androidx.databinding.BindingAdapter
2929
import androidx.fragment.app.viewModels
30+
import androidx.lifecycle.Lifecycle
31+
import androidx.lifecycle.lifecycleScope
32+
import androidx.lifecycle.repeatOnLifecycle
3033
import com.google.android.material.dialog.MaterialAlertDialogBuilder
3134
import com.google.samples.apps.iosched.databinding.DialogSignOutBinding
3235
import com.google.samples.apps.iosched.shared.data.signin.AuthenticatedUserInfo
3336
import com.google.samples.apps.iosched.ui.signin.SignInNavigationAction.RequestSignOut
3437
import com.google.samples.apps.iosched.util.executeAfter
35-
import com.google.samples.apps.iosched.util.launchAndRepeatWithViewLifecycle
3638
import com.google.samples.apps.iosched.util.signin.SignInHandler
3739
import dagger.hilt.android.AndroidEntryPoint
3840
import kotlinx.coroutines.flow.collect
41+
import kotlinx.coroutines.launch
3942
import javax.inject.Inject
4043

4144
/**
@@ -70,11 +73,13 @@ class SignOutDialogFragment : AppCompatDialogFragment() {
7073
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
7174
super.onViewCreated(view, savedInstanceState)
7275

73-
launchAndRepeatWithViewLifecycle {
74-
signInViewModel.signInNavigationActions.collect { action ->
75-
if (action == RequestSignOut) {
76-
signInHandler.signOut(requireContext())
77-
dismiss()
76+
lifecycleScope.launch {
77+
lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
78+
signInViewModel.signInNavigationActions.collect { action ->
79+
if (action == RequestSignOut) {
80+
signInHandler.signOut(requireContext())
81+
dismiss()
82+
}
7883
}
7984
}
8085
}

0 commit comments

Comments
 (0)