From b8f7095f4454c480f08c6d65994897368f95a93f Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Tue, 28 Dec 2021 15:48:52 -0600 Subject: [PATCH] Remove GlobalScope usage --- .../org/tasks/injection/ApplicationModule.kt | 10 ++++++++++ .../org/tasks/injection/ApplicationScope.kt | 7 +++++++ .../injection/CoroutineDispatchersModule.kt | 17 +++++++++++++++++ .../org/tasks/injection/CoroutineQualifiers.kt | 7 +++++++ .../NotificationClearedReceiver.kt | 6 ++++-- .../org/tasks/receivers/CompleteTaskReceiver.kt | 6 ++++-- 6 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/org/tasks/injection/ApplicationScope.kt create mode 100644 app/src/main/java/org/tasks/injection/CoroutineDispatchersModule.kt create mode 100644 app/src/main/java/org/tasks/injection/CoroutineQualifiers.kt diff --git a/app/src/main/java/org/tasks/injection/ApplicationModule.kt b/app/src/main/java/org/tasks/injection/ApplicationModule.kt index a6ab60df6..0358b9fdb 100644 --- a/app/src/main/java/org/tasks/injection/ApplicationModule.kt +++ b/app/src/main/java/org/tasks/injection/ApplicationModule.kt @@ -7,6 +7,9 @@ import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.SupervisorJob import org.tasks.analytics.Firebase import org.tasks.billing.BillingClient import org.tasks.billing.BillingClientImpl @@ -103,4 +106,11 @@ class ApplicationModule { firebase: Firebase, workManager: WorkManager, ): BillingClient = BillingClientImpl(context, inventory, firebase, workManager) + + @Singleton + @ApplicationScope + @Provides + fun providesCoroutineScope( + @DefaultDispatcher defaultDispatcher: CoroutineDispatcher + ): CoroutineScope = CoroutineScope(SupervisorJob() + defaultDispatcher) } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/injection/ApplicationScope.kt b/app/src/main/java/org/tasks/injection/ApplicationScope.kt new file mode 100644 index 000000000..ce3089a4e --- /dev/null +++ b/app/src/main/java/org/tasks/injection/ApplicationScope.kt @@ -0,0 +1,7 @@ +package org.tasks.injection + +import javax.inject.Qualifier + +@Retention(AnnotationRetention.RUNTIME) +@Qualifier +annotation class ApplicationScope \ No newline at end of file diff --git a/app/src/main/java/org/tasks/injection/CoroutineDispatchersModule.kt b/app/src/main/java/org/tasks/injection/CoroutineDispatchersModule.kt new file mode 100644 index 000000000..a59ec20bf --- /dev/null +++ b/app/src/main/java/org/tasks/injection/CoroutineDispatchersModule.kt @@ -0,0 +1,17 @@ +package org.tasks.injection + +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.Dispatchers + +@InstallIn(SingletonComponent::class) +@Module +object CoroutinesDispatchersModule { + + @DefaultDispatcher + @Provides + fun providesDefaultDispatcher(): CoroutineDispatcher = Dispatchers.Default +} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/injection/CoroutineQualifiers.kt b/app/src/main/java/org/tasks/injection/CoroutineQualifiers.kt new file mode 100644 index 000000000..e5218b335 --- /dev/null +++ b/app/src/main/java/org/tasks/injection/CoroutineQualifiers.kt @@ -0,0 +1,7 @@ +package org.tasks.injection + +import javax.inject.Qualifier + +@Retention(AnnotationRetention.RUNTIME) +@Qualifier +annotation class DefaultDispatcher diff --git a/app/src/main/java/org/tasks/notifications/NotificationClearedReceiver.kt b/app/src/main/java/org/tasks/notifications/NotificationClearedReceiver.kt index 5d038f9fe..e56ab0757 100644 --- a/app/src/main/java/org/tasks/notifications/NotificationClearedReceiver.kt +++ b/app/src/main/java/org/tasks/notifications/NotificationClearedReceiver.kt @@ -4,19 +4,21 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import dagger.hilt.android.AndroidEntryPoint -import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch +import org.tasks.injection.ApplicationScope import timber.log.Timber import javax.inject.Inject @AndroidEntryPoint class NotificationClearedReceiver : BroadcastReceiver() { @Inject lateinit var notificationManager: NotificationManager + @Inject @ApplicationScope lateinit var scope: CoroutineScope override fun onReceive(context: Context, intent: Intent) { val notificationId = intent.getLongExtra(NotificationManager.EXTRA_NOTIFICATION_ID, -1L) Timber.d("cleared $notificationId") - GlobalScope.launch { + scope.launch { notificationManager.cancel(notificationId) } } diff --git a/app/src/main/java/org/tasks/receivers/CompleteTaskReceiver.kt b/app/src/main/java/org/tasks/receivers/CompleteTaskReceiver.kt index d13e87d19..11fb8dc26 100644 --- a/app/src/main/java/org/tasks/receivers/CompleteTaskReceiver.kt +++ b/app/src/main/java/org/tasks/receivers/CompleteTaskReceiver.kt @@ -5,19 +5,21 @@ import android.content.Context import android.content.Intent import com.todoroo.astrid.service.TaskCompleter import dagger.hilt.android.AndroidEntryPoint -import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch +import org.tasks.injection.ApplicationScope import timber.log.Timber import javax.inject.Inject @AndroidEntryPoint class CompleteTaskReceiver : BroadcastReceiver() { @Inject lateinit var taskCompleter: TaskCompleter + @Inject @ApplicationScope lateinit var scope: CoroutineScope override fun onReceive(context: Context, intent: Intent) { val taskId = intent.getLongExtra(TASK_ID, 0) Timber.i("Completing %s", taskId) - GlobalScope.launch { + scope.launch { taskCompleter.setComplete(taskId) } }