/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠK or bin ian ĠM oser Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠBSD Ġ 3 - Clause ĠLicense Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttps :// opensource . org / licenses / BSD - 3 - Clause Ċ Ġ* Ċ Ġ* Ġ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 . kor bi . simple budget . logic Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Sparse Boolean Array Ċ import Ġandroidx . core . util . set Ċ import Ġcom . kor bi . simple budget . R Ċ import Ġcom . kor bi . simple budget . Simple Budget App Ċ import Ġcom . kor bi . simple budget . database . DB handler Ċ import Ġcom . kor bi . simple budget . logic . model . Expense Ċ import Ġcom . kor bi . simple budget . ui .* Ċ import Ġcom . kor bi . simple budget . utilities . MONTH LY _ INTERVAL Ċ import Ġcom . kor bi . simple budget . utilities . WEEK LY _ INTERVAL Ċ import Ġcom . kor bi . simple budget . utilities . is Between Ċ import Ġorg . th reet en . bp . LocalDate Ċ import Ġorg . th reet en . bp . format . DateTime Formatter Ċ import Ġorg . th reet en . bp . format . TextStyle Ċ import Ġorg . th reet en . bp . temporal . Temporal Adjust ers Ċ import Ġjava . util .* Ċ Ċ object ĠHistory Helper Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġdb Ġ= ĠDB handler . getInstance () ĊĊĠĠĠ Ġval Ġexpanded State Map Ġ= ĠSparse Boolean Array () ĊĠĠĠ Ġvar Ġtype Selection Ġ= ĠTYPE _ BOTH Ġ// 0 Ġfor Ġboth , Ġ 1 Ġfor Ġexp enses , Ġ 2 Ġfor Ġincome ĊĠĠĠ Ġvar Ġdate Selection Ġ= ĠSELECT _ ALL Ġ// 0 Ġlast Ġ 3 0 Ġdays , Ġ 1 Ġlast Ġ 9 0 Ġdays , Ġ 2 Ġthis Ġyear , Ġ 3 Ġall Ġtime ĊĠĠĠ Ġlateinit Ġvar Ġfrom Date Selection : ĠLocalDate ĊĠĠĠ Ġlateinit Ġvar Ġto Date Selection : ĠLocalDate ĊĠĠĠ Ġvar Ġcategory Selection Ġ= ĠBoolean Array ( 0 ) Ġ// true Ġif Ġcategory Ġselected Ġfalse Ġelse ĊĊĊĠĠĠ Ġprivate Ġval Ġdate Formatter : ĠDateTime Formatter Ġ= ĠDateTime Formatter . of Pattern (" dd . MM . yy ") ĊĊĠĠĠ Ġfun Ġget History Entries ( type : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Date : ĠLocalDate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Date : ĠLocalDate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategories : ĠBoolean Array , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpand Current Date : ĠBoolean Ġ= Ġfalse ): ĠMutable List < History Entry > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġhistory Entries Ġ= Ġmutable ListOf < History Entry >() ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( Simple Budget App . pref . getString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSimple Budget App . res . getString ( R . string . settings _ key _ history _ grouping ), Ġ" 1 ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMON TH LY _ INTERVAL . toString () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( index , Ġmonth ) Ġin ĠDate Helper . getMonth s (). with Index ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate String Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmonth . month . get DisplayName ( TextStyle . FULL , ĠLocale . getDefault ()) Ġ+ Ġ" Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmonth . year . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġexp enses Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . get Expense sBy Date ( month . at Day ( 1 ), Ġmonth . at EndOf Month ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexp enses Ġ= Ġfilter Exp enses ( exp enses , Ġtype , Ġdate , Ġfrom Date , Ġto Date , Ġcategories ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Current Interval Ġ= ĠLocalDate . now (). is Between ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmonth . at Day ( 1 ), Ġmonth . at EndOf Month ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġexpand Current Date ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Current Interval ) Ġexpanded State Map [ index ] Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhistory Entries . add ( History Entry ( exp enses , Ġdate String , Ġis Current Interval )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠW EEK LY _ INTERVAL . toString () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( index , Ġweek ) Ġin ĠDate Helper . get Week s (). with Index ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate String Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ date Formatter . format ( week [ 0 ]) } Ġ- Ġ${ date Formatter . format ( week [ 1 ]) }" ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġexp enses Ġ= Ġdb . get Expense sBy Date ( week [ 0 ], Ġweek [ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexp enses Ġ= Ġfilter Exp enses ( exp enses , Ġtype , Ġdate , Ġfrom Date , Ġto Date , Ġcategories ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Current Interval Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocalDate . now (). is Between ( week [ 0 ], Ġweek [ 1 ]) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Current Interval ) Ġexpanded State Map [ index ] Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhistory Entries . add ( History Entry ( exp enses , Ġdate String , Ġis Current Interval )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġhistory Entries ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfilter Exp enses ( exp enses : ĠMutable List < Expense >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Selection : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Selection : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Date : ĠLocalDate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Date : ĠLocalDate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory Selection : ĠBoolean Array ) Ġ: ĠMutable List < Expense > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġfilter Ġincome Ġor Ġexpense ĊĠĠĠĠĠĠĠ Ġval Ġtype Filter edList : ĠList < Expense > Ġ= Ġwhen Ġ( type Selection ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ EXP ENSE Ġ-> Ġexp enses . filter Ġ{ Ġit . cost Ġ<= Ġ 0 } Ġ// ĠExp enses ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ IN CO ME Ġ-> Ġexp enses . filter Ġ{ Ġit . cost Ġ> Ġ 0 Ġ} Ġ// ĠIn come ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġexp enses ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġfilter Ġdate Ġselection ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Date Ġ= ĠLocalDate . now () ĊĊĠĠĠĠĠĠĠ Ġval Ġdate Filter edList : ĠList < Expense > Ġ= Ġwhen Ġ( date Selection ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT _ LAST 3 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Filter edList . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . date . is After ( current Date . minus Days ( 3 1 )) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . date . is Before ( current Date . plus Days ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT _ LAST 9 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Filter edList . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . date . is After ( current Date . minus Days ( 9 1 )) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . date . is Before ( current Date . plus Days ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT _ YEAR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Filter edList . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . date . is After ( current Date . with ( Temporal Adjust ers . first Day OfYear ())) && ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . date . is Before ( current Date . plus Days ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT _ CUSTOM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Filter edList . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . date . is After ( from Date . minus Days ( 1 )) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . date . is Before ( toDate . plus Days ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtype Filter edList ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcategory Filter edList Ġ= Ġdate Filter edList . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory Selection [ it . category . position ] ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcategory Filter edList . to Mutable List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Pref illed Filter Sheet (): ĠFilter Bottom Sheet Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Int ( TYPE _ PRE FILL , Ġtype Selection ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Int ( DATE _ PRE FILL , Ġdate Selection ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( FROM _ DATE _ PRE SELECT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Formatter . format ( from Date Selection )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( TO _ DATE _ PRE SELECT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Formatter . format ( toDate Selection )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Boolean Array ( CATEGORY _ PRE SELECT , Ġcategory Selection ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠFilter Bottom Sheet (). apply Ġ{ Ġarguments Ġ= Ġbundle Ġ} ĊĠĠĠ Ġ} Ċ }