package Ġde . Max r 1 9 9 8 . modern preferences . preferences . choice Ċ Ċ import Ġandroid . app . Dialog Ċ import Ġandroid . content . Context Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġde . Max r 1 9 9 8 . modern preferences . preferences . Dialog Preference ĊĊ Ċ abstract Ġclass ĠAbstract Choice Dialog Preference ( ĊĠĠĠ Ġkey : ĠString , ĊĠĠĠ Ġprotected Ġval Ġitems : ĠList < Selection Item >, ĊĠĠĠ Ġprivate Ġval Ġallow Multi Select : ĠBoolean , Ċ ) Ġ: ĠDialog Preference ( key ) Ġ{ ĊĊĠĠĠ Ġinternal Ġvar Ġselection Adapter : ĠSelection Adapter ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( items . isNotEmpty ()) Ġ{ Ġ" Supp lied Ġlist Ġof Ġitems Ġmay Ġnot Ġbe Ġempty !" Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Dialog ( context : ĠContext ): ĠDialog Ġ= ĠAlertDialog . Builder ( context ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( title Res Ġ!= Ġ- 1 ) ĠsetTitle ( title Res ) Ġelse ĠsetTitle ( title ) ĊĠĠĠĠĠĠĠ Ġset View ( RecyclerView ( context ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselection Adapter Ġ= ĠSelection Adapter ( this @ Abstract Choice Dialog Preference , Ġitems , Ġallow Multi Select ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġselection Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( context ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġset Cancel able ( false ) ĊĠĠĠĠĠĠĠ Ġset Positive Button ( android . R . string . ok ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpersist Selection () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Re bind () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Negative Button ( android . R . string . cancel ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreset Selection () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. create () ĊĊĠĠĠ Ġinternal Ġabstract Ġfun Ġselect ( item : ĠSelection Item ) ĊĊĠĠĠ Ġprotected Ġabstract Ġfun Ġpersist Selection () ĊĊĠĠĠ Ġprotected Ġabstract Ġfun Ġreset Selection () ĊĊĠĠĠ Ġabstract Ġfun Ġis Selected ( item : ĠSelection Item ): ĠBoolean ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠĠĠĠĠ Ġselection Adapter Ġ= Ġnull ĊĠĠĠ Ġ} Ċ }