Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
beyond-clouds-android
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
云深项目组
beyond-clouds-android
Commits
01c40829
Commit
01c40829
authored
Mar 19, 2020
by
段启岩
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
解决dagger循环依赖
parent
4c80306c
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
251 additions
and
3 deletions
+251
-3
app/src/main/java/cn/yunliyunwai/beyondclouds/data/model/AuthenticationResult.java
+10
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/data/model/UserInfo.java
+27
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/data/model/UserStatistics.java
+30
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/data/model/form/AccountLoginForm.java
+22
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/data/model/form/SmsLoginForm.java
+22
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/data/source/IUserRepository.java
+34
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/data/source/impl/UserRepositoryImpl.java
+39
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/data/source/remote/UserApiStore.java
+38
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/di/module/AppModule.java
+7
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/di/module/AppModuleBinds.java
+6
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/viewmodel/AuthenticationViewModel.java
+16
-3
No files found.
app/src/main/java/cn/yunliyunwai/beyondclouds/data/model/AuthenticationResult.java
0 → 100644
View file @
01c40829
package
cn
.
yunliyunwai
.
beyondclouds
.
data
.
model
;
import
lombok.Data
;
@Data
public
class
AuthenticationResult
{
private
String
userId
;
private
String
accessToken
;
}
app/src/main/java/cn/yunliyunwai/beyondclouds/data/model/UserInfo.java
0 → 100644
View file @
01c40829
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
;
}
app/src/main/java/cn/yunliyunwai/beyondclouds/data/model/UserStatistics.java
0 → 100644
View file @
01c40829
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
;
}
app/src/main/java/cn/yunliyunwai/beyondclouds/data/model/form/AccountLoginForm.java
0 → 100644
View file @
01c40829
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
);
}
}
app/src/main/java/cn/yunliyunwai/beyondclouds/data/model/form/SmsLoginForm.java
0 → 100644
View file @
01c40829
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
);
}
}
app/src/main/java/cn/yunliyunwai/beyondclouds/data/source/IUserRepository.java
0 → 100644
View file @
01c40829
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
();
}
app/src/main/java/cn/yunliyunwai/beyondclouds/data/source/impl/UserRepositoryImpl.java
0 → 100644
View file @
01c40829
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
();
}
}
app/src/main/java/cn/yunliyunwai/beyondclouds/data/source/remote/UserApiStore.java
0 → 100644
View file @
01c40829
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
();
}
app/src/main/java/cn/yunliyunwai/beyondclouds/di/module/AppModule.java
View file @
01c40829
...
...
@@ -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
(),
...
...
app/src/main/java/cn/yunliyunwai/beyondclouds/di/module/AppModuleBinds.java
View file @
01c40829
...
...
@@ -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
)
...
...
app/src/main/java/cn/yunliyunwai/beyondclouds/viewmodel/AuthenticationViewModel.java
View file @
01c40829
...
...
@@ -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
()
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment