package Ġim . ews . ze al ot Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . Package Info Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . view . WindowManager Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġokhttp 3 . Http Url Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . Request Ċ Ċ class ĠZe al ot Ġprivate Ġconstructor ( val Ġcontext : ĠContext ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠVERSION Ġ= Ġ" 0 . 2 . 0 " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠBUILD _ TYPE Ġ= Ġ" default " ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġcreate ( context : ĠContext ): ĠZe al ot Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠZe al ot ( context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠScreen Height Ġ{ ĊĠĠĠĠĠĠĠ ĠA UT OM AT IC , ĠHAL F SCREEN ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġendpoint : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġchannel Keys Ġ= Ġhash Map Of < String , ĠString >() ĊĠĠĠ Ġprivate Ġvar Ġbuild Type : ĠString Ġ= ĠBUILD _ TYPE ĊĠĠĠ Ġprivate Ġvar ĠmaxHeight Ġ= ĠScreen Height . AUT OM AT IC ĊĊĠĠĠ Ġprivate Ġval Ġclient Ġ= ĠOk HttpClient () ĊĠĠĠ Ġprivate Ġval ĠpackageName : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcontext . packageName ĊĊĠĠĠ Ġprivate Ġval Ġpackage Info : ĠPackage Info ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcontext . package Manager . get Package Info ( packageName , Ġ 0 ) ĊĊĠĠĠ Ġprivate Ġval Ġrelease Version : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġpackage Info . version Name ĊĊĠĠĠ Ġprivate Ġval Ġbuild Version : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversion Code : ĠLong ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . P ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Code Ġ= Ġpackage Info . long Version Code ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Code Ġ= Ġpackage Info . version Code . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġversion Code ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġsdk Info : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" android -$ VERSION " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Endpoint ( endpoint : ĠString ): ĠZe al ot Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . endpoint Ġ= Ġendpoint ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Channel Key ( channel Key : ĠString ): ĠZe al ot Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġset Channel Key ( channel Key , ĠBUILD _ TYPE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Channel Key ( channel Key : ĠString , Ġbuild Type : ĠString ): ĠZe al ot Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . channel Keys [ build Type ] Ġ= Ġchannel Key ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Build Type ( build Type : ĠString ): ĠZe al ot Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . build Type Ġ= Ġbuild Type ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Alert Max Height ( height : ĠScreen Height ): ĠZe al ot Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . max Height Ġ= Ġheight ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlaunch () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Builder Ġ= ĠHttp Url . parse ("${ endpoint }/ api / apps / latest ") !!. newBuilder () ĊĠĠĠĠĠĠĠ Ġurl Builder . add QueryParameter (" channel _ key ", Ġchannel Key ()) ĊĠĠĠĠĠĠĠ Ġurl Builder . add QueryParameter (" release _ version ", Ġrelease Version ) ĊĠĠĠĠĠĠĠ Ġurl Builder . add QueryParameter (" build _ version ", Ġbuild Version . toString ()) ĊĠĠĠĠĠĠĠ Ġurl Builder . add QueryParameter (" bundle _ id ", ĠpackageName ) ĊĠĠĠĠĠĠĠ Ġurl Builder . add QueryParameter (" sdk ", Ġsdk Info ) ĊĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġurl Builder . build () ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġclient . new Call ( request ). enqueue ( Callback ( this )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Alert ( version : ĠString , Ġchangelog : ĠString , Ġinstall Url : ĠString ) Ġ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ Ġ= ĠAlertDialog . Builder ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" åıĳçİ° æĸ° çīĪæľ¬ Ġ${ version } ï¸ı ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( changelog ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button (" ä¸ĭ æ¬¡ åĨį è¯´ ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button (" ç«ĭ åį³ æĽ´æĸ° ") Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ VIEW , ĠUri . parse ( install Url )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĊĠĠĠĠĠĠĠ Ġdialog . show () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( max Height Ġ== ĠScreen Height . HALF SCREEN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . setMax Height (( context . resources . display Metrics . height Pixels Ġ/ Ġ 2 . 0 f ). toInt ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchannel Key (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( channel Keys . size Ġ== Ġ 0 Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" channel Key Ġis Ġempty ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġchannel Key : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( channel Keys . containsKey ( build Type )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannel Key Ġ= Ġchannel Keys [ build Type ] ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( channel Keys . containsKey ( BUILD _ TYPE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannel Key Ġ= Ġchannel Keys [ BUILD _ TYPE ] ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( channel Key Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" channel Key Ġis Ġempty ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġchannel Key ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠAlertDialog . setMax Height ( height : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdialog Height Ġ= Ġwindow ?. attributes ?. height ĊĠĠĠĠĠĠĠ Ġif Ġ( dialog Height Ġ!= Ġnull Ġ&& Ġdialog Height Ġ<= Ġheight ) Ġ{ Ġreturn Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= ĠWindow Manager . LayoutParams () ĊĠĠĠĠĠĠĠ Ġlayout Params . copyFrom ( window ?. attributes ) ĊĠĠĠĠĠĠĠ Ġlayout Params . height Ġ= Ġheight ĊĠĠĠĠĠĠĠ Ġwindow ?. attributes Ġ= Ġlayout Params ĊĠĠĠ Ġ} Ċ } ĊĊĊ