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