package Ġcom . r ak uten . tech . mobile . mini app . display Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . webkit . Geo location Permissions Ċ import Ġandroid . webkit . Js Result Ċ import Ġandroid . webkit . Js Prompt Result Ċ import Ġandroid . webkit . Web Chrome Client Ċ import Ġandroid . webkit . WebView Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroidx . annotation . Visible ForTesting Ċ import Ġcom . r ak uten . tech . mobile . mini app . Mini App Info Ċ import Ġcom . r ak uten . tech . mobile . mini app . js . Dialog Type Ċ import Ġcom . r ak uten . tech . mobile . mini app . permission . Mini App Custom Permission Cache Ċ import Ġcom . r ak uten . tech . mobile . mini app . permission . Mini App Custom Permission Type Ċ import Ġjava . io . BufferedReader Ċ Ċ internal Ġclass ĠMini App Web Chrome Client ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġmini App Info : ĠMini App Info , ĊĠĠĠ Ġval Ġmini App Custom Permission Cache : ĠMini App Custom Permission Cache Ċ ) Ġ: ĠWeb Chrome Client () Ġ{ ĊĊĠĠĠ Ġ@ Suppress (" Too Generic Exception Ca ught ", Ġ" Sw allowed Exception ") ĊĠĠĠ Ġ@ Visible ForTesting ĊĠĠĠ Ġinternal Ġval Ġbridge Js Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= Ġcontext . assets . open (" js - mini app / bridge . js ") ĊĠĠĠĠĠĠĠ ĠinputStream . buffered Reader (). use ( BufferedReader :: read Text ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Received Title ( web View : ĠWebView , Ġtitle : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Injection ( web View ) ĊĠĠĠĠĠĠĠ Ġsuper . on Received Title ( web View , Ġtitle ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Function MaxLength ") ĊĠĠĠ Ġoverride Ġfun Ġon Geo location Permissions Show Prompt ( ĊĠĠĠĠĠĠĠ Ġorigin : ĠString ?, ĊĠĠĠĠĠĠĠ Ġcallback : ĠGeo location Permissions . Callback ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( mini App Custom Permission Cache . has Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmini App Info . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMini App Custom Permission Type . LOCATION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) Ġcallback ?. invoke ( origin , Ġtrue , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġelse Ġcallback ?. invoke ( origin , Ġfalse , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Js Alert ( ĊĠĠĠĠĠĠĠ Ġview : ĠWebView ?, ĊĠĠĠĠĠĠĠ Ġurl : ĠString ?, ĊĠĠĠĠĠĠĠ Ġmessage : ĠString ?, ĊĠĠĠĠĠĠĠ Ġresult : ĠJs Result ? ĊĠĠĠ Ġ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġon ShowDialog ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġmessage , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġresult Ġas ĠJs Result , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Type Ġ= ĠDialog Type . ALERT , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmini App Title Ġ= Ġmini App Info . displayName ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Js Confirm ( ĊĠĠĠĠĠĠĠ Ġview : ĠWebView ?, ĊĠĠĠĠĠĠĠ Ġurl : ĠString ?, ĊĠĠĠĠĠĠĠ Ġmessage : ĠString ?, ĊĠĠĠĠĠĠĠ Ġresult : ĠJs Result ? ĊĠĠĠ Ġ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġon ShowDialog ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġmessage , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġresult Ġas ĠJs Result , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Type Ġ= ĠDialog Type . CONFIRM , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmini App Title Ġ= Ġmini App Info . displayName ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Js Prompt ( ĊĠĠĠĠĠĠĠ Ġview : ĠWebView ?, ĊĠĠĠĠĠĠĠ Ġurl : ĠString ?, ĊĠĠĠĠĠĠĠ Ġmessage : ĠString ?, ĊĠĠĠĠĠĠĠ ĠdefaultValue : ĠString ?, ĊĠĠĠĠĠĠĠ Ġresult : ĠJs Prompt Result ? ĊĠĠĠ Ġ): ĠBoolean Ġ= Ġon ShowDialog ( ĊĠĠĠĠĠĠĠ Ġcontext Ġ= Ġcontext , ĊĠĠĠĠĠĠĠ Ġmessage Ġ= Ġmessage , ĊĠĠĠĠĠĠĠ ĠdefaultValue Ġ= ĠdefaultValue , ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġresult , ĊĠĠĠĠĠĠĠ Ġdialog Type Ġ= ĠDialog Type . PROMPT , ĊĠĠĠĠĠĠĠ Ġmini App Title Ġ= Ġmini App Info . displayName ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Visible ForTesting ĊĠĠĠ Ġinternal Ġfun Ġdo Injection ( web View : ĠWebView ) Ġ{ ĊĠĠĠĠĠĠĠ ĠwebView . evaluate Javascript ( bridge Js ) Ġ{} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// region Ġfullscreen Ġvideo ĊĠĠĠ Ġ@ Visible ForTesting ĊĠĠĠ Ġinternal Ġvar Ġcustom View : ĠView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcustom View Callback : ĠCustom View Callback ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġoriginal System Ui Visibility Ġ= ĠView . SYSTEM _ UI _ FLAG _ VISIBLE ĊĠĠĠ Ġprivate Ġval Ġfull Screen Flag Ġ= ĠView . SYSTEM _ UI _ FLAG _ FULL SCREEN Ġor ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView . SYSTEM _ UI _ FLAG _ HIDE _ NAV IG ATION Ġor ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView . SYSTEM _ UI _ FLAG _ IM MER SIVE _ STICK Y Ġor ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView . SYSTEM _ UI _ FLAG _ LAYOUT _ ST ABLE ĊĊĠĠĠ Ġoverride Ġfun Ġon Show Custom View ( param View : ĠView ?, Ġparam Custom View Callback : ĠCustom View Callback ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( custom View Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Hide Custom View () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcustom View Ġ= Ġparam View ĊĠĠĠĠĠĠĠ Ġif Ġ( context Ġis ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal System Ui Visibility Ġ= Ġwindow . decor View . system Ui Visibility ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom View Callback Ġ= Ġparam Custom View Callback ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( window . decor View Ġas ĠFrame Layout ). addView ( custom View , ĠFrame Layout . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . MATCH _ PARENT , ĠViewGroup . LayoutParams . MATCH _ PARENT )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . decor View . system Ui Visibility Ġ= Ġfull Screen Flag ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom View ?. set BackgroundColor ( getColor ( android . R . color . black )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom View ?. setOn System Ui Visibility ChangeListener Ġ{ Ġupdate Controls () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Hide Custom View () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( context Ġis ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( window . decor View Ġas ĠFrame Layout ). remove View ( custom View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom View Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . decor View . system Ui Visibility Ġ= Ġoriginal System Ui Visibility ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom View Callback !!. on Custom View Hidden () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom View Callback Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Visible ForTesting ĊĠĠĠ Ġinternal Ġfun Ġupdate Controls () Ġ{ ĊĠĠĠĠĠĠĠ Ġcustom View ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġ( it . layout Params Ġas ĠFrame Layout . LayoutParams ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Margin Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Margin Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Margin Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Margin Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= ĠViewGroup . LayoutParams . MATCH _ PARENT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= ĠViewGroup . LayoutParams . MATCH _ PARENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . layout Params Ġ= Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context Ġis ĠActivity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . window . decor View . system Ui Visibility Ġ= Ġfull Screen Flag ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// Ġend Ġregion Ġvideo Ġfullscreen ĊĊĠĠĠ Ġfun Ġon WebView Detach () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( custom View Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Hide Custom View () ĊĠĠĠ Ġ} Ċ } Ċ