package Ġme . sweet ll . t uc ao . widget Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . DialogInterface Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . design . widget . Bottom Sheet Behavior Ċ import Ġandroid . support . design . widget . Coordinator Layout Ċ import Ġandroid . support . v 4 . view . Accessibility Delegate Compat Ċ import Ġandroid . support . v 4 . view . View Compat Ċ import Ġandroid . support . v 4 . view . accessibility . Accessibility NodeInfo Compat Ċ import Ġandroid . support . v 7 . app . AppCompat Dialog Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . Window Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . LinearLayout Ċ import Ġme . sweet ll . t uc ao . R Ċ import Ġme . sweet ll . t uc ao . extension . log D Ċ Ċ class ĠCustom Bottom Sheet Dialog : ĠAppCompat Dialog Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġm Behavior : ĠCustom Bottom Sheet Behavior < Frame Layout >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Bottom Linear : ĠLinearLayout ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġm Cancel able Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġm Canceled On Touch Outside Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġm Canceled On Touch Outside Set Ġ= Ġfalse ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġget Theme Res Id ( context : ĠContext , Ġtheme Id : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Id Ġ= Ġtheme Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( theme Id Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Value Ġ= ĠTyped Value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context . theme . resolve Attribute ( R . attr . bottom Sheet Dialog Theme , Ġout Value , Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Id Ġ= Ġout Value . resourceId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Id Ġ= ĠR . style . Theme _ Design _ Light _ Bottom Sheet Dialog ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult Id ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext ): Ġthis ( context , Ġ 0 ) ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġtheme : ĠInt ) Ġ: Ġsuper ( context , Ġget Theme Res Id ( context , Ġtheme )) Ġ{ ĊĠĠĠĠĠĠĠ Ġsupport Request Window Feature ( Window . FEATURE _ NO _ TITLE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġcancel able : ĠBoolean , Ġcancel Listener : ĠDialog Interface . On Cancel Listener ): ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper ( context , Ġcancel able , Ġcancel Listener ){ ĊĠĠĠĠĠĠĠ Ġsupport Request Window Feature ( Window . FEATURE _ NO _ TITLE ) ĊĠĠĠĠĠĠĠ Ġm Cancel able Ġ= Ġcancel able ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetContentView ( layout Res ID : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . set ContentView ( wrap In Bottom Sheet ( layout Res ID , Ġnull , Ġnull )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetContentView ( view : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . set ContentView ( wrap In Bottom Sheet ( 0 , Ġview , Ġnull )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetContentView ( view : ĠView ?, Ġparams : ĠViewGroup . LayoutParams ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . set ContentView ( wrap In Bottom Sheet ( 0 , Ġview , Ġparams )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġwindow . setLayout ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . MATCH _ PARENT , ĠViewGroup . LayoutParams . MATCH _ PARENT ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Cancel able ( cancel able : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . set Cancel able ( cancel able ) ĊĠĠĠĠĠĠĠ Ġif Ġ( m Cancel able Ġ!= Ġcancel able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Cancel able Ġ= Ġcancel able ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Behavior ?. is Hide able Ġ= Ġcancel able ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Canceled On Touch Outside ( cancel : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . set Canceled On Touch Outside ( cancel ) ĊĠĠĠĠĠĠĠ Ġif Ġ( cancel Ġ&& Ġ! m Cancel able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Cancel able Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Canceled On Touch Outside Ġ= Ġcancel ĊĠĠĠĠĠĠĠ Ġm Canceled On Touch Outside Set Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwrap In Bottom Sheet ( layout Res Id : ĠInt , Ġview : ĠView ?, Ġparams : ĠViewGroup . LayoutParams ?): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcoord inator Ġ= ĠView . inflate ( context , ĠR . layout . dialog _ bottom _ sheet , Ġnull ) Ġas ĠCoord inator Layout ĊĠĠĠĠĠĠĠ Ġm Bottom Linear Ġ= Ġcoord inator . findViewById ( R . id . linear _ bottom ) Ġas ĠLinearLayout ĊĊĠĠĠĠĠĠĠ Ġvar Ġinf late View Ġ= Ġview ĊĠĠĠĠĠĠĠ Ġif Ġ( layout Res Id Ġ!= Ġ 0 Ġ&& Ġview Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinf late View Ġ= Ġlayout Inflater . inflate ( layout Res Id , Ġcoord inator , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbottom Sheet Ġ= Ġcoord inator . findViewById ( R . id . design _ bottom _ sheet ) Ġas ĠFrame Layout ĊĠĠĠĠĠĠĠ Ġm Behavior Ġ= ĠCustom Bottom Sheet Behavior . from ( bottom Sheet ) ĊĠĠĠĠĠĠĠ Ġm Behavior ?. set Bottom Sheet Callback ( m Bottom Sheet Callback ) ĊĠĠĠĠĠĠĠ Ġm Behavior ?. is Hide able Ġ= Ġm Cancel able ĊĠĠĠĠĠĠĠ Ġif Ġ( params Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Sheet . addView ( inflate View ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Sheet . addView ( inflate View , Ġparams ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcoord inator . findViewById ( R . id . touch _ outside ). setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Cancel able Ġ&& Ġis Showing Ġ&& Ġshould Window Close On Touch Outside ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠView Compat . set Accessibility Delegate ( bottom Sheet , Ġobject : ĠAccessibility Delegate Compat () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Initialize Accessibility NodeInfo ( host : ĠView ?, Ġinfo : ĠAccessibility NodeInfo Compat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Initialize Accessibility NodeInfo ( host , Ġinfo ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Cancel able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . addAction ( Accessibility NodeInfo Compat . ACTION _ DIS MIS S ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . is Dismiss able Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . is Dismiss able Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġperform Accessibility Action ( host : ĠView ?, Ġaction : ĠInt , Ġargs : ĠBundle ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Ġ== ĠAccessibility NodeInfo Compat . ACTION _ DIS MIS S Ġ&& Ġm Cancel able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . perform Accessibility Action ( host , Ġaction , Ġargs ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġreturn Ġcoord inator ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshould Window Close On Touch Outside (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! m Canceled On Touch Outside Set ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< Ġ 1 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Canceled On Touch Outside Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġcontext . obtain Styled Attributes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint ArrayOf ( android . R . attr . window Close On Touch Outside ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Canceled On Touch Outside Ġ= Ġa . getBoolean ( 0 , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . recycle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Canceled On Touch Outside Set Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġm Canceled On Touch Outside ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġm Bottom Sheet Callback Ġ= Ġobject : ĠCustom Bottom Sheet Behavior . Bottom Sheet Callback () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon StateChanged ( bottom Sheet : ĠView , ĠnewState : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newState Ġ== ĠBottom Sheet Behavior . STATE _ HIDDEN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Slide ( bottom Sheet : ĠView , Ġslide Offset : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtranslation Y Ġ= ĠMath . max ( 0 f , Ġ- slide Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Bottom Linear ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . set Translation Y ( m Bottom Linear , Ġtranslation Y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }