feat: add navigating to edit group invite screen
This commit is contained in:
parent
6f3238795d
commit
9275a2b0ec
|
@ -6,6 +6,7 @@ import com.ramcosta.composedestinations.DestinationsNavHost
|
|||
import com.ramcosta.composedestinations.navigation.dependency
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity
|
||||
import org.thoughtcrime.securesms.groups.compose.EditGroupInviteViewModel
|
||||
import org.thoughtcrime.securesms.groups.compose.EditGroupViewModel
|
||||
import org.thoughtcrime.securesms.groups.destinations.EditClosedGroupScreenDestination
|
||||
import org.thoughtcrime.securesms.ui.AppTheme
|
||||
|
@ -18,7 +19,8 @@ class EditClosedGroupActivity: PassphraseRequiredActionBarActivity() {
|
|||
const val groupIDKey = "EditClosedGroupActivity_groupID"
|
||||
}
|
||||
|
||||
@Inject lateinit var factory: EditGroupViewModel.Factory
|
||||
@Inject lateinit var editFactory: EditGroupViewModel.Factory
|
||||
@Inject lateinit var inviteFactory: EditGroupInviteViewModel.Factory
|
||||
|
||||
private fun onFinish() {
|
||||
finish()
|
||||
|
@ -32,7 +34,10 @@ class EditClosedGroupActivity: PassphraseRequiredActionBarActivity() {
|
|||
navGraph = NavGraphs.editGroup,
|
||||
dependenciesContainerBuilder = {
|
||||
dependency(NavGraphs.editGroup) {
|
||||
factory.create(intent.getStringExtra(groupIDKey)!!)
|
||||
editFactory.create(intent.getStringExtra(groupIDKey)!!)
|
||||
}
|
||||
dependency(NavGraphs.editGroup) {
|
||||
inviteFactory.create(intent.getStringExtra(groupIDKey)!!)
|
||||
}
|
||||
dependency(EditClosedGroupScreenDestination) {
|
||||
::onFinish
|
||||
|
|
|
@ -1,14 +1,17 @@
|
|||
package org.thoughtcrime.securesms.groups.compose
|
||||
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.fillMaxHeight
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.material.OutlinedButton
|
||||
import androidx.compose.material.Icon
|
||||
import androidx.compose.material.MaterialTheme
|
||||
import androidx.compose.material.Scaffold
|
||||
import androidx.compose.material.Text
|
||||
import androidx.compose.material.rememberScaffoldState
|
||||
|
@ -17,9 +20,9 @@ import androidx.compose.runtime.collectAsState
|
|||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.saveable.rememberSaveable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Alignment.Companion.CenterVertically
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
|
@ -38,7 +41,8 @@ import dagger.assisted.AssistedInject
|
|||
import network.loki.messenger.R
|
||||
import network.loki.messenger.libsession_util.util.GroupMember
|
||||
import org.session.libsession.database.StorageProtocol
|
||||
import org.thoughtcrime.securesms.ui.Divider
|
||||
import org.thoughtcrime.securesms.groups.destinations.EditClosedGroupInviteScreenDestination
|
||||
import org.thoughtcrime.securesms.ui.CellWithPaddingAndMargin
|
||||
import org.thoughtcrime.securesms.ui.NavigationBar
|
||||
import org.thoughtcrime.securesms.ui.PreviewTheme
|
||||
|
||||
|
@ -50,7 +54,6 @@ fun EditClosedGroupScreen(
|
|||
viewModel: EditGroupViewModel,
|
||||
onFinish: () -> Unit
|
||||
) {
|
||||
|
||||
val group by viewModel.viewState.collectAsState()
|
||||
val viewState = group.viewState
|
||||
val eventSink = group.eventSink
|
||||
|
@ -59,8 +62,20 @@ fun EditClosedGroupScreen(
|
|||
onBack = {
|
||||
onFinish()
|
||||
},
|
||||
onInvite = {
|
||||
navigator.navigate(EditClosedGroupInviteScreenDestination)
|
||||
},
|
||||
viewState = viewState as EditGroupViewState.Group
|
||||
)
|
||||
}
|
||||
|
||||
@EditGroupNavGraph
|
||||
@Composable
|
||||
@Destination
|
||||
fun EditClosedGroupInviteScreen(
|
||||
navigator: DestinationsNavigator,
|
||||
viewModel: EditGroupInviteViewModel,
|
||||
) {
|
||||
|
||||
}
|
||||
|
||||
|
@ -116,9 +131,23 @@ class EditGroupViewModel @AssistedInject constructor(
|
|||
|
||||
}
|
||||
|
||||
class EditGroupInviteViewModel @AssistedInject constructor(
|
||||
@Assisted private val groupSessionId: String,
|
||||
private val storage: StorageProtocol
|
||||
): ViewModel() {
|
||||
|
||||
|
||||
@AssistedFactory
|
||||
interface Factory {
|
||||
fun create(groupSessionId: String): EditGroupInviteViewModel
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun EditGroupView(
|
||||
onBack: ()->Unit,
|
||||
onInvite: ()->Unit,
|
||||
viewState: EditGroupViewState.Group,
|
||||
) {
|
||||
val scaffoldState = rememberScaffoldState()
|
||||
|
@ -128,20 +157,10 @@ fun EditGroupView(
|
|||
topBar = {
|
||||
NavigationBar(
|
||||
title = stringResource(id = R.string.activity_edit_closed_group_title),
|
||||
onBack = onBack
|
||||
) {
|
||||
Text(
|
||||
text = stringResource(id = R.string.menu_done_button),
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(2.dp)
|
||||
.align(Alignment.Center),
|
||||
textAlign = TextAlign.Center,
|
||||
fontSize = 16.sp,
|
||||
fontWeight = FontWeight.Bold
|
||||
onBack = onBack,
|
||||
actionElement = {}
|
||||
)
|
||||
}
|
||||
}
|
||||
) { paddingValues ->
|
||||
Column(modifier = Modifier.padding(paddingValues)) {
|
||||
// Group name title
|
||||
|
@ -149,36 +168,36 @@ fun EditGroupView(
|
|||
text = viewState.groupName,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(8.dp),
|
||||
.padding(16.dp),
|
||||
fontSize = 26.sp,
|
||||
fontWeight = FontWeight.Bold,
|
||||
textAlign = TextAlign.Center
|
||||
)
|
||||
// members header
|
||||
Divider()
|
||||
// Description
|
||||
|
||||
// Invite
|
||||
if (viewState.admin) {
|
||||
CellWithPaddingAndMargin(margin = 16.dp, padding = 16.dp) {
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.height(60.dp)
|
||||
.clickable(onClick = onInvite)
|
||||
.padding(horizontal = 8.dp),
|
||||
verticalAlignment = CenterVertically,
|
||||
) {
|
||||
Icon(painterResource(id = R.drawable.ic_add_admins), contentDescription = null)
|
||||
Spacer(modifier = Modifier.size(8.dp))
|
||||
Text(text = stringResource(id = R.string.activity_edit_closed_group_add_members))
|
||||
}
|
||||
}
|
||||
}
|
||||
// members header
|
||||
Text(
|
||||
text = stringResource(id = R.string.activity_edit_closed_group_edit_members),
|
||||
text = stringResource(id = R.string.conversation_settings_group_members),
|
||||
style = MaterialTheme.typography.subtitle2,
|
||||
modifier = Modifier
|
||||
.weight(1f)
|
||||
.padding(horizontal = 24.dp)
|
||||
.align(CenterVertically),
|
||||
.padding(vertical = 8.dp, horizontal = 32.dp)
|
||||
)
|
||||
// if admin add member outline button TODO
|
||||
if (viewState.admin) {
|
||||
OutlinedButton(onClick = { /*TODO*/ }) {
|
||||
Text(
|
||||
text = stringResource(id = R.string.activity_edit_closed_group_add_members),
|
||||
modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
Divider()
|
||||
LazyColumn(modifier = Modifier) {
|
||||
|
||||
items(viewState.memberStateList) { member ->
|
||||
|
@ -273,10 +292,14 @@ fun PreviewList() {
|
|||
"Preview",
|
||||
"This is a preview description",
|
||||
listOf(oneMember),
|
||||
false
|
||||
true
|
||||
)
|
||||
|
||||
PreviewTheme(themeResId = R.style.Ocean_Dark) {
|
||||
EditGroupView(onBack = { /*TODO*/ }, viewState =viewState)
|
||||
PreviewTheme(themeResId = R.style.Classic_Dark) {
|
||||
EditGroupView(
|
||||
onBack = {},
|
||||
onInvite = {},
|
||||
viewState = viewState
|
||||
)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue