/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . example . android dev challenge . data . repository . pet finder . local Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . datastore . core . DataStore Ċ import Ġandroidx . datastore . preferences . core . Preferences Ċ import Ġandroidx . datastore . preferences . core . edit Ċ import Ġandroidx . datastore . preferences . core . string Preferences Key Ċ import Ġandroidx . datastore . preferences . preferences DataStore Ċ import Ġcom . example . android dev challenge . data . model . AccessToken Ċ import Ġcom . example . android dev challenge . data . repository . pet finder . local . Pet finder Local DataSource . Preference Keys . ACCESS _ TOKEN Ċ import Ġdagger . h ilt . android . qual ifiers . ApplicationContext Ċ import Ġkotlinx . coroutines . flow . catch Ċ import Ġkotlinx . coroutines . flow . map Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton Ċ Ċ @ Singleton Ċ class ĠPet finder Local DataSource Ġ@ Inject Ġconstructor (@ ApplicationContext Ġprivate Ġval Ġcontext : ĠContext ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠP REFER ENCES _ NAME Ġ= Ġ" pet finder " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġobject ĠPreference Keys Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠACCESS _ TOKEN Ġ= Ġstring Preferences Key ( name Ġ= Ġ" access _ token ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠContext . data Store : ĠData Store < Preferences > Ġby Ġpreferences DataStore ( name Ġ= ĠP REFER ENCES _ NAME ) ĊĊĠĠĠ Ġsuspend Ġfun Ġupdate AccessToken ( accessToken : ĠAccess Token ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Token Ġ$ accessToken ") ĊĠĠĠĠĠĠĠ Ġrequire (! accessToken . accessToken . isNull Or Blank ()) Ġ{ Ġ" User Ġtoken Ġis Ġnull Ġor Ġnot Ġavailable ." Ġ} ĊĠĠĠĠĠĠĠ Ġcontext . data Store . edit Ġ{ Ġpreferences Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences [ ACCESS _ TOKEN ] Ġ= ĠaccessToken . accessToken ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget AccessToken () Ġ= Ġcontext . data Store . data . map Ġ{ Ġpreferences Ġ-> ĊĠĠĠĠĠĠĠ Ġpreferences [ ACCESS _ TOKEN ] Ġ?: Ġ"" ĊĠĠĠ Ġ}. catch Ġ{ Ġthrowable Ġ-> ĊĠĠĠĠĠĠĠ ĠTim ber . e ( throwable ) ĊĠĠĠ Ġ} Ċ } Ċ