feat: add edit group view model arch
This commit is contained in:
parent
d8bc838754
commit
8e1e228946
|
@ -17,7 +17,7 @@ buildscript {
|
|||
plugins {
|
||||
id 'kotlin-kapt'
|
||||
id 'com.google.dagger.hilt.android'
|
||||
id 'com.google.devtools.ksp' version "$kspVersion"
|
||||
id 'com.google.devtools.ksp'
|
||||
id 'app.cash.molecule'
|
||||
}
|
||||
|
||||
|
@ -206,9 +206,9 @@ android {
|
|||
|
||||
dependencies {
|
||||
|
||||
implementation("com.google.dagger:hilt-android:2.46.1")
|
||||
kapt("com.google.dagger:hilt-android-compiler:2.46")
|
||||
implementation("androidx.hilt:hilt-navigation-compose:1.0.0")
|
||||
implementation("com.google.dagger:hilt-android:$daggerVersion")
|
||||
kapt("com.google.dagger:hilt-android-compiler:$daggerVersion")
|
||||
implementation("androidx.hilt:hilt-navigation-compose:1.1.0")
|
||||
|
||||
implementation "io.github.raamcosta.compose-destinations:core:$composeDestinationsVersion"
|
||||
ksp "io.github.raamcosta.compose-destinations:ksp:$composeDestinationsVersion"
|
||||
|
|
|
@ -14,6 +14,7 @@ import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity
|
|||
import org.thoughtcrime.securesms.conversation.v2.ConversationActivityV2
|
||||
import org.thoughtcrime.securesms.database.LokiThreadDatabase
|
||||
import org.thoughtcrime.securesms.database.ThreadDatabase
|
||||
import org.thoughtcrime.securesms.groups.EditClosedGroupActivity
|
||||
import org.thoughtcrime.securesms.groups.EditLegacyClosedGroupActivity
|
||||
import org.thoughtcrime.securesms.showSessionDialog
|
||||
import javax.inject.Inject
|
||||
|
@ -162,10 +163,19 @@ class ConversationSettingsActivity: PassphraseRequiredActionBarActivity(), View.
|
|||
}
|
||||
v === binding.editGroup -> {
|
||||
val recipient = viewModel.recipient ?: return
|
||||
if (!recipient.isClosedGroupRecipient || !recipient.isLegacyClosedGroupRecipient) return
|
||||
val intent = Intent(this, EditLegacyClosedGroupActivity::class.java)
|
||||
val groupID: String = recipient.address.toGroupString()
|
||||
intent.putExtra(EditLegacyClosedGroupActivity.groupIDKey, groupID)
|
||||
|
||||
val intent = when {
|
||||
recipient.isLegacyClosedGroupRecipient -> Intent(this, EditLegacyClosedGroupActivity::class.java).apply {
|
||||
val groupID: String = recipient.address.toGroupString()
|
||||
putExtra(EditLegacyClosedGroupActivity.groupIDKey, groupID)
|
||||
}
|
||||
recipient.isClosedGroupRecipient -> Intent(this, EditClosedGroupActivity::class.java).apply {
|
||||
val groupID = recipient.address.serialize()
|
||||
putExtra(EditClosedGroupActivity.groupIDKey, groupID)
|
||||
}
|
||||
|
||||
else -> return
|
||||
}
|
||||
startActivity(intent)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,10 +32,18 @@ class ConversationSettingsViewModel(
|
|||
}
|
||||
|
||||
fun isUserGroupAdmin(): Boolean = recipient?.let { recipient ->
|
||||
if (!recipient.isLegacyClosedGroupRecipient || !recipient.isClosedGroupRecipient) return@let false
|
||||
val localUserAddress = prefs.getLocalNumber() ?: return@let false
|
||||
val group = storage.getGroup(recipient.address.toGroupString())
|
||||
group?.admins?.contains(Address.fromSerialized(localUserAddress)) ?: false // this will have to be replaced for new closed groups
|
||||
when {
|
||||
recipient.isLegacyClosedGroupRecipient -> {
|
||||
val localUserAddress = prefs.getLocalNumber() ?: return@let false
|
||||
val group = storage.getGroup(recipient.address.toGroupString())
|
||||
group?.admins?.contains(Address.fromSerialized(localUserAddress)) ?: false // this will have to be replaced for new closed groups
|
||||
}
|
||||
recipient.isClosedGroupRecipient -> {
|
||||
val group = storage.getLibSessionClosedGroup(recipient.address.serialize()) ?: return@let false
|
||||
group.hasAdminKey()
|
||||
}
|
||||
else -> false
|
||||
}
|
||||
} ?: false
|
||||
|
||||
fun clearMessages(forAll: Boolean) {
|
||||
|
|
|
@ -2,17 +2,23 @@ package org.thoughtcrime.securesms.groups
|
|||
|
||||
import android.os.Bundle
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.lifecycle.viewmodel.viewModelFactory
|
||||
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.EditGroupViewModel
|
||||
import org.thoughtcrime.securesms.ui.AppTheme
|
||||
import javax.inject.Inject
|
||||
|
||||
@AndroidEntryPoint
|
||||
class EditClosedGroupActivity: PassphraseRequiredActionBarActivity() {
|
||||
|
||||
companion object {
|
||||
const val groupIDKey = "EditClosedGroupActivity_groupID"
|
||||
}
|
||||
|
||||
@Inject lateinit var factory: EditGroupViewModel.Factory
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?, ready: Boolean) {
|
||||
setContent {
|
||||
AppTheme {
|
||||
|
@ -20,7 +26,7 @@ class EditClosedGroupActivity: PassphraseRequiredActionBarActivity() {
|
|||
navGraph = NavGraphs.editGroup,
|
||||
dependenciesContainerBuilder = {
|
||||
dependency(NavGraphs.editGroup) {
|
||||
EditGroupViewModel.Factory()
|
||||
factory.create(intent.getStringExtra(groupIDKey)!!)
|
||||
}
|
||||
}
|
||||
)
|
||||
|
|
|
@ -1,23 +1,25 @@
|
|||
package org.thoughtcrime.securesms.groups.compose
|
||||
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.material.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import app.cash.molecule.RecompositionMode
|
||||
import app.cash.molecule.RecompositionMode.Immediate
|
||||
import app.cash.molecule.launchMolecule
|
||||
import com.google.android.gms.auth.api.signin.internal.Storage
|
||||
import com.ramcosta.composedestinations.annotation.Destination
|
||||
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.channels.Channel
|
||||
import kotlinx.coroutines.flow.consumeAsFlow
|
||||
import dagger.assisted.Assisted
|
||||
import dagger.assisted.AssistedFactory
|
||||
import dagger.assisted.AssistedInject
|
||||
import org.session.libsession.database.StorageProtocol
|
||||
import javax.inject.Inject
|
||||
|
||||
@EditGroupNavGraph(start = true)
|
||||
@Composable
|
||||
|
@ -27,20 +29,53 @@ fun EditClosedGroupScreen(
|
|||
viewModel: EditGroupViewModel
|
||||
) {
|
||||
|
||||
val group by viewModel.viewState.collectAsState()
|
||||
val viewState = group.viewState
|
||||
val eventSink = group.eventSink
|
||||
|
||||
when (viewState) {
|
||||
is EditGroupViewState.Display -> {
|
||||
Text(
|
||||
text = viewState.text,
|
||||
modifier = Modifier.fillMaxSize()
|
||||
.clickable {
|
||||
eventSink(Unit)
|
||||
}
|
||||
)
|
||||
}
|
||||
else -> {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@HiltViewModel
|
||||
class EditGroupViewModel @Inject constructor(private val groupSessionId: String,
|
||||
private val storage: StorageProtocol): ViewModel() {
|
||||
class EditGroupViewModel @AssistedInject constructor(
|
||||
@Assisted private val groupSessionId: String,
|
||||
private val storage: StorageProtocol): ViewModel() {
|
||||
|
||||
val viewState = viewModelScope.launchMolecule(Immediate) {
|
||||
|
||||
val closedGroup = remember {
|
||||
// storage.getLibSessionClosedGroup()
|
||||
storage.getLibSessionClosedGroup(groupSessionId)
|
||||
}
|
||||
|
||||
var displayText by remember {
|
||||
mutableStateOf(closedGroup!!.groupSessionId.hexString())
|
||||
}
|
||||
|
||||
EditGroupState(EditGroupViewState.Display(displayText)) { event ->
|
||||
when (event) {
|
||||
Unit -> displayText = "different"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@AssistedFactory
|
||||
interface Factory {
|
||||
fun create(groupSessionId: String): EditGroupViewModel
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -52,4 +87,5 @@ data class EditGroupState(
|
|||
|
||||
sealed class EditGroupViewState {
|
||||
data object NoOp: EditGroupViewState()
|
||||
data class Display(val text: String) : EditGroupViewState()
|
||||
}
|
|
@ -23,7 +23,8 @@ buildscript {
|
|||
}
|
||||
|
||||
plugins{
|
||||
id("com.google.dagger.hilt.android") version "2.44" apply false
|
||||
id("com.google.dagger.hilt.android") version "2.48.1" apply false
|
||||
id 'com.google.devtools.ksp' version "$kspVersion" apply false
|
||||
}
|
||||
|
||||
allprojects {
|
||||
|
|
|
@ -26,7 +26,7 @@ appcompatVersion=1.6.1
|
|||
coreVersion=1.8.0
|
||||
coroutinesVersion=1.6.4
|
||||
curve25519Version=0.6.0
|
||||
daggerVersion=2.46.1
|
||||
daggerVersion=2.48.1
|
||||
glideVersion=4.16.0
|
||||
jacksonDatabindVersion=2.9.8
|
||||
junitVersion=4.13.2
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#Thu Dec 30 07:09:53 SAST 2021
|
||||
#Thu Nov 09 11:27:58 AEDT 2023
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
|
||||
distributionPath=wrapper/dists
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
|
Loading…
Reference in New Issue