Commit 14fe91f2 by 段启岩

加入DI支持

parent da9e6c02
......@@ -56,4 +56,6 @@ dependencies {
implementation 'org.jetbrains:annotations:15.0'
implementation 'org.projectlombok:lombok:1.16.8' //添加lombok依赖
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 @@
package="cn.yunliyunwai.beyondclouds">
<application
android:name="cn.yunliyunwai.beyondclouds.Application"
android:name="cn.yunliyunwai.beyondclouds.BeyondApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
......
......@@ -4,11 +4,13 @@ import androidx.annotation.NonNull;
import androidx.lifecycle.ViewModelStore;
import androidx.lifecycle.ViewModelStoreOwner;
import cn.yunliyunwai.beyondclouds.di.component.ApplicationComponent;
import cn.yunliyunwai.beyondclouds.di.component.DaggerApplicationComponent;
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
public void onCreate() {
......@@ -26,4 +28,8 @@ public class Application extends android.app.Application implements ViewModelSto
}
return mViewModelStore;
}
public ApplicationComponent getApplicationComponent() {
return applicationComponent;
}
}
package cn.yunliyunwai.beyondclouds;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MenuItem;
......@@ -14,6 +15,8 @@ import com.google.android.material.bottomnavigation.BottomNavigationView;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import cn.yunliyunwai.beyondclouds.base.BaseActivity;
import cn.yunliyunwai.beyondclouds.databinding.ActivityMainBinding;
import cn.yunliyunwai.beyondclouds.ui.DynamicFragment;
......@@ -26,15 +29,15 @@ import cn.yunliyunwai.beyondclouds.viewmodel.MainActivityViewModel;
public class MainActivity extends BaseActivity<MainActivityViewModel, ActivityMainBinding> implements BottomNavigationView.OnNavigationItemSelectedListener {
private static final String TAG = MainActivity.class.getCanonicalName();
private List<Fragment> fragments;
@Override
protected void onCreate(Bundle savedInstanceState) {
StatusBarUtils.setWindowStatusBarColor(this, R.color.colorStatusBar);
super.onCreate(savedInstanceState);
((BeyondApplication) getApplication()).getApplicationComponent().inject(this);
initBottomNavigation(savedInstanceState);
}
@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;
......@@ -7,15 +7,16 @@ import java.util.concurrent.TimeUnit;
import cn.yunliyunwai.beyondclouds.BuildConfig;
import cn.yunliyunwai.beyondclouds.adapter.LiveDataCallAdapterFactory;
import cn.yunliyunwai.beyondclouds.api.ApiResponse;
import cn.yunliyunwai.beyondclouds.domain.Category;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import retrofit2.http.GET;
public interface BlogCategoryApi {
public interface BlogCategoryService {
static BlogCategoryApi getInstance() {
static BlogCategoryService getInstance() {
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder()
.connectTimeout(60, TimeUnit.SECONDS);
if (BuildConfig.DEBUG) {
......@@ -29,7 +30,7 @@ public interface BlogCategoryApi {
.addCallAdapterFactory(new LiveDataCallAdapterFactory())
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(BlogCategoryApi.class);
.create(BlogCategoryService.class);
}
@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;
import lombok.Data;
import lombok.ToString;
@Data
@ToString
//@Data
public class Category {
private Integer categoryId;
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;
import cn.yunliyunwai.beyondclouds.R;
import cn.yunliyunwai.beyondclouds.base.BaseFragment;
import cn.yunliyunwai.beyondclouds.components.CommonPagerIndicator;
import cn.yunliyunwai.beyondclouds.components.ScaleTransitionPagerTitleView;
import cn.yunliyunwai.beyondclouds.view.CommonPagerIndicator;
import cn.yunliyunwai.beyondclouds.view.ScaleTransitionPagerTitleView;
import cn.yunliyunwai.beyondclouds.databinding.FragmentCategoryBinding;
import cn.yunliyunwai.beyondclouds.databinding.FragmentHomeBinding;
import cn.yunliyunwai.beyondclouds.domain.Category;
......
package cn.yunliyunwai.beyondclouds.components;
package cn.yunliyunwai.beyondclouds.view;
import android.content.Context;
import android.graphics.Canvas;
......
package cn.yunliyunwai.beyondclouds.components;
package cn.yunliyunwai.beyondclouds.view;
import android.content.Context;
import android.graphics.Typeface;
......
......@@ -10,22 +10,22 @@ import androidx.lifecycle.ViewModelProvider;
import java.util.List;
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;
public class HomeFragmentViewModel extends ViewModel {
private static final String TAG = HomeFragmentViewModel.class.getCanonicalName();
private BlogCategoryApi blogCategoryApi;
private BlogCategoryService blogCategoryService;
static class HomeFragmentViewModelFactory implements ViewModelProvider.Factory {
@NonNull
@Override
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) {
this.blogCategoryApi = blogCategoryApi;
public HomeFragmentViewModel(BlogCategoryService blogCategoryService) {
this.blogCategoryService = blogCategoryService;
}
public static ViewModelProvider.Factory factory = new HomeFragmentViewModelFactory();
......@@ -38,7 +38,7 @@ public class HomeFragmentViewModel extends ViewModel {
}
public void initCategories() {
blogCategoryApi.getBlogCategories().observeForever(new Observer<ApiResponse<List<Category>>>() {
blogCategoryService.getBlogCategories().observeForever(new Observer<ApiResponse<List<Category>>>() {
@Override
public void onChanged(ApiResponse<List<Category>> response) {
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