package Ġcom . dro is ys . htm led itor Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . net . Connectivity Manager Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View . On Touch Listener Ċ import Ġandroid . webkit .* Ċ import Ġandroid . widget . ProgressBar Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġcom . google . android . material . button . Material Button ĊĊ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠwebView : ĠWebView ĊĠĠĠ Ġprivate Ġvar Ġm _ down X Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠprogressBar : ĠProgress Bar ĊĊĠĠĠ Ġval ĠSTORAGE _ PERMISSION _ CODE Ġ= Ġ 1 2 3 ĊĠĠĠ Ġprivate Ġval ĠFILE CH OO SER _ RESULT CODE Ġ= Ġ 1 ĊĠĠĠ Ġprivate Ġvar Ġm Upload Message : ĠValue Callback < Array < Uri >> ? Ġ= Ġnull Ċ // ĠĠĠ Ġprivate Ġval ĠREAD _ STORAGE _ PERMISSION _ REQUEST _ CODE : ĠInt Ġ= Ġ 1 0 0 Ċ // ĠĠĠ Ġprivate Ġvar Ġm FilePath Callback : ĠValue Callback < Array < Uri ?> ?> Ġ= ĠValue Callback Ġ{ Ġ} Ċ // ĠĠĠ Ġprivate Ġlateinit Ġvar Ġupload Message : ĠValue Callback < Uri ?> Ċ // ĠĠĠ Ġprivate Ġlateinit Ġvar ĠwebView : ĠWebView Ċ // ĠĠĠ Ġprivate Ġval ĠFILE _ CH OO SER _ RESULT _ CODE Ġ= Ġ 1 Ċ // ĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Camera Photo Path : ĠString Ċ // Ċ //// ĠĠĠ Ġvar ĠwebView : ĠWebView ? Ġ= Ġnull Ċ // ĠĠĠ Ġprivate Ġvar Ġm _ down X Ġ= Ġ 0 f Ċ // ĠĠĠ Ġprivate Ġval ĠprogressBar : ĠProgress Bar ? Ġ= Ġnull Ċ // Ċ // ĠĠĠ Ġprivate Ġval ĠSTORAGE _ PERMISSION _ CODE Ġ= Ġ 1 2 3 Ċ // ĠĠĠ Ġprivate Ġval ĠFILE CH OO SER _ RESULT CODE Ġ= Ġ 1 Ċ // ĠĠĠ Ġprivate Ġvar Ġm Upload Message : ĠValue Callback < Array < Uri >> ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Suppress Lint (" Set JavaScript Enabled ") ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġ// set ContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ ĠwebView Ġ= ĠfindViewById ( R . id . web View ) ĊĠĠĠĠĠĠĠ ĠprogressBar Ġ= ĠfindViewById ( R . id . progress Bar ) ĊĠĠĠĠĠĠĠ Ġget Internet Status () ĊĠĠĠĠĠĠĠ ĠwebView . load Url (" file :/// android _ asset / doc . html ") ĊĠĠĠĠĠĠĠ Ġinit WebView () Ċ // ĠĠĠĠĠĠĠ Ġval Ġsettings Ġ= ĠwebView . settings Ċ // ĠĠĠĠĠĠĠ Ġsettings . dom Storage Enabled Ġ= Ġtrue Ċ // ĠĠĠĠĠĠĠ Ġsettings . java Script Enabled Ġ= Ġtrue Ċ // ĠĠĠĠĠĠĠ Ġsettings . dom Storage Enabled Ġ= Ġtrue Ċ // ĠĠĠĠĠĠĠ Ġsettings . load With Overview Mode Ġ= Ġtrue Ċ // ĠĠĠĠĠĠĠ Ġsettings . allow File Access Ġ= Ġtrue Ċ //// ĠĠĠĠĠĠĠ Ġsettings . use Wide View Port Ġ= Ġtrue Ċ //// ĠĠĠĠĠĠĠ Ġsettings . built In Zoom Controls Ġ= Ġtrue Ċ //// ĠĠĠĠĠĠĠ Ġsettings . display Zoom Controls Ġ= Ġfalse Ċ //// ĠĠĠĠĠĠĠ Ġsettings . set Support Zoom ( true ) Ċ // ĠĠĠĠĠĠĠ Ġsettings . default Text Encoding Name Ġ= Ġ" utf - 8 " Ċ // ĠĠĠĠĠĠĠ ĠwebView . web View Client Ġ= Ġobject Ġ: ĠWebView Client () Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġshould Override Url Loading ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview : ĠWebView , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest : ĠWeb Resource Request Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . load Url ( request . url . toString ()) Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . clear History () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ ĠwebView . set Web Chrome Client ( object Ġ: ĠWeb Chrome Client () Ġ{ Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Requires Api ( api Ġ= ĠBuild . VERSION _ CODES . LO L LI POP ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Show FileChooser ( web View : ĠWebView ?, ĠfilePath Callback : ĠValue Callback < Array < Uri ?> ? >, Ġfile Chooser Params : ĠFile Chooser Params ): ĠBoolean Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= Ġfile Chooser Params . create Intent () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( check Permission For Read Ex ter tal Storage ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠFILE _ CH OO SER _ RESULT _ CODE ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permission For Read Ex ter tal Storage () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠActivity NotFoundException ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , Ġ" Cannot Ġopen Ġfile Ġcho oser ", ĠToast . LENGTH _ LONG ). show () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ}) Ċ // Ċ // ĠĠĠĠĠĠĠ ĠwebView . load Url (" file :/// android _ asset / doc . html ") ĊĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ!== ĠFILE _ CH OO SER _ RESULT _ CODE Ġ|| Ġm FilePath Callback Ġ== Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġvar Ġresults : ĠArray < Uri ?> ? Ġ= Ġnull Ċ // Ċ // ĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthat Ġthe Ġresponse Ġis Ġa Ġgood Ġone Ċ // Ċ // ĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthat Ġthe Ġresponse Ġis Ġa Ġgood Ġone Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data Ġ== Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthere Ġis Ġnot Ġdata , Ġthen Ġwe Ġmay Ġhave Ġtaken Ġa Ġphoto Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults Ġ= ĠarrayOf ( Uri . parse ( m Camera Photo Path )) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata String : ĠString ? Ġ= Ġdata . data String Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data String Ġ!= Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults Ġ= ĠarrayOf ( Uri . parse ( data String )) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġm FilePath Callback . on Receive Value ( results ) Ċ // ĠĠĠĠĠĠĠ Ġprintln (" RES ult s :") Ċ // ĠĠĠĠĠĠĠ Ġprintln ( getPath ( results ?. get ( 0 ))) Ċ // ĠĠĠĠĠĠĠ Ġm FilePath Callback Ġ= ĠValue Callback Ġ{ Ġ} Ċ // ĠĠĠĠĠĠĠ ĠwebView . reload () Ċ //// ĠĠĠĠĠĠĠ ĠwebView . load Url ( getPath ( results ?. get ( 0 ))) Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġfun ĠgetPath ( pick ed Uri : ĠUri ?): String Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġvar Ġimage Path Ġ= Ġ"" Ċ // ĠĠĠĠĠĠĠ Ġval Ġimg Data Ġ= ĠarrayOf ( Media Store . Images . Media . DATA ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġimg Cursor : ĠCursor ? Ġ= Ġmanaged Query ( pick ed Uri , Ġimg Data , Ġnull , Ġnull , Ġnull ) Ċ // ĠĠĠĠĠĠĠ Ġimage Path Ġ= Ġif Ġ( img Cursor Ġ!= Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex : ĠInt Ġ= Ġimg Cursor . getColumnIndex OrThrow ( Media Store . Images . Media . DATA ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġimg Cursor . moveTo First () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġimg Cursor . getString ( index ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ġelse Ġpicked Uri ?. path !! Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġimage Path Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġfun Ġcheck Permission For Read Ex ter tal Storage (): ĠBoolean Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult : ĠInt Ġ= Ġcheck Self Permission ( Manifest . permission . READ _ EXTERNAL _ STORAGE ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult Ġ== ĠPackage Manager . PERMISSION _ GRAN TED Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġfalse Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ@ Throws ( Exception :: class ) Ċ // ĠĠĠ Ġfun Ġrequest Permission For Read Ex ter tal Storage () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġtry Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , ĠarrayOf ( Manifest . permission . READ _ EXTERNAL _ STORAGE ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREAD _ STORAGE _ PERMISSION _ REQUEST _ CODE ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Click ableView Accessibility ", Ġ" Set JavaScript Enabled ") ĊĠĠĠ Ġprivate Ġfun Ġinit WebView () Ġ{ ĊĠĠĠĠĠĠĠ ĠwebView . set Web Chrome Client ( My Web Chrome Client ( this )) ĊĠĠĠĠĠĠĠ ĠwebView . web View Client Ġ= Ġobject Ġ: ĠWebView Client () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Started ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview : ĠWebView , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfav icon : ĠBitmap ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Page Started ( view , Ġurl , Ġfav icon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate Options Menu () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġshould Override Url Loading ( view : ĠWebView , Ġurl : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . load Url ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Finished ( view : ĠWebView , Ġurl : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Page Finished ( view , Ġurl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Swipe Refresh Layout . set Refresh ing ( false ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate Options Menu () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Received Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview : ĠWebView , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest : ĠWeb Resource Request , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror : ĠWeb Resource Error ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Received Error ( view , Ġrequest , Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Swipe Refresh Layout . set Refresh ing ( false ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate Options Menu () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠwebView . clear Cache ( true ) ĊĠĠĠĠĠĠĠ ĠwebView . clear History () ĊĠĠĠĠĠĠĠ ĠwebView . settings . java Script Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠwebView . is Horizontal ScrollBar Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠwebView . setOn Touch Listener ( On Touch Listener Ġ{ Ġv , Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . pointer Count Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Multi Ġtouch Ġdetected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On Touch Listener Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsave Ġthe Ġx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm _ down X Ġ= Ġevent . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE , ĠMotion Event . ACTION _ CANCEL , ĠMotion Event . ACTION _ UP Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġx Ġso Ġthat Ġit Ġdoesn 't Ġmove ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . setLocation ( m _ down X , Ġevent . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠMy Web Chrome Client ( var Ġcontext : ĠContext ) Ġ: ĊĠĠĠĠĠĠĠ ĠWeb Chrome Client () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Show FileChooser ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView : ĠWebView , ĠfilePath Callback : ĠValue Callback < Array < Uri >>, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Chooser Params : ĠFile Chooser Params ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( context Ġas ĠMainActivity ). m Upload Message Ġ= ĠfilePath Callback ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( context Ġas ĠMainActivity ). request Storage Permission () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Request ing Ġpermission ĊĠĠĠ Ġprivate Ġfun Ġrequest Storage Permission () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . READ _ EXTERNAL _ STORAGE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ=== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen File Explorer () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( Activity Compat . should Show Request Permission R ationale ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . READ _ EXTERNAL _ STORAGE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// If Ġthe Ġuser Ġhas Ġdenied Ġthe Ġpermission Ġpreviously Ġyour Ġcode Ġwill Ġcome Ġto Ġthis Ġblock ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Here Ġyou Ġcan Ġexplain Ġwhy Ġyou Ġneed Ġthis Ġpermission ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Explain Ġhere Ġwhy Ġyou Ġneed Ġthis Ġpermission ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// And Ġfinally Ġask Ġfor Ġthe Ġpermission ĊĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Manifest . permission . READ _ EXTERNAL _ STORAGE ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSTORAGE _ PERMISSION _ CODE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ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 ) ĊĊĠĠĠĠĠĠĠ Ġ// Checking Ġthe Ġrequest Ġcode Ġof Ġour Ġrequest ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠSTORAGE _ PERMISSION _ CODE ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// If Ġpermission Ġis Ġgranted ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results . size Ġ> Ġ 0 Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen File Explorer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Display ing Ġa Ġtoast Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Permission Ġgranted Ġnow Ġyou Ġcan Ġread Ġthe Ġstorage ", ĠToast . LENGTH _ LONG ). show (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Display ing Ġanother Ġtoast Ġif Ġpermission Ġis Ġnot Ġgranted Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" O ops Ġyou Ġjust Ġdenied Ġthe Ġpermission ", ĠToast . LENGTH _ LONG ). show (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen File Explorer () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġi Ġ= ĠIntent ( Intent . ACTION _ GET _ CONTENT ) ĊĠĠĠĠĠĠĠ Ġi . add Category ( Intent . CATEGORY _ OP ENABLE ) ĊĠĠĠĠĠĠĠ Ġi . type Ġ= Ġ" image /* " ĊĠĠĠĠĠĠĠ Ġthis @ MainActivity . startActivity For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . create Chooser ( i , Ġ" File ĠCho oser "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFILE CH OO SER _ RESULT CODE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĠresultCode : ĠInt , ĊĠĠĠĠĠĠĠ Ġdata : ĠIntent ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠFILE CH OO SER _ RESULT CODE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġm Upload Message ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intent Ġ== Ġnull Ġ|| ĠresultCode Ġ!= ĠRESULT _ OK ) Ġnull Ġelse Ġintent . data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Upload Message ?. on Receive Value ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Upload Message ?. on Receive Value ( array Of ( result )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Upload Message Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Internet Status (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcm Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget System Service ( Context . CONNECT IVITY _ SERVICE ) Ġas ĠConnect ivity Manager ĊĠĠĠĠĠĠĠ Ġval Ġactive Network Ġ= Ġcm . active Network Info ĊĠĠĠĠĠĠĠ Ġval Ġis Connected Ġ= Ġactive Network Ġ!= Ġnull Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Network . isConnected Or Connecting ĊĠĠĠĠĠĠĠ Ġif Ġ(! isConnected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// show Ġno Ġinternet Ġdialog ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdf Ġ= ĠD f ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdf . show No Internet Dialog () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġis Connected ĊĠĠĠ Ġ} ĊĊĠĠ Ġ/* Ġfun ĠonClick ( view : ĠView ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġview Ġas ĠMaterial Button ĊĊĠĠĠĠĠĠĠ ĠwebView . evaluate Javascript ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"( function () Ġ{ Ġreturn Ġ(' < html >'+ document . getElementsByTagName (' html ')[ 0 ]. innerHTML +'</ html >'); Ġ})(); " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcode Ġhere ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġhtml Ġ-> ĠLog . d (" HTML _ CODE ", Ġhtml ) Ġ} ĊĠĠĠ Ġ}*/ Ċ } Ċ