Last active
February 16, 2020 19:24
-
-
Save igorwojda/7a662dafe83b1e7f241a2605204c4331 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class AccountRepository(context: Context) { | |
companion object { | |
const val ACCOUNT_NAME = "ABC app account" | |
const val ACCOUNT_TYPE = "com.igorwojda.abc" | |
const val REFRESH_TOKEN = "refreshToken" | |
} | |
private val accountManager: AccountManager = AccountManager.get(context) | |
private val account: Account? | |
get() = accountManager.getAccountsByType(ACCOUNT_TYPE).firstOrNull() | |
val isLoggedIn: Boolean | |
get() = account != null | |
val accessToken: String? | |
get() = if (isLoggedIn) account?.let { accountManager.getPassword(it) } else null | |
val refreshToken: String? | |
get() = if (isLoggedIn) account?.let { accountManager.getUserData(it, REFRESH_TOKEN) } else null | |
fun addAccount(accessToken: String, refreshToken: String) { | |
val account = Account(ACCOUNT_NAME, ACCOUNT_TYPE) | |
accountManager.addAccountExplicitly(account, null, null) | |
setTokens(accessToken, refreshToken) | |
} | |
fun setTokens(accessToken: String, refreshToken: String) { | |
accountManager.setPassword(account, accessToken) | |
accountManager.setUserData(account, REFRESH_TOKEN, refreshToken) | |
} | |
fun removeAccount() { | |
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { | |
accountManager.removeAccountExplicitly(Account(ACCOUNT_NAME, ACCOUNT_TYPE)) | |
} else { | |
accountManager.removeAccount( | |
account, | |
{}, | |
Handler(Looper.getMainLooper()) | |
) | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment