package Ġcom . github . k xu 0 3 0 1 3 1 1 2 Ċ Ċ import Ġandroid . graphics . Color Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Remote Exception Ċ import Ġandroid . provider . Settings Ċ import Ġandroid . text . format . Formatter Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . lifecycle . get Ċ import Ġandroidx . view pager . widget . ViewPager Ċ import Ġcom . github . k xu 0 3 0 1 3 1 1 2 . aid l . I Shadow socks Service Ċ import Ġcom . github . k xu 0 3 0 1 3 1 1 2 . aid l . Shadow socks Connection Ċ import Ġcom . github . k xu 0 3 0 1 3 1 1 2 . aid l . Traffic Stats Ċ import Ġcom . github . k xu 0 3 0 1 3 1 1 2 . bg . Base Service Ċ import Ġcom . github . k xu 0 3 0 1 3 1 1 2 . database . Profile Ċ import Ġcom . github . k xu 0 3 0 1 3 1 1 2 . database . Profile Manager Ċ import Ġcom . github . k xu 0 3 0 1 3 1 1 2 . net . HttpPost Ċ import Ġcom . github . k xu 0 3 0 1 3 1 1 2 . preference . DataStore Ċ import Ġcom . google . android . gms . ads . Ad Request Ċ import Ġcom . google . android . gms . ads . Mobile Ads Ċ import Ġcom . google . android . gms . ads . reward . Reward Item Ċ import Ġcom . google . android . gms . ads . reward . Rew arded Video Ad Ċ import Ġcom . google . android . gms . ads . reward . Rew arded Video Ad Listener Ċ import Ġcom . google . android . material . tabs . Tab Layout Ċ import Ġcom . google . gson . Gson Ċ import Ġkotlinx . android . synt hetic . main . activity _ j _ new .* Ċ import Ġkotlinx . coroutines .* Ċ import Ġorg . jetbrains . ank o .* Ċ import Ġorg . jetbrains . ank o . sdk 2 7 . coroutines . onClick Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ import Ġandroid . content . DialogInterface Ċ import Ġandroid . content . pm . Activity Info Ċ import Ġcom . um eng . analytics . Mob click Agent Ċ import Ġcom . um eng . common sdk . UM Configure Ċ Ċ class ĠJ New Activity Ġ: ĠAppCompatActivity (), ĠShadow socks Connection . Callback , ĠRew arded Video Ad Listener Ġ{ ĊĠĠĠ Ġval Ġversion Ġ: ĠString Ġ= Ġ" v 0 . 0 . 1 3 " ĊĊĠĠĠ Ġvar Ġview Pager : ĠView Pager ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtab Layout : ĠTab Layout ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġstate Ġ= ĠBase Service . State . Idle ĊĠĠĠ Ġlateinit Ġvar Ġprofile Ġ: ĠProfile ĊĊĠĠĠ Ġvar Ġmain Fragment Ġ: ĠMain Fragment ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġreward ID Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Rew arded Video Ad : ĠRew arded Video Ad ĊĊĠĠĠ Ġlateinit Ġvar Ġweb view Dialog : ĠWeb view Dialog ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ ĠU M Configure . init ( this ," 5 e 0 3 1 dde 4 ca 3 5 7 e 9 3 0 0 0 0 7 f 5 "," GOOGLE _ PLAY ", UM Configure . DEVICE _ TYPE _ PHONE , null ) ĊĠĠĠĠĠĠĠ ĠMob click Agent . set Page Collection Mode ( Mob click Agent . Page Mode . AUTO ) ĊĊĠĠĠĠĠĠĠ Ġrequested Orientation Ġ= ĠActivity Info . SCREEN _ OR IENTATION _ POR TRA IT ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ j _ new ) ĊĠĠĠĠĠĠĠ Ġview Pager Ġ= Ġview _ page ĊĠĠĠĠĠĠĠ Ġsetup ViewPager ( view Pager !! ) ĊĊĠĠĠĠĠĠĠ Ġtab Layout Ġ= Ġtab _ layout ĊĠĠĠĠĠĠĠ Ġtab Layout !!. setup With ViewPager ( view Pager ) ĊĊĠĠĠĠĠĠĠ Ġconnect _ button _ new . setOnClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdid Clicked Connect Button () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġget Profile () ĊĊĠĠĠĠĠĠĠ Ġconnection . connect ( this , Ġthis ) ĊĠĠĠĠĠĠĠ Ġconnection . bandwidth Timeout Ġ= Ġ 1 0 0 0 ĊĊĠĠĠĠĠĠĠ ĠMobile Ads . initialize ( this ) Ġ{} ĊĠĠĠĠĠĠĠ Ġm Rew arded Video Ad Ġ= ĠMobile Ads . get Rew arded Video Ad Instance ( this ) ĊĠĠĠĠĠĠĠ Ġm Rew arded Video Ad . re warded Video Ad Listener Ġ= Ġthis ĊĊĠĠĠĠĠĠĠ Ġupdate Ad Button () ĊĊĠĠĠĠĠĠĠ Ġinit Web view Dialog () ĊĊĠĠĠĠĠĠĠ Ġz an zh u _ button . onClick Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweb view Dialog . set Url (" https :// fr p . u 0 3 0 1 3 1 1 2 . win : 1 8 0 2 2 / html s / ss - html /#/ z an ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweb view Dialog . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġlogin () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġdialog Height Ġ= Ġ 4 6 0 f ĊĠĠĠ Ġprivate Ġfun Ġinit Web view Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġweb view Dialog Ġ= ĠWeb view Dialog ( this ) ĊĠĠĠĠĠĠĠ Ġweb view Dialog . set ContentView ( R . layout . layout _ webview _ dialog ) ĊĠĠĠĠĠĠĠ Ġweb view Dialog . set Dialog Height ( dialog Height ) ĊĊĠĠĠĠĠĠĠ Ġweb view Dialog . setOn Dismiss Listener ( DialogInterface . On Dismiss Listener Ġ{ Ġdialog Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" TAG ", Ġ" cancel ĠDialog Ġdismiss ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Rew arded Video Ad () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Rew arded Video Ad . load Ad ( reward ID , ĠAd Request . Builder (). build ()) Ċ // ĠĠĠĠĠĠĠ ĠLog . v (" J "," load Rew arded Video Ad :${ reward ID }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup ViewPager ( view Pager : ĠView Pager ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠFragment Adapter ( support FragmentManager ) ĊĠĠĠĠĠĠĠ Ġadapter . add Fragment ( Main Fragment (), ĠgetString ( R . string . setting )) ĊĠĠĠĠĠĠĠ Ġadapter . add Fragment ( Store Fragment (), " è´Ń ä¹° ") ĊĠĠĠĠĠĠĠ Ġadapter . add Fragment ( About J Fragment (), ĠgetString ( R . string . about )) ĊĊĠĠĠĠĠĠĠ Ġview Pager . adapter Ġ= Ġadapter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdid Clicked Connect Button () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . can Stop Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCore . stop Service () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnet flow _ speed _ textView . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Fragment ?. start With Line Config () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Profile () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġprofile List Ġ= ĠProfile Manager . getAll Profiles () ĊĠĠĠĠĠĠĠ Ġif Ġ( profile List Ġ!= Ġnull Ġ&& Ġprofile List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . profile Ġ= Ġprofile List [ 0 ] ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . profile Ġ= ĠProfile Manager . create Profile ( Profile ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠCore . switch Profile ( this . profile . id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġconnection Ġ= ĠShadow socks Connection ( Handler (), Ġtrue ) ĊĠĠĠ Ġoverride Ġfun Ġstate Changed ( state : ĠBase Service . State , Ġprofile Name : ĠString ?, Ġmsg : ĠString ?) Ġ= Ġchange State ( state , Ġmsg , Ġtrue ) ĊĠĠĠ Ġoverride Ġfun Ġon Service Connected ( service : ĠI Shadow socks Service ) Ġ= Ġchange State ( try Ġ{ ĊĠĠĠĠĠĠĠ ĠBase Service . State . values ()[ service . state ] ĊĠĠĠ Ġ} Ġcatch Ġ(_ : ĠRemoteException ) Ġ{ ĊĠĠĠĠĠĠĠ ĠBase Service . State . Idle ĊĠĠĠ Ġ}) ĊĠĠĠ Ġprivate Ġfun Ġchange State ( state : ĠBase Service . State , Ġmsg : ĠString ? Ġ= Ġnull , Ġanimate : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . state Ġ= Ġstate ĊĠĠĠĠĠĠĠ Ġwhen ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBase Service . State . Idle , Base Service . State . Stopped Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus _ button . text Ġ= ĠgetString ( R . string . status _ stop ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnect _ button _ new . image Ġ= Ġget Drawable ( R . drawable . ic _ close ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBase Service . State . Connected Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus _ button . text Ġ= ĠgetString ( R . string . status _ start ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnect _ button _ new . image Ġ= Ġget Drawable ( R . drawable . ic _ open ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus _ button . text Ġ= ĠgetString ( R . string . status _ do ing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnect _ button _ new . image Ġ= Ġget Drawable ( R . drawable . ic _ do ing ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( msg Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v (" J "," msg :${ msg }, animate :${ animate }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġupdate Ad Button () ĊĠĠĠĠĠĠĠ Ġmain Fragment ?. update Z hi () ĊĠĠĠĠĠĠĠ Ġmain Fragment ?. update Line Button () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtraffic Updated ( profile Id : ĠLong , Ġstats : ĠTraffic Stats ) Ġ{ Ċ // ĠĠĠĠĠĠĠ ĠLog . e (" J "," traffic Updated ") ĊĠĠĠĠĠĠĠ Ġnet flow _ speed _ textView . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġif Ġ( profile Id Ġ== Ġ 0 L ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnet flow _ speed _ textView . text Ġ= Ġ" âĸ ² ĠĠ Ġ${ Formatter . format FileSize ( this , Ġstats . tx Rate ) }/ s \ n âĸ ¼ ĠĠ Ġ${ Formatter . format FileSize ( this , Ġstats . rx Rate ) }/ s " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġdata Ġclass Ġkeep alive Data ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġneed Stop Ġ: ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpires Date Ġ: ĠString Ġ= Ġ" 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal Ġ: ĠString Ġ= Ġ" 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġused Ġ: ĠString Ġ= Ġ" 0 " ĊĠĠĠ Ġ) ĊĠĠĠ Ġoverride Ġfun Ġkeep alive ( str : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġd Ġ= ĠGson (). fromJson ( str , Ġkeep alive Data :: class . java ) ĊĠĠĠĠĠĠĠ Ġupdate UI ( d . expires Date . to Long (), d . total . to Long (), d . used . to Long ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġupdate UI ( expires Date Ġ: Long , total Ġ: Long , used : Long ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . v (" J "," ${ expires Date }, ${ total }, ${ used }") ĊĠĠĠĠĠĠĠ Ġif Ġ( expires Date Ġ== Ġ 0 L ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnet flow _ use _ textView . text Ġ= Ġ" æ¬¢ è¿İ åħī ä¸´ ï¼ģ \ n å¤§ çĪ · æĿ¥ çİ© åķĬ ~ " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġop _ button . text Ġ= Ġ" æĸ° çĶ¨æĪ· çĤ¹åĩ» é¢Ĩ åıĸ ä½¿çĶ¨ å¤§ ç¤ ¼ åĮħ " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġop _ button . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus _ button . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġop _ button . setOnClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpost Ġ= ĠViewModel Provider ( this ). get < HttpPost >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost . post (" https :// fr p . u 0 3 0 1 3 1 1 2 . win : 1 8 0 2 2 / v 1 / android / buy Test ", """ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{" token ":" ${ DataStore . token } "," pro de ction ID ": 7 } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ str Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v (" J ", str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast (" é¢Ĩ åıĸ æĪĲåĬŁ !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd Ġ= ĠGson (). fromJson ( str , ĠJ Activity . Login Data :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate UI ( d . expires Date . to Long (), d . total . to Long (), d . used . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ post ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerr Ġ-> ĠLog . e (" J ", Ġerr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast (" çĻ» éĻĨ å¤±è´¥ ï¼Į æŃ£åľ¨ éĩį è¯ķ !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcalendar Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . time In Millis Ġ= Ġexpires Date Ġ* Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġop _ button . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus _ button . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġop _ button . onClick Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v (" J ", calendar . time . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnet flow _ use _ textView . text Ġ= Ġ" æľīæķĪ æľŁ èĩ³ ï¼ļ \ n ${ SimpleDateFormat (" yyyy - MM - dd \ n HH : mm : ss "). format ( calendar . time )}\ n æĭ¥ æľī æµģ éĩı ï¼ļ \ n ${ Formatter . format FileSize ( this , Ġtotal )}\ n å·² çĶ¨ ï¼ļ ${ Formatter . format FileSize ( this , Ġused )}" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain Fragment ?. getLine List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġpro de ction List : ArrayList < Main Fragment . getLine Data > Ġ= ĠArrayList () ĊĠĠĠ Ġvar Ġline Id Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġline Name Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġfun Ġlogin () Ġ{ ĊĠĠĠĠĠĠĠ Ġversion _ text . text Ġ= Ġ" çīĪæľ¬ ï¼ļ ${ version }" ĊĠĠĠĠĠĠĠ Ġvar Ġandroid ID Ġ= ĠSettings . Secure . getString ( content Resolver , ĠSettings . Secure . ANDROID _ ID ) ĊĠĠĠĠĠĠĠ Ġif Ġ( android ID Ġ== Ġnull Ġ|| Ġandroid ID Ġ== Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( DataStore . android ID Ġ== Ġ""){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid ID Ġ= ĠUUID . randomUUID (). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Store . android ID Ġ= Ġandroid ID ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid ID Ġ= ĠData Store . android ID ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠLog . v (" J ", android ID ) ĊĠĠĠĠĠĠĠ Ġval Ġpost Ġ= ĠViewModel Provider ( this ). get < HttpPost >() ĊĠĠĠĠĠĠĠ Ġpost . post (" https :// fr p . u 0 3 0 1 3 1 1 2 . win : 1 8 0 2 2 / v 1 / android / login "," {\" uuid \":\" ${ android ID }\ ", \" version \":\" ${ version }\" }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ str Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" J ", str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast (" çĻ» éĻĨ æĪĲåĬŁ !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd Ġ= ĠGson (). fromJson ( str , ĠJ Activity . Login Data :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( d Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast (" d == null ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ post ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" J ", d . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġd . token ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v (" J "," token :${ token }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Store . token Ġ= Ġtoken ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate UI ( d . expires Date . to Long (), d . total . to Long (), d . used . to Long ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Google Ad () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Hello () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ post ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerr Ġ-> ĠLog . e (" J ", Ġerr ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoast (" çĻ» éĻĨ å¤±è´¥ ï¼Į æŃ£åľ¨ éĩį è¯ķ !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠGet Google Ad Data Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid : String Ġ= Ġ"" ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġfun Ġget Google Ad () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġpost Ġ= ĠViewModel Provider ( this ). get < HttpPost >() ĊĠĠĠĠĠĠĠ Ġpost . post (" https :// fr p . u 0 3 0 1 3 1 1 2 . win : 1 8 0 2 2 / v 1 / android / get Google Ad "," {\" token \":\" ${ DataStore . token }\" }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ str Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v (" J ", str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd Ġ= ĠGson (). fromJson ( str , ĠGet Google Ad Data :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreward ID Ġ= Ġd . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Rew arded Video Ad () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ post ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ err Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" J ", Ġerr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast (" å¹¿åĳĬ ID æľª æī¾åĪ° ãĢĤ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Rew arded ( reward : ĠRew ard Item ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġlong Toast ( Ġ" on Rew arded ! Ġcurrency : Ġ${ reward . type } Ġamount : Ġ${ reward . amount }") ĊĠĠĠĠĠĠĠ Ġ// ĠRew ard Ġthe Ġuser . ĊĠĠĠĠĠĠĠ Ġval Ġpost Ġ= ĠViewModel Provider ( this ). get < HttpPost >() ĊĠĠĠĠĠĠĠ Ġpost . post (" https :// fr p . u 0 3 0 1 3 1 1 2 . win : 1 8 0 2 2 / v 1 / android / buy Test ", """ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{" token ":" ${ DataStore . token } "," pro de ction ID ": 7 } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ str Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v (" J ", str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast (" é¢Ĩ åıĸ æĪĲåĬŁ !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd Ġ= ĠGson (). fromJson ( str , ĠJ Activity . Login Data :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate UI ( d . expires Date . to Long (), d . total . to Long (), d . used . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ post ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerr Ġ-> ĠLog . e (" J ", Ġerr ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoast (" çĻ» éĻĨ å¤±è´¥ ï¼Į æŃ£åľ¨ éĩį è¯ķ !") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Rew arded Video Ad Left Application () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġtoast (" on Rew arded Video Ad Left Application ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Rew arded Video Ad Closed () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġtoast (" on Rew arded Video Ad Closed ") ĊĠĠĠĠĠĠĠ Ġload Rew arded Video Ad () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Rew arded Video Ad Failed To Load ( errorCode : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . v (" J "," on Rew arded Video Ad Failed To Load Ġ${ errorCode }") ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 5 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Rew arded Video Ad () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Rew arded Video Ad Loaded () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġtoast (" on Rew arded Video Ad Loaded ") ĊĠĠĠĠĠĠĠ ĠLog . v (" J "," on Rew arded Video Ad Loaded ") ĊĠĠĠĠĠĠĠ Ġupdate Ad Button () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Rew arded Video Ad Opened () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġtoast (" on Rew arded Video Ad Opened ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Rew arded Video Started () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġtoast (" on Rew arded Video Started ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Rew arded Video Completed () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġtoast (" on Rew arded Video Completed ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Ad Button () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Rew arded Video Ad . is Loaded Ġ&& Ġ( state Ġ== ĠBase Service . State . Idle Ġ|| Ġstate Ġ== ĠBase Service . State . Stopped )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġad _ button . setTextColor ( resources . getColor ( R . color . por n _ orange )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġad _ button . background . set Tint ( Color . WHITE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġad _ button . onClick Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġad _ button . setTextColor ( resources . getColor ( R . color . gray _ dr ak )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġad _ button . background . set Tint ( Color . LT GRAY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġad _ button . onClick Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Rew arded Video Ad . is Loaded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Rew arded Video Ad . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġad _ button . setTextColor ( resources . getColor ( R . color . gray _ dr ak )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġad _ button . background . set Tint ( Color . LT GRAY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus _ button . onClick Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Hello () Ġ{ ĊĠĠĠĠĠĠĠ Ġweb view Dialog . set Url (" https :// fr p . u 0 3 0 1 3 1 1 2 . win : 1 8 0 2 2 / html s / ss - html /#/ hello ") ĊĠĠĠĠĠĠĠ Ġweb view Dialog . show () ĊĠĠĠ Ġ} Ċ } Ċ