package Ġcom . kp stv . xc lip per . extensions . utils Ċ Ċ import Ġandroid . accessibility service . Accessibility Service Ċ import Ġandroid . accessibility service . Accessibility Service Info Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Activity Manager Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent . FLAG _ ACTIVITY _ NEW _ TASK Ċ import Ġandroid . content . pm . Application Info Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . content . pm . Service Info Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . V ibration Effect Ċ import Ġandroid . os . V ibr ator Ċ import Ġandroid . provider . Settings Ċ import Ġandroid . tele phony . Tele phony Manager Ċ import Ġandroid . util . Display Metrics Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . accessibility . Accessibility Manager Ċ import Ġandroidx . annotation . Attr Res Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . core . app . Share Compat Ċ import Ġcom . google . android . material . dialog . Material AlertDialog Builder Ċ import Ġcom . google . firebase . auth . k tx . auth Ċ import Ġcom . google . firebase . k tx . Firebase Ċ import Ġcom . google . zx ing . integration . android . Intent Integr ator Ċ import Ġcom . kp stv . xc lip per . App Ċ import Ġcom . kp stv . xc lip per . App . AUTO _ SYNC _ PRE F Ċ import Ġcom . kp stv . xc lip per . App . BIND _ DELETE _ PRE F Ċ import Ġcom . kp stv . xc lip per . App . BIND _ PRE F Ċ import Ġcom . kp stv . xc lip per . Build Config Ċ import Ġcom . kp stv . xc lip per . R Ċ import Ġcom . kp stv . xc lip per . data . localized . FB Options Ċ import Ġcom . kp stv . xc lip per . data . model . App Pkg Ċ import Ġcom . kp stv . xc lip per . data . model . Clip Ċ import Ġcom . kp stv . xc lip per . data . provider . DB Connection Provider Ċ import Ġcom . kp stv . xc lip per . data . provider . Preference Provider Ċ import Ġcom . kp stv . xc lip per . databinding . Dialog Connect Binding Ċ import Ġcom . kp stv . xc lip per . databinding . Dialog Progress View Binding Ċ import Ġcom . kp stv . xc lip per . extensions . Simple Function Ċ import Ġcom . kp stv . xc lip per . extensions . layout Inflater Ċ import Ġcom . kp stv . xc lip per . service . Clipboard Accessibility Service Ċ import Ġcom . kp stv . xc lip per . ui . dialogs . Feature Dialog Ċ import Ġcom . kp stv . xc lip per . ui . helpers . Authentication Helper Ċ import Ġcom . kp stv . xc lip per . ui . helpers . Firebase Sync Helper Ċ import Ġes . dm oral . toast y . Toast y Ċ import Ġjava . io . InputStream Ċ import Ġjava . text . Decimal Format Ċ import Ġjava . util .* Ċ import Ġkotlin . coroutines . resume Ċ import Ġkotlin . coroutines . suspend Coroutine Ċ import Ġkotlin . reflect . K Class Ċ Ċ class ĠUtils Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġis Activity Running ( ctx : ĠContext , Ġclazz : ĠK Class < out ĠActivity >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Manager Ġ= Ġctx . getSystem Service ( Context . ACTIVITY _ SERVICE ) Ġas ĠActivity Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġactivity Manager . get Running Tasks ( Int . MAX _ VALUE ). any Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . top Activity ?. className Ġ== Ġclazz . qualified Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġshare Text ( context : ĠActivity , Ġclip : ĠClip ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠShare Compat . Intent Builder . from ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Chooser Title ( context . getString ( R . string . share )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setType (" text / plain ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setText ( clip . data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. intent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshare Intent Ġ= ĠIntent . create Chooser ( intent , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( share Intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠAlways Ġpass Ġthis @ Activity Ġas Ġcontext . ĊĠĠĠĠĠĠĠĠ Ġ* ĠElse Ġit Ġwon 't Ġresolve Ġtheme ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun ĠgetData From Attr ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Attr Res Ġattr : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtyped Value : ĠTyped Value Ġ= ĠTyped Value (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Refs : ĠBoolean Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . theme . resolve Attribute ( attr , Ġtyped Value , Ġresolve Refs ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtyped Value . data ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠI Ġam Ġtoo Ġlazy Ġto Ġwrite Ġmy Ġown Ġcode . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ ĠSource : Ġhttps :// stackoverflow . com / a / 3 1 5 8 3 6 9 5 / 1 0 1 3 3 5 0 1 ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġget Country Dial Code ( context : ĠContext ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcon try Dial Code : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtele phony Mn gr Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getSystem Service ( Context . TELE PHONY _ SERVICE ) Ġas ĠTele phony Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcountry Id Ġ= Ġtele phony Mn gr . sim Country Iso . toUpperCase ( Locale . ROOT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarr Con try Code : ĠArray < String > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . resources . getString Array ( R . array . Dial ing CountryCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġarr Con try Code . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarr Dial Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarr Con try Code [ i ]. split ("," ). to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( arr Dial [ 1 ]. trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ} Ġ== Ġcountry Id . trim ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcon try Dial Code Ġ= Ġarr Dial [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcon try Dial Code ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġis Package Installed ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠpackageName : ĠString ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . package Manager . get Package Info ( packageName , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠPackage Manager . Name NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġtrue Ġif Ġthe Ġcurrent Ġpackage Ġname Ġis Ġnot Ġpart Ġof Ġblacklist Ġapp Ġlist . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġis Package Black listed ( pkg : ĠCharSequence ?) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp . black List ed Apps ?. contains ( pkg ) Ġ== Ġtrue ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġwill Ġcheck Ġif Ġaccessibility Ġservice Ġis Ġenabled Ġor Ġnot . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġservice ĠProvide Ġthe Ġaccessibility Ġservice Ġclass Ġof Ġwhich Ġyou Ġwant Ġto ĊĠĠĠĠĠĠĠĠ Ġ* Ġdetect . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġis Accessibility Service Enabled ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice : ĠClass < out ĠAccessibility Service ?> ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġam Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getSystem Service ( Context . ACC ES SI B ILITY _ SERVICE ) Ġas ĠAccessibility Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenabled Services Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġam . get Enabled Accessibility Service List ( Accessibility Service Info . FEED BACK _ ALL _ MASK ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( enabled Service Ġin Ġenabled Services ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenabled Service Info : ĠService Info Ġ= Ġenabled Service . resolve Info . service Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( enabled Service Info . packageName Ġ== Ġcontext . packageName Ġ&& Ġenabled Service Info . name Ġ== Ġservice . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccessibility Prefs Ġ= ĠSettings . Secure . getString ( context . content Resolver , ĠSettings . Secure . ENABLED _ ACC ES SI B ILITY _ SERVICES ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( accessibility Prefs ?. contains ("${ context . packageName }/${ service . canonical Name }") Ġ== Ġtrue ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġwill Ġcreate Ġand Ġshow Ġdialog Ġto Ġuser Ġto Ġenable Ġaccessibility Ġservice ĊĠĠĠĠĠĠĠĠ Ġ* Ġto Ġmake Ġclipboard Ġcapturing Ġwork Ġeven Ġfor Ġthe ĠAndroid Ġ 1 0 . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġshow Accessibility Dialog ( context : ĠContext , Ġblock : ĠSimple Function ): ĠUnit Ġ= Ġwith ( context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial AlertDialog Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( getString ( R . string . accessibility _ service )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( context . getString ( R . string . accessibility _ capture )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( getString ( R . string . ok )) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Accessibility ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( getString ( R . string . cancel )) Ġ{ Ġ_, Ġ_ Ġ-> Ġblock . invoke () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġshow Disable Accessibility Dialog ( context : ĠContext , Ġblock : ĠSimple Function ): ĠUnit Ġ= Ġwith ( context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial AlertDialog Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( getString ( R . string . accessibility _ service _ disable )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( getString ( R . string . accessibility _ disable _ text )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( R . string . ok ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClip board Accessibility Service . disable Service ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġopen Accessibility ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( R . string . cancel ) Ġ{ Ġ_, Ġ_ Ġ-> Ġblock . invoke () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġshow Accessibility Dialog ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Accessibility Dialog ( context ) Ġ{ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġopen Accessibility ( context : ĠContext ) Ġ= Ġwith ( context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomponent Name Ġ= ĠComponent Name ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuild Config . APPLICATION _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClip board Accessibility Service :: class . java . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). flatten ToString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . putString ( App . EXTRA _ FRAGMENT _ ARG _ KEY , Ġcomponent Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Settings . ACTION _ ACC ES SI B ILITY _ SETTINGS ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġ= ĠFLAG _ ACTIVITY _ NEW _ TASK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( App . EXTRA _ FRAGMENT _ ARG _ KEY , Ġcomponent Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( App . EXTRA _ SHOW _ FRAGMENT _ ARGUMENT S , Ġbundle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . M ) ĊĠĠĠĠĠĠĠ Ġfun Ġshow Overlay Dialog ( context : ĠContext ): ĠAlertDialog Ġ= Ġwith ( context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial AlertDialog Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Suggestions Ġ[ B ETA ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( getString ( R . string . suggestion _ capture )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( getString ( R . string . ok )) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen System Overlay ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( getString ( R . string . cancel ), Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġis System Overlay Enabled ( context : ĠContext ): ĠBoolean Ġ= Ġwith ( context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSettings . can Draw Overlay s ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġis Android 1 0 or Up () Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBuild . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . Q ĊĊĠĠĠĠĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . M ) ĊĠĠĠĠĠĠĠ Ġfun Ġopen System Overlay ( context : ĠContext ) Ġ= Ġwith ( context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmy Intent Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSettings . ACTION _ MANAGE _ OVER LAY _ PERMISSION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUri . parse (" package :$ packageName ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġ= ĠFLAG _ ACTIVITY _ NEW _ TASK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( my Intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCall Ġthis Ġfunction Ġwhenever Ġyou Ġwant Ġto Ġwork Ġwith Ġinstalled Ġapps . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġsuspend Ġfun Ġretrieve Package List ( context : ĠContext ): ĠList < App Pkg > Ġ= Ġwith ( context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuspend Coroutine Ġ{ Ġr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġpackage Manager . get Installed Applications ( PackageManager . GET _ META _ DATA ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . flags Ġ!= ĠApplication Info . FLAG _ SYSTEM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Pkg ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . load Label ( package Manager ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . packageName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . label Ġ!= Ġnull Ġ&& Ġ! it . label . contains (".") Ġ&& Ġit . packageName Ġ!= Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . label . toString () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct By Ġ{ Ġit . label . toString () Ġ}. toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr . resume ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġwill Ġshow Ġconnection Ġdialog Ġand Ġfrom Ġthere Ġwe Ġcan Ġinitiate ĠQR Ġscanning . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġshow Connect Dialog ( activity : ĠActivity ): ĠUnit Ġ= Ġwith ( activity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠDialog Connect Binding . inflate ( layout Inflater ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalert Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setView ( binding . root ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . btn Scan Connect . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent Integr ator ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Desired Barcode Formats ( Intent Integr ator . QR _ CODE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Orientation Locked ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Be ep Enabled ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Prompt ( getString ( R . string . scan _ code )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Barcode Image Enabled ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. init iate Scan () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalert . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġshow Connection Dialog ( context : ĠContext ): ĠAlertDialog Ġ= Ġwith ( context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠDialog Progress View Binding . inflate ( layout Inflater ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setView ( binding . root ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . btn Cancel . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdialog ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġlogout From Database ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreference Provider : ĠPreference Provider , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb Connection Provider : ĠDB Connection Provider ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb Connection Provider . options Provider ()?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Auth Needed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Sync Helper . get ()?. let Ġ{ Ġapp Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase . auth ( app ). sign Out () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuthentication Helper . sign Out Google ( context , Ġauth ClientId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb Connection Provider . detach Data From All () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreference Provider . put Boolean Key ( BIND _ PRE F , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreference Provider . put Boolean Key ( AUTO _ SYNC _ PRE F , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreference Provider . put Boolean Key ( BIND _ DELETE _ PRE F , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp . bind To Firebase Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp . run Auto Sync Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp . bind Delete Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġlogin To Database ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreference Provider : ĠPreference Provider , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb Connection Provider : ĠDB Connection Provider , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions : ĠFB Options ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb Connection Provider . save Options To All ( options ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreference Provider . put Boolean Key ( BIND _ PRE F , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreference Provider . put Boolean Key ( AUTO _ SYNC _ PRE F , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp . bind To Firebase Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp . run Auto Sync Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠisValid SQLite ( stream : ĠInputStream ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠChar Array ( 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstream ?. buffered Reader ()?. read ( buffer , Ġ 0 , Ġ 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstr Ġ= ĠString ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġstr Ġ== Ġ" SQLite Ġformat Ġ 3 \ u 0 0 0 0 " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcommon Url Launch ( context : ĠContext , Ġurl : ĠString ): ĠUnit Ġ= Ġwith ( context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ VIEW ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠUri . parse ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġ= ĠFLAG _ ACTIVITY _ NEW _ TASK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} catch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . error ( this , ĠR . string . err _ action ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdp To Pixel ( context : ĠContext , Ġvalue : ĠFloat ): ĠFloat Ġ= Ġwith ( context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvalue Ġ* Ġ( resources . display Metrics . density D pi . toFloat () Ġ/ ĠDisplay Metrics . D ENS ITY _ DEFAULT ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġvi br ate Device ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġcontext . getSystem Service ( Context . V IB R ATOR _ SERVICE ) Ġas ĠV ibr ator ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm . vi br ate ( V ibration Effect . create One Shot ( 5 0 , ĠV ibration Effect . DEFAULT _ AMP LIT UDE )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm . vi br ate ( 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġshow Search Feature Dialog ( context : ĠContext , Ġpreference Provider : ĠPreference Provider ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( preference Provider . getBoolean Key ( App . SHOW _ SEARCH _ FEATURE , Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFeature Dialog ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ResourceId ( R . drawable . feature _ suggestion _ search ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . search _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Subtitle ( R . string . search _ subtitle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreference Provider . put Boolean Key ( App . SHOW _ SEARCH _ FEATURE , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġshow Dis closure Dialog ( context : ĠContext , Ġ@ String Res Ġmessage : ĠInt , Ġon Accept : Ġ() Ġ-> ĠUnit , Ġon Den y : Ġ() Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial AlertDialog Builder ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . dis closure ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( R . string . accept ) Ġ{ Ġ_, Ġ_ Ġ-> Ġon Accept ()} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( R . string . deny ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . error ( context , Ġcontext . getString ( R . string . dis closure _ deny )). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Den y () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Size Pretty ( size : ĠLong ?, Ġadd Prefix : ĠBoolean Ġ= Ġtrue ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdf Ġ= ĠDecimal Format (" 0 . 0 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Kb Ġ= Ġ 1 0 2 4 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Mb Ġ= Ġsize Kb Ġ* Ġsize Kb ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Gb Ġ= Ġsize Mb Ġ* Ġsize Kb ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize T erra Ġ= Ġsize Gb Ġ* Ġsize Kb ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( size Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ< Ġsize Mb Ġ-> Ġdf . format ( size Ġ/ Ġsize Kb ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toString () Ġ+ Ġif Ġ( add Prefix ) Ġ" ĠKB " Ġelse Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ< Ġsize Gb Ġ-> Ġdf . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ/ Ġsize Mb ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). toString () Ġ+ Ġ" ĠMB " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ< Ġsize T erra Ġ-> Ġdf . format ( size Ġ/ Ġsize Gb ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toString () Ġ+ Ġif Ġ( add Prefix ) Ġ" ĠGB " Ġelse Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ" 0 " Ġ+ Ġif Ġ( add Prefix ) Ġ" ĠB " Ġelse Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ }