diff --git a/app/build.gradle b/app/build.gradle index 393994bb3..ed3250f0c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -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" diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/settings/ConversationSettingsActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/settings/ConversationSettingsActivity.kt index fcb12972a..68adad62b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/settings/ConversationSettingsActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/settings/ConversationSettingsActivity.kt @@ -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) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/settings/ConversationSettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/settings/ConversationSettingsViewModel.kt index 34b233b16..5d6db570c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/settings/ConversationSettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/settings/ConversationSettingsViewModel.kt @@ -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) { 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 753656cc7..702762b84 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/EditClosedGroupActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/EditClosedGroupActivity.kt @@ -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)!!) } } ) 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 51ec75eb2..2cb5942d9 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,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() } \ No newline at end of file diff --git a/build.gradle b/build.gradle index 207d828cc..aacdac729 100644 --- a/build.gradle +++ b/build.gradle @@ -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 { diff --git a/gradle.properties b/gradle.properties index d3bbae2c7..4dafb9b9a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index cd825d084..2882724e0 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -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