Fix discoverability setting persistence during registration.

This commit is contained in:
Greyson Parrelli
2023-11-09 11:13:44 -05:00
parent ead8f209b6
commit 111c8367a9
9 changed files with 65 additions and 56 deletions

View File

@@ -267,7 +267,7 @@ public class RefreshOwnProfileJob extends BaseJob {
if (TextUtils.isEmpty(localUsernameHash) && TextUtils.isEmpty(remoteUsernameHash)) {
Log.d(TAG, "Local and remote username hash are both empty. Considering validated.");
} else if (!Objects.equals(localUsernameHash, remoteUsernameHash)) {
Log.w(TAG, "Local username hash does not match server username hash. Local hash: " + (TextUtils.isEmpty(localUsername) ? "empty" : "present") + ", Remote hash: " + (TextUtils.isEmpty(localUsername) ? "empty" : "present"));
Log.w(TAG, "Local username hash does not match server username hash. Local hash: " + (TextUtils.isEmpty(localUsername) ? "empty" : "present") + ", Remote hash: " + (TextUtils.isEmpty(remoteUsernameHash) ? "empty" : "present"));
SignalStore.account().setUsernameSyncState(AccountValues.UsernameSyncState.USERNAME_AND_LINK_CORRUPTED);
return;
} else {

View File

@@ -37,7 +37,7 @@ import org.thoughtcrime.securesms.keyvalue.PhoneNumberPrivacyValues;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.mediasend.Media;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.profiles.edit.pnp.WhoCanSeeMyPhoneNumberFragment;
import org.thoughtcrime.securesms.profiles.edit.pnp.WhoCanFindMeByPhoneNumberFragment;
import org.thoughtcrime.securesms.profiles.manage.EditProfileNameFragment;
import org.thoughtcrime.securesms.providers.BlobProvider;
import org.thoughtcrime.securesms.util.CommunicationActions;
@@ -210,8 +210,8 @@ public class CreateProfileFragment extends LoggingFragment {
binding.profileDescriptionText.setOnLinkClickListener(v -> CommunicationActions.openBrowserLink(requireContext(), getString(R.string.EditProfileFragment__support_link)));
if (FeatureFlags.phoneNumberPrivacy()) {
getParentFragmentManager().setFragmentResultListener(WhoCanSeeMyPhoneNumberFragment.REQUEST_KEY, getViewLifecycleOwner(), (requestKey, result) -> {
if (WhoCanSeeMyPhoneNumberFragment.REQUEST_KEY.equals(requestKey)) {
getParentFragmentManager().setFragmentResultListener(WhoCanFindMeByPhoneNumberFragment.REQUEST_KEY, getViewLifecycleOwner(), (requestKey, result) -> {
if (WhoCanFindMeByPhoneNumberFragment.REQUEST_KEY.equals(requestKey)) {
presentWhoCanFindMeDescription(SignalStore.phoneNumberPrivacy().getPhoneNumberListingMode());
}
});

View File

@@ -13,16 +13,16 @@ import org.thoughtcrime.securesms.components.settings.DSLConfiguration
import org.thoughtcrime.securesms.components.settings.DSLSettingsFragment
import org.thoughtcrime.securesms.components.settings.DSLSettingsText
import org.thoughtcrime.securesms.components.settings.configure
import org.thoughtcrime.securesms.databinding.WhoCanSeeMyPhoneNumberFragmentBinding
import org.thoughtcrime.securesms.databinding.WhoCanFindMeByPhoneNumberFragmentBinding
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter
/**
* Allows the user to select who can see their phone number during registration.
*/
class WhoCanSeeMyPhoneNumberFragment : DSLSettingsFragment(
class WhoCanFindMeByPhoneNumberFragment : DSLSettingsFragment(
titleId = R.string.WhoCanSeeMyPhoneNumberFragment__who_can_find_me_by_number,
layoutId = R.layout.who_can_see_my_phone_number_fragment
layoutId = R.layout.who_can_find_me_by_phone_number_fragment
) {
companion object {
@@ -32,10 +32,10 @@ class WhoCanSeeMyPhoneNumberFragment : DSLSettingsFragment(
const val REQUEST_KEY = "who_can_see_my_phone_number_key"
}
private val viewModel: WhoCanSeeMyPhoneNumberViewModel by viewModels()
private val viewModel: WhoCanFindMeByPhoneNumberViewModel by viewModels()
private val lifecycleDisposable = LifecycleDisposable()
private val binding by ViewBinderDelegate(WhoCanSeeMyPhoneNumberFragmentBinding::bind)
private val binding by ViewBinderDelegate(WhoCanFindMeByPhoneNumberFragmentBinding::bind)
override fun bindAdapter(adapter: MappingAdapter) {
require(FeatureFlags.phoneNumberPrivacy())
@@ -53,25 +53,25 @@ class WhoCanSeeMyPhoneNumberFragment : DSLSettingsFragment(
}
}
private fun getConfiguration(state: WhoCanSeeMyPhoneNumberState): DSLConfiguration {
private fun getConfiguration(state: WhoCanFindMeByPhoneNumberState): DSLConfiguration {
return configure {
radioPref(
title = DSLSettingsText.from(R.string.PhoneNumberPrivacy_everyone),
isChecked = state == WhoCanSeeMyPhoneNumberState.EVERYONE,
onClick = { viewModel.onEveryoneCanSeeMyPhoneNumberSelected() }
isChecked = state == WhoCanFindMeByPhoneNumberState.EVERYONE,
onClick = { viewModel.onEveryoneCanFindMeByPhoneNumberSelected() }
)
radioPref(
title = DSLSettingsText.from(R.string.PhoneNumberPrivacy_nobody),
isChecked = state == WhoCanSeeMyPhoneNumberState.NOBODY,
onClick = { viewModel.onNobodyCanSeeMyPhoneNumberSelected() }
isChecked = state == WhoCanFindMeByPhoneNumberState.NOBODY,
onClick = { viewModel.onNobodyCanFindMeByPhoneNumberSelected() }
)
textPref(
title = DSLSettingsText.from(
when (state) {
WhoCanSeeMyPhoneNumberState.EVERYONE -> R.string.WhoCanSeeMyPhoneNumberFragment__anyone_who_has
WhoCanSeeMyPhoneNumberState.NOBODY -> R.string.WhoCanSeeMyPhoneNumberFragment__nobody_on_signal
WhoCanFindMeByPhoneNumberState.EVERYONE -> R.string.WhoCanSeeMyPhoneNumberFragment__anyone_who_has
WhoCanFindMeByPhoneNumberState.NOBODY -> R.string.WhoCanSeeMyPhoneNumberFragment__nobody_on_signal
},
DSLSettingsText.TextAppearanceModifier(R.style.Signal_Text_BodyMedium),
DSLSettingsText.ColorModifier(ContextCompat.getColor(requireContext(), R.color.signal_colorOnSurfaceVariant))

View File

@@ -0,0 +1,36 @@
package org.thoughtcrime.securesms.profiles.edit.pnp
import io.reactivex.rxjava3.core.Completable
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies
import org.thoughtcrime.securesms.jobs.RefreshAttributesJob
import org.thoughtcrime.securesms.keyvalue.PhoneNumberPrivacyValues
import org.thoughtcrime.securesms.keyvalue.SignalStore
/**
* Manages the current phone-number listing state.
*/
class WhoCanFindMeByPhoneNumberRepository {
fun getCurrentState(): WhoCanFindMeByPhoneNumberState {
return when (SignalStore.phoneNumberPrivacy().phoneNumberListingMode) {
PhoneNumberPrivacyValues.PhoneNumberListingMode.LISTED -> WhoCanFindMeByPhoneNumberState.EVERYONE
PhoneNumberPrivacyValues.PhoneNumberListingMode.UNLISTED -> WhoCanFindMeByPhoneNumberState.NOBODY
}
}
fun onSave(whoCanFindMeByPhoneNumberState: WhoCanFindMeByPhoneNumberState): Completable {
return Completable.fromAction {
when (whoCanFindMeByPhoneNumberState) {
WhoCanFindMeByPhoneNumberState.EVERYONE -> {
SignalStore.phoneNumberPrivacy().phoneNumberListingMode = PhoneNumberPrivacyValues.PhoneNumberListingMode.LISTED
}
WhoCanFindMeByPhoneNumberState.NOBODY -> {
SignalStore.phoneNumberPrivacy().phoneNumberSharingMode = PhoneNumberPrivacyValues.PhoneNumberSharingMode.NOBODY
SignalStore.phoneNumberPrivacy().phoneNumberListingMode = PhoneNumberPrivacyValues.PhoneNumberListingMode.UNLISTED
}
}
ApplicationDependencies.getJobManager().add(RefreshAttributesJob())
}
}
}

View File

@@ -1,6 +1,6 @@
package org.thoughtcrime.securesms.profiles.edit.pnp
enum class WhoCanSeeMyPhoneNumberState {
enum class WhoCanFindMeByPhoneNumberState {
EVERYONE,
NOBODY
}

View File

@@ -7,20 +7,24 @@ import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.disposables.CompositeDisposable
import org.thoughtcrime.securesms.util.rx.RxStore
class WhoCanSeeMyPhoneNumberViewModel : ViewModel() {
class WhoCanFindMeByPhoneNumberViewModel : ViewModel() {
private val repository = WhoCanSeeMyPhoneNumberRepository()
private val repository = WhoCanFindMeByPhoneNumberRepository()
private val store = RxStore(repository.getCurrentState())
private val disposables = CompositeDisposable()
val state: Flowable<WhoCanSeeMyPhoneNumberState> = store.stateFlowable.subscribeOn(AndroidSchedulers.mainThread())
val state: Flowable<WhoCanFindMeByPhoneNumberState> = store.stateFlowable.subscribeOn(AndroidSchedulers.mainThread())
fun onEveryoneCanSeeMyPhoneNumberSelected() {
store.update { WhoCanSeeMyPhoneNumberState.EVERYONE }
fun onEveryoneCanFindMeByPhoneNumberSelected() {
store.update {
WhoCanFindMeByPhoneNumberState.EVERYONE
}
}
fun onNobodyCanSeeMyPhoneNumberSelected() {
store.update { WhoCanSeeMyPhoneNumberState.NOBODY }
fun onNobodyCanFindMeByPhoneNumberSelected() {
store.update {
WhoCanFindMeByPhoneNumberState.NOBODY
}
}
fun onSave(): Completable {

View File

@@ -1,31 +0,0 @@
package org.thoughtcrime.securesms.profiles.edit.pnp
import io.reactivex.rxjava3.core.Completable
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies
import org.thoughtcrime.securesms.jobs.RefreshAttributesJob
import org.thoughtcrime.securesms.keyvalue.PhoneNumberPrivacyValues
import org.thoughtcrime.securesms.keyvalue.SignalStore
/**
* Manages the current phone-number listing state.
*/
class WhoCanSeeMyPhoneNumberRepository {
fun getCurrentState(): WhoCanSeeMyPhoneNumberState {
return when (SignalStore.phoneNumberPrivacy().phoneNumberListingMode) {
PhoneNumberPrivacyValues.PhoneNumberListingMode.LISTED -> WhoCanSeeMyPhoneNumberState.EVERYONE
PhoneNumberPrivacyValues.PhoneNumberListingMode.UNLISTED -> WhoCanSeeMyPhoneNumberState.NOBODY
}
}
fun onSave(whoCanSeeMyPhoneNumberState: WhoCanSeeMyPhoneNumberState): Completable {
return Completable.fromAction {
SignalStore.phoneNumberPrivacy().phoneNumberListingMode = when (whoCanSeeMyPhoneNumberState) {
WhoCanSeeMyPhoneNumberState.EVERYONE -> PhoneNumberPrivacyValues.PhoneNumberListingMode.LISTED
WhoCanSeeMyPhoneNumberState.NOBODY -> PhoneNumberPrivacyValues.PhoneNumberListingMode.UNLISTED
}
ApplicationDependencies.getJobManager().add(RefreshAttributesJob())
}
}
}