Skip to content

Instantly share code, notes, and snippets.

@igorwojda
Last active February 16, 2020 19:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save igorwojda/7a662dafe83b1e7f241a2605204c4331 to your computer and use it in GitHub Desktop.
Save igorwojda/7a662dafe83b1e7f241a2605204c4331 to your computer and use it in GitHub Desktop.
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