123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- package me.yoqi.android.netauth.data;
- import me.yoqi.android.netauth.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;
- }
- }
|