/* Ċ Ġ* ĠSPDX - File Copyright Text : Ġ 2 0 2 1 , Ġmicro G ĠProject ĠTeam Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ġ*/ Ċ Ċ package Ġorg . micro g . gms . d roid guard Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Base 6 4 Ċ import Ġcom . android . vol ley . Vol ley Error Ċ import Ġcom . android . vol ley . toolbox . String Request Ċ import Ġcom . android . vol ley . toolbox . Vol ley Ċ import Ġorg . micro g . gms . check in . Last Check in Info Ċ import Ġkotlin . coroutines . resume Ċ import Ġkotlin . coroutines . resume With Exception Ċ import Ġkotlin . coroutines . suspend Coroutine Ċ Ċ interface ĠD roid Guard Result Creator Ġ{ ĊĠĠĠ Ġsuspend Ġfun Ġget Result ( flow : ĠString , Ġdata : ĠMap < String , ĠString >): ĠByteArray ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance ( context : ĠContext ): ĠD roid Guard Result Creator Ġ= Ġwhen Ġ( Droid Guard Preferences ( context ). mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠD roid Guard Preferences . Mode . Disabled Ġ-> Ġthrow ĠRuntimeException (" Droid Guard Ġdisabled ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠD roid Guard Preferences . Mode . Connector Ġ-> ĠConnector Droid Guard Result Creator ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠD roid Guard Preferences . Mode . Network Ġ-> ĠNetwork Droid Guard Result Creator ( context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsuspend Ġfun Ġget Result ( context : ĠContext , Ġflow : ĠString , Ġdata : ĠMap < String , ĠString >): ĠByteArray Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetInstance ( context ). getResult ( flow , Ġdata ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠConnector Droid Guard Result Creator ( private Ġval Ġcontext : ĠContext ) Ġ: ĠD roid Guard Result Creator Ġ{ ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Result ( flow : ĠString , Ġdata : ĠMap < String , ĠString >): ĠByteArray Ġ= Ġsuspend Coroutine Ġ{ Ġcontinuation Ġ-> ĊĠĠĠĠĠĠĠ ĠThread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( entry Ġin Ġdata ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . putString ( entry . key , Ġentry . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconn Ġ= ĠRemote Droid Guard Connector ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdg Ġ= Ġconn . guard ( flow , ĠLast Check in Info . read ( context ). android Id . toString (), Ġbundle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dg Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume With Exception ( RuntimeException (" No ĠD roid Guard Ġresult ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( dg . statusCode Ġ== Ġ 0 Ġ&& Ġdg . result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume ( dg . result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume With Exception ( RuntimeException (" Status : Ġ" Ġ+ Ġdg . statusCode Ġ+ Ġ", Ġerror :" Ġ+ Ġdg . error Msg )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. start () ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠNetwork Droid Guard Result Creator ( private Ġval Ġcontext : ĠContext ) Ġ: ĠD roid Guard Result Creator Ġ{ ĊĠĠĠ Ġprivate Ġval Ġqueue Ġ= ĠVol ley . new Request Queue ( context ) ĊĠĠĠ Ġprivate Ġval Ġurl : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠD roid Guard Preferences ( context ). network Server Url Ġ?: Ġthrow ĠRuntimeException (" Network ĠURL Ġrequired ") ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Result ( flow : ĠString , Ġdata : ĠMap < String , ĠString >): ĠByteArray Ġ= Ġsuspend Coroutine Ġ{ Ġcontinuation Ġ-> ĊĠĠĠĠĠĠĠ Ġqueue . add ( Post Params String Request ("$ url ? flow =$ flow ", Ġdata , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume ( Base 6 4 . decode ( it , ĠBase 6 4 . NO _ WRAP Ġ+ ĠBase 6 4 . NO _ P ADDING Ġ+ ĠBase 6 4 . URL _ SAFE )) ĊĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume With Exception ( RuntimeException ( it )) ĊĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠPost Params String Request ( url : ĠString , Ġprivate Ġval Ġdata : ĠMap < String , ĠString >, Ġlistener : Ġ( String ) Ġ-> ĠUnit , Ġerror Listener : Ġ( Vol ley Error ) Ġ-> ĠUnit ) Ġ: ĠString Request ( Method . POST , Ġurl , Ġlistener , Ġerror Listener ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Params (): ĠMap < String , ĠString > Ġ= Ġdata Ċ } Ċ