diff --git a/app/build.gradle b/app/build.gradle index 22dbeb5..80f85e9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -91,6 +91,8 @@ dependencies { implementation "com.meituan.android.walle:library:${versions.walle}" //Arouter路由 kapt "com.alibaba:arouter-compiler:${versions.arouterCompiler}" + //dagger + kapt "com.google.dagger:dagger-compiler:${versions.dagger}" testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.2.0' diff --git a/base/build.gradle b/base/build.gradle index ca572b9..2d49fa9 100644 --- a/base/build.gradle +++ b/base/build.gradle @@ -77,6 +77,9 @@ dependencies { api "com.alibaba:arouter-annotation:${versions.arouterAnnotation}" api "com.alibaba:arouter-api:${versions.arouterApi}" kapt "com.alibaba:arouter-compiler:${versions.arouterCompiler}" + //dagger + api "com.google.dagger:dagger:${versions.dagger}" + kapt "com.google.dagger:dagger-compiler:${versions.dagger}" //解决dex超出方法数限制的问题 api "com.android.support:multidex:${versions.multidex}" //工具类 diff --git a/base/src/main/java/com/heyongrui/base/app/BaseApplication.java b/base/src/main/java/com/heyongrui/base/app/BaseApplication.java index ced79a4..1ee230e 100644 --- a/base/src/main/java/com/heyongrui/base/app/BaseApplication.java +++ b/base/src/main/java/com/heyongrui/base/app/BaseApplication.java @@ -13,9 +13,16 @@ import com.heyongrui.base.BuildConfig; import com.heyongrui.base.assist.AppManager; import com.heyongrui.base.assist.NetStateChangeReceiver; +import com.heyongrui.base.dagger.AppComponent; +import com.heyongrui.base.dagger.AppModule; +import com.heyongrui.base.dagger.DaggerAppComponent; import com.tencent.smtt.sdk.QbSdk; public class BaseApplication extends Application { + + private static BaseApplication instance; + private static AppComponent appComponent; + @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); @@ -25,6 +32,8 @@ protected void attachBaseContext(Context base) { @Override public void onCreate() { super.onCreate(); + instance = this; + initializeInjector(); //工具类初始化 Utils.init(this); //初始化Arouter @@ -93,4 +102,23 @@ public void onActivityDestroyed(Activity activity) { } }); } + + public static BaseApplication getInstance() { + return instance; + } + + public static Context getContext() { + return getInstance().getApplicationContext(); + } + + public static AppComponent getAppComponent() { + return appComponent; + } + + //初始化component + private void initializeInjector() { + appComponent = DaggerAppComponent.builder() + .appModule(new AppModule(this)) + .build(); + } } diff --git a/base/src/main/java/com/heyongrui/base/base/BaseActivity.java b/base/src/main/java/com/heyongrui/base/base/BaseActivity.java index d132a1f..1093ee5 100644 --- a/base/src/main/java/com/heyongrui/base/base/BaseActivity.java +++ b/base/src/main/java/com/heyongrui/base/base/BaseActivity.java @@ -14,8 +14,10 @@ import com.alibaba.android.arouter.launcher.ARouter; import com.blankj.utilcode.util.NetworkUtils; +import com.heyongrui.base.app.BaseApplication; import com.heyongrui.base.assist.NetStateChangeObserver; import com.heyongrui.base.assist.NetStateChangeReceiver; +import com.heyongrui.base.dagger.AppComponent; import java.lang.reflect.Field; import java.lang.reflect.Method; @@ -28,7 +30,7 @@ */ public abstract class BaseActivity extends SupportActivity implements NetStateChangeObserver { - protected String TAG = "BaseFragment"; + protected String TAG = "BaseActivity"; protected T mPresenter; @Override @@ -39,6 +41,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { Log.i("onCreate", "onCreate fixOrientation when Oreo, result = " + result); } super.onCreate(savedInstanceState); + initializeInjector(); if (isImmersionBarEnabled()) { initImmersionBar(); } @@ -49,10 +52,8 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { } ARouter.getInstance().inject(this); mPresenter = setPresenter(); - if (mPresenter != null) { - if (this instanceof BaseView) { - mPresenter.attchView(this, (BaseView) this); - } + if (null != mPresenter && this instanceof BaseView) { + mPresenter.attchView(this, (BaseView) this); } init(savedInstanceState); if (!NetworkUtils.isConnected()) { @@ -90,24 +91,12 @@ protected void onStop() { @Override protected void onDestroy() { - if (mPresenter != null) { + if (null != mPresenter) { mPresenter.detachView(); } super.onDestroy(); } - protected boolean needRegisterNetworkChangeObserver() { - return false; - } - - @Override - public void onNetDisconnected() { - } - - @Override - public void onNetConnected(NetworkUtils.NetworkType networkType) { - } - protected boolean fixOrientation() { try { Field field = Activity.class.getDeclaredField("mActivityInfo"); @@ -161,6 +150,20 @@ protected void addOnLongClickListeners(View.OnLongClickListener onClickListener, } } + protected AppComponent getAppComponent() { + return BaseApplication.getAppComponent(); + } + + protected void initializeInjector() { + } + + protected boolean isImmersionBarEnabled() {//是否启用沉浸式 + return true; + } + + protected void initImmersionBar() { + } + protected abstract int getLayoutId(); protected T setPresenter() { @@ -169,10 +172,19 @@ protected T setPresenter() { protected abstract void init(Bundle savedInstanceState); - protected boolean isImmersionBarEnabled() {//是否启用沉浸式 - return true; + + /** + * 是否需要注册网络变化的Observer,如果不需要监听网络变化,则返回false;否则返回true.默认返回false + */ + protected boolean needRegisterNetworkChangeObserver() { + return false; } - protected void initImmersionBar() { + @Override + public void onNetDisconnected() {//网络断开 + } + + @Override + public void onNetConnected(NetworkUtils.NetworkType networkType) {//网络连接 } } diff --git a/base/src/main/java/com/heyongrui/base/base/BaseFragment.java b/base/src/main/java/com/heyongrui/base/base/BaseFragment.java index 3d385d5..216b381 100644 --- a/base/src/main/java/com/heyongrui/base/base/BaseFragment.java +++ b/base/src/main/java/com/heyongrui/base/base/BaseFragment.java @@ -12,8 +12,10 @@ import androidx.fragment.app.FragmentActivity; import com.blankj.utilcode.util.NetworkUtils; +import com.heyongrui.base.app.BaseApplication; import com.heyongrui.base.assist.NetStateChangeObserver; import com.heyongrui.base.assist.NetStateChangeReceiver; +import com.heyongrui.base.dagger.AppComponent; import me.yokeyword.fragmentation.SupportFragment; @@ -33,6 +35,7 @@ public abstract class BaseFragment extends SupportFragm @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + initializeInjector(); TAG = this.getClass().getSimpleName(); mActivity = getActivity(); mContext = getContext(); @@ -46,21 +49,14 @@ public void onSupportVisible() { } } - public void initImmersionBar() { - } - - private boolean isImmersionBarEnabled() { - return true; - } - @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mInflater = inflater; mPresenter = setPresenter(); - if (mPresenter != null) { - if (this instanceof BaseView) mPresenter.attchView(mContext, (BaseView) this); + if (null != mPresenter && this instanceof BaseView) { + mPresenter.attchView(mContext, (BaseView) this); } - if (mView == null) { + if (null == mView) { mView = inflater.inflate(getLayoutId(), container, false); initView(savedInstanceState); } else { @@ -107,27 +103,12 @@ public void onStop() { @Override public void onDestroy() { - if (mPresenter != null) { + if (null != mPresenter) { mPresenter.detachView(); } super.onDestroy(); } - /** - * 是否需要注册网络变化的Observer,如果不需要监听网络变化,则返回false;否则返回true.默认返回false - */ - protected boolean needRegisterNetworkChangeObserver() { - return false; - } - - @Override - public void onNetDisconnected() {//网络断开 - } - - @Override - public void onNetConnected(NetworkUtils.NetworkType networkType) {//网络连接 - } - protected void addOnClickListeners(View.OnClickListener onClickListener, View... views) { if (views != null) { for (View view : views) { @@ -137,7 +118,7 @@ protected void addOnClickListeners(View.OnClickListener onClickListener, View... } protected void addOnClickListeners(View.OnClickListener onClickListener, @IdRes int... ids) { - if (mView == null) return; + if (null == mView) return; if (ids != null) { for (@IdRes int id : ids) { mView.findViewById(id).setOnClickListener(onClickListener); @@ -146,7 +127,7 @@ protected void addOnClickListeners(View.OnClickListener onClickListener, @IdRes } protected void addOnLongClickListeners(View.OnLongClickListener onClickListener, @IdRes int... ids) { - if (mView == null) return; + if (null == mView) return; if (ids != null) { for (@IdRes int id : ids) { mView.findViewById(id).setOnLongClickListener(onClickListener); @@ -154,14 +135,42 @@ protected void addOnLongClickListeners(View.OnLongClickListener onClickListener, } } + protected AppComponent getAppComponent() { + return BaseApplication.getAppComponent(); + } - protected abstract int getLayoutId(); + protected void initializeInjector() { + } protected T setPresenter() { return null; } + protected abstract int getLayoutId(); + protected abstract void initView(Bundle savedInstanceState); protected abstract void initData(Bundle savedInstanceState); + + protected void initImmersionBar() { + } + + protected boolean isImmersionBarEnabled() { + return true; + } + + /** + * 是否需要注册网络变化的Observer,如果不需要监听网络变化,则返回false;否则返回true.默认返回false + */ + protected boolean needRegisterNetworkChangeObserver() { + return false; + } + + @Override + public void onNetDisconnected() {//网络断开 + } + + @Override + public void onNetConnected(NetworkUtils.NetworkType networkType) {//网络连接 + } } diff --git a/base/src/main/java/com/heyongrui/base/dagger/AppComponent.java b/base/src/main/java/com/heyongrui/base/dagger/AppComponent.java new file mode 100644 index 0000000..2d0ce45 --- /dev/null +++ b/base/src/main/java/com/heyongrui/base/dagger/AppComponent.java @@ -0,0 +1,22 @@ +package com.heyongrui.base.dagger; + + +import com.heyongrui.base.assist.AppData; + +import javax.inject.Singleton; + +import dagger.Component; + +/** + * 2019/8/26 + * lambert + */ + +@Singleton +@Component(modules = {AppModule.class}) +public interface AppComponent { + /* + * 暴露给依赖者Component(依赖者若使用@Component,此处必须暴露,否则依赖者无法@Inject AppData;依赖者若使用@Subcomponent,此处可以不暴露依赖者也可@Inject AppData) + */ + AppData appData(); +} diff --git a/base/src/main/java/com/heyongrui/base/dagger/AppModule.java b/base/src/main/java/com/heyongrui/base/dagger/AppModule.java new file mode 100644 index 0000000..7a580db --- /dev/null +++ b/base/src/main/java/com/heyongrui/base/dagger/AppModule.java @@ -0,0 +1,40 @@ +package com.heyongrui.base.dagger; + + +import com.heyongrui.base.app.BaseApplication; +import com.heyongrui.base.assist.AppData; + +import javax.inject.Singleton; + +import dagger.Module; +import dagger.Provides; + +/** + * 2019/8/26 + * lambert + */ + +@Module +public class AppModule { + private BaseApplication baseApplication; + + public AppModule(BaseApplication baseApplication) { + this.baseApplication = baseApplication; + } + + @Provides + @Singleton + BaseApplication providesApplication() { + return baseApplication; + } + + + /* + * @Inject AppData使用单例,由于AppModule在BaseApplication中初始,所以@Inject AppData是全局单例(而且AppComponent也必须加上@Singleton) + */ + @Provides + @Singleton + AppData provideAppData() { + return new AppData(); + } +} diff --git a/base/src/main/java/com/heyongrui/base/dagger/PerActivity.java b/base/src/main/java/com/heyongrui/base/dagger/PerActivity.java new file mode 100644 index 0000000..5e75fee --- /dev/null +++ b/base/src/main/java/com/heyongrui/base/dagger/PerActivity.java @@ -0,0 +1,17 @@ +package com.heyongrui.base.dagger; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +import javax.inject.Scope; + +/** + * 2019/8/26 + * lambert + */ +@Documented +@Scope +@Retention(RetentionPolicy.RUNTIME) +public @interface PerActivity { +} diff --git a/base/src/main/java/com/heyongrui/base/utils/GlideUtil.java b/base/src/main/java/com/heyongrui/base/utils/GlideUtil.java index f080dba..ba159e1 100644 --- a/base/src/main/java/com/heyongrui/base/utils/GlideUtil.java +++ b/base/src/main/java/com/heyongrui/base/utils/GlideUtil.java @@ -8,6 +8,7 @@ import androidx.annotation.DrawableRes; import androidx.annotation.FloatRange; import androidx.annotation.Nullable; +import androidx.annotation.WorkerThread; import androidx.vectordrawable.graphics.drawable.Animatable2Compat; import com.bumptech.glide.load.DataSource; @@ -198,6 +199,7 @@ public static void loadCircle(Context context, Object resource, ImageView imageV /** * 通过图片URL获得Bitmap(需在子线程中运行) */ + @WorkerThread public static Bitmap getBitmap(Context context, Object resource, boolean is_circle, Integer width, Integer height) { Bitmap bitmap = null; try { diff --git a/base/src/main/java/com/heyongrui/base/widget/ReSpinner.java b/base/src/main/java/com/heyongrui/base/widget/ReSpinner.java new file mode 100644 index 0000000..c91ceb2 --- /dev/null +++ b/base/src/main/java/com/heyongrui/base/widget/ReSpinner.java @@ -0,0 +1,114 @@ +package com.heyongrui.base.widget; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; +import android.widget.AdapterView; + +import androidx.appcompat.widget.AppCompatSpinner; + +/** + * 2019/8/28 + * lambert + * 自定义Spinner,解决重复选择同一位置不回调问题 + */ +public class ReSpinner extends AppCompatSpinner { + + private boolean mIsCallbackSamePosition = true;//重复点击同一position,是否触发回调 + + public ReSpinner(Context context) { + super(context); + } + + public ReSpinner(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public ReSpinner(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + public void setIsCallbackSamePosition(boolean isCallbackSamePosition) { + this.mIsCallbackSamePosition = isCallbackSamePosition; + } + + @Override + public void setSelection(int position) { + boolean sameSelected = position == getSelectedItemPosition(); + super.setSelection(position); + if (sameSelected && mIsCallbackSamePosition) {//重复点击同一position,手动触发回调,其他position系统会回调 + OnItemSelectedListener onItemSelectedListener = getOnItemSelectedListener(); + if (null != onItemSelectedListener) { + onItemSelectedListener.onItemSelected(this, getSelectedView(), position, getSelectedItemId()); + } + } + } + + @Override + public void setSelection(int position, boolean animate) { + boolean sameSelected = position == getSelectedItemPosition(); + super.setSelection(position, animate); + if (sameSelected && mIsCallbackSamePosition) {//重复点击同一position,手动触发回调,其他position系统会回调 + OnItemSelectedListener onItemSelectedListener = getOnItemSelectedListener(); + if (null != onItemSelectedListener) { + onItemSelectedListener.onItemSelected(this, getSelectedView(), position, getSelectedItemId()); + } + } + } + + public void reset() {//重置为空的状态,隐藏选择view,回调position为-1 + OnItemSelectedListener onItemSelectedListener = getOnItemSelectedListener(); + View selectedView = getSelectedView(); + if (null != onItemSelectedListener) { + onItemSelectedListener.onItemSelected(this, selectedView, -1, -1); + } + if (null != selectedView) { + selectedView.setVisibility(INVISIBLE); + } + } + + /** + * 2019/8/28 + * lambert + * 自定义OnItemSelectedListener,实现spinner默认是否选中功能 + */ + public static class OnReItemSelectedListener implements OnItemSelectedListener { + + boolean isFirst = true; + boolean mIsDefaultSelected = true;//是否执行默认选中item第一个逻辑 + + public OnReItemSelectedListener() { + } + + public OnReItemSelectedListener(boolean isDefaultSelected) { + this.mIsDefaultSelected = isDefaultSelected; + } + + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + if (mIsDefaultSelected) {//初始默认选中第一个 + onReItemSelected(adapterView, view, i, l); + } else {//初始默认不选中 + if (isFirst) { + view.setVisibility(View.INVISIBLE); + isFirst = false; + onReItemSelected(adapterView, view, -1, -1); + } else { + if (view.getVisibility() != View.VISIBLE) { + view.setVisibility(View.VISIBLE); + } + onReItemSelected(adapterView, view, i, l); + } + } + } + + @Override + public void onNothingSelected(AdapterView adapterView) { + + } + + public void onReItemSelected(AdapterView adapterView, View view, int i, long l) { + //使用时用此方法代替onItemSelected即可,用户可在此自定义操作(i=-1代表未选中状态) + } + } +} diff --git a/base/src/main/res/layout/layout_spinner_dropdown_item.xml b/base/src/main/res/layout/layout_spinner_dropdown_item.xml new file mode 100644 index 0000000..eaebe17 --- /dev/null +++ b/base/src/main/res/layout/layout_spinner_dropdown_item.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/config.gradle b/config.gradle index 00f5046..9b1b34c 100644 --- a/config.gradle +++ b/config.gradle @@ -28,6 +28,7 @@ ext { arouterAnnotation : '1.0.6', arouterCompiler : '1.2.2', arouterRegister : '1.0.2', + dagger : '2.24', retrofit : '2.6.1', okhttp : '4.0.1', rxjava : '2.2.10', diff --git a/main/build.gradle b/main/build.gradle index 79088d6..ce19315 100644 --- a/main/build.gradle +++ b/main/build.gradle @@ -92,6 +92,8 @@ dependencies { implementation project(':network') //Arouter路由 kapt "com.alibaba:arouter-compiler:${versions.arouterCompiler}" + //dagger + kapt "com.google.dagger:dagger-compiler:${versions.dagger}" implementation "com.aurelhubert:ahbottomnavigation:${versions.ahbottomnavigation}" testImplementation 'junit:junit:4.12' diff --git a/module/build.gradle b/module/build.gradle index e212776..1aa628c 100644 --- a/module/build.gradle +++ b/module/build.gradle @@ -93,6 +93,8 @@ dependencies { implementation project(':network') //Arouter路由 kapt "com.alibaba:arouter-compiler:${versions.arouterCompiler}" + //dagger + kapt "com.google.dagger:dagger-compiler:${versions.dagger}" //视频框架 implementation "cn.jzvd:jiaozivideoplayer:${versions.jiaozivideoplayer}" diff --git a/module/src/main/java/com/heyongrui/module/ModuleFragment.java b/module/src/main/java/com/heyongrui/module/ModuleFragment.java index 5f8d6af..7a371e6 100644 --- a/module/src/main/java/com/heyongrui/module/ModuleFragment.java +++ b/module/src/main/java/com/heyongrui/module/ModuleFragment.java @@ -6,17 +6,25 @@ import androidx.recyclerview.widget.RecyclerView; import com.alibaba.android.arouter.launcher.ARouter; +import com.heyongrui.base.assist.AppData; import com.heyongrui.base.assist.ConfigConstants; import com.heyongrui.base.base.BaseFragment; import com.heyongrui.module.adapter.ModuleSectionAdapter; import com.heyongrui.module.adapter.ModuleSectionEntity; +import com.heyongrui.module.dagger.DaggerModuleComponent; +import com.heyongrui.module.dagger.ModuleModule; import com.heyongrui.module.data.dto.MenuCardDto; import java.util.ArrayList; import java.util.List; +import javax.inject.Inject; + public class ModuleFragment extends BaseFragment { + @Inject + AppData mAppData; + public static ModuleFragment getInstance() { ModuleFragment fragment = new ModuleFragment(); Bundle bundle = new Bundle(); @@ -31,6 +39,17 @@ protected int getLayoutId() { return R.layout.fragment_module; } + @Override + protected void initializeInjector() { + super.initializeInjector(); + DaggerModuleComponent + .builder() + .appComponent(getAppComponent()) + .moduleModule(new ModuleModule(this)) + .build() + .inject(this); + } + @Override protected void initView(Bundle savedInstanceState) { RecyclerView recyclerView = mView.findViewById(R.id.recycler_view); @@ -39,7 +58,6 @@ protected void initView(Bundle savedInstanceState) { @Override protected void initData(Bundle savedInstanceState) { - } private void initRecyclerView(RecyclerView recyclerView) { diff --git a/module/src/main/java/com/heyongrui/module/dagger/ActivityContext.java b/module/src/main/java/com/heyongrui/module/dagger/ActivityContext.java new file mode 100644 index 0000000..f42e6eb --- /dev/null +++ b/module/src/main/java/com/heyongrui/module/dagger/ActivityContext.java @@ -0,0 +1,12 @@ +package com.heyongrui.module.dagger; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +import javax.inject.Qualifier; + +@Qualifier +@Retention(RetentionPolicy.RUNTIME) +public @interface ActivityContext { + +} \ No newline at end of file diff --git a/module/src/main/java/com/heyongrui/module/dagger/ModuleComponent.java b/module/src/main/java/com/heyongrui/module/dagger/ModuleComponent.java new file mode 100644 index 0000000..6816ced --- /dev/null +++ b/module/src/main/java/com/heyongrui/module/dagger/ModuleComponent.java @@ -0,0 +1,33 @@ +package com.heyongrui.module.dagger; + +import android.app.Activity; + +import androidx.fragment.app.Fragment; + +import com.heyongrui.base.dagger.AppComponent; +import com.heyongrui.base.dagger.PerActivity; +import com.heyongrui.module.ModuleFragment; +import com.heyongrui.module.douban.presenter.DouBanPresenter; +import com.heyongrui.module.douban.view.DouBanActivity; + +import dagger.Component; + +/** + * 2019/8/26 + * lambert + * 此Component依赖AppComponent,由于AppComponent使用了@Singleton,此处只能使用自定义@Scope(@PerActivity) + */ + +@PerActivity +@Component(dependencies = AppComponent.class, modules = {ModuleModule.class}) +public interface ModuleComponent { + Activity getActivity(); + + Fragment getFragment(); + + void inject(DouBanActivity douBanActivity); + + void inject(DouBanPresenter douBanPresenter); + + void inject(ModuleFragment moduleFragment); +} diff --git a/module/src/main/java/com/heyongrui/module/dagger/ModuleModule.java b/module/src/main/java/com/heyongrui/module/dagger/ModuleModule.java new file mode 100644 index 0000000..ba232b3 --- /dev/null +++ b/module/src/main/java/com/heyongrui/module/dagger/ModuleModule.java @@ -0,0 +1,83 @@ +package com.heyongrui.module.dagger; + + +import android.app.Activity; +import android.content.Context; + +import androidx.fragment.app.Fragment; + +import com.heyongrui.base.dagger.PerActivity; +import com.heyongrui.module.data.service.DailyLifeService; +import com.heyongrui.module.data.service.DouBanService; +import com.heyongrui.module.data.service.MonoSerevice; +import com.heyongrui.module.data.service.TextService; + +import dagger.Module; +import dagger.Provides; + +@Module +public class ModuleModule { + + private Activity mActivity; + private Fragment mFragment; + + public ModuleModule() { + } + + public ModuleModule(Activity activity) { + mActivity = activity; + } + + public ModuleModule(Fragment fragment) { + this.mFragment = fragment; + } + + @Provides + Activity provideActivity() { + return mActivity; + } + + @Provides + Fragment provideFragment() { + return mFragment; + } + + /* + * @ActivityContext别名,通过在@Inject时加入这个自定义注解达到返回相同provider类型但是数据不同(eg:User() User(int age)) + */ + @Provides + @ActivityContext + Context providesContext() { + Context context = null; + if (null != mActivity) { + context = mActivity; + } else if (null != mFragment) { + context = mFragment.getContext(); + } + return context; + } + + @Provides + @PerActivity + DailyLifeService provideDailyLifeService() { + return new DailyLifeService(); + } + + @Provides + @PerActivity + DouBanService provideDouBanService() { + return new DouBanService(); + } + + @Provides + @PerActivity + MonoSerevice provideMonoSerevice() { + return new MonoSerevice(); + } + + @Provides + @PerActivity + TextService provideTextService() { + return new TextService(); + } +} diff --git a/module/src/main/java/com/heyongrui/module/douban/contract/DouBanContract.java b/module/src/main/java/com/heyongrui/module/douban/contract/DouBanContract.java index 85f0418..a19a67e 100644 --- a/module/src/main/java/com/heyongrui/module/douban/contract/DouBanContract.java +++ b/module/src/main/java/com/heyongrui/module/douban/contract/DouBanContract.java @@ -1,8 +1,19 @@ package com.heyongrui.module.douban.contract; +import android.widget.AdapterView; +import android.widget.Spinner; + +import androidx.recyclerview.widget.RecyclerView; + +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.google.android.material.tabs.TabLayout; import com.heyongrui.base.base.BasePresenter; import com.heyongrui.base.base.BaseView; +import com.heyongrui.module.adapter.ModuleSectionAdapter; import com.heyongrui.module.data.dto.DouBanDto; +import com.scwang.smartrefresh.header.StoreHouseHeader; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener; import java.util.List; @@ -13,12 +24,21 @@ interface View extends BaseView { void getSubjectsDataSuccess(DouBanDto douBanDto); void getSubjectsDataFail(int errorCode, String errorMsg); + + void onSpinnerItemSelected(AdapterView adapterView, T t, int position); } abstract class Presenter extends BasePresenter { + public abstract void initSwipeRefresh(SmartRefreshLayout smartRefreshLayout, StoreHouseHeader storeHouseHeader, OnRefreshLoadMoreListener onRefreshLoadMoreListener); + + public abstract ModuleSectionAdapter initRecyclerView(RecyclerView recyclerView, BaseQuickAdapter.OnItemClickListener listener); + + public abstract void initSpinner(Spinner spinner, List dataList); public abstract void getIndexTags(String type, String source); public abstract void getSubjectsData(String type, String tag, String sort, int pageSize, int pageStart); + + public abstract void setTagsData(TabLayout tabLayout, List tagsList, TabLayout.BaseOnTabSelectedListener tabSelectedListener); } } diff --git a/module/src/main/java/com/heyongrui/module/douban/presenter/DouBanPresenter.java b/module/src/main/java/com/heyongrui/module/douban/presenter/DouBanPresenter.java index a8baeac..e12bba9 100644 --- a/module/src/main/java/com/heyongrui/module/douban/presenter/DouBanPresenter.java +++ b/module/src/main/java/com/heyongrui/module/douban/presenter/DouBanPresenter.java @@ -1,27 +1,138 @@ package com.heyongrui.module.douban.presenter; +import android.graphics.Color; import android.text.TextUtils; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.Spinner; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.StaggeredGridLayoutManager; + +import com.blankj.utilcode.util.ConvertUtils; import com.blankj.utilcode.util.ToastUtils; +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.google.android.material.tabs.TabLayout; import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; +import com.heyongrui.base.app.BaseApplication; +import com.heyongrui.base.assist.AppData; +import com.heyongrui.base.widget.ReSpinner; +import com.heyongrui.base.widget.itemdecoration.Divider; +import com.heyongrui.base.widget.itemdecoration.DividerBuilder; +import com.heyongrui.base.widget.itemdecoration.RecycleViewItemDecoration; +import com.heyongrui.module.R; +import com.heyongrui.module.adapter.ModuleSectionAdapter; +import com.heyongrui.module.adapter.ModuleSectionEntity; +import com.heyongrui.module.dagger.DaggerModuleComponent; +import com.heyongrui.module.dagger.ModuleModule; import com.heyongrui.module.data.dto.DouBanDto; import com.heyongrui.module.data.service.DouBanService; import com.heyongrui.module.douban.contract.DouBanContract; import com.heyongrui.network.configure.ResponseDisposable; +import com.scwang.smartrefresh.header.StoreHouseHeader; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener; import java.util.ArrayList; import java.util.List; +import javax.inject.Inject; + +import dagger.Lazy; + public class DouBanPresenter extends DouBanContract.Presenter { - private DouBanService mDouBanService; + @Inject + DouBanService mDouBanService; + @Inject + Lazy mAppData; public DouBanPresenter() { - this.mDouBanService = new DouBanService(); + DaggerModuleComponent + .builder() + .appComponent(BaseApplication.getAppComponent()) + .moduleModule(new ModuleModule()) + .build() + .inject(this); + } + + @Override + public void initSwipeRefresh(SmartRefreshLayout smartRefreshLayout, StoreHouseHeader storeHouseHeader, OnRefreshLoadMoreListener onRefreshLoadMoreListener) { + storeHouseHeader.setTextColor(ContextCompat.getColor(mContext, R.color.white)); + smartRefreshLayout.setPrimaryColors(ContextCompat.getColor(mContext, R.color.colorPrimaryDark)); + smartRefreshLayout.setDisableContentWhenRefresh(true);//是否在刷新的时候禁止列表的操作 + smartRefreshLayout.setDisableContentWhenLoading(true);//是否在加载的时候禁止列表的操作 + smartRefreshLayout.setEnableNestedScroll(true); + smartRefreshLayout.setEnableLoadMoreWhenContentNotFull(true); + if (null != onRefreshLoadMoreListener) { + smartRefreshLayout.setOnRefreshLoadMoreListener(onRefreshLoadMoreListener); + } + } + + @Override + public ModuleSectionAdapter initRecyclerView(RecyclerView recyclerView, BaseQuickAdapter.OnItemClickListener listener) { + List data = new ArrayList<>(); + ModuleSectionAdapter moduleSectionAdapter = new ModuleSectionAdapter(data); + StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL); + recyclerView.setLayoutManager(manager); + moduleSectionAdapter.bindToRecyclerView(recyclerView); + int dp10 = ConvertUtils.dp2px(10); + recyclerView.addItemDecoration(new RecycleViewItemDecoration(mContext) { + @Override + public Divider getDivider(int itemPosition) { + DividerBuilder dividerBuilder = new DividerBuilder(); + dividerBuilder.setBottomSideLine(true, Color.TRANSPARENT, dp10, 0, 0); + dividerBuilder.setTopSideLine(true, Color.TRANSPARENT, dp10, 0, 0); + dividerBuilder.setLeftSideLine(true, Color.TRANSPARENT, dp10, 0, 0); + dividerBuilder.setRightSideLine(true, Color.TRANSPARENT, dp10, 0, 0); + Divider divider = dividerBuilder.create(); + return divider; + } + }); + moduleSectionAdapter.setSpanSizeLookup((gridLayoutManager, position) -> data.get(position).getSpanSize()); + if (null != listener) { + moduleSectionAdapter.setOnItemClickListener(listener); + } + return moduleSectionAdapter; + } + + @Override + public void initSpinner(Spinner spinner, List dataList) { + List stringList = new ArrayList<>(); + if (null != dataList) { + for (T t : dataList) { + if (t instanceof String) { + stringList.add((String) t); + } + } + } + ArrayAdapter adapter = new ArrayAdapter<>(mContext, R.layout.layout_spinner_dropdown_item, stringList); + adapter.setDropDownViewResource(R.layout.layout_spinner_dropdown_item); + spinner.setAdapter(adapter); + spinner.setOnItemSelectedListener(new ReSpinner.OnReItemSelectedListener(true) { + @Override + public void onReItemSelected(AdapterView adapterView, View view, int i, long l) { + T t = null; + if (i >= 0) { + if (null != dataList) { + t = dataList.get(i); + } + } + if (null != mView) { + mView.onSpinnerItemSelected(adapterView, t, i); + } + } + }); + spinner.post(() -> { +// spinner.setDropDownWidth(spinner.getWidth()); + spinner.setDropDownVerticalOffset(spinner.getHeight()); + }); } @Override @@ -78,4 +189,23 @@ protected void onFailure(int errorCode, String errorMsg) { } })); } + + @Override + public void setTagsData(TabLayout tabLayout, List tagsList, TabLayout.BaseOnTabSelectedListener tabSelectedListener) { + if (tagsList == null) return; + if (null != tabSelectedListener) { + tabLayout.addOnTabSelectedListener(tabSelectedListener); + } + tabLayout.removeAllTabs(); + for (String tag : tagsList) { + tabLayout.addTab(creatTab(tabLayout, tag, tag)); + } + } + + private TabLayout.Tab creatTab(TabLayout tabLayout, String tabText, Object tag) { + TabLayout.Tab tagTab = tabLayout.newTab(); + tagTab.setText(tabText); + tagTab.setTag(tag); + return tagTab; + } } diff --git a/module/src/main/java/com/heyongrui/module/douban/view/DouBanActivity.java b/module/src/main/java/com/heyongrui/module/douban/view/DouBanActivity.java index 270070e..abb6eb8 100644 --- a/module/src/main/java/com/heyongrui/module/douban/view/DouBanActivity.java +++ b/module/src/main/java/com/heyongrui/module/douban/view/DouBanActivity.java @@ -1,34 +1,29 @@ package com.heyongrui.module.douban.view; -import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Bundle; -import android.os.Handler; import android.text.TextUtils; import android.view.View; import android.widget.AdapterView; -import android.widget.ArrayAdapter; import android.widget.ImageView; -import android.widget.Spinner; import androidx.annotation.NonNull; import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.RecyclerView; -import androidx.recyclerview.widget.StaggeredGridLayoutManager; import com.alibaba.android.arouter.facade.annotation.Route; import com.alibaba.android.arouter.launcher.ARouter; -import com.blankj.utilcode.util.ConvertUtils; +import com.chad.library.adapter.base.BaseQuickAdapter; import com.google.android.material.tabs.TabLayout; +import com.heyongrui.base.assist.AppData; import com.heyongrui.base.assist.ConfigConstants; import com.heyongrui.base.base.BaseActivity; import com.heyongrui.base.utils.DrawableUtil; -import com.heyongrui.base.widget.itemdecoration.Divider; -import com.heyongrui.base.widget.itemdecoration.DividerBuilder; -import com.heyongrui.base.widget.itemdecoration.RecycleViewItemDecoration; import com.heyongrui.module.R; import com.heyongrui.module.adapter.ModuleSectionAdapter; import com.heyongrui.module.adapter.ModuleSectionEntity; +import com.heyongrui.module.dagger.DaggerModuleComponent; +import com.heyongrui.module.dagger.ModuleModule; import com.heyongrui.module.data.dto.DouBanDto; import com.heyongrui.module.douban.contract.DouBanContract; import com.heyongrui.module.douban.presenter.DouBanPresenter; @@ -38,10 +33,15 @@ import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import javax.inject.Inject; + +import dagger.Lazy; + @Route(path = ConfigConstants.PATH_DOUBAN) -public class DouBanActivity extends BaseActivity implements DouBanContract.View { +public class DouBanActivity extends BaseActivity implements DouBanContract.View, View.OnClickListener, OnRefreshLoadMoreListener, BaseQuickAdapter.OnItemClickListener { private TabLayout tabLayout; private SmartRefreshLayout refreshLayout; @@ -52,6 +52,20 @@ public class DouBanActivity extends BaseActivity imple private String mType, mSort; private boolean mIsLastPage = false; + @Inject + Lazy mAppData; + + @Override + protected void initializeInjector() { + super.initializeInjector(); + DaggerModuleComponent + .builder() + .appComponent(getAppComponent()) + .moduleModule(new ModuleModule(this)) + .build() + .inject(this); + } + @Override protected int getLayoutId() { return R.layout.activity_douban; @@ -62,14 +76,18 @@ protected DouBanContract.Presenter setPresenter() { return new DouBanPresenter(); } + @Override + public void onClick(View view) { + int id = view.getId(); + if (id == R.id.iv_back) { + finish(); + } + } + @Override protected void init(Bundle savedInstanceState) { - addOnClickListeners(view -> { - int id = view.getId(); - if (id == R.id.iv_back) { - finish(); - } - }, R.id.iv_back); +// mAppData.get().getBaseUrl(); + addOnClickListeners(this, R.id.iv_back); //图标着色 ImageView ivBack = findViewById(R.id.iv_back); @@ -81,148 +99,100 @@ protected void init(Bundle savedInstanceState) { //初始化刷新控件 StoreHouseHeader storeHouseHeader = findViewById(R.id.store_house_header); refreshLayout = findViewById(R.id.refresh_layout); - initSwipeRefresh(refreshLayout, storeHouseHeader); + mPresenter.initSwipeRefresh(refreshLayout, storeHouseHeader, this); //初始化列表 recyclerView = findViewById(R.id.recycler_view); - initRecyclerView(recyclerView); + mGankAdapter = mPresenter.initRecyclerView(recyclerView, this); //初始化类型下拉选择器 - Spinner spinnerType = findViewById(R.id.spinner_type); - initTypeSpinner(spinnerType); + mPresenter.initSpinner(findViewById(R.id.spinner_type), Arrays.asList(new String[]{getString(R.string.movie), getString(R.string.tv)})); } - private void initTypeSpinner(Spinner spinnerType) { - String[] itemArrays = new String[]{getString(R.string.movie), getString(R.string.tv)}; - ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, itemArrays); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - spinnerType.setAdapter(adapter); - spinnerType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView adapterView, View view, int i, long l) { - if (TextUtils.equals(getString(R.string.movie), itemArrays[i])) { - mType = "movie"; - } else if (TextUtils.equals(getString(R.string.tv), itemArrays[i])) { - mType = "tv"; - } - if (mPresenter != null) { - mPresenter.getIndexTags(mType, "index"); - } + @Override + public void onLoadMore(@NonNull RefreshLayout refreshLayout) { + if (mIsLastPage) { + resetRefreshLayout(true, true, true); + } else { + mPageStart = mGankAdapter.getData().size(); + if (mPresenter != null) { + String tag = tabLayout.getTabAt(tabLayout.getSelectedTabPosition()).getText().toString(); + mPresenter.getSubjectsData(mType, tag, mSort, mPageSize, mPageStart); } + } + } - @Override - public void onNothingSelected(AdapterView adapterView) { + @Override + public void onRefresh(@NonNull RefreshLayout refreshLayout) { + mPageStart = 0; + if (mPresenter != null) { + String tag = tabLayout.getTabAt(tabLayout.getSelectedTabPosition()).getText().toString(); + mPresenter.getSubjectsData(mType, tag, mSort, mPageSize, mPageStart); + } + } - } - }); - new Handler().postDelayed(() -> spinnerType.setDropDownVerticalOffset(spinnerType.getHeight()), 1000); + @Override + public void onItemClick(BaseQuickAdapter adapter, View view, int position) { + DouBanDto.SubjectsBean subjectsBean = mGankAdapter.getData().get(position).getSubjectsBean(); + if (subjectsBean != null) { + ARouter.getInstance().build(ConfigConstants.PATH_H5).withString("h5Url", subjectsBean.getUrl()).navigation(); + } } - private void initSortSpinner(Spinner spinnerSort) { - if (spinnerSort.getAdapter() != null) return; - String[] itemArrays = new String[]{getString(R.string.heat), getString(R.string.time), getString(R.string.evaluate)}; - ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, itemArrays); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - spinnerSort.setAdapter(adapter); - spinnerSort.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView adapterView, View view, int i, long l) { - if (TextUtils.equals(getString(R.string.heat), itemArrays[i])) { + @Override + public void onSpinnerItemSelected(AdapterView adapterView, T t, int position) { + int id = adapterView.getId(); + if (id == R.id.spinner_sort) {//影视排序 + if (null != t && t instanceof String) { + if (TextUtils.equals(getString(R.string.heat), (String) t)) { mSort = "recommend"; - } else if (TextUtils.equals(getString(R.string.time), itemArrays[i])) { + } else if (TextUtils.equals(getString(R.string.time), (String) t)) { mSort = "time"; - } else if (TextUtils.equals(getString(R.string.evaluate), itemArrays[i])) { + } else if (TextUtils.equals(getString(R.string.evaluate), (String) t)) { mSort = "rank"; } - if (mPresenter != null) { - mPageStart = 0; - String tag = tabLayout.getTabAt(tabLayout.getSelectedTabPosition()).getText().toString(); - mPresenter.getSubjectsData(mType, tag, mSort, mPageSize, mPageStart); - } } - - @Override - public void onNothingSelected(AdapterView adapterView) { - + if (null != mPresenter) { + mPageStart = 0; + String tag = tabLayout.getTabAt(tabLayout.getSelectedTabPosition()).getText().toString(); + mPresenter.getSubjectsData(mType, tag, mSort, mPageSize, mPageStart); } - }); - new Handler().postDelayed(() -> spinnerSort.setDropDownVerticalOffset(spinnerSort.getHeight()), 1000); - } - - private void initSwipeRefresh(SmartRefreshLayout smartRefreshLayout, StoreHouseHeader storeHouseHeader) { - storeHouseHeader.setTextColor(ContextCompat.getColor(this, R.color.white)); - smartRefreshLayout.setPrimaryColors(ContextCompat.getColor(this, R.color.colorPrimaryDark)); - smartRefreshLayout.setDisableContentWhenRefresh(true);//是否在刷新的时候禁止列表的操作 - smartRefreshLayout.setDisableContentWhenLoading(true);//是否在加载的时候禁止列表的操作 - smartRefreshLayout.setEnableNestedScroll(true); - smartRefreshLayout.setEnableLoadMoreWhenContentNotFull(true); - smartRefreshLayout.setOnRefreshLoadMoreListener(new OnRefreshLoadMoreListener() { - @Override - public void onLoadMore(@NonNull RefreshLayout refreshLayout) { - if (mIsLastPage) { - resetRefreshLayout(true, true, true); - } else { - mPageStart = mGankAdapter.getData().size(); - if (mPresenter != null) { - String tag = tabLayout.getTabAt(tabLayout.getSelectedTabPosition()).getText().toString(); - mPresenter.getSubjectsData(mType, tag, mSort, mPageSize, mPageStart); - } + } else if (id == R.id.spinner_type) {//影视类型 + if (null != t && t instanceof String) { + if (TextUtils.equals(getString(R.string.movie), (String) t)) { + mType = "movie"; + } else if (TextUtils.equals(getString(R.string.tv), (String) t)) { + mType = "tv"; } - } - - @Override - public void onRefresh(@NonNull RefreshLayout refreshLayout) { - mPageStart = 0; if (mPresenter != null) { - String tag = tabLayout.getTabAt(tabLayout.getSelectedTabPosition()).getText().toString(); - mPresenter.getSubjectsData(mType, tag, mSort, mPageSize, mPageStart); + mPresenter.getIndexTags(mType, "index"); } } - }); - } - - private void resetRefreshLayout(boolean isFinishLoadMore, boolean isFinishRefresh, boolean noMoreData) { - if (isFinishLoadMore) { - refreshLayout.finishLoadMore(); } - if (isFinishRefresh) { - refreshLayout.finishRefresh(); - } - refreshLayout.setNoMoreData(noMoreData); - } - - private void initRecyclerView(RecyclerView recyclerView) { - List data = new ArrayList<>(); - mGankAdapter = new ModuleSectionAdapter(data); - StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL); - recyclerView.setLayoutManager(manager); - mGankAdapter.bindToRecyclerView(recyclerView); - int dp10 = ConvertUtils.dp2px(10); - recyclerView.addItemDecoration(new RecycleViewItemDecoration(this) { - @Override - public Divider getDivider(int itemPosition) { - DividerBuilder dividerBuilder = new DividerBuilder(); - dividerBuilder.setBottomSideLine(true, Color.TRANSPARENT, dp10, 0, 0); - dividerBuilder.setTopSideLine(true, Color.TRANSPARENT, dp10, 0, 0); - dividerBuilder.setLeftSideLine(true, Color.TRANSPARENT, dp10, 0, 0); - dividerBuilder.setRightSideLine(true, Color.TRANSPARENT, dp10, 0, 0); - Divider divider = dividerBuilder.create(); - return divider; - } - }); - mGankAdapter.setSpanSizeLookup((gridLayoutManager, position) -> data.get(position).getSpanSize()); - mGankAdapter.setOnItemClickListener((adapter, view, position) -> { - DouBanDto.SubjectsBean subjectsBean = mGankAdapter.getData().get(position).getSubjectsBean(); - if (subjectsBean != null) { - ARouter.getInstance().build(ConfigConstants.PATH_H5).withString("h5Url", subjectsBean.getUrl()).navigation(); - } - }); } @Override public void getIndexTagsSuccess(List tagsList) { - setTagsData(tabLayout, tagsList); - initSortSpinner(findViewById(R.id.spinner_sort)); + if (null != mPresenter) { + mPresenter.setTagsData(tabLayout, tagsList, new TabLayout.BaseOnTabSelectedListener() { + @Override + public void onTabSelected(TabLayout.Tab tab) { + mPageStart = 0; + mPresenter.getSubjectsData(mType, tab.getText().toString(), mSort, mPageSize, mPageStart); + } + + @Override + public void onTabUnselected(TabLayout.Tab tab) { + + } + + @Override + public void onTabReselected(TabLayout.Tab tab) { + + } + }); + mPresenter.initSpinner(findViewById(R.id.spinner_sort), Arrays.asList(new String[]{getString(R.string.heat), getString(R.string.time), getString(R.string.evaluate)})); + } } @Override @@ -250,37 +220,13 @@ public void getSubjectsDataFail(int errorCode, String errorMsg) { resetRefreshLayout(true, true, false); } - private void setTagsData(TabLayout tabLayout, List tagsList) { - if (tagsList == null) return; - tabLayout.addOnTabSelectedListener(new TabLayout.BaseOnTabSelectedListener() { - @Override - public void onTabSelected(TabLayout.Tab tab) { - if (mPresenter != null) { - mPageStart = 0; - mPresenter.getSubjectsData(mType, tab.getText().toString(), mSort, mPageSize, mPageStart); - } - } - - @Override - public void onTabUnselected(TabLayout.Tab tab) { - - } - - @Override - public void onTabReselected(TabLayout.Tab tab) { - - } - }); - tabLayout.removeAllTabs(); - for (String tag : tagsList) { - tabLayout.addTab(creatTab(tabLayout, tag, tag)); + private void resetRefreshLayout(boolean isFinishLoadMore, boolean isFinishRefresh, boolean noMoreData) { + if (isFinishLoadMore) { + refreshLayout.finishLoadMore(); } - } - - private TabLayout.Tab creatTab(TabLayout tabLayout, String tabText, Object tag) { - TabLayout.Tab tagTab = tabLayout.newTab(); - tagTab.setText(tabText); - tagTab.setTag(tag); - return tagTab; + if (isFinishRefresh) { + refreshLayout.finishRefresh(); + } + refreshLayout.setNoMoreData(noMoreData); } } diff --git a/module2/build.gradle b/module2/build.gradle index 75feab3..455c706 100644 --- a/module2/build.gradle +++ b/module2/build.gradle @@ -92,6 +92,8 @@ dependencies { implementation project(':network') //Arouter路由 kapt "com.alibaba:arouter-compiler:${versions.arouterCompiler}" + //dagger + kapt "com.google.dagger:dagger-compiler:${versions.dagger}" testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.2.0' diff --git a/network/src/main/java/com/heyongrui/network/interceptor/HttpLogger.java b/network/src/main/java/com/heyongrui/network/interceptor/HttpLogger.java index e63a7ac..c40ef10 100644 --- a/network/src/main/java/com/heyongrui/network/interceptor/HttpLogger.java +++ b/network/src/main/java/com/heyongrui/network/interceptor/HttpLogger.java @@ -1,6 +1,6 @@ package com.heyongrui.network.interceptor; -import com.blankj.utilcode.util.LogUtils; +import android.util.Log; /** * Created by lambert on 2017/7/28. @@ -12,6 +12,7 @@ public class HttpLogger implements HttpLogInterceptor.Logger { @Override public void log(String message) { +// Log.i("HttpLogger", message); if (message.startsWith("--> POST") || message.startsWith("--> GET")) { mMessage.setLength(0); } @@ -21,7 +22,7 @@ public void log(String message) { } mMessage.append(message.concat("\n")); if (message.startsWith("<-- END HTTP")) { - LogUtils.i(mMessage.toString()); + Log.i("HttpLogger", mMessage.toString()); } } diff --git a/user/build.gradle b/user/build.gradle index 83299ab..e0354f6 100644 --- a/user/build.gradle +++ b/user/build.gradle @@ -93,6 +93,8 @@ dependencies { implementation project(':network') //Arouter路由 kapt "com.alibaba:arouter-compiler:${versions.arouterCompiler}" + //dagger + kapt "com.google.dagger:dagger-compiler:${versions.dagger}" //3D球形控件 implementation "com.moxun:tagcloudlib:${versions.tagcloudlib}"