/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 ĠSoftware Ġwith ĠK ao . Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . mik ore . pp qr . adapter Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . animation . Accel erate De cel erate Interpolator Ċ import Ġandroid . widget .* Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġandroidx . fragment . app . FragmentManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . transition . Auto Transition Ċ import Ġandroidx . transition . Transition Manager Ċ import Ġcom . mik ore . pp qr . Contracts Ċ import Ġcom . mik ore . pp qr . R Ċ import Ġcom . mik ore . pp qr . activity . Result Activity Ċ import Ġcom . mik ore . pp qr . database . App Account Ċ import Ġcom . mik ore . pp qr . fragment . Account Fragment Ċ import Ġcom . mik ore . pp qr . fragment . Add Dialog Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠAccount Adapter Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġfragment Manager : ĠFragment Manager Ċ ) Ġ: ĠRecyclerView . Adapter < Account Adapter . Account ViewHolder >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġaccounts : ĠArrayList < App Account > Ġ= ĠArrayList () ĊĊĠĠĠ Ġclass ĠAccount ViewHolder ( private Ġval Ġitem : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġaccount Name : ĠTextView Ġ= Ġitem . findViewById ( R . id . account _ name ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġaccount No : ĠTextView Ġ= Ġitem . findViewById ( R . id . account _ no ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġaccount Type : ĠTextView Ġ= Ġitem . findViewById ( R . id . account _ type ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcustom Amount : ĠCheckBox Ġ= Ġitem . findViewById ( R . id . custom _ amount ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġamount Field : ĠEditText Ġ= Ġitem . findViewById ( R . id . custom _ amount _ field ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdesc Field : ĠTextView Ġ= Ġitem . findViewById ( R . id . custom _ desc _ field ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġgen Click : ĠButton Ġ= Ġitem . findViewById ( R . id . generate _ button ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġedit Click : ĠImage Button Ġ= Ġitem . findViewById ( R . id . edit _ button ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdelete Click : ĠImage Button Ġ= Ġitem . findViewById ( R . id . delete _ button ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġsection 2 : ĠLinearLayout Ġ= Ġitem . findViewById ( R . id . account _ section _ 2 ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( name : ĠString , Ġno : ĠString , Ġtype : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Name . text Ġ= Ġname ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount No . text Ġ= Ġno ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Type . text Ġ= Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Visible ( amount Field , Ġcustom Amount . isChecked ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Amount . setOn Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange Visible ( amount Field , Ġis Checked ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange Visible ( section 2 , Ġsection 2 . visibility Ġ== ĠView . GONE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind Click ( account : ĠApp Account , Ġmanager : ĠFragment Manager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit Click . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Dialog ( account ). show ( manager , Ġ" add _ account ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Click . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( item . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Delete ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" Do Ġyou Ġwant Ġto Ġdelete ?") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( android . R . string . ok ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . action Ġ= ĠAccount Fragment . DELETE _ ACCOUNT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . putExtra ( Contracts . KEY _ ACCOUNT _ ID , Ġaccount . uid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . context . send Broadcast ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( android . R . string . cancel , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgen Click . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( Contracts . KEY _ ACCOUNT _ ID , Ġaccount . uid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Boolean ( Contracts . KEY _ SAVE _ HISTORY , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġamount Field . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( amount . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Boolean ( Contracts . KEY _ HAVE _ AMOUNT , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Boolean ( Contracts . KEY _ HAVE _ AMOUNT , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( Contracts . KEY _ AMOUNT , Ġamount ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdesc Ġ= Ġdesc Field . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( desc . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Boolean ( Contracts . KEY _ HAVE _ DESCRIPTION , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Boolean ( Contracts . KEY _ HAVE _ DESCRIPTION , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( Contracts . KEY _ DESCRIPTION , Ġdesc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Intent Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( item . context . application Context , ĠResult Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Intent . put Extras ( args ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Intent . add Flags ( Intent . FLAG _ ACTIVITY _ NEW _ TASK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . context . startActivity ( result Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġchange Visible ( view : ĠView , Ġshow : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . visibility Ġ= Ġif Ġ( show ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransition Manager . begin Delayed Transition ( item Ġas ĠConstraint Layout , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuto Transition (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġ 3 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinterpol ator Ġ= ĠAccel erate De cel erate Interpolator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġcreate ( parent : ĠViewGroup ): ĠAccount ViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( R . layout . account _ item , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAccount ViewHolder ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠAccount ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠAccount ViewHolder . create ( parent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠAccount ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaccount Ġ= Ġaccounts [ position ] ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġaccount . name Ġ?: Ġ" Prompt Pay Ġending ĠXX " Ġ+ Ġaccount . no . take Last ( 3 ) ĊĠĠĠĠĠĠĠ Ġholder . bind ( name , Ġaccount . no , Ġaccount . type . as Text ()) ĊĠĠĠĠĠĠĠ Ġholder . bind Click ( account , Ġfragment Manager ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Data ( data : ĠList < App Account >) Ġ{ ĊĠĠĠĠĠĠĠ Ġaccounts . clear () ĊĠĠĠĠĠĠĠ Ġaccounts . addAll ( data ) ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġaccounts . size Ċ Ċ } Ċ