Refactor: FeedbackObservers should not have to know about the Coordinator.
This also makes the initialization of feedback easier to reason about because there is no magic involved with adding the observers.
This commit is contained in:
parent
1af99c0263
commit
fcaa04a6fe
|
@ -3,12 +3,20 @@ package cash.z.ecc.android
|
|||
import android.content.Context
|
||||
import android.os.Build
|
||||
import cash.z.ecc.android.di.DaggerAppComponent
|
||||
import cash.z.ecc.android.feedback.FeedbackCoordinator
|
||||
import dagger.android.AndroidInjector
|
||||
import dagger.android.DaggerApplication
|
||||
import javax.inject.Inject
|
||||
|
||||
|
||||
class ZcashWalletApp : DaggerApplication() {
|
||||
|
||||
@Inject
|
||||
lateinit var feedbackCoordinator: FeedbackCoordinator
|
||||
|
||||
@Inject
|
||||
lateinit var feedbackObservers: Set<@JvmSuppressWildcards FeedbackCoordinator.FeedbackObserver>
|
||||
|
||||
var creationTime: Long = 0
|
||||
private set
|
||||
|
||||
|
@ -22,13 +30,14 @@ class ZcashWalletApp : DaggerApplication() {
|
|||
|
||||
Thread.setDefaultUncaughtExceptionHandler(ExceptionReporter(Thread.getDefaultUncaughtExceptionHandler()))
|
||||
// Twig.plant(TroubleshootingTwig())
|
||||
feedbackObservers.forEach { feedbackCoordinator.addObserver(it) }
|
||||
}
|
||||
|
||||
/**
|
||||
* Implement the HasActivityInjector behavior so that dagger knows which [AndroidInjector] to use.
|
||||
*/
|
||||
override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
|
||||
return DaggerAppComponent.builder().create(this)
|
||||
return DaggerAppComponent.factory().create(this)
|
||||
}
|
||||
|
||||
override fun attachBaseContext(base: Context) {
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package cash.z.ecc.android.di
|
||||
|
||||
import dagger.Binds
|
||||
import dagger.Module
|
||||
|
||||
@Module
|
||||
|
|
|
@ -8,6 +8,7 @@ import cash.z.ecc.android.ui.receive.ReceiveFragmentModule
|
|||
import cash.z.ecc.android.ui.send.SendFragmentModule
|
||||
import cash.z.ecc.android.ui.setup.BackupFragmentModule
|
||||
import cash.z.ecc.android.ui.setup.LandingFragmentModule
|
||||
import dagger.BindsInstance
|
||||
import dagger.Component
|
||||
import dagger.android.AndroidInjector
|
||||
import dagger.android.support.AndroidSupportInjectionModule
|
||||
|
@ -33,6 +34,9 @@ import javax.inject.Singleton
|
|||
]
|
||||
)
|
||||
interface AppComponent : AndroidInjector<ZcashWalletApp> {
|
||||
@Component.Builder
|
||||
abstract class Builder : AndroidInjector.Builder<ZcashWalletApp>()
|
||||
|
||||
@Component.Factory
|
||||
interface Factory {
|
||||
fun create(@BindsInstance application: ZcashWalletApp): AppComponent
|
||||
}
|
||||
}
|
|
@ -22,21 +22,18 @@ class AppModule {
|
|||
// Feedback Observer Set
|
||||
//
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@Provides
|
||||
@IntoSet
|
||||
fun provideFeedbackFile(feedbackCoordinator: FeedbackCoordinator)
|
||||
: FeedbackCoordinator.FeedbackObserver = FeedbackFile(feedbackCoordinator)
|
||||
fun provideFeedbackFile(): FeedbackCoordinator.FeedbackObserver = FeedbackFile()
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@Provides
|
||||
@IntoSet
|
||||
fun provideFeedbackConsole(feedbackCoordinator: FeedbackCoordinator)
|
||||
: FeedbackCoordinator.FeedbackObserver = FeedbackConsole(feedbackCoordinator)
|
||||
fun provideFeedbackConsole(): FeedbackCoordinator.FeedbackObserver = FeedbackConsole()
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@Provides
|
||||
@IntoSet
|
||||
fun provideFeedbackMixpanel(feedbackCoordinator: FeedbackCoordinator)
|
||||
: FeedbackCoordinator.FeedbackObserver = FeedbackMixpanel(feedbackCoordinator)
|
||||
fun provideFeedbackMixpanel(): FeedbackCoordinator.FeedbackObserver = FeedbackMixpanel()
|
||||
}
|
||||
|
|
|
@ -2,11 +2,7 @@ package cash.z.ecc.android.feedback
|
|||
|
||||
import android.util.Log
|
||||
|
||||
class FeedbackConsole(coordinator: FeedbackCoordinator) : FeedbackCoordinator.FeedbackObserver {
|
||||
|
||||
init {
|
||||
coordinator.addObserver(this)
|
||||
}
|
||||
class FeedbackConsole : FeedbackCoordinator.FeedbackObserver {
|
||||
|
||||
override fun onMetric(metric: Feedback.Metric) {
|
||||
log(metric.toString())
|
||||
|
|
|
@ -5,13 +5,9 @@ import okio.Okio
|
|||
import java.io.File
|
||||
import java.text.SimpleDateFormat
|
||||
|
||||
class FeedbackFile(coordinator: FeedbackCoordinator, fileName: String = "feedback.log") :
|
||||
class FeedbackFile(fileName: String = "feedback.log") :
|
||||
FeedbackCoordinator.FeedbackObserver {
|
||||
|
||||
init {
|
||||
coordinator.addObserver(this)
|
||||
}
|
||||
|
||||
private val file = File(ZcashWalletApp.instance.noBackupFilesDir, fileName)
|
||||
private val format = SimpleDateFormat("MM-dd HH:mm:ss.SSS")
|
||||
|
||||
|
|
|
@ -5,11 +5,7 @@ import cash.z.ecc.android.ZcashWalletApp
|
|||
import cash.z.ecc.android.ext.toAppString
|
||||
import com.mixpanel.android.mpmetrics.MixpanelAPI
|
||||
|
||||
class FeedbackMixpanel(coordinator: FeedbackCoordinator) : FeedbackCoordinator.FeedbackObserver {
|
||||
|
||||
init {
|
||||
coordinator.addObserver(this)
|
||||
}
|
||||
class FeedbackMixpanel : FeedbackCoordinator.FeedbackObserver {
|
||||
|
||||
private val mixpanel =
|
||||
MixpanelAPI.getInstance(ZcashWalletApp.instance, R.string.mixpanel_project.toAppString())
|
||||
|
|
|
@ -6,6 +6,7 @@ import android.content.Context
|
|||
import android.graphics.Color
|
||||
import android.media.MediaPlayer
|
||||
import android.os.Bundle
|
||||
import android.os.FileObserver
|
||||
import android.os.SystemClock
|
||||
import android.os.Vibrator
|
||||
import android.util.Log
|
||||
|
@ -36,10 +37,8 @@ class MainActivity : DaggerAppCompatActivity() {
|
|||
@Inject
|
||||
lateinit var feedback: Feedback
|
||||
|
||||
@Inject
|
||||
lateinit var observers: Set<@JvmSuppressWildcards FeedbackCoordinator.FeedbackObserver>
|
||||
|
||||
lateinit var navController: NavController
|
||||
|
||||
private val mediaPlayer: MediaPlayer = MediaPlayer()
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
|
|
|
@ -30,7 +30,7 @@ class FeedbackCoordinator(val feedback: Feedback) {
|
|||
private var contextMetrics = Dispatchers.IO
|
||||
private var contextActions = Dispatchers.IO
|
||||
private val jobs = CompositeJob()
|
||||
private val observers = mutableListOf<FeedbackObserver>()
|
||||
private val observers = mutableSetOf<FeedbackObserver>()
|
||||
|
||||
/**
|
||||
* Wait for any in-flight listeners to complete.
|
||||
|
|
Loading…
Reference in New Issue