package Ġut n . fr ba . mobile . kon z ern . exp enses . ui Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . opengl . Visibility Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View .* Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġandroid . widget . TextView . On Editor ActionListener Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġkotlinx . android . synt hetic . main . exp enses _ fragment _ layout .* Ċ import Ġkotlinx . android . synt hetic . main . exp enses _ item . view .* Ċ import Ġorg . json . JSONArray Ċ import Ġut n . fr ba . mobile . kon z ern . R Ċ import Ġut n . fr ba . mobile . kon z ern . contact . model . Contact Ċ import Ġut n . fr ba . mobile . kon z ern . contact . repository . Contact Repository Ċ import Ġut n . fr ba . mobile . kon z ern . exp enses . model . Exp enses Ċ import Ġut n . fr ba . mobile . kon z ern . exp enses . adapter . Exp enses Adapter Ċ import Ġut n . fr ba . mobile . kon z ern . exp enses . adapter . Exp enses Pdf Adapter Ċ import Ġut n . fr ba . mobile . kon z ern . exp enses . repository . Exp enses Repository ĊĊ Ċ class ĠExp enses Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġexp enses Pdf Adapter : ĠExp enses Pdf Adapter ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġexp enses View : ĠExp enses Fragment View ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ Ġif Ġ( context Ġis ĠExp enses Fragment View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexp enses View Ġ= Ġcontext ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ("$ context Ġmust Ġbe ĠExp enses Fragment View ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . exp enses _ fragment _ layout , Ġcontainer , Ġfalse ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġget Exp enses Data From Repository () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrender Exp enses Data ( exp enses List : ĠList < Exp enses >, Ġcons ort ium : ĠContact ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexp enses Pdf Adapter Ġ= ĠExp enses Pdf Adapter () ĊĠĠĠĠĠĠĠ Ġexp enses Pdf Adapter ?. permit PDF File ( this . require Activity ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġfiltered Exp enses List Ġ= Ġexp enses List . filter Ġ{ Ġit . userId Ġ== ĠFirebase Auth . getInstance (). currentUser ?. uid Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsorted Exp enses List Ġ= Ġfiltered Exp enses List . sorted With ( compare By Descending < Exp enses > Ġ{ Ġit . year . toInt () Ġ}. then By Descending { Ġit . month . toInt () Ġ}) ĊĊĠĠĠĠĠĠĠ Ġif ( sorted Exp enses List . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv Label No Previous Exp enses Found . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv Label No Previous Exp enses Found . text Ġ= Ġresources . getString ( R . string . exp enses _ no _ exp enses _ found ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv Label Last Expense . visibility Ġ= ĠG ONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv Item Last Expense . visibility Ġ= ĠG ONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv Label Previous Exp enses . visibility Ġ= ĠG ONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv Exp enses RecyclerView . visibility Ġ= ĠG ONE ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv Item Last Expense . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . v Exp enses Item Month Value . text Ġ= Ġsorted Exp enses List [ 0 ]. month Label ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . v Exp enses Item Year Value . text Ġ= Ġsorted Exp enses List [ 0 ]. year ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . v Exp enses Item Amount Value . text Ġ= Ġsorted Exp enses List [ 0 ]. amount ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . v Exp enses Item Expiration Date Value . text Ġ= Ġsorted Exp enses List [ 0 ]. expiration Date ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . v Exp enses Item Download Button . setOnClickListener Ġ{ Ġval Ġpath Ġ= Ġexp enses Pdf Adapter ?. create PDF File Ġ( sorted Exp enses List [ 0 ], Ġcons ort ium , Ġcontext ); Ġexp enses View ?. download PDF Success ( path . toString ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsorted Exp enses Sub List Ġ= Ġsorted Exp enses List . sub List ( 1 , sorted Exp enses List . size ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( sorted Exp enses Sub List . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Label No Previous Exp enses Found . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Label No Previous Exp enses Found . text Ġ= Ġresources . getString ( R . string . exp enses _ no _ previous _ exp enses _ found ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Label Previous Exp enses . set Compound Draw ables ( null , Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Exp enses RecyclerView . visibility Ġ= ĠG ONE ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Manager Ġ= ĠLinearLayoutManager ( this . require Activity ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠExp enses Adapter ( sorted Exp enses Sub List , Ġexp enses View , Ġexp enses Pdf Adapter , Ġcons ort ium , Ġcontext ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Exp enses RecyclerView . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . layout Manager Ġ= Ġview Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Label Previous Exp enses . setOn Touch Listener ( On Touch Listener Ġ{ Ġv , Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( event . action Ġ== ĠMotion Event . ACTION _ DOWN Ġ&& Ġv Label Previous Exp enses . compound Draw ables [ 2 ] Ġ!= Ġnull Ġ&& Ġevent . raw X Ġ>= Ġv Label Previous Exp enses . right Ġ- Ġv Label Previous Exp enses . compound Draw ables [ 2 ]. bounds . width ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Search Previous Exp enses . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Label Previous Exp enses . set Compound Draw ables ( null , Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Search Previous Exp enses . setOn Touch Listener ( On Touch Listener Ġ{ Ġv , Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( event . action Ġ== ĠMotion Event . ACTION _ DOWN Ġ&& Ġv Search Previous Exp enses . compound Draw ables [ 2 ] Ġ!= Ġnull Ġ&& Ġevent . raw X Ġ>= Ġv Search Previous Exp enses . right Ġ- Ġv Search Previous Exp enses . compound Draw ables [ 2 ]. bounds . width ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Search Previous Exp enses . text . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . filter . filter ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Filter () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Search Previous Exp enses . setOn Editor ActionListener ( On Editor ActionListener Ġ{ Ġv , Ġaction Id , Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Id Ġ== ĠEditor Info . IME _ ACTION _ SEARCH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( v Search Previous Exp enses . text . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Filter () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . filter . filter ( v Search Previous Exp enses . text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimm : ĠInput Method Manager Ġ= Ġv . context . getSystem Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimm . hide Soft Input From Window ( v . window Token , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġexp enses View ?. hide Progress () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Exp enses Data From Repository () Ġ{ ĊĠĠĠĠĠĠĠ ĠExp enses Repository (). get Exp enses Data ( object Ġ: ĠExp enses Repository . Exp enses Repository Interface Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonComplete ( exp enses List : ĠList < Exp enses >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Con sort ium Data From Repository ( exp enses List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexp enses View ?. error Getting Exp enses Info () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Con sort ium Data From Repository ( exp enses List : ĠList < Exp enses >) Ġ{ ĊĠĠĠĠĠĠĠ ĠContact Repository (). get Contact Data ( object : ĠContact Repository . Contact Repository Interface Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonComplete ( con sort ium : ĠContact ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( con sort ium Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Exp enses Data ( exp enses List , Ġcons ort ium ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Exp enses Data ( exp enses List , ĠContact ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexp enses View ?. error Getting Con sort ium Info () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Filter () Ġ{ ĊĠĠĠĠĠĠĠ Ġv Search Previous Exp enses . visibility Ġ= ĠG ONE ĊĠĠĠĠĠĠĠ Ġv Label Previous Exp enses . set Compound Draw ables With Intr insic Bounds ( null , Ġnull , Ġresources . get Drawable ( R . drawable . ic _ search ), Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠExp enses Fragment View Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġerror Getting Exp enses Info () ĊĊĠĠĠĠĠĠĠ Ġfun Ġerror Getting Con sort ium Info () ĊĊĠĠĠĠĠĠĠ Ġfun Ġdownload PDF Success ( path : ĠString ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġshow Progress () ĊĊĠĠĠĠĠĠĠ Ġfun Ġhide Progress () ĊĠĠĠ Ġ} ĊĊ Ċ }