kopia lustrzana https://github.com/ryukoposting/Signal-Android
Do not pre-select my story privacy state.
rodzic
47f1d3f594
commit
5c6f709faa
|
@ -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(
|
clickPref(
|
||||||
title = DSLSettingsText.from("Clear first time navigation state"),
|
title = DSLSettingsText.from("Clear first time navigation state"),
|
||||||
isEnabled = true,
|
isEnabled = true,
|
||||||
|
|
|
@ -51,7 +51,7 @@ class MyStorySettingsFragment : DSLSettingsFragment(
|
||||||
|
|
||||||
customPref(
|
customPref(
|
||||||
AllSignalConnectionsRowItem.Model(
|
AllSignalConnectionsRowItem.Model(
|
||||||
isChecked = state.myStoryPrivacyState.privacyMode == DistributionListPrivacyMode.ALL,
|
isChecked = state.myStoryPrivacyState.privacyMode == DistributionListPrivacyMode.ALL && state.hasUserPerformedManualSelection,
|
||||||
count = state.allSignalConnectionsCount,
|
count = state.allSignalConnectionsCount,
|
||||||
onRowClicked = {
|
onRowClicked = {
|
||||||
lifecycleDisposable += viewModel.setMyStoryPrivacyMode(DistributionListPrivacyMode.ALL)
|
lifecycleDisposable += viewModel.setMyStoryPrivacyMode(DistributionListPrivacyMode.ALL)
|
||||||
|
@ -72,7 +72,7 @@ class MyStorySettingsFragment : DSLSettingsFragment(
|
||||||
radioPref(
|
radioPref(
|
||||||
title = DSLSettingsText.from(R.string.MyStorySettingsFragment__all_except),
|
title = DSLSettingsText.from(R.string.MyStorySettingsFragment__all_except),
|
||||||
summary = exceptText,
|
summary = exceptText,
|
||||||
isChecked = state.myStoryPrivacyState.privacyMode == DistributionListPrivacyMode.ALL_EXCEPT,
|
isChecked = state.myStoryPrivacyState.privacyMode == DistributionListPrivacyMode.ALL_EXCEPT && state.hasUserPerformedManualSelection,
|
||||||
onClick = {
|
onClick = {
|
||||||
lifecycleDisposable += viewModel.setMyStoryPrivacyMode(DistributionListPrivacyMode.ALL_EXCEPT)
|
lifecycleDisposable += viewModel.setMyStoryPrivacyMode(DistributionListPrivacyMode.ALL_EXCEPT)
|
||||||
.subscribe { findNavController().safeNavigate(R.id.action_myStorySettings_to_allExceptFragment) }
|
.subscribe { findNavController().safeNavigate(R.id.action_myStorySettings_to_allExceptFragment) }
|
||||||
|
@ -88,7 +88,7 @@ class MyStorySettingsFragment : DSLSettingsFragment(
|
||||||
radioPref(
|
radioPref(
|
||||||
title = DSLSettingsText.from(R.string.MyStorySettingsFragment__only_share_with),
|
title = DSLSettingsText.from(R.string.MyStorySettingsFragment__only_share_with),
|
||||||
summary = onlyWithText,
|
summary = onlyWithText,
|
||||||
isChecked = state.myStoryPrivacyState.privacyMode == DistributionListPrivacyMode.ONLY_WITH,
|
isChecked = state.myStoryPrivacyState.privacyMode == DistributionListPrivacyMode.ONLY_WITH && state.hasUserPerformedManualSelection,
|
||||||
onClick = {
|
onClick = {
|
||||||
lifecycleDisposable += viewModel.setMyStoryPrivacyMode(DistributionListPrivacyMode.ONLY_WITH)
|
lifecycleDisposable += viewModel.setMyStoryPrivacyMode(DistributionListPrivacyMode.ONLY_WITH)
|
||||||
.subscribe { findNavController().safeNavigate(R.id.action_myStorySettings_to_onlyShareWithFragment) }
|
.subscribe { findNavController().safeNavigate(R.id.action_myStorySettings_to_onlyShareWithFragment) }
|
||||||
|
|
|
@ -3,5 +3,6 @@ package org.thoughtcrime.securesms.stories.settings.my
|
||||||
data class MyStorySettingsState(
|
data class MyStorySettingsState(
|
||||||
val myStoryPrivacyState: MyStoryPrivacyState = MyStoryPrivacyState(),
|
val myStoryPrivacyState: MyStoryPrivacyState = MyStoryPrivacyState(),
|
||||||
val areRepliesAndReactionsEnabled: Boolean = false,
|
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.core.Completable
|
||||||
import io.reactivex.rxjava3.disposables.CompositeDisposable
|
import io.reactivex.rxjava3.disposables.CompositeDisposable
|
||||||
import io.reactivex.rxjava3.kotlin.plusAssign
|
import io.reactivex.rxjava3.kotlin.plusAssign
|
||||||
|
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||||
import org.thoughtcrime.securesms.database.model.DistributionListPrivacyMode
|
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
|
import org.thoughtcrime.securesms.util.livedata.Store
|
||||||
|
|
||||||
class MyStorySettingsViewModel @JvmOverloads constructor(private val repository: MyStorySettingsRepository = MyStorySettingsRepository()) : ViewModel() {
|
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()
|
private val disposables = CompositeDisposable()
|
||||||
|
|
||||||
val state: LiveData<MyStorySettingsState> = store.stateLiveData
|
val state: LiveData<MyStorySettingsState> = store.stateLiveData
|
||||||
|
@ -36,8 +40,16 @@ class MyStorySettingsViewModel @JvmOverloads constructor(private val repository:
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setMyStoryPrivacyMode(privacyMode: DistributionListPrivacyMode): Completable {
|
fun setMyStoryPrivacyMode(privacyMode: DistributionListPrivacyMode): Completable {
|
||||||
|
store.update { state ->
|
||||||
|
state.copy(hasUserPerformedManualSelection = true)
|
||||||
|
}
|
||||||
|
|
||||||
|
SignalStore.storyValues().userHasBeenNotifiedAboutStories = true
|
||||||
|
|
||||||
return if (privacyMode == state.value!!.myStoryPrivacyState.privacyMode) {
|
return if (privacyMode == state.value!!.myStoryPrivacyState.privacyMode) {
|
||||||
Completable.complete()
|
Completable.fromAction {
|
||||||
|
Stories.onStorySettingsChanged(Recipient.self().id)
|
||||||
|
}.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
|
||||||
} else {
|
} else {
|
||||||
repository.setPrivacyMode(privacyMode)
|
repository.setPrivacyMode(privacyMode)
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
|
|
@ -79,9 +79,9 @@ class ChooseInitialMyStoryMembershipBottomSheetDialogFragment :
|
||||||
|
|
||||||
lifecycleDisposable += viewModel.state
|
lifecycleDisposable += viewModel.state
|
||||||
.subscribe { state ->
|
.subscribe { state ->
|
||||||
allRadio.isChecked = state.privacyState.privacyMode == DistributionListPrivacyMode.ALL
|
allRadio.isChecked = state.privacyState.privacyMode == DistributionListPrivacyMode.ALL && state.hasUserPerformedManualSelection
|
||||||
allExceptRadio.isChecked = state.privacyState.privacyMode == DistributionListPrivacyMode.ALL_EXCEPT
|
allExceptRadio.isChecked = state.privacyState.privacyMode == DistributionListPrivacyMode.ALL_EXCEPT && state.hasUserPerformedManualSelection
|
||||||
onlyWitRadio.isChecked = state.privacyState.privacyMode == DistributionListPrivacyMode.ONLY_WITH
|
onlyWitRadio.isChecked = state.privacyState.privacyMode == DistributionListPrivacyMode.ONLY_WITH && state.hasUserPerformedManualSelection
|
||||||
|
|
||||||
allExceptCount.visible = allExceptRadio.isChecked
|
allExceptCount.visible = allExceptRadio.isChecked
|
||||||
onlyWithCount.visible = onlyWitRadio.isChecked
|
onlyWithCount.visible = onlyWitRadio.isChecked
|
||||||
|
@ -95,7 +95,7 @@ class ChooseInitialMyStoryMembershipBottomSheetDialogFragment :
|
||||||
else -> Unit
|
else -> Unit
|
||||||
}
|
}
|
||||||
|
|
||||||
save.isEnabled = state.recipientId != null
|
save.isEnabled = state.recipientId != null && state.hasUserPerformedManualSelection
|
||||||
}
|
}
|
||||||
|
|
||||||
val clickListener = { v: View ->
|
val clickListener = { v: View ->
|
||||||
|
|
|
@ -6,5 +6,6 @@ import org.thoughtcrime.securesms.stories.settings.my.MyStoryPrivacyState
|
||||||
data class ChooseInitialMyStoryMembershipState(
|
data class ChooseInitialMyStoryMembershipState(
|
||||||
val recipientId: RecipientId? = null,
|
val recipientId: RecipientId? = null,
|
||||||
val privacyState: MyStoryPrivacyState = MyStoryPrivacyState(),
|
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.core.Single
|
||||||
import io.reactivex.rxjava3.disposables.CompositeDisposable
|
import io.reactivex.rxjava3.disposables.CompositeDisposable
|
||||||
import io.reactivex.rxjava3.kotlin.plusAssign
|
import io.reactivex.rxjava3.kotlin.plusAssign
|
||||||
|
import io.reactivex.rxjava3.kotlin.subscribeBy
|
||||||
import org.thoughtcrime.securesms.database.model.DistributionListPrivacyMode
|
import org.thoughtcrime.securesms.database.model.DistributionListPrivacyMode
|
||||||
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||||
import org.thoughtcrime.securesms.recipients.Recipient
|
import org.thoughtcrime.securesms.recipients.Recipient
|
||||||
|
@ -26,7 +27,9 @@ class ChooseInitialMyStoryMembershipViewModel @JvmOverloads constructor(
|
||||||
init {
|
init {
|
||||||
disposables += repository.observeChooseInitialPrivacy()
|
disposables += repository.observeChooseInitialPrivacy()
|
||||||
.distinctUntilChanged()
|
.distinctUntilChanged()
|
||||||
.subscribe { state -> store.update { state } }
|
.subscribeBy(onNext = { state ->
|
||||||
|
store.update { state.copy(hasUserPerformedManualSelection = it.hasUserPerformedManualSelection) }
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCleared() {
|
override fun onCleared() {
|
||||||
|
@ -37,6 +40,9 @@ class ChooseInitialMyStoryMembershipViewModel @JvmOverloads constructor(
|
||||||
fun select(selection: DistributionListPrivacyMode): Single<DistributionListPrivacyMode> {
|
fun select(selection: DistributionListPrivacyMode): Single<DistributionListPrivacyMode> {
|
||||||
return repository.setPrivacyMode(selection)
|
return repository.setPrivacyMode(selection)
|
||||||
.toSingleDefault(selection)
|
.toSingleDefault(selection)
|
||||||
|
.doAfterSuccess { _ ->
|
||||||
|
store.update { it.copy(hasUserPerformedManualSelection = true) }
|
||||||
|
}
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue