package com.duqing.missions.ui.login.data;
|
|
|
import com.duqing.missions.ui.login.data.model.LoggedInUser;
|
|
import io.reactivex.Observable;
|
|
/**
|
* 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 Observable<LoggedInUser> login(String username, String password) {
|
// handle login
|
return dataSource.login(username, password);
|
}
|
}
|