Commit 01c40829 by 段启岩

解决dagger循环依赖

parent 4c80306c
package cn.yunliyunwai.beyondclouds.data.model;
import lombok.Data;
@Data
public class AuthenticationResult {
private String userId;
private String accessToken;
}
package cn.yunliyunwai.beyondclouds.data.model;
import java.util.Date;
import lombok.Data;
@Data
public class UserInfo {
private String userId;
private String nickName;
private String userAvatar;
private Integer gender;
private String signature;
private Date birthday;
private Date createTime;
private Date updateTime;
private UserStatistics statistics;
}
package cn.yunliyunwai.beyondclouds.data.model;
import lombok.Data;
@Data
public class UserStatistics {
private String userId;
private Integer followedNum;
private Integer fansNum;
private Integer blogNum;
private Integer blogViewNum;
private Integer projectNum;
private Integer postNum;
private Integer questionNum;
private Integer questionReplyNum;
private Integer replyAcceptedNum;
private Integer visitedNum;
}
package cn.yunliyunwai.beyondclouds.data.model.form;
import lombok.Data;
@Data
public class AccountLoginForm {
private AccountLoginForm() {
}
private AccountLoginForm(String account, String password) {
this.account = account;
this.password = password;
}
private String account;
private String password;
public static AccountLoginForm create(String account, String password) {
return new AccountLoginForm(account, password);
}
}
package cn.yunliyunwai.beyondclouds.data.model.form;
import lombok.Data;
@Data
public class SmsLoginForm {
private SmsLoginForm() {
}
private SmsLoginForm(String mobile, String verifyCode) {
this.mobile = mobile;
this.verifyCode = verifyCode;
}
private String mobile;
private String verifyCode;
public static SmsLoginForm create(String mobile, String verifyCode) {
return new SmsLoginForm(mobile, verifyCode);
}
}
package cn.yunliyunwai.beyondclouds.data.source;
import androidx.lifecycle.LiveData;
import cn.yunliyunwai.beyondclouds.data.model.AuthenticationResult;
import cn.yunliyunwai.beyondclouds.data.model.Result;
import cn.yunliyunwai.beyondclouds.data.model.UserInfo;
public interface IUserRepository {
/**
* 账号密码登录
* @param account
* @param password
* @return
*/
LiveData<Result<AuthenticationResult>> accountAuth(String account, String password);
/**
* 短信验证码登录
* @param mobile
* @param verifyCode
* @return
*/
LiveData<Result<AuthenticationResult>> smsAuth(String mobile, String verifyCode);
/**
* 获取我的用户信息
* @return
*/
LiveData<Result<UserInfo>> getUserInfo();
}
package cn.yunliyunwai.beyondclouds.data.source.impl;
import androidx.lifecycle.LiveData;
import javax.inject.Inject;
import javax.inject.Singleton;
import cn.yunliyunwai.beyondclouds.data.model.AuthenticationResult;
import cn.yunliyunwai.beyondclouds.data.model.Result;
import cn.yunliyunwai.beyondclouds.data.model.UserInfo;
import cn.yunliyunwai.beyondclouds.data.model.form.AccountLoginForm;
import cn.yunliyunwai.beyondclouds.data.model.form.SmsLoginForm;
import cn.yunliyunwai.beyondclouds.data.source.IUserRepository;
import cn.yunliyunwai.beyondclouds.data.source.remote.UserApiStore;
@Singleton
public class UserRepositoryImpl implements IUserRepository {
private UserApiStore userApiStore;
@Inject
public UserRepositoryImpl(UserApiStore userApiStore) {
this.userApiStore = userApiStore;
}
@Override
public LiveData<Result<AuthenticationResult>> accountAuth(String account, String password) {
return userApiStore.accountAuth(AccountLoginForm.create(account, password));
}
@Override
public LiveData<Result<AuthenticationResult>> smsAuth(String mobile, String verifyCode) {
return userApiStore.smsAuth(SmsLoginForm.create(mobile, verifyCode));
}
@Override
public LiveData<Result<UserInfo>> getUserInfo() {
return userApiStore.getUserInfo();
}
}
package cn.yunliyunwai.beyondclouds.data.source.remote;
import androidx.lifecycle.LiveData;
import cn.yunliyunwai.beyondclouds.data.model.AuthenticationResult;
import cn.yunliyunwai.beyondclouds.data.model.Result;
import cn.yunliyunwai.beyondclouds.data.model.UserInfo;
import cn.yunliyunwai.beyondclouds.data.model.form.AccountLoginForm;
import cn.yunliyunwai.beyondclouds.data.model.form.SmsLoginForm;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST;
public interface UserApiStore {
/**
* 账号密码登录
* @param accountLoginForm
* @return
*/
@POST("auth/password")
LiveData<Result<AuthenticationResult>> accountAuth(@Body AccountLoginForm accountLoginForm);
/**
* 短信验证码登录
* @param smsLoginForm
* @return
*/
@POST("auth/sms")
LiveData<Result<AuthenticationResult>> smsAuth(@Body SmsLoginForm smsLoginForm);
/**
* 获取我的用户信息
* @return
*/
@GET("my/baseinfo")
LiveData<Result<UserInfo>> getUserInfo();
}
......@@ -26,6 +26,7 @@ import cn.yunliyunwai.beyondclouds.data.source.remote.BlogApiStore;
import cn.yunliyunwai.beyondclouds.data.source.remote.PostApiStore;
import cn.yunliyunwai.beyondclouds.data.source.remote.ProjectApiStore;
import cn.yunliyunwai.beyondclouds.data.source.remote.QuestionApiStore;
import cn.yunliyunwai.beyondclouds.data.source.remote.UserApiStore;
import cn.yunliyunwai.beyondclouds.util.AppExecutors;
import dagger.Module;
import dagger.Provides;
......@@ -62,6 +63,12 @@ public class AppModule {
@Singleton
@Provides
public UserApiStore provideUserApiRemoteDataSource(Retrofit retrofit) {
return retrofit.create(UserApiStore.class);
}
@Singleton
@Provides
BlogDatabase provideBlogDatabase(Context context) {
return Room
.databaseBuilder(context.getApplicationContext(),
......
......@@ -8,10 +8,12 @@ import cn.yunliyunwai.beyondclouds.data.source.IBlogRepository;
import cn.yunliyunwai.beyondclouds.data.source.IPostRepository;
import cn.yunliyunwai.beyondclouds.data.source.IProjectRepository;
import cn.yunliyunwai.beyondclouds.data.source.IQuestionRepository;
import cn.yunliyunwai.beyondclouds.data.source.IUserRepository;
import cn.yunliyunwai.beyondclouds.data.source.impl.BlogRepositoryImpl;
import cn.yunliyunwai.beyondclouds.data.source.impl.PostRepositoryImpl;
import cn.yunliyunwai.beyondclouds.data.source.impl.ProjectRepositoryImpl;
import cn.yunliyunwai.beyondclouds.data.source.impl.QuestionRepositoryImpl;
import cn.yunliyunwai.beyondclouds.data.source.impl.UserRepositoryImpl;
import cn.yunliyunwai.beyondclouds.viewmodel.MainActivityViewModel;
import dagger.Binds;
import dagger.Module;
......@@ -37,6 +39,10 @@ public interface AppModuleBinds {
@Binds
IQuestionRepository bindQuestionRepository(QuestionRepositoryImpl questionRepository);
@Singleton
@Binds
IUserRepository bindUserRepository(UserRepositoryImpl userRepository);
@Binds
@IntoMap
@ViewModelFactory.ViewModelKey(MainActivityViewModel.class)
......
......@@ -11,6 +11,9 @@ import androidx.lifecycle.ViewModel;
import javax.inject.Inject;
import javax.inject.Singleton;
import cn.yunliyunwai.beyondclouds.data.source.IUserRepository;
import dagger.Lazy;
@Singleton
public class AuthenticationViewModel extends ViewModel {
......@@ -25,6 +28,11 @@ public class AuthenticationViewModel extends ViewModel {
UN_AUTHENTICATION,
/**
* 等待获取用户信息
*/
WAIT_FOR_FETCH_USER_INFO,
/**
* 已认证
*/
AUTHENTICATED
......@@ -42,6 +50,8 @@ public class AuthenticationViewModel extends ViewModel {
SMS
}
private Lazy<IUserRepository> userRepositoryLazy;
/**
* accessToken
*/
......@@ -85,9 +95,9 @@ public class AuthenticationViewModel extends ViewModel {
@Inject
public AuthenticationViewModel(Context context) {
this.loginWay.setValue(LoginWay.ACCOUNT);
this.passwordVisibility.setValue(false);
public AuthenticationViewModel(Context context, Lazy<IUserRepository> userRepositoryLazy) {
this.userRepositoryLazy = userRepositoryLazy;
String token = context.getSharedPreferences(SHARED_PREFERENCES_NAME_AUTHENTICATION, Context.MODE_PRIVATE).getString(SHARED_PREFERENCES_AUTHENTICATION_KEY_TOKEN, null);
if (null != token) {
this.token = token;
......@@ -95,6 +105,9 @@ public class AuthenticationViewModel extends ViewModel {
} else {
this.authenticationState.setValue(AuthenticationState.UN_AUTHENTICATION);
}
this.loginWay.setValue(LoginWay.ACCOUNT);
this.passwordVisibility.setValue(false);
}
public LiveData<AuthenticationState> getAuthenticationState() {
......
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