|
17 | 17 | package cn.nekocode.gank |
18 | 18 |
|
19 | 19 | import android.app.Application |
20 | | -import cn.nekocode.gank.backend.Apis |
21 | | -import com.facebook.flipper.android.AndroidFlipperClient |
22 | | -import com.facebook.flipper.android.utils.FlipperUtils |
23 | | -import com.facebook.flipper.plugins.inspector.DescriptorMapping |
24 | | -import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin |
25 | | -import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor |
26 | | -import com.facebook.flipper.plugins.network.NetworkFlipperPlugin |
27 | | -import com.facebook.soloader.SoLoader |
| 20 | +import android.util.Log |
| 21 | +import androidx.lifecycle.ViewModelProvider |
| 22 | +import cn.nekocode.gank.backend.di.module.ApiModule |
| 23 | +import cn.nekocode.gank.di.DaggerViewModelFactory |
| 24 | +import cn.nekocode.gank.di.component.AppComponent |
| 25 | +import cn.nekocode.gank.di.component.DaggerAppComponent |
| 26 | +import cn.nekocode.gank.di.module.AppModule |
| 27 | +import cn.nekocode.gank.di.module.FlipperModule |
| 28 | +import com.facebook.flipper.core.FlipperClient |
28 | 29 | import com.google.gson.GsonBuilder |
29 | 30 | import okhttp3.OkHttpClient |
| 31 | +import timber.log.Timber |
| 32 | +import javax.inject.Inject |
30 | 33 |
|
31 | 34 | /** |
32 | 35 | * @author nekocode ([email protected]) |
33 | 36 | */ |
34 | | -class GankApplication : Application() { |
35 | | - lateinit var apis: Apis |
| 37 | +open class GankApplication : Application() { |
| 38 | + lateinit var component: AppComponent |
| 39 | + @Inject |
| 40 | + lateinit var flipperClient: FlipperClient |
| 41 | + @Inject |
| 42 | + lateinit var viewModelFactory: ViewModelProvider.Factory |
36 | 43 |
|
37 | 44 | override fun onCreate() { |
38 | 45 | super.onCreate() |
| 46 | + component = createComponent() |
| 47 | + component.inject(this) |
39 | 48 |
|
| 49 | + if (BuildConfig.DEBUG) { |
| 50 | + Timber.plant(Timber.DebugTree()) |
| 51 | + } else { |
| 52 | + Timber.plant(CrashReportingTree()) |
| 53 | + } |
| 54 | + flipperClient.start() |
| 55 | + } |
| 56 | + |
| 57 | + protected open fun createComponent(): AppComponent { |
40 | 58 | val httpClientBuilder = OkHttpClient.Builder() |
| 59 | + val gsonBuilder = GsonBuilder() |
41 | 60 |
|
42 | | - // Flipper https://fbflipper.com/docs/getting-started.html |
43 | | - SoLoader.init(this, false) |
44 | | - if (BuildConfig.DEBUG && FlipperUtils.shouldEnableFlipper(this)) { |
45 | | - AndroidFlipperClient.getInstance(this).apply { |
46 | | - // Layout inspecting |
47 | | - addPlugin( |
48 | | - InspectorFlipperPlugin( |
49 | | - this@GankApplication, DescriptorMapping.withDefaults()) |
50 | | - ) |
51 | | - |
52 | | - // Network inspecting |
53 | | - NetworkFlipperPlugin().let { |
54 | | - addPlugin(it) |
55 | | - httpClientBuilder.addNetworkInterceptor(FlipperOkhttpInterceptor(it)) |
56 | | - } |
57 | | - }.start() |
58 | | - } |
| 61 | + return DaggerAppComponent.builder() |
| 62 | + .appModule(AppModule(this)) |
| 63 | + .flipperModule(FlipperModule(this, httpClientBuilder)) |
| 64 | + .apiModule(ApiModule(httpClientBuilder, gsonBuilder)) |
| 65 | + .build() |
| 66 | + } |
59 | 67 |
|
60 | | - // Components |
61 | | - apis = Apis(httpClientBuilder, GsonBuilder()) |
| 68 | + private class CrashReportingTree : Timber.Tree() { |
| 69 | + override fun log(priority: Int, tag: String?, message: String, t: Throwable?) { |
| 70 | + if (priority == Log.VERBOSE || priority == Log.DEBUG) { |
| 71 | + return |
| 72 | + } |
| 73 | + // Report |
| 74 | + } |
62 | 75 | } |
63 | 76 | } |
0 commit comments