Commit 14fe91f2 by 段启岩

加入DI支持

parent da9e6c02
...@@ -56,4 +56,6 @@ dependencies { ...@@ -56,4 +56,6 @@ dependencies {
implementation 'org.jetbrains:annotations:15.0' implementation 'org.jetbrains:annotations:15.0'
implementation 'org.projectlombok:lombok:1.16.8' //添加lombok依赖 implementation 'org.projectlombok:lombok:1.16.8' //添加lombok依赖
implementation 'org.glassfish:javax.annotation:10.0-b28' //java注解 implementation 'org.glassfish:javax.annotation:10.0-b28' //java注解
implementation 'com.google.dagger:dagger:2.26'
annotationProcessor 'com.google.dagger:dagger-compiler:2.26'
} }
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
package="cn.yunliyunwai.beyondclouds"> package="cn.yunliyunwai.beyondclouds">
<application <application
android:name="cn.yunliyunwai.beyondclouds.Application" android:name="cn.yunliyunwai.beyondclouds.BeyondApplication"
android:allowBackup="true" android:allowBackup="true"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"
......
...@@ -4,11 +4,13 @@ import androidx.annotation.NonNull; ...@@ -4,11 +4,13 @@ import androidx.annotation.NonNull;
import androidx.lifecycle.ViewModelStore; import androidx.lifecycle.ViewModelStore;
import androidx.lifecycle.ViewModelStoreOwner; import androidx.lifecycle.ViewModelStoreOwner;
import cn.yunliyunwai.beyondclouds.di.component.ApplicationComponent;
import cn.yunliyunwai.beyondclouds.di.component.DaggerApplicationComponent;
import cn.yunliyunwai.beyondclouds.util.TypeFaces; import cn.yunliyunwai.beyondclouds.util.TypeFaces;
public class BeyondApplication extends android.app.Application implements ViewModelStoreOwner {
public class Application extends android.app.Application implements ViewModelStoreOwner { ApplicationComponent applicationComponent = DaggerApplicationComponent.create();
@Override @Override
public void onCreate() { public void onCreate() {
...@@ -26,4 +28,8 @@ public class Application extends android.app.Application implements ViewModelSto ...@@ -26,4 +28,8 @@ public class Application extends android.app.Application implements ViewModelSto
} }
return mViewModelStore; return mViewModelStore;
} }
public ApplicationComponent getApplicationComponent() {
return applicationComponent;
}
} }
package cn.yunliyunwai.beyondclouds; package cn.yunliyunwai.beyondclouds;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MenuItem; import android.view.MenuItem;
...@@ -14,6 +15,8 @@ import com.google.android.material.bottomnavigation.BottomNavigationView; ...@@ -14,6 +15,8 @@ import com.google.android.material.bottomnavigation.BottomNavigationView;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.inject.Inject;
import cn.yunliyunwai.beyondclouds.base.BaseActivity; import cn.yunliyunwai.beyondclouds.base.BaseActivity;
import cn.yunliyunwai.beyondclouds.databinding.ActivityMainBinding; import cn.yunliyunwai.beyondclouds.databinding.ActivityMainBinding;
import cn.yunliyunwai.beyondclouds.ui.DynamicFragment; import cn.yunliyunwai.beyondclouds.ui.DynamicFragment;
...@@ -26,15 +29,15 @@ import cn.yunliyunwai.beyondclouds.viewmodel.MainActivityViewModel; ...@@ -26,15 +29,15 @@ import cn.yunliyunwai.beyondclouds.viewmodel.MainActivityViewModel;
public class MainActivity extends BaseActivity<MainActivityViewModel, ActivityMainBinding> implements BottomNavigationView.OnNavigationItemSelectedListener { public class MainActivity extends BaseActivity<MainActivityViewModel, ActivityMainBinding> implements BottomNavigationView.OnNavigationItemSelectedListener {
private static final String TAG = MainActivity.class.getCanonicalName();
private List<Fragment> fragments; private List<Fragment> fragments;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
StatusBarUtils.setWindowStatusBarColor(this, R.color.colorStatusBar); StatusBarUtils.setWindowStatusBarColor(this, R.color.colorStatusBar);
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
((BeyondApplication) getApplication()).getApplicationComponent().inject(this);
initBottomNavigation(savedInstanceState); initBottomNavigation(savedInstanceState);
} }
@Override @Override
......
package cn.yunliyunwai.beyondclouds.api;
public class AppApi {
}
package cn.yunliyunwai.beyondclouds.data;
public class BlogRepository {
}
package cn.yunliyunwai.beyondclouds.data;
import javax.inject.Inject;
import javax.inject.Singleton;
import cn.yunliyunwai.beyondclouds.data.local.UserLocalDataSource;
import cn.yunliyunwai.beyondclouds.data.remote.UserRemoteDataSource;
@Singleton
public class UserRepository {
private final UserLocalDataSource userLocalDataSource;
private final UserRemoteDataSource userRemoteDataSource;
@Inject
public UserRepository(UserLocalDataSource userLocalDataSource, UserRemoteDataSource userRemoteDataSource) {
this.userLocalDataSource = userLocalDataSource;
this.userRemoteDataSource = userRemoteDataSource;
}
}
package cn.yunliyunwai.beyondclouds.data.local;
import javax.inject.Inject;
public class UserLocalDataSource {
@Inject
public UserLocalDataSource() {
}
}
package cn.yunliyunwai.beyondclouds.api; package cn.yunliyunwai.beyondclouds.data.remote;
import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
...@@ -7,15 +7,16 @@ import java.util.concurrent.TimeUnit; ...@@ -7,15 +7,16 @@ import java.util.concurrent.TimeUnit;
import cn.yunliyunwai.beyondclouds.BuildConfig; import cn.yunliyunwai.beyondclouds.BuildConfig;
import cn.yunliyunwai.beyondclouds.adapter.LiveDataCallAdapterFactory; import cn.yunliyunwai.beyondclouds.adapter.LiveDataCallAdapterFactory;
import cn.yunliyunwai.beyondclouds.api.ApiResponse;
import cn.yunliyunwai.beyondclouds.domain.Category; import cn.yunliyunwai.beyondclouds.domain.Category;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
import retrofit2.Retrofit; import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory; import retrofit2.converter.gson.GsonConverterFactory;
import retrofit2.http.GET; import retrofit2.http.GET;
public interface BlogCategoryApi { public interface BlogCategoryService {
static BlogCategoryApi getInstance() { static BlogCategoryService getInstance() {
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder() OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder()
.connectTimeout(60, TimeUnit.SECONDS); .connectTimeout(60, TimeUnit.SECONDS);
if (BuildConfig.DEBUG) { if (BuildConfig.DEBUG) {
...@@ -29,7 +30,7 @@ public interface BlogCategoryApi { ...@@ -29,7 +30,7 @@ public interface BlogCategoryApi {
.addCallAdapterFactory(new LiveDataCallAdapterFactory()) .addCallAdapterFactory(new LiveDataCallAdapterFactory())
.addConverterFactory(GsonConverterFactory.create()) .addConverterFactory(GsonConverterFactory.create())
.build() .build()
.create(BlogCategoryApi.class); .create(BlogCategoryService.class);
} }
@GET("blog/categories") @GET("blog/categories")
......
package cn.yunliyunwai.beyondclouds.data.remote;
public interface LoginRetrofitService {
}
package cn.yunliyunwai.beyondclouds.data.remote;
import javax.inject.Inject;
public class UserRemoteDataSource {
@Inject
public UserRemoteDataSource() {
}
}
package cn.yunliyunwai.beyondclouds.di.component;
import javax.inject.Singleton;
import cn.yunliyunwai.beyondclouds.MainActivity;
import cn.yunliyunwai.beyondclouds.di.module.NetworkModule;
import dagger.Component;
@Singleton
@Component(modules = {NetworkModule.class})
public interface ApplicationComponent {
void inject(MainActivity mainActivity);
}
package cn.yunliyunwai.beyondclouds.di.module;
import dagger.Module;
@Module
public class NetworkModule {
}
package cn.yunliyunwai.beyondclouds.di.scope;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import javax.inject.Scope;
@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface ActivityScope {
}
package cn.yunliyunwai.beyondclouds.di.scope;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import javax.inject.Scope;
@Scope
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface ActivityScoped {
}
package cn.yunliyunwai.beyondclouds.domain; package cn.yunliyunwai.beyondclouds.domain;
import lombok.Data; import lombok.Data;
import lombok.ToString;
@Data //@Data
@ToString
public class Category { public class Category {
private Integer categoryId; private Integer categoryId;
private String category; private String category;
public Integer getCategoryId() {
return categoryId;
}
public void setCategoryId(Integer categoryId) {
this.categoryId = categoryId;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
} }
...@@ -23,8 +23,8 @@ import java.util.List; ...@@ -23,8 +23,8 @@ import java.util.List;
import cn.yunliyunwai.beyondclouds.R; import cn.yunliyunwai.beyondclouds.R;
import cn.yunliyunwai.beyondclouds.base.BaseFragment; import cn.yunliyunwai.beyondclouds.base.BaseFragment;
import cn.yunliyunwai.beyondclouds.components.CommonPagerIndicator; import cn.yunliyunwai.beyondclouds.view.CommonPagerIndicator;
import cn.yunliyunwai.beyondclouds.components.ScaleTransitionPagerTitleView; import cn.yunliyunwai.beyondclouds.view.ScaleTransitionPagerTitleView;
import cn.yunliyunwai.beyondclouds.databinding.FragmentCategoryBinding; import cn.yunliyunwai.beyondclouds.databinding.FragmentCategoryBinding;
import cn.yunliyunwai.beyondclouds.databinding.FragmentHomeBinding; import cn.yunliyunwai.beyondclouds.databinding.FragmentHomeBinding;
import cn.yunliyunwai.beyondclouds.domain.Category; import cn.yunliyunwai.beyondclouds.domain.Category;
......
package cn.yunliyunwai.beyondclouds.components; package cn.yunliyunwai.beyondclouds.view;
import android.content.Context; import android.content.Context;
import android.graphics.Canvas; import android.graphics.Canvas;
......
package cn.yunliyunwai.beyondclouds.components; package cn.yunliyunwai.beyondclouds.view;
import android.content.Context; import android.content.Context;
import android.graphics.Typeface; import android.graphics.Typeface;
......
...@@ -10,22 +10,22 @@ import androidx.lifecycle.ViewModelProvider; ...@@ -10,22 +10,22 @@ import androidx.lifecycle.ViewModelProvider;
import java.util.List; import java.util.List;
import cn.yunliyunwai.beyondclouds.api.ApiResponse; import cn.yunliyunwai.beyondclouds.api.ApiResponse;
import cn.yunliyunwai.beyondclouds.api.BlogCategoryApi; import cn.yunliyunwai.beyondclouds.data.remote.BlogCategoryService;
import cn.yunliyunwai.beyondclouds.domain.Category; import cn.yunliyunwai.beyondclouds.domain.Category;
public class HomeFragmentViewModel extends ViewModel { public class HomeFragmentViewModel extends ViewModel {
private static final String TAG = HomeFragmentViewModel.class.getCanonicalName(); private static final String TAG = HomeFragmentViewModel.class.getCanonicalName();
private BlogCategoryApi blogCategoryApi; private BlogCategoryService blogCategoryService;
static class HomeFragmentViewModelFactory implements ViewModelProvider.Factory { static class HomeFragmentViewModelFactory implements ViewModelProvider.Factory {
@NonNull @NonNull
@Override @Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) { public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
return (T) new HomeFragmentViewModel(BlogCategoryApi.getInstance()); return (T) new HomeFragmentViewModel(BlogCategoryService.getInstance());
} }
} }
public HomeFragmentViewModel(BlogCategoryApi blogCategoryApi) { public HomeFragmentViewModel(BlogCategoryService blogCategoryService) {
this.blogCategoryApi = blogCategoryApi; this.blogCategoryService = blogCategoryService;
} }
public static ViewModelProvider.Factory factory = new HomeFragmentViewModelFactory(); public static ViewModelProvider.Factory factory = new HomeFragmentViewModelFactory();
...@@ -38,7 +38,7 @@ public class HomeFragmentViewModel extends ViewModel { ...@@ -38,7 +38,7 @@ public class HomeFragmentViewModel extends ViewModel {
} }
public void initCategories() { public void initCategories() {
blogCategoryApi.getBlogCategories().observeForever(new Observer<ApiResponse<List<Category>>>() { blogCategoryService.getBlogCategories().observeForever(new Observer<ApiResponse<List<Category>>>() {
@Override @Override
public void onChanged(ApiResponse<List<Category>> response) { public void onChanged(ApiResponse<List<Category>> response) {
if (response.getCode() == 0) { if (response.getCode() == 0) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment