/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠB ak um on . Ġhttps :// github . com / B ak um on Ċ Ġ* Ċ Ġ* Ġ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 Ġme . bak um on . money keeper . view Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . databinding . Data Binding Util Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . LinearLayout Ċ import Ġcom . af ol le st ad . material dialogs . Material Dialog Ċ import Ġme . bak um on . money keeper . R Ċ import Ġme . bak um on . money keeper . database . entity . Record Type Ċ import Ġme . bak um on . money keeper . database . entity . Record WithType Ċ import Ġme . bak um on . money keeper . databinding . Layout Type Page Binding Ċ import Ġme . bak um on . money keeper . ui . add . Type Adapter Ċ import Ġme . bak um on . money keeper . view . pager layout manager . Pager Grid LayoutManager Ċ import Ġme . bak um on . money keeper . view . pager layout manager . Pager Grid Snap Helper Ċ Ċ /** Ċ Ġ* Ġ ç¿» é¡µ çļĦ Ġre cyclerView Ġ+ Ġ æĮĩ ç¤º åĻ¨ Ċ Ġ* Ċ Ġ* Ġ@ author ĠB ak um on Ġhttps :// bak um on . me Ċ Ġ*/ Ċ class ĠType Page View Ġ@ Jvm Over loads Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style Attr : ĠInt Ġ= Ġ 0 ) Ġ: ĠLinearLayout ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Binding : ĠLayout Type Page Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Adapter : ĠType Adapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm LayoutManager : ĠP ager Grid LayoutManager ĊĠĠĠ Ġprivate Ġvar ĠmCurrent Type Index Ġ= Ġ- 1 ĊĊĠĠĠ Ġval Ġcurrent Item : ĠRecord Type ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm Adapter . currentItem ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġorientation Ġ= ĠLinearLayout . VERTICAL ĊĠĠĠĠĠĠĠ Ġm Binding Ġ= ĠData Binding Util . inflate ( LayoutInflater . from ( context ), ĠR . layout . layout _ type _ page , Ġthis , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 1 . æ°´ å¹³ åĪĨé¡µ å¸ĥå±Ģ ç®¡çĲĨ åĻ¨ ĊĠĠĠĠĠĠĠ Ġm LayoutManager Ġ= ĠP ager Grid LayoutManager ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠROW , ĠCOLUMN , ĠP ager Grid LayoutManager . HORIZONTAL ) ĊĠĠĠĠĠĠĠ Ġm Binding . re cyclerView . layout Manager Ġ= Ġm LayoutManager ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 2 . è®¾ç½® æ»ļ åĬ¨ è¾ ħ åĬ© å·¥åħ· ĊĠĠĠĠĠĠĠ Ġval Ġpage Snap Helper Ġ= ĠP ager Grid Snap Helper () ĊĠĠĠĠĠĠĠ Ġpage Snap Helper . attach To RecyclerView ( m Binding . re cyclerView ) ĊĊĊĠĠĠĠĠĠĠ Ġm Adapter Ġ= ĠType Adapter ( null ) ĊĠĠĠĠĠĠĠ Ġm Adapter . setOn ItemClickListener Ġ{ Ġ_, Ġ_, Ġposition Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter . click Item ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmCurrent Type Index Ġ= Ġposition ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Binding . re cyclerView . adapter Ġ= Ġm Adapter ĊĊĠĠĠĠĠĠĠ Ġm LayoutManager . set Page Listener ( object Ġ: ĠP ager Grid LayoutManager . Page Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġvar ĠcurrentPage Index : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġvar ĠpageSize : ĠInt Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon PageSize Changed ( pageSize : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . pageSize Ġ= ĠpageSize ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Indicator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Select ( page Index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentPage Index Ġ= Ġpage Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Indicator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġset Indicator () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pageSize Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . indicator . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . indicator . set Total ( pageSize , ĠcurrentPage Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . indicator . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset New Data ( data : ĠList < Record Type > ?, Ġtype : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Adapter . set New Data ( data , Ġtype ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è¯¥ æĸ¹æ³ķ åıª æĶ¹åıĺ ä¸Ģæ¬¡ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġinit Check Item ( record : ĠRecord WithType ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Current Type Index Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmCurrent Type Index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġis Type Exist Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġm Adapter . data . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( record Ġ!= Ġnull Ġ&& Ġsize Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( record . m Record Types ! ![ 0 ]. id Ġ== Ġm Adapter . data [ i ]. id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmCurrent Type Index Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Type Exist ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Type Exist Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éĢī ä¸Ń å¯¹åºĶçļĦ é¡µ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpage Index Ġ= ĠmCurrent Type Index Ġ/ Ġ( ROW Ġ* ĠCOLUMN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Ġ{ Ġm LayoutManager . smooth Scroll To Page ( page Index ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Type NotExist Tip () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter . click Item ( m Current Type Index ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæıĲ ç¤º çĶ¨æĪ· è¯¥ è®°å½ķ çļĦ ç±»åŀĭ å·²ç»ı è¢« åĪłéĻ¤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġshow Type NotExist Tip () Ġ{ ĊĠĠĠĠĠĠĠ ĠMaterial Dialog . Builder ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( R . string . text _ tip _ type _ delete ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. positive Text ( R . string . text _ button _ know ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠROW Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOLUMN Ġ= Ġ 4 ĊĠĠĠ Ġ} Ċ Ċ } Ċ