Do not pre-select my story privacy state.

This commit is contained in:
Alex Hart 2022-11-14 09:52:46 -04:00 committed by GitHub
parent 47f1d3f594
commit 5c6f709faa
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 40 additions and 12 deletions

View file

@ -512,6 +512,14 @@ class InternalSettingsFragment : DSLSettingsFragment(R.string.preferences__inter
}
)
clickPref(
title = DSLSettingsText.from("Clear choose initial my story privacy state"),
isEnabled = true,
onClick = {
SignalStore.storyValues().userHasBeenNotifiedAboutStories = false
}
)
clickPref(
title = DSLSettingsText.from("Clear first time navigation state"),
isEnabled = true,

View file

@ -51,7 +51,7 @@ class MyStorySettingsFragment : DSLSettingsFragment(
customPref(
AllSignalConnectionsRowItem.Model(
isChecked = state.myStoryPrivacyState.privacyMode == DistributionListPrivacyMode.ALL,
isChecked = state.myStoryPrivacyState.privacyMode == DistributionListPrivacyMode.ALL && state.hasUserPerformedManualSelection,
count = state.allSignalConnectionsCount,
onRowClicked = {
lifecycleDisposable += viewModel.setMyStoryPrivacyMode(DistributionListPrivacyMode.ALL)
@ -72,7 +72,7 @@ class MyStorySettingsFragment : DSLSettingsFragment(
radioPref(
title = DSLSettingsText.from(R.string.MyStorySettingsFragment__all_except),
summary = exceptText,
isChecked = state.myStoryPrivacyState.privacyMode == DistributionListPrivacyMode.ALL_EXCEPT,
isChecked = state.myStoryPrivacyState.privacyMode == DistributionListPrivacyMode.ALL_EXCEPT && state.hasUserPerformedManualSelection,
onClick = {
lifecycleDisposable += viewModel.setMyStoryPrivacyMode(DistributionListPrivacyMode.ALL_EXCEPT)
.subscribe { findNavController().safeNavigate(R.id.action_myStorySettings_to_allExceptFragment) }
@ -88,7 +88,7 @@ class MyStorySettingsFragment : DSLSettingsFragment(
radioPref(
title = DSLSettingsText.from(R.string.MyStorySettingsFragment__only_share_with),
summary = onlyWithText,
isChecked = state.myStoryPrivacyState.privacyMode == DistributionListPrivacyMode.ONLY_WITH,
isChecked = state.myStoryPrivacyState.privacyMode == DistributionListPrivacyMode.ONLY_WITH && state.hasUserPerformedManualSelection,
onClick = {
lifecycleDisposable += viewModel.setMyStoryPrivacyMode(DistributionListPrivacyMode.ONLY_WITH)
.subscribe { findNavController().safeNavigate(R.id.action_myStorySettings_to_onlyShareWithFragment) }

View file

@ -3,5 +3,6 @@ package org.thoughtcrime.securesms.stories.settings.my
data class MyStorySettingsState(
val myStoryPrivacyState: MyStoryPrivacyState = MyStoryPrivacyState(),
val areRepliesAndReactionsEnabled: Boolean = false,
val allSignalConnectionsCount: Int = 0
val allSignalConnectionsCount: Int = 0,
val hasUserPerformedManualSelection: Boolean
)

View file

@ -6,11 +6,15 @@ import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.core.Completable
import io.reactivex.rxjava3.disposables.CompositeDisposable
import io.reactivex.rxjava3.kotlin.plusAssign
import io.reactivex.rxjava3.schedulers.Schedulers
import org.thoughtcrime.securesms.database.model.DistributionListPrivacyMode
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.stories.Stories
import org.thoughtcrime.securesms.util.livedata.Store
class MyStorySettingsViewModel @JvmOverloads constructor(private val repository: MyStorySettingsRepository = MyStorySettingsRepository()) : ViewModel() {
private val store = Store(MyStorySettingsState())
private val store = Store(MyStorySettingsState(hasUserPerformedManualSelection = SignalStore.storyValues().userHasBeenNotifiedAboutStories))
private val disposables = CompositeDisposable()
val state: LiveData<MyStorySettingsState> = store.stateLiveData
@ -36,8 +40,16 @@ class MyStorySettingsViewModel @JvmOverloads constructor(private val repository:
}
fun setMyStoryPrivacyMode(privacyMode: DistributionListPrivacyMode): Completable {
store.update { state ->
state.copy(hasUserPerformedManualSelection = true)
}
SignalStore.storyValues().userHasBeenNotifiedAboutStories = true
return if (privacyMode == state.value!!.myStoryPrivacyState.privacyMode) {
Completable.complete()
Completable.fromAction {
Stories.onStorySettingsChanged(Recipient.self().id)
}.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
} else {
repository.setPrivacyMode(privacyMode)
.observeOn(AndroidSchedulers.mainThread())

View file

@ -79,9 +79,9 @@ class ChooseInitialMyStoryMembershipBottomSheetDialogFragment :
lifecycleDisposable += viewModel.state
.subscribe { state ->
allRadio.isChecked = state.privacyState.privacyMode == DistributionListPrivacyMode.ALL
allExceptRadio.isChecked = state.privacyState.privacyMode == DistributionListPrivacyMode.ALL_EXCEPT
onlyWitRadio.isChecked = state.privacyState.privacyMode == DistributionListPrivacyMode.ONLY_WITH
allRadio.isChecked = state.privacyState.privacyMode == DistributionListPrivacyMode.ALL && state.hasUserPerformedManualSelection
allExceptRadio.isChecked = state.privacyState.privacyMode == DistributionListPrivacyMode.ALL_EXCEPT && state.hasUserPerformedManualSelection
onlyWitRadio.isChecked = state.privacyState.privacyMode == DistributionListPrivacyMode.ONLY_WITH && state.hasUserPerformedManualSelection
allExceptCount.visible = allExceptRadio.isChecked
onlyWithCount.visible = onlyWitRadio.isChecked
@ -95,7 +95,7 @@ class ChooseInitialMyStoryMembershipBottomSheetDialogFragment :
else -> Unit
}
save.isEnabled = state.recipientId != null
save.isEnabled = state.recipientId != null && state.hasUserPerformedManualSelection
}
val clickListener = { v: View ->

View file

@ -6,5 +6,6 @@ import org.thoughtcrime.securesms.stories.settings.my.MyStoryPrivacyState
data class ChooseInitialMyStoryMembershipState(
val recipientId: RecipientId? = null,
val privacyState: MyStoryPrivacyState = MyStoryPrivacyState(),
val allSignalConnectionsCount: Int = 0
val allSignalConnectionsCount: Int = 0,
val hasUserPerformedManualSelection: Boolean = false
)

View file

@ -6,6 +6,7 @@ import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.core.Single
import io.reactivex.rxjava3.disposables.CompositeDisposable
import io.reactivex.rxjava3.kotlin.plusAssign
import io.reactivex.rxjava3.kotlin.subscribeBy
import org.thoughtcrime.securesms.database.model.DistributionListPrivacyMode
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.recipients.Recipient
@ -26,7 +27,9 @@ class ChooseInitialMyStoryMembershipViewModel @JvmOverloads constructor(
init {
disposables += repository.observeChooseInitialPrivacy()
.distinctUntilChanged()
.subscribe { state -> store.update { state } }
.subscribeBy(onNext = { state ->
store.update { state.copy(hasUserPerformedManualSelection = it.hasUserPerformedManualSelection) }
})
}
override fun onCleared() {
@ -37,6 +40,9 @@ class ChooseInitialMyStoryMembershipViewModel @JvmOverloads constructor(
fun select(selection: DistributionListPrivacyMode): Single<DistributionListPrivacyMode> {
return repository.setPrivacyMode(selection)
.toSingleDefault(selection)
.doAfterSuccess { _ ->
store.update { it.copy(hasUserPerformedManualSelection = true) }
}
.observeOn(AndroidSchedulers.mainThread())
}