diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsFragment.kt index 0ecd21b6c2..29afe03212 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsFragment.kt @@ -5,8 +5,13 @@ import android.view.View import android.widget.TextView import android.widget.Toast import androidx.annotation.IdRes +import androidx.annotation.StringRes import androidx.fragment.app.viewModels +import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode @@ -171,7 +176,7 @@ class AppSettingsFragment : DSLSettingsFragment( onClick = { findNavController().safeNavigate(AppSettingsFragmentDirections.actionAppSettingsFragmentToManageDonationsFragment()) }, - onLongClick = this@AppSettingsFragment::copySubscriberIdToClipboard + onLongClick = this@AppSettingsFragment::copyDonorBadgeSubscriberIdToClipboard ) } else { externalLinkPref( @@ -197,6 +202,7 @@ class AppSettingsFragment : DSLSettingsFragment( onClick = { findNavController().safeNavigate(R.id.action_appSettingsFragment_to_chatsSettingsFragment) }, + onLongClick = this@AppSettingsFragment::copyRemoteBackupsSubscriberIdToClipboard, isEnabled = state.isRegisteredAndUpToDate() ) @@ -288,15 +294,38 @@ class AppSettingsFragment : DSLSettingsFragment( } } - private fun copySubscriberIdToClipboard(): Boolean { - // TODO [alex] -- db access on main thread! - val subscriber = InAppPaymentsRepository.getSubscriber(InAppPaymentSubscriberRecord.Type.DONATION) - return if (subscriber == null) { - false - } else { - Toast.makeText(requireContext(), R.string.AppSettingsFragment__copied_subscriber_id_to_clipboard, Toast.LENGTH_LONG).show() - Util.copyToClipboard(requireContext(), subscriber.subscriberId.serialize()) - true + private fun copyDonorBadgeSubscriberIdToClipboard(): Boolean { + copySubscriberIdToClipboard( + subscriberType = InAppPaymentSubscriberRecord.Type.DONATION, + toastSuccessStringRes = R.string.AppSettingsFragment__copied_donor_subscriber_id_to_clipboard + ) + + return true + } + + private fun copyRemoteBackupsSubscriberIdToClipboard(): Boolean { + copySubscriberIdToClipboard( + subscriberType = InAppPaymentSubscriberRecord.Type.BACKUP, + toastSuccessStringRes = R.string.AppSettingsFragment__copied_backups_subscriber_id_to_clipboard + ) + return true + } + + private fun copySubscriberIdToClipboard( + subscriberType: InAppPaymentSubscriberRecord.Type, + @StringRes toastSuccessStringRes: Int + ) { + lifecycleScope.launch { + val subscriber = withContext(Dispatchers.IO) { + InAppPaymentsRepository.getSubscriber(subscriberType) + } + + withContext(Dispatchers.Main) { + if (subscriber != null) { + Toast.makeText(requireContext(), toastSuccessStringRes, Toast.LENGTH_LONG).show() + Util.copyToClipboard(requireContext(), subscriber.subscriberId.serialize()) + } + } } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b416dcea94..e3efd4c330 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -4793,7 +4793,12 @@ Invite your friends - Copied subscriber id to clipboard + + Copied donor subscriber id to clipboard + + Copied backups subscriber id to clipboard + + No subscriber id set Account