package Ġcom . live . sha adi assignment . utilities . helpers Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . DialogInterface Ċ import Ġandroid . graphics . drawable . Color Drawable Ċ import Ġandroid . os . Build Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . Popup Window Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . live . sha adi assignment . R Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠCh itr an sh ĠSh riv ast ava Ġon Ġ 1 5 - 1 0 - 2 0 2 1 Ġfor ĠSh aad i Assignment . Ċ Ġ* ĠAll Ġrights Ġreserved . Ċ Ġ*/ Ċ Ċ object ĠView Utils Ġ{ ĊĠĠĠ Ġconst Ġval ĠRIGHT _ LEFT _ STYLE Ġ= Ġ 1 ĊĠĠĠ Ġconst Ġval ĠBOTTOM _ UP _ STYLE Ġ= Ġ 2 ĊĠĠĠ Ġconst Ġval ĠFA DE _ IN _ OUT _ STYLE Ġ= Ġ 3 ĊĊĠĠĠ Ġfun Ġshow Toast ( context : ĠContext ?, Ġmessage : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( context Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġmessage , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Toast ( context : ĠContext ?, Ġmessage : ĠString ?, Ġtoast Length : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( context Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġmessage , Ġtoast Length ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Sn ackBar ( parent View : ĠView , Ġmessage : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( parent View . is Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsn ackBar Ġ= ĠSn ackbar . make ( parent View , Ġmessage !! , ĠSn ackbar . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackBar . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Alert ( activity : ĠActivity ?, Ġtitle : ĠString , Ġmessage : ĠString ?, Ġpositive Message : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener : ĠDialog Interface . OnClickListener ?, Ġis C ancellable : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( activity Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalert Ġ= ĠAlertDialog . Builder ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( title Ġ!= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalert . setTitle ( title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalert . setMessage ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalert . set Positive Button ( positive Message , Ġlistener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalert . set Cancel able ( is C ancellable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalert . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Alert WithOptions ( activity : ĠActivity ?, Ġtitle : ĠString , Ġmessage : ĠString ?, Ġpositive Message : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnegative Message : ĠString ?, Ġpositive Listener : ĠDialog Interface . OnClickListener ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnegative Listener : ĠDialog Interface . OnClickListener ?, Ġis C ancellable : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( activity Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalert Ġ= ĠAlertDialog . Builder ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( title Ġ!= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalert . setTitle ( title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalert . setMessage ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalert . set Positive Button ( positive Message , Ġpositive Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalert . set Negative Button ( negative Message , Ġnegative Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalert . set Cancel able ( is C ancellable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalert . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Popup ( activity : ĠActivity ?, Ġparent View : ĠView , Ġlayout Resource : ĠInt , Ġview Group Resource : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Callback : ĠPopup Callback , Ġstyle : ĠInt , Ġfull Layout : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( activity Ġ!= Ġnull Ġ&& Ġ! activity . is Finish ing Ġ&& Ġparent View . is Attached To Window ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . getSystem Service ( Context . LAYOUT _ IN FL ATER _ SERVICE ) Ġas ĠLayoutInflater ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Group Ġ= Ġparent View . findViewById < ViewGroup >( view Group Resource ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpopup View Ġ= Ġinflater . inflate ( layout Resource , Ġview Group ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= ĠLinearLayout . LayoutParams . MATCH _ PARENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġheight Ġ= ĠLinearLayout . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( full Layout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= ĠLinearLayout . LayoutParams . MATCH _ PARENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpw Ġ= ĠPopup Window ( popup View , Ġwidth , Ġheight , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpw . is Outside Touchable Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! full Layout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalpha Popup Background ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent View , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . base Context ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( style Ġ== ĠBOTTOM _ UP _ STYLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpw . animation Style Ġ= ĠR . style . Pop Up Animation 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpw . animation Style Ġ= ĠR . style . Pop Up Animation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( style Ġ== ĠBOTTOM _ UP _ STYLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpw . animation Style Ġ= ĠR . style . Pop Up Animation Full Page 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( style Ġ== ĠFA DE _ IN _ OUT _ STYLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpw . animation Style Ġ= ĠR . style . Pop Up Animation Full Page 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpw . animation Style Ġ= ĠR . style . Pop Up Animation Full Page ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpw . setBackground Drawable ( Color Drawable ( activity . resources . getColor ( android . R . color . transparent ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpw . show At Location ( parent View , ĠGr avity . CENTER , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpw . setOn Dismiss Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun Alpha Popup Background ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent View , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . base Context ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Callback . onClick ( popup View , Ġpw ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Popup With Anchor ( activity : ĠActivity ?, Ġparent View : ĠView , Ġlayout Resource : ĠInt , Ġview Group Resource : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Callback : ĠPopup Callback , Ġgravity : ĠInt , Ġfull Layout : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( activity Ġ!= Ġnull Ġ&& Ġ! activity . is Finish ing Ġ&& Ġparent View . is Attached To Window ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . getSystem Service ( Context . LAYOUT _ IN FL ATER _ SERVICE ) Ġas ĠLayoutInflater ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Group Ġ= Ġparent View . findViewById < ViewGroup >( view Group Resource ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpopup View Ġ= Ġinflater . inflate ( layout Resource , Ġview Group ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwidth Ġ= ĠLinearLayout . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( full Layout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= ĠLinearLayout . LayoutParams . MATCH _ PARENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Ġ= ĠLinearLayout . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpw Ġ= ĠPopup Window ( popup View , Ġwidth , Ġheight , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpw . is Outside Touchable Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpw . animation Style Ġ= ĠR . style . Pop Up Animation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpw . setBackground Drawable ( Color Drawable ( activity . resources . getColor ( android . R . color . transparent ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup View . measure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . Measure Spec . make Measure Spec ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . Measure Spec . UNSPECIFIED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . Measure Spec . make Measure Spec ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . Measure Spec . UNSPECIFIED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( gravity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity . TOP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopup View . measure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . Measure Spec . make Measure Spec ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . Measure Spec . UNSPECIFIED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . Measure Spec . make Measure Spec ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . Measure Spec . UNSPECIFIED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoriginal Pos Ġ= ĠInt Array ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent View . getLocation In Window ( original Pos ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Off Screen Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtop Offset Value Ġ= Ġparent View . height Ġ+ Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Off Screen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Offset Value Ġ+= Ġpopup View . meas ured Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpw . show As DropDown ( parent View , Ġ- 1 0 , Ġ- top Offset Value , Ġgravity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity . END Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Offset Value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent View . height Ġ/ Ġ 2 Ġ+ Ġpopup View . meas ured Height Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpw . show As DropDown ( parent View , Ġ 1 5 , Ġ- end Offset Value , Ġgravity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity . BOTTOM Ġ-> Ġpw . show As DropDown ( parent View , Ġ 0 , Ġ 3 0 , Ġgravity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity . START Ġ-> Ġpw . show As DropDown ( parent View , Ġ 0 , Ġ 1 0 , Ġgravity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġpw . show As DropDown ( parent View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Callback . onClick ( popup View , Ġpw ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġalpha Popup Background ( view : ĠView , Ġcontext : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view . is Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . alpha Ġ= Ġ 0 . 5 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . foreground Ġ= ĠContext Compat . get Drawable ( context , ĠR . drawable . alpha _ bg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġun Alpha Popup Background ( view : ĠView , Ġcontext : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view . is Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . alpha Ġ= Ġ 1 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . foreground Ġ= ĠContext Compat . get Drawable ( context , Ġandroid . R . color . transparent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠPopup Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠonClick ( popup View : ĠView , Ġpopup Window : ĠPopup Window ) ĊĠĠĠ Ġ} Ċ }