From 4315057371ada19767d1ea0c17f87b0273207caa Mon Sep 17 00:00:00 2001 From: Quyunshuo Date: Fri, 4 Jun 2021 17:53:47 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BF=AE=E6=94=B9=E5=8E=9F?= =?UTF-8?q?=E6=9C=89=E7=BD=91=E7=BB=9C=E5=B1=82=E4=BB=A3=E7=A0=81=E4=B8=BA?= =?UTF-8?q?Hilt=E6=B3=A8=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/ui/BaseActivity.kt | 10 ++- .../common/ui/BaseNotMVVMActivity.kt | 10 ++- .../{NetBaseUrl.kt => NetBaseUrlConstant.kt} | 4 +- .../net/NetClientProvider.kt | 62 ------------------ .../net/di/DINetworkModule.kt | 63 +++++++++++++++++++ .../quyunshuo/module/home/HomeRepository.kt | 4 ++ .../module/home/di/DIHomeNetServiceModule.kt | 32 ++++++++++ .../module/home/net/HomeApiService.kt | 9 +++ 8 files changed, 128 insertions(+), 66 deletions(-) rename lib_net/src/main/java/com/quyunshuo/androidbaseframemvvm/net/{NetBaseUrl.kt => NetBaseUrlConstant.kt} (66%) delete mode 100644 lib_net/src/main/java/com/quyunshuo/androidbaseframemvvm/net/NetClientProvider.kt create mode 100644 lib_net/src/main/java/com/quyunshuo/androidbaseframemvvm/net/di/DINetworkModule.kt create mode 100644 module_home/src/main/java/com/quyunshuo/module/home/di/DIHomeNetServiceModule.kt create mode 100644 module_home/src/main/java/com/quyunshuo/module/home/net/HomeApiService.kt diff --git a/lib_common/src/main/java/com/quyunshuo/androidbaseframemvvm/common/ui/BaseActivity.kt b/lib_common/src/main/java/com/quyunshuo/androidbaseframemvvm/common/ui/BaseActivity.kt index 36d2eda..71526fe 100644 --- a/lib_common/src/main/java/com/quyunshuo/androidbaseframemvvm/common/ui/BaseActivity.kt +++ b/lib_common/src/main/java/com/quyunshuo/androidbaseframemvvm/common/ui/BaseActivity.kt @@ -2,6 +2,7 @@ package com.quyunshuo.androidbaseframemvvm.common.ui import androidx.viewbinding.ViewBinding import com.quyunshuo.androidbaseframemvvm.base.mvvm.v.BaseFrameActivity +import com.quyunshuo.androidbaseframemvvm.base.utils.AndroidBugFixUtils /** * Activity基类 @@ -9,4 +10,11 @@ import com.quyunshuo.androidbaseframemvvm.base.mvvm.v.BaseFrameActivity * @author Qu Yunshuo * @since 8/27/20 */ -abstract class BaseActivity : BaseFrameActivity() \ No newline at end of file +abstract class BaseActivity : BaseFrameActivity() { + + override fun onDestroy() { + super.onDestroy() + // 解决某些特定机型会触发的Android本身的Bug + AndroidBugFixUtils().fixSoftInputLeaks(this) + } +} \ No newline at end of file diff --git a/lib_common/src/main/java/com/quyunshuo/androidbaseframemvvm/common/ui/BaseNotMVVMActivity.kt b/lib_common/src/main/java/com/quyunshuo/androidbaseframemvvm/common/ui/BaseNotMVVMActivity.kt index bd7ea24..9493562 100644 --- a/lib_common/src/main/java/com/quyunshuo/androidbaseframemvvm/common/ui/BaseNotMVVMActivity.kt +++ b/lib_common/src/main/java/com/quyunshuo/androidbaseframemvvm/common/ui/BaseNotMVVMActivity.kt @@ -2,6 +2,7 @@ package com.quyunshuo.androidbaseframemvvm.common.ui import androidx.viewbinding.ViewBinding import com.quyunshuo.androidbaseframemvvm.base.mvvm.v.BaseFrameNotMVVMActivity +import com.quyunshuo.androidbaseframemvvm.base.utils.AndroidBugFixUtils /** * 不是 MVVM 模式的基类 @@ -9,4 +10,11 @@ import com.quyunshuo.androidbaseframemvvm.base.mvvm.v.BaseFrameNotMVVMActivity * @author Qu Yunshuo * @since 9/10/20 */ -abstract class BaseNotMVVMActivity : BaseFrameNotMVVMActivity() \ No newline at end of file +abstract class BaseNotMVVMActivity : BaseFrameNotMVVMActivity() { + + override fun onDestroy() { + // 解决某些特定机型会触发的Android本身的Bug + AndroidBugFixUtils().fixSoftInputLeaks(this) + super.onDestroy() + } +} \ No newline at end of file diff --git a/lib_net/src/main/java/com/quyunshuo/androidbaseframemvvm/net/NetBaseUrl.kt b/lib_net/src/main/java/com/quyunshuo/androidbaseframemvvm/net/NetBaseUrlConstant.kt similarity index 66% rename from lib_net/src/main/java/com/quyunshuo/androidbaseframemvvm/net/NetBaseUrl.kt rename to lib_net/src/main/java/com/quyunshuo/androidbaseframemvvm/net/NetBaseUrlConstant.kt index 44d78e6..bed1a55 100644 --- a/lib_net/src/main/java/com/quyunshuo/androidbaseframemvvm/net/NetBaseUrl.kt +++ b/lib_net/src/main/java/com/quyunshuo/androidbaseframemvvm/net/NetBaseUrlConstant.kt @@ -6,7 +6,7 @@ package com.quyunshuo.androidbaseframemvvm.net * @author Qu Yunshuo * @since 4/17/21 3:27 PM */ -internal object NetBaseUrl { +internal object NetBaseUrlConstant { - const val BASE_URLl = "" + const val MAIN_URL = "" } \ No newline at end of file diff --git a/lib_net/src/main/java/com/quyunshuo/androidbaseframemvvm/net/NetClientProvider.kt b/lib_net/src/main/java/com/quyunshuo/androidbaseframemvvm/net/NetClientProvider.kt deleted file mode 100644 index aa4fa95..0000000 --- a/lib_net/src/main/java/com/quyunshuo/androidbaseframemvvm/net/NetClientProvider.kt +++ /dev/null @@ -1,62 +0,0 @@ -package com.quyunshuo.androidbaseframemvvm.net - -import okhttp3.Interceptor -import okhttp3.OkHttpClient -import okhttp3.logging.HttpLoggingInterceptor -import retrofit2.Retrofit -import retrofit2.converter.gson.GsonConverterFactory -import java.util.concurrent.TimeUnit - -/** - * 网络客户端提供者 - * - * @author Qu Yunshuo - * @since 4/17/21 2:35 PM - */ -object NetClientProvider { - - /** - * 连接超时 - */ - private const val CONNECT_TIME_OUT = 15L * 1000L - - /** - * 读取超时 - */ - private const val READ_TIME_OUT = 20L * 1000L - - /** - * 日志拦截器 - */ - private val mLogInterceptor: Interceptor by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - val level = if (BuildConfig.DEBUG) { - HttpLoggingInterceptor.Level.BODY - } else { - HttpLoggingInterceptor.Level.NONE - } - HttpLoggingInterceptor().setLevel(level) - } - - /** - * OkHttpClient - */ - private val mOkHttpClient: OkHttpClient by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - OkHttpClient.Builder() - .connectTimeout(CONNECT_TIME_OUT, TimeUnit.MILLISECONDS) // 连接超时 - .readTimeout(READ_TIME_OUT, TimeUnit.MILLISECONDS) // 读取超时 - .addInterceptor(mLogInterceptor) // 日志拦截器 - .retryOnConnectionFailure(true) // 失败重连 - .build() - } - - /** - * 项目服务器Retrofit - */ - val mRetrofit: Retrofit by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - Retrofit.Builder() - .baseUrl(NetBaseUrl.BASE_URLl) - .addConverterFactory(GsonConverterFactory.create()) // Gson转换器 - .client(mOkHttpClient) - .build() - } -} \ No newline at end of file diff --git a/lib_net/src/main/java/com/quyunshuo/androidbaseframemvvm/net/di/DINetworkModule.kt b/lib_net/src/main/java/com/quyunshuo/androidbaseframemvvm/net/di/DINetworkModule.kt new file mode 100644 index 0000000..bf9f2c8 --- /dev/null +++ b/lib_net/src/main/java/com/quyunshuo/androidbaseframemvvm/net/di/DINetworkModule.kt @@ -0,0 +1,63 @@ +package com.quyunshuo.androidbaseframemvvm.net.di + +import com.quyunshuo.androidbaseframemvvm.base.BuildConfig +import com.quyunshuo.androidbaseframemvvm.net.NetBaseUrlConstant +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import okhttp3.OkHttpClient +import okhttp3.logging.HttpLoggingInterceptor +import retrofit2.Retrofit +import java.util.concurrent.TimeUnit +import okhttp3.logging.HttpLoggingInterceptor.Level.NONE +import okhttp3.logging.HttpLoggingInterceptor.Level.BODY +import retrofit2.converter.gson.GsonConverterFactory +import javax.inject.Singleton + +/** + * 全局作用域的网络层的依赖注入模块 + * + * @author Qu Yunshuo + * @since 6/4/21 8:58 AM + */ +@Module +@InstallIn(SingletonComponent::class) +class DINetworkModule { + + /** + * [OkHttpClient]依赖提供方法 + * + * @return OkHttpClient + */ + @Singleton + @Provides + fun provideOkHttpClient(): OkHttpClient { + // 日志拦截器部分 + val level = if (BuildConfig.DEBUG) BODY else NONE + val logInterceptor = HttpLoggingInterceptor().setLevel(level) + + return OkHttpClient.Builder() + .connectTimeout(15L * 1000L, TimeUnit.MILLISECONDS) + .readTimeout(20L * 1000L, TimeUnit.MILLISECONDS) + .addInterceptor(logInterceptor) + .retryOnConnectionFailure(true) + .build() + } + + /** + * 项目主要服务器地址的[Retrofit]依赖提供方法 + * + * @param okHttpClient OkHttpClient OkHttp客户端 + * @return Retrofit + */ + @Singleton + @Provides + fun provideMainRetrofit(okHttpClient: OkHttpClient): Retrofit { + return Retrofit.Builder() + .baseUrl(NetBaseUrlConstant.MAIN_URL) + .addConverterFactory(GsonConverterFactory.create()) + .client(okHttpClient) + .build() + } +} \ No newline at end of file diff --git a/module_home/src/main/java/com/quyunshuo/module/home/HomeRepository.kt b/module_home/src/main/java/com/quyunshuo/module/home/HomeRepository.kt index 8f7d414..8f0f237 100644 --- a/module_home/src/main/java/com/quyunshuo/module/home/HomeRepository.kt +++ b/module_home/src/main/java/com/quyunshuo/module/home/HomeRepository.kt @@ -1,6 +1,7 @@ package com.quyunshuo.module.home import com.quyunshuo.androidbaseframemvvm.base.mvvm.m.BaseRepository +import com.quyunshuo.module.home.net.HomeApiService import kotlinx.coroutines.delay import javax.inject.Inject @@ -12,6 +13,9 @@ import javax.inject.Inject */ class HomeRepository @Inject constructor() : BaseRepository() { + @Inject + lateinit var mApi: HomeApiService + /** * 模拟获取数据 */ diff --git a/module_home/src/main/java/com/quyunshuo/module/home/di/DIHomeNetServiceModule.kt b/module_home/src/main/java/com/quyunshuo/module/home/di/DIHomeNetServiceModule.kt new file mode 100644 index 0000000..a3963b8 --- /dev/null +++ b/module_home/src/main/java/com/quyunshuo/module/home/di/DIHomeNetServiceModule.kt @@ -0,0 +1,32 @@ +package com.quyunshuo.module.home.di + +import com.quyunshuo.module.home.net.HomeApiService +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import retrofit2.Retrofit +import javax.inject.Singleton + +/** + * 全局作用域的Home组件网络接口代理依赖注入模块 + * + * @author Qu Yunshuo + * @since 6/4/21 5:51 PM + */ +@Module +@InstallIn(SingletonComponent::class) +class DIHomeNetServiceModule { + + /** + * Home模块的[HomeApiService]依赖提供方法 + * + * @param retrofit Retrofit + * @return HomeApiService + */ + @Singleton + @Provides + fun provideHomeApiService(retrofit: Retrofit): HomeApiService { + return retrofit.create(HomeApiService::class.java) + } +} \ No newline at end of file diff --git a/module_home/src/main/java/com/quyunshuo/module/home/net/HomeApiService.kt b/module_home/src/main/java/com/quyunshuo/module/home/net/HomeApiService.kt new file mode 100644 index 0000000..06aaffc --- /dev/null +++ b/module_home/src/main/java/com/quyunshuo/module/home/net/HomeApiService.kt @@ -0,0 +1,9 @@ +package com.quyunshuo.module.home.net + +/** + * Home模块的接口 + * + * @author Qu Yunshuo + * @since 6/4/21 5:51 PM + */ +interface HomeApiService \ No newline at end of file