1
1
package net.mullvad.mullvadvpn.compose.screen
2
2
3
- import android.os.Build
4
3
import androidx.compose.animation.animateContentSize
5
4
import androidx.compose.foundation.layout.Arrangement
6
5
import androidx.compose.foundation.layout.Column
@@ -20,11 +19,9 @@ import androidx.compose.runtime.getValue
20
19
import androidx.compose.runtime.remember
21
20
import androidx.compose.ui.Alignment
22
21
import androidx.compose.ui.Modifier
23
- import androidx.compose.ui.platform.LocalClipboardManager
24
22
import androidx.compose.ui.platform.LocalContext
25
23
import androidx.compose.ui.res.painterResource
26
24
import androidx.compose.ui.res.stringResource
27
- import androidx.compose.ui.text.AnnotatedString
28
25
import androidx.compose.ui.tooling.preview.Preview
29
26
import androidx.lifecycle.compose.collectAsStateWithLifecycle
30
27
import com.ramcosta.composedestinations.annotation.Destination
@@ -56,6 +53,7 @@ import net.mullvad.mullvadvpn.compose.state.PaymentState
56
53
import net.mullvad.mullvadvpn.compose.transitions.SlideInFromBottomTransition
57
54
import net.mullvad.mullvadvpn.compose.util.LaunchedEffectCollect
58
55
import net.mullvad.mullvadvpn.compose.util.SecureScreenWhileInView
56
+ import net.mullvad.mullvadvpn.compose.util.createCopyToClipboardHandle
59
57
import net.mullvad.mullvadvpn.lib.common.util.openAccountPageInBrowser
60
58
import net.mullvad.mullvadvpn.lib.payment.model.PaymentProduct
61
59
import net.mullvad.mullvadvpn.lib.payment.model.PaymentStatus
@@ -168,29 +166,23 @@ fun AccountScreen(
168
166
SecureScreenWhileInView ()
169
167
170
168
val context = LocalContext .current
171
- val clipboardManager = LocalClipboardManager .current
172
169
val snackbarHostState = remember { SnackbarHostState () }
173
170
val copyTextString = stringResource(id = R .string.copied_mullvad_account_number)
171
+ val copyToClipboard = createCopyToClipboardHandle(snackbarHostState = snackbarHostState)
174
172
LaunchedEffectCollect (uiSideEffect) { sideEffect ->
175
173
when (sideEffect) {
176
174
AccountViewModel .UiSideEffect .NavigateToLogin -> navigateToLogin()
177
175
is AccountViewModel .UiSideEffect .OpenAccountManagementPageInBrowser ->
178
176
context.openAccountPageInBrowser(sideEffect.token)
179
177
is AccountViewModel .UiSideEffect .CopyAccountNumber ->
180
- launch {
181
- clipboardManager.setText(AnnotatedString (sideEffect.accountNumber))
182
-
183
- if (Build .VERSION .SDK_INT < Build .VERSION_CODES .TIRAMISU ) {
184
- snackbarHostState.currentSnackbarData?.dismiss()
185
- snackbarHostState.showSnackbar(message = copyTextString)
186
- }
187
- }
178
+ launch { copyToClipboard(sideEffect.accountNumber, copyTextString) }
188
179
}
189
180
}
190
181
191
182
ScaffoldWithMediumTopBar (
192
183
appBarTitle = stringResource(id = R .string.settings_account),
193
- navigationIcon = { NavigateBackDownIconButton (onBackClick) }
184
+ navigationIcon = { NavigateBackDownIconButton (onBackClick) },
185
+ snackbarHostState = snackbarHostState
194
186
) { modifier ->
195
187
Column (
196
188
horizontalAlignment = Alignment .Start ,
0 commit comments