package Ġcom . be yond the horizon . route . views . mult ic ont acts choice . ui . main Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . provider . Contacts Contract Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . appcompat . widget . Search View Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . swiper ef resh layout . widget . Swipe Refresh Layout Ċ import Ġcom . be yond the horizon . route . R Ċ import Ġcom . be yond the horizon . route . adapters . Multi Choice Contacts Adapter Ċ import Ġcom . be yond the horizon . route . databinding . Fragment Request Funds Binding Ċ import Ġcom . be yond the horizon . route . models . Contact Ċ import Ġcom . be yond the horizon . route . models . Multi Contact Model Ċ import Ġcom . be yond the horizon . route . utils . Constants Ċ import Ġcom . be yond the horizon . route . utils . Constants .* Ċ import Ġcom . be yond the horizon . route . utils . Network Utils Ċ import Ġcom . be yond the horizon . route . views . Confirm Fund Request Activity Ċ import Ġcom . be yond the horizon . route . views . MainActivity Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . Json Element Ċ import Ġcom . google . gson . reflect . Type Token Ċ import Ġkotlinx . android . synt hetic . main . fragment _ request _ fund s .* Ċ import Ġorg . json . JSONObject Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . lang . reflect . Type ĊĊ Ċ /** Ċ Ġ* ĠA Ġsimple Ġ[ Fragment ] Ġsubclass . Ċ Ġ*/ Ċ class ĠMulti Choice Contacts Fragment Ġ: ĠFragment (), ĠSw ipe Refresh Layout . On Refresh Listener Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnetwork Utils : ĠNetwork Utils ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontacts : ĠArrayList < Multi Contact Model > ĊĠĠĠ Ġprivate Ġvar Ġcontact Map : ĠMutable Map < String , ĠContact > Ġ= Ġmutable Map Of () ĊĠĠĠ Ġprivate Ġvar Ġroute Contact Map : ĠMutable Map < String , ĠContact > Ġ= Ġmutable Map Of () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġprefs : ĠSharedPreferences ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsearch View : ĠSearch View ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġparent Intent : ĠIntent ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcard Status : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġchild Intent : ĠIntent ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġeditor : ĠSharedPreferences . Editor ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment Request Funds Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtransaction Type : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontacts Ad ap ater : ĠMulti Choice Contacts Adapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlinear LayoutManager : ĠLinearLayoutManager ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġre cyclerView : ĠRecyclerView ĊĠĠĠ Ġprivate Ġvar Ġdummy Id Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmobile Number : ĠString ĊĠĠĠ Ġprivate Ġvar ĠREQUEST _ READ _ CONTACT S Ġ= Ġ 7 9 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtoken : ĠString ĊĊĠĠĠ Ġ// ĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontext : ĠContext ĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . inflate ( layout Inflater , ĠR . layout . fragment _ request _ fund s , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġnetwork Utils Ġ= ĠNetwork Utils ( require Context ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġbinding . root ĊĠĠĠĠĠĠĠ Ġre cyclerView Ġ= Ġbinding . contact RecyclerView ĊĠĠĠĠĠĠĠ Ġlinear LayoutManager Ġ= ĠLinearLayoutManager ( activity ) ĊĠĠĠĠĠĠĠ Ġsearch View Ġ= Ġbinding . contact Search View ĊĊĠĠĠĠĠĠĠ Ġprefs Ġ= Ġrequire Activity (). get SharedPreferences ( Constants . REG _ APP _ PREFER ENCES , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġeditor Ġ= Ġprefs . edit () ĊĠĠĠĠĠĠĠ Ġparent Intent Ġ= Ġrequire Activity (). intent ĊĠĠĠĠĠĠĠ Ġchild Intent Ġ= ĠIntent ( require Activity (), ĠConfirm Fund Request Activity :: class . java ) ĊĠĠĠĠĠĠĠ Ġvar Ġtransaction Message Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġtoken Ġ= Ġ" Bearer Ġ" Ġ+ Ġprefs . getString ( USER _ TOKEN , Ġ"") ĊĊĠĠĠĠĠĠĠ Ġtransaction Type Ġ= Ġprefs . getString ( Constants . REQUEST _ TYPE _ TO _ DE TERM INE _ PAYMENT _ ACTIVITY , Ġ""). toString () ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Activity Compat . check Self Permission ( require Activity (), Ġandroid . Manifest . permission . READ _ CONTACT S ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// SEND ĠTO ĠM ANY ĠBY ĠROUT E ĠCONT ACT S ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prefs . getString ( REQUEST _ TYPE _ TO _ DE TERM INE _ PAYMENT _ TYPE , Ġ"") !!. compareTo ( SEND _ M ONE Y _ TO _ ROUTE ) Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontacts Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// CHECK ĠIF ĠWE ĠHAVE ĠC ACHED ĠANY ĠROUT E ĠCONT ACT S ĠFROM ĠDB ĠBE FORE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prefs . getString ( MY _ ROUTE _ CONTACT S _ NEW , Ġ"") !!. isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgson Ġ= ĠGson () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstring Ġ= Ġprefs . getString ( MY _ ROUTE _ CONTACT S _ NEW , Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype : ĠType Ġ= Ġobject Ġ: ĠType Token < ArrayList < Multi Contact Model >>() Ġ{} . type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontacts Ġ= Ġgson . fromJson ( string , Ġtype ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager Ġ= Ġlinear LayoutManager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . set Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontacts Ad ap ater Ġ= ĠMulti Choice Contacts Adapter ( require Activity (), Ġcontacts ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= Ġcontacts Ad ap ater ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// CHECK ĠIF ĠWE ĠHAVE ĠC ACHED ĠANY ĠROUT E ĠCONT ACT S ĠFROM ĠDB ĠBE FORE ĠIF ĠNOT ĠLOAD ĠCONT ACT S ĠFROM ĠBACK END ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Registered Contacts () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontacts Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// SEND ĠTO ĠM ANY ĠBY ĠANY ĠM OB ILE ĠCONT ACT S ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// CHECK ĠIF ĠWE ĠHAVE ĠC ACHED ĠANY ĠANY ĠCONT ACT S ĠFROM ĠDB ĠBE FORE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prefs . getString ( MY _ ALL _ CONTACT S _ NEW , Ġ"") !!. isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgson Ġ= ĠGson () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstring Ġ= Ġprefs . getString ( MY _ ALL _ CONTACT S _ NEW , Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype : ĠType Ġ= Ġobject Ġ: ĠType Token < ArrayList < Multi Contact Model >>() Ġ{} . type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontacts Ġ= Ġgson . fromJson ( string , Ġtype ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager Ġ= Ġlinear LayoutManager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . set Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontacts Ad ap ater Ġ= ĠMulti Choice Contacts Adapter ( require Activity (), Ġcontacts ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= Ġcontacts Ad ap ater ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// CHECK ĠIF ĠWE ĠHAVE ĠC ACHED ĠANY Ġ ĠCONT ACT S ĠFROM ĠDB ĠBE FORE ĠIF ĠNOT ĠLOAD ĠCONT ACT S ĠFROM ĠBACK END ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Registered Contacts () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permission (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( require Activity (), Ġe . message , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . contact Search View . setOn Query Text Listener ( object Ġ: ĠSearch View . On Query Text Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( query : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( new Text : ĠString ): ĠBoolean Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! new Text . toLowerCase (). trim (). isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontacts Ad ap ater . get Filter (). filter ( new Text ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġbinding . swipe Refresh . setOn Refresh Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Refresh . is Refresh ing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Registered Contacts () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġrequest Permission () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Activity Compat . should Show Request Permission R ationale ( require Activity (), ĠManifest . permission . READ _ CONTACT S )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġshow ĠUI Ġpart Ġif Ġyou Ġwant Ġhere Ġto Ġshow Ġsome Ġr ationale Ġ!!! ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( require Activity (), ĠarrayOf ( Manifest . permission . READ _ CONTACT S ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ READ _ CONTACT S ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( Activity Compat . should Show Request Permission R ationale ( require Activity (), ĠManifest . permission . READ _ CONTACT S )) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( require Activity (), ĠarrayOf ( Manifest . permission . READ _ CONTACT S ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ READ _ CONTACT S ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < String >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ READ _ CONTACT S Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results . isEmpty () Ġ|| Ġgrant Results [ 0 ] Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( require Activity (), Ġ" Permission ĠDen ied ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Registered Contacts () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Registered Contacts () Ġ{ ĊĠĠĠĠĠĠĠ Ġcontacts Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// CHECK ĠINTER NET ĠCONNECTION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! network Utils . is Network Available ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInitialize Ġa Ġnew Ġinstance Ġof ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setTitle (" No ĠConnection ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setMessage (" No Ġinternet Ġconnection ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Positive Button (" Retry ") Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Registered Contacts () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Negative Button (" Cancel ") Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( require Activity (), ĠMainActivity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . flags Ġ= ĠIntent . FLAG _ ACTIVITY _ NEW _ TASK Ġor ĠIntent . FLAG _ ACTIVITY _ CLEAR _ TASK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (). finish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog : ĠAlertDialog Ġ= Ġbuilder . create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . set Canceled On Touch Outside ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġph ones Ġ= Ġrequire Activity (). content Resolver . query ( Contacts Contract . Common Data Kinds . Phone . CONTENT _ URI , Ġnull , Ġnull , Ġnull , ĠContact s Contract . Common Data Kinds . Phone . DISPLAY _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmy Contacts List Ġ= ĠArrayList < Multi Contact Model >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( phones !!. moveTo Next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġph ones . getString ( phones . getColumnIndex ( Contacts Contract . Common Data Kinds . Phone . DISPLAY _ NAME )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠphoneNumber Ġ= Ġph ones . getString ( phones . getColumnIndex ( Contacts Contract . Common Data Kinds . Phone . NUMBER )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠMulti Contact Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠphoneNumber , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis _ route Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis _ selected Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! my Contacts List . contains ( data )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Contacts List . add ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgson Ġ= ĠGson () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson : ĠString Ġ= Ġgson . toJson ( my Contacts List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġ" Bearer Ġ" Ġ+ Ġprefs . getString ( USER _ TOKEN , Ġ"") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Registered Route Contacts ( require Activity (), Ġtoken , Ġjson ). set Callback Ġ{ Ġe , Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Refresh . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsn ackbar Ġ= ĠSn ackbar ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. make ( frame Layout , Ġ" Unable Ġto Ġload Ġcontacts Ġ", ĠSn ackbar . LENGTH _ IN DEFIN ITE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar . setAction (" Try Ġagain ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Registered Contacts () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ set Callback ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" CHECK PROVIDER Ġ% s ", Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . getAs JsonObject (" data "). get (" contacts "). as JsonArray . size () Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ set Callback ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgson n Ġ= ĠGson () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson n : ĠString Ġ= Ġgson n . toJson ( result . getAs JsonObject (" data "). get (" contacts ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . putString ( MY _ ALL _ CONTACT S _ NEW , Ġjson n ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . apply () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prefs . getString ( REQUEST _ TYPE _ TO _ DE TERM INE _ PAYMENT _ TYPE , Ġ"") !!. compareTo ( SEND _ M ONE Y _ TO _ ROUTE ) Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( item : ĠJson Element Ġin Ġresult . getAs JsonObject (" data "). get (" contacts "). as JsonArray ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġissue Obj Ġ= ĠJSONObject ( item . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( issue Obj . getBoolean (" is _ route ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontacts . add ( Multi Contact Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġissue Obj . get (" id "). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġissue Obj . get (" username "). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġissue Obj . get (" phone _ number "). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġissue Obj . get (" image "). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġissue Obj . get (" amount "). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġissue Obj . getBoolean (" is _ route "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġissue Obj . getBoolean (" is _ selected ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson 2 : ĠString Ġ= Ġgson n . toJson ( contacts ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . putString ( Constants . MY _ ROUTE _ CONTACT S _ NEW , Ġjson 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . apply () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype : ĠType Ġ= Ġobject Ġ: ĠType Token < ArrayList < Multi Contact Model >>() Ġ{} . type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontacts Ġ= Ġgson . fromJson ( json n , Ġtype ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . putString ( MY _ ALL _ CONTACT S _ NEW , Ġjson n ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . apply () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager Ġ= Ġlinear LayoutManager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . set Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontacts Ad ap ater Ġ= ĠMulti Choice Contacts Adapter ( require Activity (), Ġcontacts ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= Ġcontacts Ad ap ater ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( require Activity (), Ġe . message , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Refresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġload Registered Contacts (); ĊĠĠĠ Ġ} Ċ }