diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/EditClosedGroupActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/groups/EditClosedGroupActivity.kt index 3ca341910..e86f60c74 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/EditClosedGroupActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/EditClosedGroupActivity.kt @@ -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 diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/compose/EditGroup.kt b/app/src/main/java/org/thoughtcrime/securesms/groups/compose/EditGroup.kt index e5e3ac375..3bcc82e28 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/compose/EditGroup.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/compose/EditGroup.kt @@ -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,19 +157,9 @@ 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)) { @@ -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() - Row( - modifier = Modifier - .fillMaxWidth() - .height(60.dp) - ) { - Text( - text = stringResource(id = R.string.activity_edit_closed_group_edit_members), - modifier = Modifier - .weight(1f) - .padding(horizontal = 24.dp) - .align(CenterVertically), - ) - // 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) - ) + // Description + + // Invite + if (viewState.admin) { + CellWithPaddingAndMargin(margin = 16.dp, padding = 16.dp) { + Row( + modifier = Modifier + .fillMaxWidth() + .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)) } } } - 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) { 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 + ) } } \ No newline at end of file