You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.7 KiB
55 lines
1.7 KiB
4 years ago
|
package com.community.pocket.data;
|
||
|
|
||
|
import com.community.pocket.data.model.LoggedInUser;
|
||
|
|
||
|
/**
|
||
|
* Class that requests authentication and user information from the remote data source and
|
||
|
* maintains an in-memory cache of login status and user credentials information.
|
||
|
*/
|
||
|
public class LoginRepository {
|
||
|
|
||
|
private static volatile LoginRepository instance;
|
||
|
|
||
|
private LoginDataSource dataSource;
|
||
|
|
||
|
// If user credentials will be cached in local storage, it is recommended it be encrypted
|
||
|
// @see https://developer.android.com/training/articles/keystore
|
||
|
private LoggedInUser user = null;
|
||
|
|
||
|
// private constructor : singleton access
|
||
|
private LoginRepository(LoginDataSource dataSource) {
|
||
|
this.dataSource = dataSource;
|
||
|
}
|
||
|
|
||
|
public static LoginRepository getInstance(LoginDataSource dataSource) {
|
||
|
if (instance == null) {
|
||
|
instance = new LoginRepository(dataSource);
|
||
|
}
|
||
|
return instance;
|
||
|
}
|
||
|
|
||
|
public boolean isLoggedIn() {
|
||
|
return user != null;
|
||
|
}
|
||
|
|
||
|
public void logout() {
|
||
|
user = null;
|
||
|
dataSource.logout();
|
||
|
}
|
||
|
|
||
|
private void setLoggedInUser(LoggedInUser user) {
|
||
|
this.user = user;
|
||
|
// If user credentials will be cached in local storage, it is recommended it be encrypted
|
||
|
// @see https://developer.android.com/training/articles/keystore
|
||
|
}
|
||
|
|
||
|
public Result<LoggedInUser> login(String username, String password) {
|
||
|
// handle login
|
||
|
Result<LoggedInUser> result = dataSource.login(username, password);
|
||
|
if (result instanceof Result.Success) {
|
||
|
setLoggedInUser(((Result.Success<LoggedInUser>) result).getData());
|
||
|
}
|
||
|
return result;
|
||
|
}
|
||
|
}
|