package Ġsoup . tile . screen record Ċ Ċ import Ġandroid . Manifest . permission . RECORD _ AUDIO Ċ import Ġandroid . Manifest . permission . WRITE _ EXTERNAL _ STORAGE Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . media . projection . Media Projection Manager Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . widget . Space Ċ import Ġsoup . tile . screen record . setting . Setting Activity Ċ import Ġsoup . tile . screen record . util . start Foreground Service Compat Ċ import Ġsoup . tile . screen record . util . toast Ċ Ċ class ĠScreen Record Activity Ġ: ĠActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġuse Audio Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġfrom Settings Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġreturn To Settings Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( Space ( this )) ĊĠĠĠĠĠĠĠ Ġuse Audio Ġ= Ġintent ?. getBoolean Extra ( EXTRA _ USE _ AUDIO , Ġuse Audio ) Ġ?: Ġuse Audio ĊĠĠĠĠĠĠĠ Ġfrom Settings Ġ= Ġintent ?. getBoolean Extra ( EXTRA _ FROM _ SETTINGS , Ġfrom Settings ) Ġ?: Ġfrom Settings ĊĠĠĠĠĠĠĠ Ġreturn To Settings Ġ= Ġintent ?. getBoolean Extra ( EXTRA _ RETURN _ TO _ SETTINGS , Ġreturn To Settings ) Ġ?: Ġreturn To Settings ĊĊĠĠĠĠĠĠĠ Ġif Ġ( use Audio ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpermissions Ġ= ĠarrayOf ( WRITE _ EXTERNAL _ STORAGE , ĠREC ORD _ AUDIO ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Screen Capture After Granted ( permissions , Ġfallback = Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( permissions , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ CODE _ PERMISSION S _ AUDIO ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpermissions Ġ= ĠarrayOf ( WRITE _ EXTERNAL _ STORAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Screen Capture After Granted ( permissions , Ġfallback = Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( permissions , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ CODE _ PERMISSION S ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinline Ġfun Ġrequest Screen Capture After Granted ( ĊĠĠĠĠĠĠĠ Ġpermissions : ĠArray < String >, ĊĠĠĠĠĠĠĠ Ġfallback : Ġ() Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( all Granted ( permissions )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Screen Capture () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfallback () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠContext . all Granted ( permissions : ĠArray < String >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpermissions . all Ġ{ Ġpermission Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Self Permission ( permission ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠĠĠĠĠ Ġpermissions : ĠArray < String >, ĊĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ CODE _ PERMISSION S , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ CODE _ PERMISSION S _ AUDIO Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Screen Capture After Granted ( permissions , Ġfallback = Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( R . string . screen record _ permission _ not _ gr anted ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate Up () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest Screen Capture () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmedia Projection Manager Ġ= Ġget System Service ( Context . MEDIA _ PRO JECTION _ SERVICE ) Ġas ĠMedia Projection Manager ĊĠĠĠĠĠĠĠ Ġval Ġpermission Intent Ġ= Ġmedia Projection Manager . create Screen Capture Intent () ĊĠĠĠĠĠĠĠ Ġif Ġ( use Audio ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( permission Intent , ĠREQUEST _ CODE _ VIDEO _ AUDIO ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( permission Intent , ĠREQUEST _ CODE _ VIDEO _ ONLY ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ CODE _ VIDEO _ ONLY , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ CODE _ VIDEO _ AUDIO Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠRESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuse Audio Ġ= Ġrequest Code Ġ== ĠREQUEST _ CODE _ VIDEO _ AUDIO ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠRecord ing Service . getStart Intent ( this , ĠresultCode , Ġdata , Ġuse Audio , Ġreturn To Settings ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Foreground Service Compat ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( R . string . screen record _ permission _ not _ gr anted ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate Up () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnavigate Up () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( from Settings ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , ĠSetting Activity :: class . java )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQUEST _ CODE _ VIDEO _ ONLY Ġ= Ġ 2 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQUEST _ CODE _ PERMISSION S Ġ= Ġ 2 9 9 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQUEST _ CODE _ VIDEO _ AUDIO Ġ= Ġ 3 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQUEST _ CODE _ PERMISSION S _ AUDIO Ġ= Ġ 3 9 9 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠEX TRA _ USE _ AUDIO Ġ= Ġ" extra _ use Audio " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠEX TRA _ FROM _ SETTINGS Ġ= Ġ" extra _ from Settings " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠEX TRA _ RETURN _ TO _ SETTINGS Ġ= Ġ" extra _ return To Settings " ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Start Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse Audio : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Settings : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn To Settings : ĠBoolean ĊĠĠĠĠĠĠĠ Ġ): ĠIntent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠIntent ( context , ĠScreen Record Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putExtra ( EXTRA _ USE _ AUDIO , Ġuse Audio ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putExtra ( EXTRA _ FROM _ SETTINGS , Ġfrom Settings ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putExtra ( EXTRA _ RETURN _ TO _ SETTINGS , Ġreturn To Settings ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Flags ( Intent . FLAG _ ACTIVITY _ NEW _ TASK ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ