diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/notifications/NotificationsSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/notifications/NotificationsSettingsFragment.kt index d31eb50e09..2b3156df03 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/notifications/NotificationsSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/notifications/NotificationsSettingsFragment.kt @@ -19,6 +19,9 @@ import androidx.core.content.ContextCompat import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import com.google.android.material.dialog.MaterialAlertDialogBuilder +import org.greenrobot.eventbus.EventBus +import org.greenrobot.eventbus.Subscribe +import org.greenrobot.eventbus.ThreadMode import org.signal.core.util.getParcelableExtraCompat import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.R @@ -33,6 +36,8 @@ import org.thoughtcrime.securesms.components.settings.RadioListPreference import org.thoughtcrime.securesms.components.settings.RadioListPreferenceViewHolder import org.thoughtcrime.securesms.components.settings.configure import org.thoughtcrime.securesms.components.settings.models.Banner +import org.thoughtcrime.securesms.conversation.v2.registerForLifecycle +import org.thoughtcrime.securesms.events.PushServiceEvent import org.thoughtcrime.securesms.keyvalue.SettingsValues.NotificationDeliveryMethod import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.notifications.NotificationChannels @@ -104,6 +109,13 @@ class NotificationsSettingsFragment : DSLSettingsFragment(R.string.preferences__ viewModel.state.observe(viewLifecycleOwner) { adapter.submitList(getConfiguration(it).toMappingModelList()) } + + EventBus.getDefault().registerForLifecycle(subscriber = this, lifecycleOwner = viewLifecycleOwner) + } + + @Subscribe(threadMode = ThreadMode.MAIN) + fun onPushServiceEvent(event: PushServiceEvent) { + viewModel.refresh() } private fun getConfiguration(state: NotificationsSettingsState): DSLConfiguration { diff --git a/app/src/main/java/org/thoughtcrime/securesms/events/PushServiceEvent.kt b/app/src/main/java/org/thoughtcrime/securesms/events/PushServiceEvent.kt new file mode 100644 index 0000000000..f25eb309b0 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/events/PushServiceEvent.kt @@ -0,0 +1,3 @@ +package org.thoughtcrime.securesms.events + +data object PushServiceEvent diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/FcmRefreshJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/FcmRefreshJob.java index 5d7e3c1a93..1ea8592845 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/FcmRefreshJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/FcmRefreshJob.java @@ -29,11 +29,13 @@ import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GoogleApiAvailability; +import org.greenrobot.eventbus.EventBus; import org.signal.core.util.PendingIntentFlags; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.PlayServicesProblemActivity; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.dependencies.AppDependencies; +import org.thoughtcrime.securesms.events.PushServiceEvent; import org.thoughtcrime.securesms.gcm.FcmUtil; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; @@ -102,6 +104,7 @@ public void onRun() throws Exception { AppDependencies.getSignalServiceAccountManager().setGcmId(token); SignalStore.account().setFcmToken(token.get()); + EventBus.getDefault().post(PushServiceEvent.INSTANCE); } else { throw new RetryLaterException(new IOException("Failed to retrieve a token.")); } diff --git a/app/src/unifiedpush/java/im/molly/unifiedpush/components/settings/app/notifications/UnifiedPushSettingsFragment.kt b/app/src/unifiedpush/java/im/molly/unifiedpush/components/settings/app/notifications/UnifiedPushSettingsFragment.kt index ecc24fa3a9..7aa601933b 100644 --- a/app/src/unifiedpush/java/im/molly/unifiedpush/components/settings/app/notifications/UnifiedPushSettingsFragment.kt +++ b/app/src/unifiedpush/java/im/molly/unifiedpush/components/settings/app/notifications/UnifiedPushSettingsFragment.kt @@ -9,12 +9,16 @@ import androidx.lifecycle.ViewModelProvider import com.google.android.material.dialog.MaterialAlertDialogBuilder import im.molly.unifiedpush.model.UnifiedPushStatus import org.greenrobot.eventbus.EventBus +import org.greenrobot.eventbus.Subscribe +import org.greenrobot.eventbus.ThreadMode import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.components.settings.DSLConfiguration import org.thoughtcrime.securesms.components.settings.DSLSettingsFragment import org.thoughtcrime.securesms.components.settings.DSLSettingsIcon import org.thoughtcrime.securesms.components.settings.DSLSettingsText import org.thoughtcrime.securesms.components.settings.configure +import org.thoughtcrime.securesms.conversation.v2.registerForLifecycle +import org.thoughtcrime.securesms.events.PushServiceEvent import org.thoughtcrime.securesms.util.Util.writeTextToClipboard import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter @@ -30,15 +34,13 @@ class UnifiedPushSettingsFragment : DSLSettingsFragment(R.string.NotificationsSe viewModel.state.observe(viewLifecycleOwner) { adapter.submitList(getConfiguration(it).toMappingModelList()) } - } - override fun onStart() { - super.onStart() - EventBus.getDefault().register(viewModel) + + EventBus.getDefault().registerForLifecycle(subscriber = this, lifecycleOwner = viewLifecycleOwner) } - override fun onStop() { - EventBus.getDefault().unregister(viewModel) - super.onStop() + @Subscribe(threadMode = ThreadMode.MAIN) + fun onPushServiceEvent(event: PushServiceEvent) { + viewModel.refresh() } private fun getConfiguration(state: UnifiedPushSettingsState): DSLConfiguration { diff --git a/app/src/unifiedpush/java/im/molly/unifiedpush/components/settings/app/notifications/UnifiedPushSettingsViewModel.kt b/app/src/unifiedpush/java/im/molly/unifiedpush/components/settings/app/notifications/UnifiedPushSettingsViewModel.kt index db934112bb..22371e9663 100644 --- a/app/src/unifiedpush/java/im/molly/unifiedpush/components/settings/app/notifications/UnifiedPushSettingsViewModel.kt +++ b/app/src/unifiedpush/java/im/molly/unifiedpush/components/settings/app/notifications/UnifiedPushSettingsViewModel.kt @@ -6,11 +6,9 @@ import android.os.Build import androidx.lifecycle.LiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider -import im.molly.unifiedpush.events.UnifiedPushRegistrationEvent import im.molly.unifiedpush.jobs.UnifiedPushRefreshJob import im.molly.unifiedpush.model.UnifiedPushStatus import im.molly.unifiedpush.util.MollySocketRequest -import org.greenrobot.eventbus.Subscribe import org.signal.core.util.concurrent.SignalExecutors import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.R @@ -29,10 +27,7 @@ class UnifiedPushSettingsViewModel(private val application: Application) : ViewM val state: LiveData = store.stateLiveData - @Subscribe - fun onStatusRefreshed(e: UnifiedPushRegistrationEvent) { - Log.d(TAG, "Received event to refresh.") - status = SignalStore.unifiedpush.status + fun refresh() { store.update { getState() } } @@ -96,7 +91,7 @@ class UnifiedPushSettingsViewModel(private val application: Application) : ViewM fun setUnifiedPushDistributor(distributor: String) { UnifiedPush.saveDistributor(application, distributor) UnifiedPush.registerApp(application) - store.update { getState() } + refresh() } fun setMollySocketUrl(url: String?) { @@ -120,7 +115,7 @@ class UnifiedPushSettingsViewModel(private val application: Application) : ViewM } private fun processNewStatus() { - store.update { getState() } + refresh() AppDependencies.jobManager.add(UnifiedPushRefreshJob()) } diff --git a/app/src/unifiedpush/java/im/molly/unifiedpush/events/UnifiedPushRegistrationEvent.kt b/app/src/unifiedpush/java/im/molly/unifiedpush/events/UnifiedPushRegistrationEvent.kt deleted file mode 100644 index 746a7f2278..0000000000 --- a/app/src/unifiedpush/java/im/molly/unifiedpush/events/UnifiedPushRegistrationEvent.kt +++ /dev/null @@ -1,3 +0,0 @@ -package im.molly.unifiedpush.events - -object UnifiedPushRegistrationEvent diff --git a/app/src/unifiedpush/java/im/molly/unifiedpush/jobs/UnifiedPushRefreshJob.kt b/app/src/unifiedpush/java/im/molly/unifiedpush/jobs/UnifiedPushRefreshJob.kt index c79c554858..35988a172c 100644 --- a/app/src/unifiedpush/java/im/molly/unifiedpush/jobs/UnifiedPushRefreshJob.kt +++ b/app/src/unifiedpush/java/im/molly/unifiedpush/jobs/UnifiedPushRefreshJob.kt @@ -1,7 +1,6 @@ package im.molly.unifiedpush.jobs -import im.molly.unifiedpush.events.UnifiedPushRegistrationEvent import im.molly.unifiedpush.model.RegistrationStatus import im.molly.unifiedpush.model.UnifiedPushStatus import im.molly.unifiedpush.model.saveStatus @@ -11,6 +10,7 @@ import im.molly.unifiedpush.util.UnifiedPushNotificationBuilder import org.greenrobot.eventbus.EventBus import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.ApplicationContext +import org.thoughtcrime.securesms.events.PushServiceEvent import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint import org.thoughtcrime.securesms.jobs.BaseJob @@ -113,7 +113,7 @@ class UnifiedPushRefreshJob private constructor(parameters: Parameters) : BaseJo } } } - EventBus.getDefault().post(UnifiedPushRegistrationEvent) + EventBus.getDefault().post(PushServiceEvent) } private fun reInitializeNotificationServices() {