Skip to content

Commit ce9ffb8

Browse files
Merge pull request #1676 from session-foundation/feature/pro-logic
Feature/pro logic
2 parents 6391667 + 301a10b commit ce9ffb8

File tree

22 files changed

+418
-276
lines changed

22 files changed

+418
-276
lines changed

app/src/main/java/org/thoughtcrime/securesms/conversation/v2/settings/ConversationSettingsNavHost.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,8 @@ fun ConversationSettingsNavHost(
135135
is NavigationAction.ReturnResult -> {
136136
returnResult(action.code, action.value)
137137
}
138+
139+
else -> {}
138140
}
139141
}
140142

app/src/main/java/org/thoughtcrime/securesms/debugmenu/DebugMenuNavHost.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ fun DebugMenuNavHost(
6666
navController.context.startActivity(action.intent)
6767
}
6868

69-
is NavigationAction.ReturnResult -> {}
69+
else -> {}
7070
}
7171
}
7272

app/src/main/java/org/thoughtcrime/securesms/home/startconversation/StartConversationSheet.kt

Lines changed: 101 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -111,133 +111,131 @@ fun StartConversationNavHost(
111111
accountId: String,
112112
onClose: () -> Unit
113113
){
114-
SharedTransitionLayout {
115-
val navController = rememberNavController()
116-
val navigator: UINavigator<StartConversationDestination> =
117-
remember { UINavigator() }
118-
119-
ObserveAsEvents(flow = navigator.navigationActions) { action ->
120-
when (action) {
121-
is NavigationAction.Navigate -> navController.navigate(
122-
action.destination
123-
) {
124-
action.navOptions(this)
125-
}
126-
127-
NavigationAction.NavigateUp -> navController.navigateUp()
114+
val navController = rememberNavController()
115+
val navigator: UINavigator<StartConversationDestination> =
116+
remember { UINavigator() }
117+
118+
ObserveAsEvents(flow = navigator.navigationActions) { action ->
119+
when (action) {
120+
is NavigationAction.Navigate -> navController.navigate(
121+
action.destination
122+
) {
123+
action.navOptions(this)
124+
}
128125

129-
is NavigationAction.NavigateToIntent -> {
130-
navController.context.startActivity(action.intent)
131-
}
126+
NavigationAction.NavigateUp -> navController.navigateUp()
132127

133-
is NavigationAction.ReturnResult -> {}
128+
is NavigationAction.NavigateToIntent -> {
129+
navController.context.startActivity(action.intent)
134130
}
131+
132+
else -> {}
135133
}
134+
}
136135

137-
val scope = rememberCoroutineScope()
138-
val activity = LocalActivity.current
139-
val context = LocalContext.current
136+
val scope = rememberCoroutineScope()
137+
val activity = LocalActivity.current
138+
val context = LocalContext.current
139+
140+
NavHost(navController = navController, startDestination = StartConversationDestination.Home) {
141+
// Home
142+
horizontalSlideComposable<StartConversationDestination.Home> {
143+
StartConversationScreen (
144+
accountId = accountId,
145+
onClose = onClose,
146+
navigateTo = {
147+
scope.launch { navigator.navigate(it) }
148+
}
149+
)
150+
}
140151

141-
NavHost(navController = navController, startDestination = StartConversationDestination.Home) {
142-
// Home
143-
horizontalSlideComposable<StartConversationDestination.Home> {
144-
StartConversationScreen (
145-
accountId = accountId,
146-
onClose = onClose,
147-
navigateTo = {
148-
scope.launch { navigator.navigate(it) }
149-
}
150-
)
151-
}
152+
// New Message
153+
horizontalSlideComposable<StartConversationDestination.NewMessage> {
154+
val viewModel = hiltViewModel<NewMessageViewModel>()
155+
val uiState by viewModel.state.collectAsState(State())
156+
157+
val helpUrl = "https://getsession.org/account-ids"
152158

153-
// New Message
154-
horizontalSlideComposable<StartConversationDestination.NewMessage> {
155-
val viewModel = hiltViewModel<NewMessageViewModel>()
156-
val uiState by viewModel.state.collectAsState(State())
157-
158-
val helpUrl = "https://getsession.org/account-ids"
159-
160-
LaunchedEffect(Unit) {
161-
scope.launch {
162-
viewModel.success.collect {
163-
context.startActivity(
164-
ConversationActivityV2.createIntent(
165-
context,
166-
address = it.address
167-
)
159+
LaunchedEffect(Unit) {
160+
scope.launch {
161+
viewModel.success.collect {
162+
context.startActivity(
163+
ConversationActivityV2.createIntent(
164+
context,
165+
address = it.address
168166
)
167+
)
169168

170-
onClose()
171-
}
169+
onClose()
172170
}
173171
}
174-
175-
NewMessage(
176-
uiState,
177-
viewModel.qrErrors,
178-
viewModel,
179-
onBack = { scope.launch { navigator.navigateUp() } },
180-
onClose = onClose,
181-
onHelp = { viewModel.onCommand(NewMessageViewModel.Commands.ShowUrlDialog) }
182-
)
183-
if (uiState.showUrlDialog) {
184-
OpenURLAlertDialog(
185-
url = helpUrl,
186-
onDismissRequest = { viewModel.onCommand(NewMessageViewModel.Commands.DismissUrlDialog) }
187-
)
188-
}
189172
}
190173

191-
// Create Group
192-
horizontalSlideComposable<StartConversationDestination.CreateGroup> {
193-
CreateGroupScreen(
194-
onNavigateToConversationScreen = { address ->
195-
activity?.startActivity(
196-
ConversationActivityV2.createIntent(activity, address)
197-
)
198-
},
199-
onBack = { scope.launch { navigator.navigateUp() }},
200-
onClose = onClose,
201-
fromLegacyGroupId = null,
174+
NewMessage(
175+
uiState,
176+
viewModel.qrErrors,
177+
viewModel,
178+
onBack = { scope.launch { navigator.navigateUp() } },
179+
onClose = onClose,
180+
onHelp = { viewModel.onCommand(NewMessageViewModel.Commands.ShowUrlDialog) }
181+
)
182+
if (uiState.showUrlDialog) {
183+
OpenURLAlertDialog(
184+
url = helpUrl,
185+
onDismissRequest = { viewModel.onCommand(NewMessageViewModel.Commands.DismissUrlDialog) }
202186
)
203187
}
188+
}
189+
190+
// Create Group
191+
horizontalSlideComposable<StartConversationDestination.CreateGroup> {
192+
CreateGroupScreen(
193+
onNavigateToConversationScreen = { address ->
194+
activity?.startActivity(
195+
ConversationActivityV2.createIntent(activity, address)
196+
)
197+
},
198+
onBack = { scope.launch { navigator.navigateUp() }},
199+
onClose = onClose,
200+
fromLegacyGroupId = null,
201+
)
202+
}
204203

205-
// Join Community
206-
horizontalSlideComposable<StartConversationDestination.JoinCommunity> {
207-
val viewModel = hiltViewModel<JoinCommunityViewModel>()
208-
val state by viewModel.state.collectAsState()
209-
210-
LaunchedEffect(Unit){
211-
scope.launch {
212-
viewModel.uiEvents.collect {
213-
when(it){
214-
is JoinCommunityViewModel.UiEvent.NavigateToConversation -> {
215-
onClose()
216-
activity?.startActivity(ConversationActivityV2.createIntent(activity, it.address))
217-
}
204+
// Join Community
205+
horizontalSlideComposable<StartConversationDestination.JoinCommunity> {
206+
val viewModel = hiltViewModel<JoinCommunityViewModel>()
207+
val state by viewModel.state.collectAsState()
208+
209+
LaunchedEffect(Unit){
210+
scope.launch {
211+
viewModel.uiEvents.collect {
212+
when(it){
213+
is JoinCommunityViewModel.UiEvent.NavigateToConversation -> {
214+
onClose()
215+
activity?.startActivity(ConversationActivityV2.createIntent(activity, it.address))
218216
}
219217
}
220218
}
221219
}
222-
223-
JoinCommunityScreen(
224-
state = state,
225-
sendCommand = { viewModel.onCommand(it) },
226-
onBack = { scope.launch { navigator.navigateUp() }},
227-
onClose = onClose
228-
)
229220
}
230221

231-
// Invite Friend
232-
horizontalSlideComposable<StartConversationDestination.InviteFriend> {
233-
InviteFriend(
234-
accountId = accountId,
235-
onBack = { scope.launch { navigator.navigateUp() }},
236-
onClose = onClose
237-
)
238-
}
222+
JoinCommunityScreen(
223+
state = state,
224+
sendCommand = { viewModel.onCommand(it) },
225+
onBack = { scope.launch { navigator.navigateUp() }},
226+
onClose = onClose
227+
)
228+
}
239229

230+
// Invite Friend
231+
horizontalSlideComposable<StartConversationDestination.InviteFriend> {
232+
InviteFriend(
233+
accountId = accountId,
234+
onBack = { scope.launch { navigator.navigateUp() }},
235+
onClose = onClose
236+
)
240237
}
238+
241239
}
242240
}
243241

app/src/main/java/org/thoughtcrime/securesms/preferences/prosettings/BaseProSettingsScreens.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@ import androidx.compose.foundation.layout.Row
1313
import androidx.compose.foundation.layout.Spacer
1414
import androidx.compose.foundation.layout.WindowInsets
1515
import androidx.compose.foundation.layout.WindowInsetsSides
16+
import androidx.compose.foundation.layout.asPaddingValues
1617
import androidx.compose.foundation.layout.consumeWindowInsets
1718
import androidx.compose.foundation.layout.fillMaxWidth
1819
import androidx.compose.foundation.layout.height
1920
import androidx.compose.foundation.layout.only
2021
import androidx.compose.foundation.layout.padding
22+
import androidx.compose.foundation.layout.safeDrawing
2123
import androidx.compose.foundation.layout.size
2224
import androidx.compose.foundation.layout.systemBars
2325
import androidx.compose.foundation.layout.widthIn
@@ -107,15 +109,16 @@ fun BaseProSettingsScreen(
107109
onBack = onBack,
108110
)
109111
}} else {{}},
110-
contentWindowInsets = WindowInsets.systemBars.only(WindowInsetsSides.Horizontal),
112+
contentWindowInsets = WindowInsets.systemBars,
111113
) { paddings ->
112114
LazyColumn(
113115
modifier = Modifier
114116
.fillMaxWidth()
115-
.consumeWindowInsets(paddings)
116-
.padding(horizontal = LocalDimensions.current.spacing),
117+
.consumeWindowInsets(paddings),
117118
state = lazyListState,
118119
contentPadding = PaddingValues(
120+
start = LocalDimensions.current.spacing,
121+
end = LocalDimensions.current.spacing,
119122
top = (paddings.calculateTopPadding() - LocalDimensions.current.appBarHeight)
120123
.coerceAtLeast(0.dp) + 46.dp,
121124
bottom = paddings.calculateBottomPadding() + LocalDimensions.current.spacing

app/src/main/java/org/thoughtcrime/securesms/preferences/prosettings/PlanConfirmationScreen.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.thoughtcrime.securesms.preferences.prosettings
22

3+
import androidx.activity.compose.BackHandler
34
import androidx.compose.animation.ExperimentalSharedTransitionApi
45
import androidx.compose.foundation.layout.Column
56
import androidx.compose.foundation.layout.Spacer
@@ -37,7 +38,6 @@ import org.session.libsession.utilities.StringSubstitutionConstants.DATE_KEY
3738
import org.session.libsession.utilities.StringSubstitutionConstants.NETWORK_NAME_KEY
3839
import org.session.libsession.utilities.StringSubstitutionConstants.PRO_KEY
3940
import org.session.libsession.utilities.recipients.ProStatus
40-
import org.thoughtcrime.securesms.preferences.prosettings.ProSettingsViewModel.Commands.GoToProSettings
4141
import org.thoughtcrime.securesms.pro.SubscriptionDetails
4242
import org.thoughtcrime.securesms.pro.SubscriptionState
4343
import org.thoughtcrime.securesms.pro.SubscriptionType
@@ -79,6 +79,10 @@ fun PlanConfirmation(
7979
sendCommand: (ProSettingsViewModel.Commands) -> Unit,
8080
onBack: () -> Unit,
8181
) {
82+
BackHandler {
83+
sendCommand(ProSettingsViewModel.Commands.OnPostPlanConfirmation)
84+
}
85+
8286
Scaffold(
8387
topBar = {},
8488
contentWindowInsets = WindowInsets.systemBars.only(WindowInsetsSides.Horizontal),
@@ -163,7 +167,7 @@ fun PlanConfirmation(
163167
.widthIn(max = LocalDimensions.current.maxContentWidth),
164168
text = buttonLabel,
165169
onClick = {
166-
sendCommand(GoToProSettings)
170+
sendCommand(ProSettingsViewModel.Commands.OnPostPlanConfirmation)
167171
}
168172
)
169173

app/src/main/java/org/thoughtcrime/securesms/preferences/prosettings/ProSettingsHomeScreen.kt

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -790,6 +790,22 @@ fun ProManage(
790790
}
791791
)
792792
}
793+
794+
val recoverButton: @Composable ()->Unit = {
795+
IconActionRowItem(
796+
title = annotatedStringResource(
797+
Phrase.from(LocalContext.current, R.string.proAccessRecover)
798+
.put(PRO_KEY, NonTranslatableStringConstants.PRO)
799+
.format().toString()
800+
),
801+
icon = R.drawable.ic_refresh_cw,
802+
qaTag = R.string.qa_pro_settings_action_request_refund,
803+
onClick = {
804+
//todo PRO implement
805+
}
806+
)
807+
}
808+
793809
when(data){
794810
is SubscriptionType.Active.AutoRenewing -> {
795811
IconActionRowItem(
@@ -814,6 +830,10 @@ fun ProManage(
814830
refundButton()
815831
}
816832

833+
is SubscriptionType.NeverSubscribed -> {
834+
recoverButton()
835+
}
836+
817837
is SubscriptionType.Expired -> {
818838
// the details depend on the loading/error state
819839
fun renewIcon(color: Color): @Composable BoxScope.() -> Unit = {
@@ -871,18 +891,7 @@ fun ProManage(
871891
)
872892

873893
Divider()
874-
IconActionRowItem(
875-
title = annotatedStringResource(
876-
Phrase.from(LocalContext.current, R.string.proAccessRecover)
877-
.put(PRO_KEY, NonTranslatableStringConstants.PRO)
878-
.format().toString()
879-
),
880-
icon = R.drawable.ic_refresh_cw,
881-
qaTag = R.string.qa_pro_settings_action_request_refund,
882-
onClick = {
883-
//todo PRO implement
884-
}
885-
)
894+
recoverButton()
886895
}
887896

888897
is SubscriptionType.NeverSubscribed -> {}
@@ -899,15 +908,13 @@ fun ProSettingsFooter(
899908
sendCommand: (ProSettingsViewModel.Commands) -> Unit,
900909
) {
901910
// Manage Pro - Pro
902-
if(subscriptionType is SubscriptionType.Active){
903-
Spacer(Modifier.height(LocalDimensions.current.smallSpacing))
904-
ProManage(
905-
data = subscriptionType,
906-
inSheet = inSheet,
907-
subscriptionRefreshState = subscriptionRefreshState,
908-
sendCommand = sendCommand,
909-
)
910-
}
911+
Spacer(Modifier.height(LocalDimensions.current.smallSpacing))
912+
ProManage(
913+
data = subscriptionType,
914+
inSheet = inSheet,
915+
subscriptionRefreshState = subscriptionRefreshState,
916+
sendCommand = sendCommand,
917+
)
911918

912919
// Help
913920
Spacer(Modifier.height(LocalDimensions.current.spacing))

0 commit comments

Comments
 (0)