/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 Ġy vol k Ġ( Y uri ĠVol kov ), Ġhttp :// y ur iv olk ov . com Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// 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 Ġorg . and status . app . account Ċ Ċ import Ġandroid . accounts . Account Ċ import Ġandroid . accounts . Account Manager Ċ import Ġandroid . content . Content Resolver Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġio . v avr . control . Try Ċ import Ġorg . and status . app . data . Matched Uri Ċ import Ġorg . and status . app . util . Json Utils Ċ import Ġorg . and status . app . util . My Log Ċ import Ġorg . and status . app . util . Permissions Ċ import Ġorg . and status . app . util . Permissions . Permission Type Ċ import Ġorg . json . JSONObject Ċ import Ġjava . util .* Ċ import Ġjava . util . stream . Collectors Ċ Ċ object ĠAccount Utils Ġ{ ĊĠĠĠ Ġconst Ġval ĠAC COUNT _ VERSION Ġ= Ġ 4 8 ĊĠĠĠ Ġval ĠKEY _ VERSION : ĠString Ġ= Ġ" my version " Ġ// ĠSt oring Ġversion Ġof Ġthe Ġaccount Ġdata ĊĊĠĠĠ Ġ/** ĠThe ĠKey Ġfor Ġthe Ġandroid . accounts . Account Ġbundle Ġ Ġ*/ ĊĠĠĠ Ġval ĠKEY _ ACCOUNT : ĠString Ġ= Ġ" account " ĊĊĠĠĠ Ġfun Ġis Version Current ( context : ĠContext , Ġaccount : ĠAccount ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠAC COUNT _ VERSION Ġ== Ġget Version ( context , Ġaccount ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Version ( context : ĠContext , Ġaccount : ĠAccount ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠJson Utils . to JsonObject ( Account Manager . get ( context ). getUser Data ( account , ĠKEY _ ACCOUNT )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( this :: getVersion ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getOrElse ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Version Current ( js o : ĠJSONObject ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠAC COUNT _ VERSION Ġ== Ġget Version ( js o ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Version ( js o : ĠJSONObject ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġj so ?. opt Int ( KEY _ VERSION ) Ġ?: Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠAdd Ġthis Ġaccount Ġto Ġthe ĠAccount ĠManager ĠWithout Ġuser data Ġyet Ġ Ġ*/ ĊĠĠĠ Ġfun Ġadd Empty Account ( o AccountName : ĠAccount Name , Ġpassword : ĠString ?): ĠTry < Account > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġadd Empty Account ( Account Manager . get ( o AccountName . getContext ()), Ġo AccountName . name , Ġpassword ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠAdd Ġthis Ġaccount Ġto Ġthe ĠAccount ĠManager ĠWithout Ġuser data Ġyet Ġ Ġ*/ ĊĠĠĠ Ġfun Ġadd Empty Account ( am : ĠAccount Manager , Ġaccount Name : ĠString ?, Ġpassword : ĠString ?): ĠTry < Account > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTry . of Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġandroid Account Ġ= ĠAccount ( account Name , ĠAuth enticator Service . ANDROID _ ACCOUNT _ TYPE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( am . add Account Explicit ly ( android Account , Ġpassword , Ġnull )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWithout ĠSync Adapter Ġwe Ġgot Ġthe Ġerror : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSync Manager ( 8 6 5 ): Ġcan 't Ġfind Ġa Ġsync Ġadapter Ġfor ĠSync Adapter Type ĠKey ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ{ name = org . and status . app . data . My Provider , Ġtype = org . and status . app }, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġremoving Ġsettings Ġfor Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMy Log . v ( Account Utils :: class . java ) Ġ{ Ġ" Pers isted Ġ$ account Name " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ of Ġandroid Account ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠerrorMessage Ġ= Ġ" Account Ġwas Ġnot Ġadded Ġto ĠAccount Manager : Ġ$ android Account " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMy Log . e ( Account Utils :: class . java , ĠerrorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException ( errorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Existing Android Account ( o AccountName : ĠAccount Name ): ĠTry < Account > Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( account Ġin ĠgetCurrent Accounts ( o AccountName . getContext ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( o AccountName . name Ġ== Ġaccount . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTry . success ( account ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠTry . failure ( NoSuch ElementException ( o AccountName . name )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Sync Frequency Seconds ( account : ĠAccount ?): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġsync Frequency Seconds : ĠLong Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġsync s Ġ= ĠContent Resolver . get Periodic Sync s ( account , ĠMat ched Uri . AUTH ORITY ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! sync s . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsync Frequency Seconds Ġ= Ġsync s [ 0 ]. period ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsync Frequency Seconds ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Sync Frequency Seconds ( android Account : ĠAccount ?, Ġsync Frequency Seconds : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSee ĊĠĠĠĠĠĠĠ Ġ// Ġhttp :// developer . android . com / reference / android / content / Content Resolver . html # add Periodic Sync ( android . accounts . Account , Ġjava . lang . String , Ġandroid . os . Bundle , Ġlong ) ĊĠĠĠĠĠĠĠ Ġ// Ġand ĊĠĠĠĠĠĠĠ Ġ// Ġhttp :// stackoverflow . com / questions / 1 1 0 9 0 6 0 4 / android - sync adapter - autom atically - initialize - sync ing ĊĠĠĠĠĠĠĠ Ġif Ġ( sync Frequency Seconds Ġ!= Ġget Sync Frequency Seconds ( android Account )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContent Resolver . remove Periodic Sync ( android Account , ĠMat ched Uri . AUTH ORITY , ĠBundle . EMPTY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sync Frequency Seconds Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContent Resolver . add Periodic Sync ( android Account , ĠMat ched Uri . AUTH ORITY , ĠBundle . EMPTY , Ġsync Frequency Seconds ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetCurrent Accounts ( context : ĠContext ): ĠMutable List < Account > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠgetAll Accounts ( context ). stream (). filter Ġ{ Ġa : ĠAccount Ġ-> Ġis Version Current ( context , Ġa ) Ġ}. collect ( Collectors . toList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetAll Accounts ( context : ĠContext ): ĠList < Account > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Permissions . check Permission ( context , ĠPermission Type . GET _ ACCOUNT S )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġam Ġ= ĠAccount Manager . get ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠArrays . stream ( am . get Account sBy Type ( Authenticator Service . ANDROID _ ACCOUNT _ TYPE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect ( Collectors . toList ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠ Ġ} Ċ } Ċ