Merge branch 'misc/refactor-uphelper' into fix/fcm-push2

This commit is contained in:
sim 2022-09-08 10:49:53 +02:00
commit 7bdcacf489
4 changed files with 22 additions and 37 deletions

1
changelog.d/6936.misc Normal file
View File

@ -0,0 +1 @@
Smaff refactor of UnifiedPushHelper

View File

@ -46,6 +46,9 @@ class UnifiedPushHelper @Inject constructor(
private val vectorFeatures: VectorFeatures, private val vectorFeatures: VectorFeatures,
private val fcmHelper: FcmHelper, private val fcmHelper: FcmHelper,
) { ) {
// Called when the home activity starts
// or when notifications are enabled
fun register( fun register(
activity: FragmentActivity, activity: FragmentActivity,
onDoneRunnable: Runnable? = null, onDoneRunnable: Runnable? = null,
@ -56,7 +59,14 @@ class UnifiedPushHelper @Inject constructor(
) )
} }
fun reRegister( // If registration is forced:
// * the current distributor (if any) is removed
// * The dialog is opened
//
// The registration is forced in 2 cases :
// * in the settings
// * in the troubleshoot list (doFix)
fun forceRegister(
activity: FragmentActivity, activity: FragmentActivity,
pushersManager: PushersManager, pushersManager: PushersManager,
onDoneRunnable: Runnable? = null onDoneRunnable: Runnable? = null
@ -86,7 +96,8 @@ class UnifiedPushHelper @Inject constructor(
// Un-register first // Un-register first
unregister(pushersManager) unregister(pushersManager)
} }
if (UnifiedPush.getDistributor(context).isNotEmpty()) { // the !force should not be needed
if (!force && UnifiedPush.getDistributor(context).isNotEmpty()) {
UnifiedPush.registerApp(context) UnifiedPush.registerApp(context)
onDoneRunnable?.run() onDoneRunnable?.run()
return@launch return@launch
@ -94,45 +105,26 @@ class UnifiedPushHelper @Inject constructor(
val distributors = UnifiedPush.getDistributors(context) val distributors = UnifiedPush.getDistributors(context)
if (distributors.size == 1 && !force) { if (!force && distributors.size == 1) {
UnifiedPush.saveDistributor(context, distributors.first()) UnifiedPush.saveDistributor(context, distributors.first())
UnifiedPush.registerApp(context) UnifiedPush.registerApp(context)
onDoneRunnable?.run() onDoneRunnable?.run()
} else { } else {
openDistributorDialogInternal( openDistributorDialogInternal(
activity = activity, activity = activity,
pushersManager = pushersManager,
onDoneRunnable = onDoneRunnable, onDoneRunnable = onDoneRunnable,
distributors = distributors, distributors = distributors
unregisterFirst = force,
cancellable = !force
) )
} }
} }
} }
fun openDistributorDialog( // There is no case where this function is called
activity: FragmentActivity, // with a saved distributor and/or a pusher
pushersManager: PushersManager,
onDoneRunnable: Runnable,
) {
val distributors = UnifiedPush.getDistributors(activity)
openDistributorDialogInternal(
activity,
pushersManager,
onDoneRunnable, distributors,
unregisterFirst = true,
cancellable = true,
)
}
private fun openDistributorDialogInternal( private fun openDistributorDialogInternal(
activity: FragmentActivity, activity: FragmentActivity,
pushersManager: PushersManager?,
onDoneRunnable: Runnable?, onDoneRunnable: Runnable?,
distributors: List<String>, distributors: List<String>
unregisterFirst: Boolean,
cancellable: Boolean,
) { ) {
val internalDistributorName = stringProvider.getString( val internalDistributorName = stringProvider.getString(
if (fcmHelper.isFirebaseAvailable()) { if (fcmHelper.isFirebaseAvailable()) {
@ -154,16 +146,8 @@ class UnifiedPushHelper @Inject constructor(
.setTitle(stringProvider.getString(R.string.unifiedpush_getdistributors_dialog_title)) .setTitle(stringProvider.getString(R.string.unifiedpush_getdistributors_dialog_title))
.setItems(distributorsName.toTypedArray()) { _, which -> .setItems(distributorsName.toTypedArray()) { _, which ->
val distributor = distributors[which] val distributor = distributors[which]
if (distributor == UnifiedPush.getDistributor(context)) {
Timber.d("Same distributor selected again, no action")
return@setItems
}
activity.lifecycleScope.launch { activity.lifecycleScope.launch {
if (unregisterFirst) {
// Un-register first
unregister(pushersManager)
}
UnifiedPush.saveDistributor(context, distributor) UnifiedPush.saveDistributor(context, distributor)
Timber.i("Saving distributor: $distributor") Timber.i("Saving distributor: $distributor")
UnifiedPush.registerApp(context) UnifiedPush.registerApp(context)
@ -176,7 +160,7 @@ class UnifiedPushHelper @Inject constructor(
UnifiedPush.registerApp(context) UnifiedPush.registerApp(context)
onDoneRunnable?.run() onDoneRunnable?.run()
} }
.setCancelable(cancellable) .setCancelable(true)
.show() .show()
} }

View File

@ -158,7 +158,7 @@ class VectorSettingsNotificationPreferenceFragment :
if (vectorFeatures.allowExternalUnifiedPushDistributors()) { if (vectorFeatures.allowExternalUnifiedPushDistributors()) {
it.summary = unifiedPushHelper.getCurrentDistributorName() it.summary = unifiedPushHelper.getCurrentDistributorName()
it.onPreferenceClickListener = Preference.OnPreferenceClickListener { it.onPreferenceClickListener = Preference.OnPreferenceClickListener {
unifiedPushHelper.openDistributorDialog(requireActivity(), pushersManager) { unifiedPushHelper.forceRegister(requireActivity(), pushersManager) {
it.summary = unifiedPushHelper.getCurrentDistributorName() it.summary = unifiedPushHelper.getCurrentDistributorName()
session.pushersService().refreshPushers() session.pushersService().refreshPushers()
refreshBackgroundSyncPrefs() refreshBackgroundSyncPrefs()

View File

@ -59,7 +59,7 @@ class TestEndpointAsTokenRegistration @Inject constructor(
) )
quickFix = object : TroubleshootQuickFix(R.string.settings_troubleshoot_test_endpoint_registration_quick_fix) { quickFix = object : TroubleshootQuickFix(R.string.settings_troubleshoot_test_endpoint_registration_quick_fix) {
override fun doFix() { override fun doFix() {
unifiedPushHelper.reRegister( unifiedPushHelper.forceRegister(
context, context,
pushersManager pushersManager
) )