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 login(String username, String password) { // handle login Result result = dataSource.login(username, password); if (result instanceof Result.Success) { setLoggedInUser(((Result.Success) result).getData()); } return result; } }