Do not pre-select my story privacy state.
This commit is contained in:
parent
47f1d3f594
commit
5c6f709faa
7 changed files with 40 additions and 12 deletions
|
@ -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,
|
||||
|
|
|
@ -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) }
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
|
|
@ -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())
|
||||
|
|
|
@ -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 ->
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
|
|
@ -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())
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue