package Ġde . sp irit c roc . menu Ċ Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ Ċ object ĠArray Options Menu Helper Ġ{ ĊĠĠĠ Ġprivate Ġdata Ġclass ĠOptions Menu Metadata ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmenu Id : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentries Id : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalues Id : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalues : ĠHashMap < Int , ĠString > Ġ= ĠHashMap (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġaction : Ġ( String ) Ġ-> ĠBoolean Ġ= Ġ{ Ġfalse Ġ} ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġmenu Lookup Ġ= ĠHashMap < Int , ĠOptions Menu Metadata >() ĊĊĠĠĠ Ġfun Ġcreate Sub menu ( resources : ĠResources , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item : ĠMenuItem , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgroupId : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentries Id : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues Id : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Value : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsort Function : Ġ( List < Pair < String , ĠString >>) Ġ-> ĠList < Pair < String , ĠString >> Ġ= Ġ{ Ġit Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction : Ġ( String ) Ġ-> ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmenu Id Ġ= Ġmenu Item . itemId ĊĠĠĠĠĠĠĠ Ġvar Ġmetadata Ġ= Ġmenu Lookup [ menu Id ] ĊĠĠĠĠĠĠĠ Ġif Ġ( metadata Ġ== Ġnull Ġ|| Ġmetadata . entries Id Ġ!= Ġentries Id Ġ|| Ġmetadata . values Id Ġ!= Ġvalues Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata Ġ= ĠOptions Menu Metadata ( menu Id , Ġentries Id , Ġvalues Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Lookup [ menu Id ] Ġ= Ġmetadata ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmetadata . action Ġ= Ġaction ĊĊĠĠĠĠĠĠĠ Ġmenu Item . sub Menu . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtheme Entries Ġ= Ġresources . getString Array ( entries Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtheme Values Ġ= Ġresources . getString Array ( values Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsort Function ( theme Entries . zip ( theme Values )). forEach Ġ{ Ġtheme Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠitemId Ġ= ĠView . generate View Id () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġadd ( groupId , ĠitemId , ĠMenu . NONE , Ġtheme . first ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Check able Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata . values [ itemId ] Ġ= Ġtheme . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( initial Value Ġ== Ġtheme . second ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . isChecked Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle Sub menu ( item : ĠMenuItem , Ġvar arg Ġmenu Ids : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Ids . forEach Ġ{ Ġmenu Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= Ġmenu Lookup [ menu Id ] Ġ?: Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġmetadata . values [ item . itemId ] Ġ?: Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( metadata . action ( value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠMenuItem . toggle Exec ( with New Val : Ġ( Boolean ) Ġ-> ĠBoolean ) Ġ{ ĊĠĠĠ Ġval Ġshould Check Ġ= Ġ! isChecked ĊĠĠĠ Ġif Ġ( with New Val ( should Check )) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Checked Ġ= Ġshould Check ĊĠĠĠ Ġ} Ċ } Ċ