package Ġcom . itr ans late . recorder . general . extensions Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Environment Ċ import Ġandroid . provider . Settings Ċ import Ġandroidx . annotation . Drawable Res Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcom . google . android . material . dialog . Material AlertDialog Builder Ċ import Ġcom . google . android . material . sn ackbar . Base Transient Bottom Bar Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . google . android . material . transition . platform . Material Shared Axis Ċ import Ġcom . itr ans late . recorder . R Ċ import Ġcom . itr ans late . recorder . general . Constants . FILE _ NAME _ PATTERN Ċ import Ġjava . io . File Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠExtension Ġfunction Ġto Ġadd Ġenter Ġand Ġexit Ġshared Ġtransition Ġin ĠY Ġaxis Ġon Ġfragment Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠFragment > ĠT . add Enter Exit Shared Axis Transition () Ġ{ ĊĠĠĠ Ġenter Transition Ġ= ĠMaterial Shared Axis ( Material Shared Axis . Y , Ġtrue ) ĊĠĠĠ Ġreturn Transition Ġ= ĠMaterial Shared Axis ( Material Shared Axis . Y , Ġfalse ) Ċ } Ċ Ċ /** Ċ Ġ* ĠExtension Ġfunction Ġto Ġget Ġdrawable Ġreferences Ġeasier Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠFragment > ĠT . get Drawable (@ Drawable Res Ġdrawable ResourceId : ĠInt ) Ġ= ĊĠĠĠ ĠContext Compat . get Drawable ( require Context (), Ġdrawable ResourceId ) Ċ Ċ /** Ċ Ġ* ĠExtension Ġfunction Ġto Ġlaunch Ġa Ġconfirmation Ġdialog Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠFragment > ĠT . launch Confirmation Dialog ( ĊĠĠĠ Ġtitle : ĠString , ĊĠĠĠ Ġmessage : ĠString , ĊĠĠĠ Ġcallback : Ġ( Dialog Result ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ ĠMaterial AlertDialog Builder ( require Context ()) ĊĠĠĠĠĠĠĠ Ġ. setTitle ( title ) ĊĠĠĠĠĠĠĠ Ġ. setMessage ( message ) ĊĠĠĠĠĠĠĠ Ġ. set Negative Button ( getString ( R . string . text _ btn _ no )) Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . invoke ( Dialog Result . Negative ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. set Positive Button ( getString ( R . string . text _ btn _ yes )) Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . invoke ( Dialog Result . Positive ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. show () Ċ } Ċ Ċ /** Ċ Ġ* ĠSe aled Ġclass Ġrepresenting Ġdialog Ġresponse Ġtypes Ċ Ġ*/ Ċ sealed Ġclass ĠDialog Result Ġ{ ĊĠĠĠ Ġobject ĠNegative Ġ: ĠDialog Result () ĊĠĠĠ Ġobject ĠPositive Ġ: ĠDialog Result () Ċ } Ċ Ċ /** Ċ Ġ* ĠExtension Ġfunction Ġlaunch ing Ġalert Ġdialog Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠFragment > ĠT . launch AlertDialog ( ĊĠĠĠ Ġbtn Text : ĠString , ĊĠĠĠ Ġtitle : ĠString , ĊĠĠĠ Ġmessage : ĠString , ĊĠĠĠ Ġcallback : Ġ() Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ ĠMaterial AlertDialog Builder ( require Context ()) ĊĠĠĠĠĠĠĠ Ġ. setTitle ( title ) ĊĠĠĠĠĠĠĠ Ġ. setMessage ( message ) ĊĠĠĠĠĠĠĠ Ġ. set Positive Button ( btn Text ) Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . invoke () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. show () Ċ } Ċ Ċ /** Ċ Ġ* ĠExtension Ġfunction Ġto Ġlaunch Ġapp Ġsettings Ċ Ġ* ĠTo Ġbe Ġused Ġafter Ġpermission Ġdenied Ġdialog Ġis Ġshown Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠFragment > ĠT . launch Settings Intent () Ġ{ ĊĠĠĠ ĠstartActivity ( Intent ( Settings . ACTION _ APPLICATION _ DETAILS _ SETTINGS ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Ġ= ĠUri . from Parts (" package ", Ġrequire Activity (). packageName , Ġnull ) ĊĠĠĠ Ġ}) Ċ } Ċ Ċ /** Ċ Ġ* ĠExtension Ġfunction Ġto Ġcreate Ġa Ġtemporary Ġfile Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠFragment > ĠT . create File (): ĠFile Ġ{ ĊĠĠĠ Ġval Ġstorage Dir Ġ= Ġrequire Activity (). get External Files Dir ( Environment . DIRECTORY _ M US IC ) ĊĠĠĠ Ġval Ġtime Stamp : ĠString Ġ= ĠSimpleDateFormat ( ĊĠĠĠĠĠĠĠ ĠFILE _ NAME _ PATTERN , ĊĠĠĠĠĠĠĠ ĠLocale . getDefault () ĊĠĠĠ Ġ). format ( Date ()) ĊĠĠĠ Ġreturn ĠFile ( storage Dir , Ġ"$ time Stamp . mp 3 ") Ċ } Ċ Ċ /** Ċ Ġ* ĠExtension Ġfunction Ġto Ġshow Ġsn ack Ġbar Ċ Ġ* Ġregisters Ġcallback Ċ Ġ* Ġinvoke Ġ[ action Callback ] Ġcallback Ġwhen Ġ[ action Text ] Ġis Ġprovided Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠFragment > ĠT . show Sn ackBar ( ĊĠĠĠ Ġmessage : ĠString , ĊĠĠĠ Ġaction Text : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġcallback : Ġ( Sn ackBar CallBack ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ ĠSn ackbar . make ( require View (), Ġmessage , ĠSn ackbar . LENGTH _ LONG ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( action Text Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ apply ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Action ( action Text ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . invoke ( Sn ackBar CallBack . Action ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadd Callback ( object Ġ: ĠBase Transient Bottom Bar . Base Callback < Snackbar > (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Dis missed ( transient Bottom Bar : ĠSn ackbar ?, Ġevent : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Dis missed ( transient Bottom Bar , Ġevent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDIS MIS S _ EVENT _ ACTION Ġ-> Ġcallback . invoke ( Sn ackBar CallBack . Action ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDIS MIS S _ EVENT _ TIMEOUT Ġ-> Ġcallback . invoke ( Sn ackBar CallBack . Dismiss ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ}. show () Ċ } Ċ Ċ /** Ċ Ġ* ĠSn ackbar Ġcallback Ġtypes Ċ Ġ*/ Ċ sealed Ġclass ĠSn ackBar CallBack Ġ{ ĊĠĠĠ Ġobject ĠAction Ġ: ĠSn ackBar CallBack () ĊĠĠĠ Ġobject ĠDis miss Ġ: ĠSn ackBar CallBack () Ċ } ĊĊ