Skip to content
This repository has been archived by the owner on Jan 5, 2023. It is now read-only.

Commit

Permalink
Removes ExecutorService in favor of coroutines
Browse files Browse the repository at this point in the history
Change-Id: Ibcdd2b67820a22741735cd79ba6deaecf6d25d96
  • Loading branch information
Manuel Vivo authored and tiembo committed Jun 10, 2020
1 parent ee7f31c commit 504cc5a
Show file tree
Hide file tree
Showing 59 changed files with 384 additions and 905 deletions.

This file was deleted.

Expand Up @@ -27,7 +27,6 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import com.google.samples.apps.iosched.R
import com.google.samples.apps.iosched.di.CoroutinesModule
import com.google.samples.apps.iosched.tests.SetPreferencesRule
import com.google.samples.apps.iosched.tests.SyncTaskExecutorRule
import dagger.hilt.android.testing.HiltAndroidRule
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
Expand All @@ -45,10 +44,6 @@ class AgendaTest {
@get:Rule(order = 0)
var hiltRule = HiltAndroidRule(this)

// Executes tasks in a synchronous [TaskScheduler]
@get:Rule(order = 1)
var syncTaskExecutorRule = SyncTaskExecutorRule()

// Sets the preferences so no welcome screens are shown
@get:Rule(order = 1)
var preferencesRule = SetPreferencesRule()
Expand Down
Expand Up @@ -27,7 +27,6 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import com.google.samples.apps.iosched.R
import com.google.samples.apps.iosched.di.CoroutinesModule
import com.google.samples.apps.iosched.tests.SetPreferencesRule
import com.google.samples.apps.iosched.tests.SyncTaskExecutorRule
import dagger.hilt.android.testing.HiltAndroidRule
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
Expand All @@ -45,10 +44,6 @@ class CodelabTest {
@get:Rule(order = 0)
var hiltRule = HiltAndroidRule(this)

// Executes tasks in a synchronous [TaskScheduler]
@get:Rule(order = 1)
var syncTaskExecutorRule = SyncTaskExecutorRule()

// Sets the preferences so no welcome screens are shown
@get:Rule(order = 1)
var preferencesRule = SetPreferencesRule()
Expand Down
Expand Up @@ -30,7 +30,6 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import com.google.samples.apps.iosched.R
import com.google.samples.apps.iosched.di.CoroutinesModule
import com.google.samples.apps.iosched.tests.SetPreferencesRule
import com.google.samples.apps.iosched.tests.SyncTaskExecutorRule
import dagger.hilt.android.testing.HiltAndroidRule
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
Expand All @@ -48,10 +47,6 @@ class HomeTest {
@get:Rule(order = 0)
var hiltRule = HiltAndroidRule(this)

// Executes tasks in a synchronous [TaskScheduler]
@get:Rule(order = 1)
var syncTaskExecutorRule = SyncTaskExecutorRule()

// Sets the preferences so no welcome screens are shown
@get:Rule(order = 1)
var preferencesRule = SetPreferencesRule()
Expand Down
Expand Up @@ -31,7 +31,6 @@ import com.google.samples.apps.iosched.R
import com.google.samples.apps.iosched.R.id
import com.google.samples.apps.iosched.di.CoroutinesModule
import com.google.samples.apps.iosched.tests.SetPreferencesRule
import com.google.samples.apps.iosched.tests.SyncTaskExecutorRule
import dagger.hilt.android.testing.HiltAndroidRule
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
Expand All @@ -52,10 +51,6 @@ class InfoTest {
@get:Rule(order = 0)
var hiltRule = HiltAndroidRule(this)

// Executes tasks in a synchronous [TaskScheduler]
@get:Rule(order = 1)
var syncTaskExecutorRule = SyncTaskExecutorRule()

// Sets the preferences so no welcome screens are shown
@get:Rule(order = 1)
var preferencesRule = SetPreferencesRule()
Expand Down
Expand Up @@ -27,7 +27,6 @@ import com.google.samples.apps.iosched.R
import com.google.samples.apps.iosched.R.id
import com.google.samples.apps.iosched.di.CoroutinesModule
import com.google.samples.apps.iosched.tests.SetPreferencesRule
import com.google.samples.apps.iosched.tests.SyncTaskExecutorRule
import dagger.hilt.android.testing.HiltAndroidRule
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
Expand All @@ -48,10 +47,6 @@ class MapTest {
@get:Rule(order = 0)
var hiltRule = HiltAndroidRule(this)

// Executes tasks in a synchronous [TaskScheduler]
@get:Rule(order = 1)
var syncTaskExecutorRule = SyncTaskExecutorRule()

// Sets the preferences so no welcome screens are shown
@get:Rule(order = 1)
var preferencesRule = SetPreferencesRule()
Expand Down
Expand Up @@ -30,7 +30,6 @@ import com.google.samples.apps.iosched.R
import com.google.samples.apps.iosched.di.CoroutinesModule
import com.google.samples.apps.iosched.tests.FixedTimeRule
import com.google.samples.apps.iosched.tests.SetPreferencesRule
import com.google.samples.apps.iosched.tests.SyncTaskExecutorRule
import com.google.samples.apps.iosched.ui.sessioncommon.SessionViewHolder
import dagger.hilt.android.testing.HiltAndroidRule
import dagger.hilt.android.testing.HiltAndroidTest
Expand All @@ -50,10 +49,6 @@ class ScheduleTest {
@get:Rule(order = 0)
var hiltRule = HiltAndroidRule(this)

// Executes tasks in a synchronous [TaskScheduler]
@get:Rule(order = 1)
var syncTaskExecutorRule = SyncTaskExecutorRule()

// Sets the time to before the conference
@get:Rule(order = 1)
var timeProviderRule = FixedTimeRule()
Expand Down
Expand Up @@ -31,7 +31,6 @@ import com.google.samples.apps.iosched.di.CoroutinesModule
import com.google.samples.apps.iosched.shared.data.FakeConferenceDataSource
import com.google.samples.apps.iosched.tests.FixedTimeRule
import com.google.samples.apps.iosched.tests.SetPreferencesRule
import com.google.samples.apps.iosched.tests.SyncTaskExecutorRule
import com.google.samples.apps.iosched.ui.sessiondetail.SessionDetailActivity
import com.google.samples.apps.iosched.ui.sessiondetail.SessionDetailViewHolder
import dagger.hilt.android.testing.HiltAndroidRule
Expand Down Expand Up @@ -66,10 +65,6 @@ class SessionDetailTest {
@get:Rule(order = 0)
var hiltRule = HiltAndroidRule(this)

// Executes tasks in a synchronous [TaskScheduler]
@get:Rule(order = 1)
var syncTaskExecutorRule = SyncTaskExecutorRule()

// Sets the time to before the conference
@get:Rule(order = 1)
var timeProviderRule = FixedTimeRule()
Expand Down
Expand Up @@ -30,7 +30,6 @@ import com.google.samples.apps.iosched.R
import com.google.samples.apps.iosched.R.id
import com.google.samples.apps.iosched.di.CoroutinesModule
import com.google.samples.apps.iosched.tests.SetPreferencesRule
import com.google.samples.apps.iosched.tests.SyncTaskExecutorRule
import dagger.hilt.android.testing.HiltAndroidRule
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
Expand All @@ -51,10 +50,6 @@ class SettingsTest {
@get:Rule(order = 0)
var hiltRule = HiltAndroidRule(this)

// Executes tasks in a synchronous [TaskScheduler]
@get:Rule(order = 1)
var syncTaskExecutorRule = SyncTaskExecutorRule()

// Sets the preferences so no welcome screens are shown
@get:Rule(order = 1)
var preferencesRule = SetPreferencesRule()
Expand Down
Expand Up @@ -25,6 +25,9 @@ import com.google.samples.apps.iosched.shared.data.signin.datasources.AuthStateU
import com.google.samples.apps.iosched.shared.data.signin.datasources.FirebaseAuthStateUserDataSource
import com.google.samples.apps.iosched.shared.data.signin.datasources.FirestoreRegisteredUserDataSource
import com.google.samples.apps.iosched.shared.data.signin.datasources.RegisteredUserDataSource
import com.google.samples.apps.iosched.shared.di.ApplicationScope
import com.google.samples.apps.iosched.shared.di.IoDispatcher
import com.google.samples.apps.iosched.shared.di.MainDispatcher
import com.google.samples.apps.iosched.shared.domain.sessions.NotificationAlarmUpdater
import com.google.samples.apps.iosched.shared.fcm.FcmTokenUpdater
import com.google.samples.apps.iosched.util.signin.FirebaseAuthSignInHandler
Expand All @@ -33,13 +36,18 @@ import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.components.ApplicationComponent
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import javax.inject.Singleton

@InstallIn(ApplicationComponent::class)
@Module
internal class SignInModule {

@Provides
fun provideSignInHandler(): SignInHandler = FirebaseAuthSignInHandler()
fun provideSignInHandler(
@ApplicationScope applicationScope: CoroutineScope
): SignInHandler = FirebaseAuthSignInHandler(applicationScope)

@Singleton
@Provides
Expand All @@ -54,13 +62,17 @@ internal class SignInModule {
fun provideAuthStateUserDataSource(
firebase: FirebaseAuth,
firestore: FirebaseFirestore,
notificationAlarmUpdater: NotificationAlarmUpdater
notificationAlarmUpdater: NotificationAlarmUpdater,
@ApplicationScope applicationScope: CoroutineScope,
@IoDispatcher ioDispatcher: CoroutineDispatcher,
@MainDispatcher mainDispatcher: CoroutineDispatcher
): AuthStateUserDataSource {

return FirebaseAuthStateUserDataSource(
firebase,
FcmTokenUpdater(firestore),
notificationAlarmUpdater
FcmTokenUpdater(applicationScope, mainDispatcher, firestore),
notificationAlarmUpdater,
ioDispatcher
)
}

Expand Down
Expand Up @@ -29,6 +29,8 @@ import com.google.samples.apps.iosched.shared.data.config.AppConfigDataSource
import com.google.samples.apps.iosched.shared.data.db.AppDatabase
import com.google.samples.apps.iosched.shared.data.prefs.PreferenceStorage
import com.google.samples.apps.iosched.shared.data.prefs.SharedPreferenceStorage
import com.google.samples.apps.iosched.shared.di.ApplicationScope
import com.google.samples.apps.iosched.shared.di.DefaultDispatcher
import com.google.samples.apps.iosched.shared.di.MainThreadHandler
import com.google.samples.apps.iosched.shared.domain.internal.IOSchedHandler
import com.google.samples.apps.iosched.shared.domain.internal.IOSchedMainHandler
Expand All @@ -39,6 +41,9 @@ import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.components.ApplicationComponent
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.SupervisorJob
import javax.inject.Singleton

/**
Expand All @@ -63,13 +68,20 @@ class AppModule {
@Provides
fun provideConnectivityManager(@ApplicationContext context: Context): ConnectivityManager =
context.applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE)
as ConnectivityManager
as ConnectivityManager

@Provides
fun provideClipboardManager(@ApplicationContext context: Context): ClipboardManager =
context.applicationContext.getSystemService(Context.CLIPBOARD_SERVICE)
as ClipboardManager

@ApplicationScope
@Singleton
@Provides
fun providesApplicationScope(
@DefaultDispatcher defaultDispatcher: CoroutineDispatcher
): CoroutineScope = CoroutineScope(SupervisorJob() + defaultDispatcher)

@Singleton
@Provides
@MainThreadHandler
Expand All @@ -78,15 +90,17 @@ class AppModule {
@Singleton
@Provides
fun provideAnalyticsHelper(
@ApplicationScope applicationScope: CoroutineScope,
@ApplicationContext context: Context,
signInDelegate: SignInViewModelDelegate,
preferenceStorage: PreferenceStorage
): AnalyticsHelper = FirebaseAnalyticsHelper(context, signInDelegate, preferenceStorage)
): AnalyticsHelper =
FirebaseAnalyticsHelper(applicationScope, context, signInDelegate, preferenceStorage)

@Singleton
@Provides
fun provideAgendaRepository(appConfigDataSource: AppConfigDataSource): AgendaRepository =
DefaultAgendaRepository(appConfigDataSource)
DefaultAgendaRepository(appConfigDataSource)

@Singleton
@Provides
Expand Down
Expand Up @@ -22,6 +22,7 @@ import androidx.lifecycle.MutableLiveData
import com.google.samples.apps.iosched.R
import com.google.samples.apps.iosched.model.SessionId
import com.google.samples.apps.iosched.model.userdata.UserSession
import com.google.samples.apps.iosched.shared.di.ApplicationScope
import com.google.samples.apps.iosched.shared.di.MainDispatcher
import com.google.samples.apps.iosched.shared.domain.users.StarEventAndNotifyUseCase
import com.google.samples.apps.iosched.shared.domain.users.StarEventParameter
Expand All @@ -32,11 +33,10 @@ import com.google.samples.apps.iosched.ui.messages.SnackbarMessageManager
import com.google.samples.apps.iosched.ui.signin.SignInViewModelDelegate
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.launch
import timber.log.Timber
import java.util.UUID
import javax.inject.Inject
import timber.log.Timber

/**
* A delegate providing common functionality for displaying a list of events and responding to
Expand All @@ -52,11 +52,10 @@ class DefaultEventActionsViewModelDelegate @Inject constructor(
signInViewModelDelegate: SignInViewModelDelegate,
private val starEventUseCase: StarEventAndNotifyUseCase,
private val snackbarMessageManager: SnackbarMessageManager,
@ApplicationScope private val externalScope: CoroutineScope,
@MainDispatcher private val mainDispatcher: CoroutineDispatcher
) : EventActionsViewModelDelegate, SignInViewModelDelegate by signInViewModelDelegate {

private val delegateScope = CoroutineScope(mainDispatcher + SupervisorJob())

private val _navigateToEventAction = MutableLiveData<Event<SessionId>>()
override val navigateToEventAction: LiveData<Event<SessionId>>
get() = _navigateToEventAction
Expand Down Expand Up @@ -95,7 +94,7 @@ class DefaultEventActionsViewModelDelegate @Inject constructor(
)
)

delegateScope.launch {
externalScope.launch(mainDispatcher) {
getUserId()?.let {
val result = starEventUseCase(
StarEventParameter(
Expand Down
Expand Up @@ -16,6 +16,7 @@

package com.google.samples.apps.iosched.ui.sessioncommon

import com.google.samples.apps.iosched.shared.di.ApplicationScope
import com.google.samples.apps.iosched.shared.di.MainDispatcher
import com.google.samples.apps.iosched.shared.domain.users.StarEventAndNotifyUseCase
import com.google.samples.apps.iosched.ui.messages.SnackbarMessageManager
Expand All @@ -25,6 +26,7 @@ import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.components.ActivityComponent
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope

/**
* Provides a default implementation of [EventActionsViewModelDelegate].
Expand All @@ -38,12 +40,14 @@ internal class EventActionsViewModelDelegateModule {
signInViewModelDelegate: SignInViewModelDelegate,
starEventUseCase: StarEventAndNotifyUseCase,
snackbarMessageManager: SnackbarMessageManager,
@ApplicationScope applicationScope: CoroutineScope,
@MainDispatcher mainDispatcher: CoroutineDispatcher
): EventActionsViewModelDelegate {
return DefaultEventActionsViewModelDelegate(
signInViewModelDelegate,
starEventUseCase,
snackbarMessageManager,
applicationScope,
mainDispatcher
)
}
Expand Down

0 comments on commit 504cc5a

Please sign in to comment.