@@ -3,6 +3,7 @@ package com.x8bit.bitwarden.ui.auth.feature.newdevicenotice
3
3
import androidx.compose.foundation.Image
4
4
import androidx.compose.foundation.layout.Column
5
5
import androidx.compose.foundation.layout.ColumnScope
6
+ import androidx.compose.foundation.layout.PaddingValues
6
7
import androidx.compose.foundation.layout.Spacer
7
8
import androidx.compose.foundation.layout.fillMaxSize
8
9
import androidx.compose.foundation.layout.height
@@ -24,19 +25,24 @@ import androidx.compose.ui.text.font.FontWeight
24
25
import androidx.compose.ui.text.style.TextAlign
25
26
import androidx.compose.ui.tooling.preview.PreviewScreenSizes
26
27
import androidx.compose.ui.unit.dp
28
+ import androidx.core.net.toUri
27
29
import androidx.hilt.navigation.compose.hiltViewModel
28
30
import androidx.lifecycle.compose.collectAsStateWithLifecycle
29
31
import com.x8bit.bitwarden.R
30
32
import com.x8bit.bitwarden.ui.auth.feature.newdevicenotice.NewDeviceNoticeEmailAccessAction.ContinueClick
31
33
import com.x8bit.bitwarden.ui.auth.feature.newdevicenotice.NewDeviceNoticeEmailAccessAction.EmailAccessToggle
34
+ import com.x8bit.bitwarden.ui.auth.feature.newdevicenotice.NewDeviceNoticeEmailAccessAction.LearnMoreClick
32
35
import com.x8bit.bitwarden.ui.auth.feature.newdevicenotice.NewDeviceNoticeEmailAccessEvent.NavigateToTwoFactorOptions
33
36
import com.x8bit.bitwarden.ui.platform.base.util.EventsEffect
34
37
import com.x8bit.bitwarden.ui.platform.base.util.standardHorizontalMargin
35
38
import com.x8bit.bitwarden.ui.platform.base.util.toAnnotatedString
36
39
import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledButton
37
40
import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold
41
+ import com.x8bit.bitwarden.ui.platform.components.text.BitwardenClickableText
38
42
import com.x8bit.bitwarden.ui.platform.components.toggle.BitwardenSwitch
39
43
import com.x8bit.bitwarden.ui.platform.components.util.rememberVectorPainter
44
+ import com.x8bit.bitwarden.ui.platform.composition.LocalIntentManager
45
+ import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager
40
46
import com.x8bit.bitwarden.ui.platform.theme.BitwardenTheme
41
47
42
48
/* *
@@ -47,12 +53,19 @@ fun NewDeviceNoticeEmailAccessScreen(
47
53
onNavigateBackToVault : () -> Unit ,
48
54
onNavigateToTwoFactorOptions : () -> Unit ,
49
55
viewModel : NewDeviceNoticeEmailAccessViewModel = hiltViewModel(),
56
+ intentManager : IntentManager = LocalIntentManager .current,
50
57
) {
51
58
val state by viewModel.stateFlow.collectAsStateWithLifecycle()
52
59
EventsEffect (viewModel = viewModel) { event ->
53
60
when (event) {
54
61
NavigateToTwoFactorOptions -> onNavigateToTwoFactorOptions()
55
62
NewDeviceNoticeEmailAccessEvent .NavigateBackToVault -> onNavigateBackToVault()
63
+ is NewDeviceNoticeEmailAccessEvent .NavigateToLearnMore -> {
64
+ intentManager.launchUri(
65
+ " https://bitwarden.com/help/new-device-verification/"
66
+ .toUri(),
67
+ )
68
+ }
56
69
}
57
70
}
58
71
@@ -65,7 +78,12 @@ fun NewDeviceNoticeEmailAccessScreen(
65
78
viewModel.trySendAction(EmailAccessToggle (isEnabled = newState))
66
79
}
67
80
},
68
- onContinueClick = { viewModel.trySendAction(ContinueClick ) },
81
+ onContinueClick = remember(viewModel) {
82
+ { viewModel.trySendAction(ContinueClick ) }
83
+ },
84
+ onLearnMoreClick = remember(viewModel) {
85
+ { viewModel.trySendAction(LearnMoreClick ) }
86
+ },
69
87
)
70
88
}
71
89
}
@@ -76,6 +94,7 @@ private fun NewDeviceNoticeEmailAccessContent(
76
94
isEmailAccessEnabled : Boolean ,
77
95
onEmailAccessToggleChanged : (Boolean ) -> Unit ,
78
96
onContinueClick : () -> Unit ,
97
+ onLearnMoreClick : () -> Unit ,
79
98
modifier : Modifier = Modifier ,
80
99
) {
81
100
Column (
@@ -86,7 +105,7 @@ private fun NewDeviceNoticeEmailAccessContent(
86
105
.verticalScroll(state = rememberScrollState()),
87
106
) {
88
107
Spacer (modifier = Modifier .height(104 .dp))
89
- HeaderContent ()
108
+ HeaderContent (onLearnMoreClick = onLearnMoreClick )
90
109
Spacer (modifier = Modifier .height(24 .dp))
91
110
MainContent (
92
111
email = email,
@@ -110,7 +129,9 @@ private fun NewDeviceNoticeEmailAccessContent(
110
129
*/
111
130
@Suppress(" MaxLineLength" )
112
131
@Composable
113
- private fun ColumnScope.HeaderContent () {
132
+ private fun ColumnScope.HeaderContent (
133
+ onLearnMoreClick : () -> Unit ,
134
+ ) {
114
135
Image (
115
136
painter = rememberVectorPainter(id = R .drawable.warning),
116
137
contentDescription = null ,
@@ -132,6 +153,13 @@ private fun ColumnScope.HeaderContent() {
132
153
color = BitwardenTheme .colorScheme.text.primary,
133
154
textAlign = TextAlign .Center ,
134
155
)
156
+ BitwardenClickableText (
157
+ label = stringResource(id = R .string.learn_more),
158
+ onClick = onLearnMoreClick,
159
+ style = BitwardenTheme .typography.labelLarge,
160
+ innerPadding = PaddingValues (vertical = 8 .dp, horizontal = 16 .dp),
161
+ modifier = Modifier .testTag(" LearnMoreLabel" ),
162
+ )
135
163
}
136
164
137
165
/* *
@@ -183,6 +211,7 @@ private fun NewDeviceNoticeEmailAccessScreen_preview() {
183
211
isEmailAccessEnabled = true ,
184
212
onEmailAccessToggleChanged = {},
185
213
onContinueClick = {},
214
+ onLearnMoreClick = {},
186
215
)
187
216
}
188
217
}
0 commit comments