package Ġcom . fl am yo ad . ts uk iv iew er . ui . home . bookmarks Ċ Ċ import Ġandroid . content . DialogInterface Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view .* Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . view . Action Mode Ċ import Ġandroidx . appcompat . widget . Search View Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . fragment . app . activity ViewModels Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . Linear Snap Helper Ċ import Ġcom . fl am yo ad . ts uk iv iew er . Action Mode Listener Ċ import Ġcom . fl am yo ad . ts uk iv iew er . Base Fragment Ċ import Ġcom . fl am yo ad . ts uk iv iew er . My App Preference Ċ import Ġcom . fl am yo ad . ts uk iv iew er . R Ċ import Ġcom . fl am yo ad . ts uk iv iew er . adapter . Bookmark Group Adapter Ċ import Ġcom . fl am yo ad . ts uk iv iew er . adapter . Bookmark Items Adapter Ċ import Ġcom . fl am yo ad . ts uk iv iew er . model . Bookmark Group Ċ import Ġcom . fl am yo ad . ts uk iv iew er . model . Bookmark Item Ċ import Ġcom . fl am yo ad . ts uk iv iew er . model . View Mode Ċ import Ġcom . fl am yo ad . ts uk iv iew er . utils . ui . Grid Item Decoration Ċ import Ġkotlinx . android . synt hetic . main . fragment _ bookmark .* Ċ import Ġjava . util .* Ċ Ċ private Ġconst Ġval ĠACTION _ MODE Ġ= Ġ" action _ mode " Ċ private Ġconst Ġval ĠSEARCH _ VIEW Ġ= Ġ" search _ view " Ċ Ċ class ĠBook mark Fragment Ġ: ĠBase Fragment (), ĊĠĠĠ ĠDelete Items Listener , ĊĠĠĠ ĠAction Mode Listener < Bookmark Item >, ĊĠĠĠ ĠSearch View . On Query Text Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠBook mark ViewModel Ġby Ġactivity ViewModels () ĊĠĠĠ Ġprivate Ġval Ġgroup Adapter Ġ= ĠBook mark Group Adapter ( this :: on Group Change , Ġthis :: show New Group Dialog ) ĊĠĠĠ Ġprivate Ġval Ġitem Adapter Ġ= ĠBook mark Items Adapter ( false ) ĊĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġset Has Stable Ids ( true ) Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġaction Mode : ĠAction Mode ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġaction Mode Callback : ĠAction Mode . Callback ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġapp Preference : ĠMy App Preference ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġsearch View : ĠSearch View ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġstatus Bar Color : ĠInt Ġ= Ġ- 1 ĊĠĠĠ Ġprivate Ġvar Ġprevious Search Query : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġprevious Search Query Ġ= ĠsavedInstanceState ?. getString ( SEARCH _ VIEW ) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġitem Adapter . set Listener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ bookmark , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġitem Adapter . remove Listener () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠĠĠĠĠ Ġval ĠisIn Action Mode Ġ= Ġaction Mode Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġout State . put Boolean ( ACTION _ MODE , ĠisIn Action Mode ) ĊĠĠĠĠĠĠĠ Ġout State . putString ( SEARCH _ VIEW , Ġsearch View ?. query . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate Options Menu ( menu , Ġinflater ) ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . menu _ dou jin _ bookmarks , Ġmenu ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsearch Item : ĠMenuItem ? Ġ= Ġmenu . find Item ( R . id . action _ search ) ĊĠĠĠĠĠĠĠ Ġval Ġsearch View Ġ= Ġsearch Item ?. action View Ġas ĠSearch View ĊĊĠĠĠĠĠĠĠ Ġif Ġ( previous Search Query . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Item . expand Action View () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch View . set Query ( previous Search Query , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch View . clear Focus () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Prepare Options Menu ( menu : ĠMenu ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsearch Item : ĠMenuItem ? Ġ= Ġmenu . find Item ( R . id . action _ search ) ĊĠĠĠĠĠĠĠ Ġsearch View Ġ= Ġsearch Item ?. action View Ġas ĠSearch View ĊĠĠĠĠĠĠĠ Ġsearch View ?. setOn Query Text Listener ( this ) ĊĊĠĠĠĠĠĠĠ Ġval ĠprogressBar Ġ= Ġmenu . find Item ( R . id . progress _ bar _ loading ) ĊĊĠĠĠĠĠĠĠ ĠviewModel . isLoading (). observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġstill Loading Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( still Loading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Item . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Item . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ view _ normal _ grid Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item Adapter . getView Mode () Ġ== ĠView Mode . NORMAL _ GRID ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Bookmark Items ( View Mode . NORMAL _ GRID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Preference ?. set D ou jin View Mode ( View Mode . NORMAL _ GRID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ view _ scaled Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item Adapter . getView Mode () Ġ== ĠView Mode . SCAL ED ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Bookmark Items ( View Mode . SCAL ED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Preference ?. set D ou jin View Mode ( View Mode . SCAL ED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ view _ mini _ grid Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item Adapter . getView Mode () Ġ== ĠView Mode . MIN I _ GRID ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Bookmark Items ( View Mode . MIN I _ GRID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Preference ?. set D ou jin View Mode ( View Mode . MIN I _ GRID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġapp Preference Ġ= ĠMy App Preference . getInstance ( require Context ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRest ores Ġaction Ġmode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshould Restart Action Mode Ġ= ĠsavedInstanceState . getBoolean ( ACTION _ MODE , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Restart Action Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Action Mode () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Mode ?. title Ġ= ĠviewModel . selected Bookmark Count (). toString () Ġ+ Ġ" Ġselected " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Bookmark Groups () ĊĠĠĠĠĠĠĠ Ġinit Bookmark Items ( app Preference ?. get D ou jin View Mode () Ġ?: ĠView Mode . SCAL ED ) ĊĠĠĠĠĠĠĠ Ġinit Ui () ĊĊĠĠĠĠĠĠĠ ĠviewModel . group List . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġnull ) Ġreturn @ Observer ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . initialize Groups ( it ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . bookmark Groups (). observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Adapter . submit List ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn ContextMenu . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġall Ġbook marks Ġhave Ġbeen Ġremoved Ġby Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader . text Ġ= Ġ" No Ġbookmark Ġexists " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtn ContextMenu . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . selected GroupName . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader . text Ġ= ĠviewModel . selected GroupName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . selected Bookmark Group (). observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġnull ) Ġreturn @ Observer ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . fetch Bookmark Items ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader . text Ġ= Ġit . name ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . bookmark Items . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġnull ) Ġreturn @ Observer ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . selected Group ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . fetch Bookmark Items ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . refresh Group Info () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Bookmark Groups () Ġ{ ĊĠĠĠĠĠĠĠ Ġgroup Adapter . set Has Stable Ids ( true ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlayout Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayoutManager ( require Context (), ĠLinearLayoutManager . HORIZONTAL , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġlayout Manager . is Smooth Scrollbar Enabled Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġval Ġlinear Snap Helper Ġ= ĠLinear Snap Helper () ĊĊĠĠĠĠĠĠĠ Ġlist Groups . adapter Ġ= Ġgroup Adapter ĊĠĠĠĠĠĠĠ Ġlist Groups . layout Manager Ġ= Ġlayout Manager ĊĠĠĠĠĠĠĠ Ġlinear Snap Helper . attach To RecyclerView ( list Groups ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Bookmark Items ( view Mode : ĠView Mode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġitem Adapter . setView Mode ( view Mode ) ĊĊĠĠĠĠĠĠĠ Ġval Ġspan Count Ġ= Ġwhen Ġ( resources . configuration . orientation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfiguration . OR IENTATION _ POR TRA IT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( view Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Mode . NORMAL _ GRID Ġ-> Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Mode . MIN I _ GRID Ġ-> Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Mode . SCAL ED Ġ-> Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfiguration . OR IENTATION _ LAND SC APE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( view Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Mode . NORMAL _ GRID Ġ-> Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Mode . MIN I _ GRID Ġ-> Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Mode . SCAL ED Ġ-> Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġgrid LayoutManager Ġ= ĠGrid LayoutManager ( require Context (), Ġspan Count ) ĊĊĠĠĠĠĠĠĠ Ġlist Items . adapter Ġ= Ġitem Adapter ĊĠĠĠĠĠĠĠ Ġlist Items . layout Manager Ġ= Ġgrid LayoutManager ĊĠĠĠĠĠĠĠ Ġlist Items . set Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠ Ġlist Items . item Animator Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ// ĠPrevent Ġthe Ġsame Ġdecor Ġfrom Ġstack ing Ġon Ġtop Ġof Ġeach Ġother . ĊĠĠĠĠĠĠĠ Ġif Ġ( list Items . item Decoration Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Decoration Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid Item Decoration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinclude Edge Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Items . addItem Decoration ( item Decoration ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . processed Book marks (). observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Adapter . submit List ( it . toList ()) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Ui () Ġ{ ĊĠĠĠĠĠĠĠ Ġregister For ContextMenu ( btn ContextMenu ) ĊĠĠĠĠĠĠĠ Ġbtn ContextMenu . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . show ContextMenu () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfab . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Items . scrollTo Position ( 0 ) Ġ// ĠScroll s Ġto Ġtop ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Group Change ( group : ĠBook mark Group ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . switch Bookmark Group ( group ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ContextMenu ( ĊĠĠĠĠĠĠĠ Ġmenu : ĠContext Menu , ĊĠĠĠĠĠĠĠ Ġv : ĠView , ĊĠĠĠĠĠĠĠ Ġmenu Info : ĠContext Menu . ContextMenu Info ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselected Group Ġ= ĠviewModel . selected Group ĊĊĠĠĠĠĠĠĠ Ġmenu . setHeader Title ( selected Group ?. name Ġ?: Ġ" Menu ") ĊĠĠĠĠĠĠĠ Ġmenu . add ( MENU _ CHANGE _ NAME ) ĊĠĠĠĠĠĠĠ Ġmenu . add ( MENU _ DELETE _ BOOK MARK _ GROUP ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Context ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselected Collection Ġ= ĠviewModel . selected Group Ġ?: Ġreturn Ġtrue ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . title ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMENU _ CHANGE _ NAME Ġ-> Ġshow Change Name Dialog ( selected Collection ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMENU _ DELETE _ BOOK MARK _ GROUP Ġ-> Ġshow Delete Group Dialog ( selected Collection ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow New Group Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠDialog New Group . newInstance () ĊĠĠĠĠĠĠĠ Ġdialog . show ( child FragmentManager , ĠDIALOG _ NEW _ GROUP ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Change Name Dialog ( group : ĠBook mark Group ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠDialog Change GroupName . newInstance ( group . name ) ĊĠĠĠĠĠĠĠ Ġdialog . show ( child FragmentManager , ĠDIALOG _ CHANGE _ NAME ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Delete Group Dialog ( group : ĠBook mark Group ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( require Context ()) ĊĊĠĠĠĠĠĠĠ Ġbuilder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetTitle ( group . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Message (" Are Ġyou Ġsure Ġyou Ġwant Ġto Ġdelete Ġthis Ġbookmark Ġgroup ? ĠExisting Ġitems Ġwill Ġbe Ġlost ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Positive Button (" Delete ", ĠDialog Interface . OnClickListener Ġ{ Ġdialog Interface , Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . delete Group ( group ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Negative Button (" Return ", ĠDialog Interface . OnClickListener Ġ{ Ġdialog Interface , Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= Ġbuilder . create () ĊĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Delete Items Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠDialog Delete Items . newInstance () ĊĠĠĠĠĠĠĠ Ġdialog . show ( child FragmentManager , ĠDIALOG _ DELETE _ ITEMS ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Items () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . delete Items () ĊĠĠĠĠĠĠĠ Ġaction Mode ?. finish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Title (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠAPP BAR _ TITLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdestroy Action Mode () Ġ{ ĊĠĠĠĠĠĠĠ Ġaction Mode ?. finish () ĊĠĠĠĠĠĠĠ Ġaction Mode Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart Action Mode () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( require Activity () Ġis ĠAppCompatActivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapp Compat Ġ= Ġrequire Activity () Ġas ĠAppCompatActivity Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġaction Mode Ġ= Ġapp Compat . start Support Action Mode ( Action Mode Callback ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Mode Callback Ġ= ĠAction Mode Callback () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Mode Ġ= Ġapp Compat . start Support Action Mode ( action Mode Callback !! ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Adapter . action Mode Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Multi Selection Click ( item : ĠBook mark Item ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . tick Selected Bookmark ( item ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= ĠviewModel . selected Bookmark Count () ĊĠĠĠĠĠĠĠ Ġif Ġ( count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Mode ?. finish () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . clear Selected Book marks () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġaction Mode ?. title Ġ= Ġcount . toString () Ġ+ Ġ" Ġselected " ĊĠĠĠĠĠĠĠ Ġaction Mode ?. invalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( query : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( new Text : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcorrected Text Ġ= Ġnew Text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . trim () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . toLowerCase ( Locale . ROOT ) Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠ ĠviewModel . filter List ( corrected Text ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠAction Mode Callback Ġ: ĠAction Mode . Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Action Item Clicked ( mode : ĠAction Mode ?, Ġitem : ĠMenuItem ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( item ?. itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ delete Ġ-> Ġshow Delete Items Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate Action Mode ( mode : ĠAction Mode ?, Ġmenu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . menu Inflater . inflate ( R . menu . menu _ dou jin _ bookmarks _ context ual , Ġmenu ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Bar Color Ġ= Ġit . window . status Bar Color Ġ// ĠStores Ġthe Ġoriginal Ġstatus Ġbar Ġcolor ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Primary Light Ġ= ĠContext Compat . getColor ( it , ĠR . color . color Primary Light ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . window . status Bar Color Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Primary Light Ġ// ĠChanges Ġstatus Ġbar Ġcolor Ġin Ġaction Ġmode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Prepare Action Mode ( mode : ĠAction Mode ?, Ġmenu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġmethod Ġis Ġnot Ġcalled Ġon Ġscreen Ġrotation ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Destroy Action Mode ( mode : ĠAction Mode ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Mode Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Mode Callback Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (). window . status Bar Color Ġ= Ġstatus Bar Color Ġ// ĠRest ores Ġthe Ġoriginal Ġstatus Ġbar Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Adapter . action Mode Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . clear Selected Book marks () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMENU _ CHANGE _ NAME Ġ= Ġ" Change ĠName " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMENU _ DELETE _ BOOK MARK _ GROUP Ġ= Ġ" Delete ĠBook mark ĠGroup " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDIALOG _ NEW _ GROUP Ġ= Ġ" new _ group _ dialog " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDIALOG _ CHANGE _ NAME Ġ= Ġ" change _ name _ dialog " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDIALOG _ DELETE _ GROUP Ġ= Ġ" delete _ group _ dialog " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDIALOG _ DELETE _ ITEMS Ġ= Ġ" delete _ items _ dialog " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠAPP BAR _ TITLE Ġ= Ġ" Book marks " ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance () Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBook mark Fragment () ĊĠĠĠ Ġ} Ċ }