package Ġcom . py rus . py rus service desk . presentation Ċ Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . view . View Compat Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . app . AppCompat Delegate Ċ import Ġandroid . view . View Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġcom . py rus . py rus service desk . Py rus Service Desk Ċ import Ġcom . py rus . py rus service desk . R Ċ import Ġcom . py rus . py rus service desk . presentation . view model . Shared ViewModel Ċ import Ġcom . py rus . py rus service desk . utils . get ViewModel Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlin . coroutines . Coroutine Context ĊĊ Ċ /** Ċ Ġ* ĠBase Ġclass Ġfor Ġservice Ġde sk Ġactivities . Ċ Ġ*/ Ċ internal Ġabstract Ġclass ĠActivity Base : ĠAppCompatActivity (), ĠCor outine Scope Ġ{ ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSHOW _ KEY BOARD _ RETRY _ DELAY _ MS Ġ= Ġ 1 0 0 L ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠImplement ations Ġshould Ġprovide Ġlayout Ġresource Ġids Ġto Ġbe Ġinfl ated Ġto Ġcontent Ġview ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġval Ġlayout Res Id : ĠInt ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠImplement ations Ġshould Ġprovide Ġid Ġof Ġtoolbar Ġview Ġto Ġbe Ġused Ġas Ġaction Ġbar . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġval Ġtoolbar View Id : ĠInt ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAll Ġactivities Ġshare Ġthe Ġsame Ġmodel Ġto Ġbe Ġable Ġto Ġtrigger Ġ" r age " Ġquit Ġevent Ġthat Ġwill Ġclose ĊĠĠĠĠ Ġ* Ġall Ġservice Ġde sk Ġactivities Ġof Ġthe Ġcurrent Ġtask . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġval Ġshared ViewModel : ĠShared ViewModel Ġby Ġget ViewModel ( Shared ViewModel :: class . java ) ĊĊĠĠĠ Ġprivate Ġvar Ġrecent Content Height Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġval Ġcoroutine Context : ĠCor outine Context Ġ= ĠDispatch ers . Main Ġ+ ĠJob () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġ// ĠVector s Ġinside Ġanother Ġtype Ġof Ġdraw ables Ġmay Ġnot Ġwork Ġwithout Ġthis ĊĠĠĠĠĠĠĠ ĠAppCompat Delegate . set Compat Vector From Resources Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġoverride Pending Transition () ĊĠĠĠĠĠĠĠ Ġval Ġtheme Ġ= Ġwhen { ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPy rus Service Desk . getConfiguration (). is Dialog Theme Ġ-> ĠR . style . Py rus Service Desk _ Dialog ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPy rus Service Desk . getConfiguration (). force Dark Allowed Ġ-> ĠR . style . Py rus Service Desk ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠR . style . Base Py rus Service Desk ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Theme ( theme ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( layout Res Id ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( findViewById ( toolbar View Id )) ĊĠĠĠĠĠĠĠ ĠfindViewById < View >( android . R . id . content ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Tree Observer . add On Global Layout Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchanged Height Ġ= Ġrecent Content Height Ġ- Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( changed Height Ġ!= Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon View Height Changed ( changed Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecent Content Height Ġ= Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( shared ViewModel . get Quit Service Desk LiveData (). value Ġ== Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġcoroutine Context . cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Post Create ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Post Create ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġstart Ob serve Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfinish () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . finish () ĊĠĠĠĠĠĠĠ Ġoverride Pending Transition () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < out ĠString >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! isValid Permission Request Code ( request Code )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġgranted Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġpermissions . forEach Indexed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex , Ġpermission Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results [ index ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgranted . add ( permission ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! gr anted . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Permissions Granted ( gr anted . to Typed Array ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġwhether Ġpermission Ġ[ request Code ] Ġis Ġvalid . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġfun ĠisValid Permission Request Code ( request Code : ĠInt ): ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInv oked Ġwhen Ġ[ permissions ] Ġare Ġgranted Ġby Ġuser ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġfun Ġon Permissions Granted ( permissions : ĠArray < String >) Ġ{} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCapt ures Ġfocus Ġon Ġthe Ġ[ view ] Ġand Ġshows Ġthe Ġkeyboard ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġshow Keyboard On ( view : ĠView , Ġon Keyboard Shown : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile (! View Compat . is La id Out ( view )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( SHOW _ KEY BOARD _ RETRY _ DELAY _ MS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . request Focus () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( getSystem Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ). show Soft Input ( view , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Keyboard Shown ?. invoke () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRequests Ġ[ permissions ] Ġusing Ġ[ request Code ]. Ġ[ request Code ] Ġmust Ġbe Ġnon - negative ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġrequest Permissions Compat ( permissions : ĠArray < String >, Ġrequest Code : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , Ġpermissions , Ġrequest Code ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCallback Ġthat Ġnot ifies Ġthat Ġheight Ġof Ġthe Ġkeyboard Ġhas Ġbeen Ġchanged . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġfun Ġon View Height Changed ( changed By : ĠInt ) Ġ{} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExt enders Ġcan Ġsafely Ġstart Ġobserve Ġview Ġmodel 's Ġdata Ġhere . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġfun Ġstart Ob serve Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġshared ViewModel . get Quit Service Desk LiveData (). observe ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġquit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquit ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġoverride Pending Transition () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġenter Ġ= ĠR . anim . ps d _ animation _ window _ enter ĊĠĠĠĠĠĠĠ Ġval Ġexit Ġ= ĠR . anim . ps d _ animation _ window _ exit ĊĠĠĠĠĠĠĠ Ġsuper . override Pending Transition ( enter , Ġexit ) ĊĠĠĠ Ġ} Ċ } Ċ