package Ġres on ance . http . http downloader . activities Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Activity NotFoundException Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . preference . Preference Manager Ċ import Ġandroid . view . View Ċ import Ġandroid . webkit . Cookie Manager Ċ import Ġandroid . webkit . Web Storage Ċ import Ġandroid . widget . Adapter View Ċ import Ġandroid . widget . Array Adapter Ċ import Ġandroid . widget . EditText Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . document file . provider . Document File Ċ import Ġandroidx . room . Room Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġkotlinx . android . synt hetic . main . activity _ settings .* Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġorg . json . JSONObject Ċ import Ġres on ance . http . http downloader . R Ċ import Ġres on ance . http . http downloader . core .* Ċ import Ġres on ance . http . http downloader . helpers .* Ċ import Ġres on ance . http . http downloader . helpers . db . History DB Ċ import Ġjava . io .* Ċ import Ġjava . util . zip . Zip Entry Ċ import Ġjava . util . zip . Zip InputStream Ċ import Ġjava . util . zip . Zip OutputStream Ċ import Ġkotlin . concurrent . thread Ċ Ċ @ Suppress Lint (" SetText I 1 8 n ") Ċ class ĠSettings Activity Ġ: ĠParent Activity () Ġ{ ĊĠĠĠ Ġobject ĠBackup Options Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠAPP _ SETTINGS Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDOWN LOAD _ DATA Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠB ROW SER _ DATA Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġdb Files Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" bookmarks ", Ġ" bookmarks - wal ", Ġ" bookmarks - shm ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" browser History ", Ġ" browser History - wal ", Ġ" browser History - shm ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" saved Pages ", Ġ" saved Pages - wal ", Ġ" saved Pages - shm " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠF OLDER _ CH OOSE Ġ= Ġ 1 2 8 7 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠBACK UP _ CH OOSE Ġ= Ġ 1 2 8 8 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREST ORE _ CH OOSE Ġ= Ġ 1 2 8 9 ĊĠĠĠĠĠĠĠ Ġfun Ġstart ( activity : ĠActivity , Ġfrom : ĠString , Ġextras : ĠIntent ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( activity , ĠSettings Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextras ?. also Ġ{ Ġintent . put Extras ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( C . misc . from , Ġfrom ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . startActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġfrom Ġ= Ġ" MainActivity " ĊĠĠĠ Ġprivate Ġval Ġui Scope Ġ= ĠCor outine Scope ( Dispatch ers . Main ) ĊĠĠĠ Ġprivate Ġval Ġtimes List Ġ= ĠlistOf ( 1 0 0 0 L , Ġ 2 0 0 0 L , Ġ 3 0 0 0 L , Ġ 5 0 0 0 L , Ġ 8 0 0 0 L , Ġ 1 2 0 0 0 L ) ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ settings ) ĊĊĠĠĠĠĠĠĠ Ġuser Agent Spinner . adapter Ġ= ĠArray Adapter < String >( this , ĠR . layout . spinner _ item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġadd All ( userAgent Names ) Ġ} ĊĠĠĠĠĠĠĠ Ġupdate UserAgent Spinner () ĊĊĠĠĠĠĠĠĠ Ġ// int ention ally Ġkept Ġabove Ġset Event Listeners Ġto Ġavoid Ġsn ackBar ĊĠĠĠĠĠĠĠ Ġhistory Limit . setText ( Pref . history Limit . str ) ĊĠĠĠĠĠĠĠ Ġmax Parallel Downloads . setText ( Pref . max Parallel Downloads . str ) ĊĠĠĠĠĠĠĠ Ġauto Sort . isChecked Ġ= ĠPref . auto Sort File Join er ĊĠĠĠĠĠĠĠ Ġdisable Sound . isChecked Ġ= ĠPref . disable Notification Sound ĊĠĠĠĠĠĠĠ Ġappend Files . isChecked Ġ= ĠPref . append Conflict ing Files ĊĠĠĠĠĠĠĠ Ġblock Popup . isChecked Ġ= ĠPref . block Browser Popup ĊĠĠĠĠĠĠĠ Ġtoggle Download Prompt . isChecked Ġ= ĠPref . prompt Download Name ĊĠĠĠĠĠĠĠ Ġauto Retry . isChecked Ġ= ĠPref . auto Retry Downloads ĊĠĠĠĠĠĠĠ Ġshow Remaining Time . isChecked Ġ= ĠPref . show Remaining TimeIn Notification ĊĠĠĠĠĠĠĠ Ġignore Ssl Errors . isChecked Ġ= ĠPref . ignore Ssl Errors Ġ|| ĠBrowser . ignore Ssl Errors For This Session ĊĠĠĠĠĠĠĠ Ġprefer Desktop Mode . isChecked Ġ= ĠPref . prefer Desktop Mode Ġ&& Ġtrue ĊĠĠĠĠĠĠĠ Ġupdate Speed Limit Text ( Pref . speed Limit ) ĊĠĠĠĠĠĠĠ Ġfrom Ġ= Ġintent ?. getString Extra ( C . misc . from ) Ġ?: Ġ" MainActivity " ĊĊĠĠĠĠĠĠĠ Ġset Event Listeners () ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! Pref . use Internal ) Ġset Folder Name ( Pref . download Location ) ĊĠĠĠĠĠĠĠ Ġhome Page . setText ( Pref . browser Home ) ĊĊĠĠĠĠĠĠĠ Ġrefresh Spinner Info . setOnClickListener Ġ{ Ġrefresh Interval Info () Ġ} ĊĠĠĠĠĠĠĠ Ġalways Desktop Mode . setOnClickListener Ġ{ Ġprefer Desktop Mode () Ġ} ĊĠĠĠĠĠĠĠ Ġignore Ssl Errors Parent . setOnClickListener Ġ{ Ġignore Ssl Errors () Ġ} ĊĠĠĠĠĠĠĠ Ġup . setOnClickListener Ġ{ Ġup () Ġ} ĊĠĠĠĠĠĠĠ Ġdown . setOnClickListener Ġ{ Ġdown () Ġ} ĊĠĠĠĠĠĠĠ Ġlimit Speed . setOnClickListener Ġ{ Ġlimit Download Speed () Ġ} ĊĠĠĠĠĠĠĠ Ġdata Backup Layout . setOnClickListener Ġ{ Ġshow Backup Restore Dialog () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( sn ackBar Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss Sn ackBar () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġbrowser Ġ& Ġmain Activity Ġare Ġsingle Instance Ġ( see ĠManifest . xml ) Ġ& Ġwill Ġalways Ġbe Ġres umed ĊĠĠĠĠĠĠĠ Ġval Ġintent : ĠIntent Ġ= Ġwhen Ġ( from ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMainActivity :: class . java . name Ġ-> ĠIntent ( this , ĠMainActivity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBrowser :: class . java . name Ġ-> ĠIntent ( this , ĠBrowser :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntro Activity :: class . java . name Ġ-> ĠIntent ( this , ĠIntro Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSimple Activity :: class . java . name Ġ-> ĠIntent ( this , ĠSimple Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed (); Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġintent . flags Ġ= ĠIntent . FLAG _ ACTIVITY _ RE ORDER _ TO _ FRONT ĊĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġmax Parallel Downloads . setText ( Pref . max Parallel Downloads . str ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Pref . stream Mode Dialog Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠArray Adapter < String >( this , Ġandroid . R . layout . simple _ dropdown _ item _ 1 line ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . addAll (" 1 Ġsec ", Ġ" 2 Ġsec ", Ġ" 3 Ġsec ", Ġ" 5 Ġsec ", Ġ" 8 Ġsec ", Ġ" 1 2 Ġsec ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Spinner . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Spinner . setSelection ( times List . indexOf ( Pref . stream Refresh Delay )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Refresh Layout . set G one () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Refresh Line . set G one () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġchild To Scroll To Ġ= Ġintent ?. getInt Extra ( C . misc . child To Scroll To , Ġ 0 ) Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠ Ġsc roller . post Ġ{ Ġsc roller . smooth Scroll To ( 0 , Ġchild To Scroll To ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate UserAgent Spinner () Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġuser Agent Spinner . setSelection ( userAgent Names . indexOf ( Pref . userAgent Name )) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġuser Agent Spinner . setSelection ( 0 ) ĊĠĠĠĠĠĠĠ ĠPref . userAgent Name Ġ= Ġuser Agent Names [ 0 ] ĊĠĠĠĠĠĠĠ ĠPref . custom UserAgent Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Event Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġset UserAgent ( name : ĠString , Ġvalue : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPref . userAgent Name Ġ= Ġname ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPref . custom UserAgent Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Sn ackBar (" Browser Ġenvironment Ġwill Ġbe Ġ$ name Ġfor Ġnewly Ġopened Ġtabs ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġshow Remaining Time . setOn Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPref . show Remaining TimeIn Notification Ġ= Ġis Checked ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġauto Retry . setOn Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isChecked ) Ġshow Sn ackBar (" Failed Ġdownloads Ġwill Ġautomatically Ġbe Ġretried Ġwhen Ġnetwork Ġconnection Ġis Ġrestored ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġshow Sn ackBar (" Downloads Ġwon 't Ġbe Ġautomatically Ġretried Ġanymore ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPref . auto Retry Downloads Ġ= Ġis Checked ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġuser Agent Spinner . on ItemSelected Listener Ġ= Ġobject Ġ: ĠAdapter View . On ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġis First Time Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( parent : ĠAdapter View < *> ?) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Inf late Params ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( a : ĠAdapter View < *> ?, Ġb : ĠView ?, Ġindex : ĠInt , Ġc : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is First Time ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis First Time Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġuser Agent Names [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name Ġ! in Ġuser Agents ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġlayout Inflater . inflate ( R . layout . dialog _ edit _ text _ single _ line , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġedit Text Ġ= Ġview . findViewById < EditText >( R . id . edit Text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit Text . set Hint ( R . string . sample _ user _ agent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit Text . setText ( Pref . custom UserAgent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this @ Settings Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" User ĠAgent : Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setView ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button (" Apply ") Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġedit Text . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit Text . selectAll () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( text . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Sn ackBar (" User ĠAgent Ġcannot Ġbe Ġblank . ĠChanges Ġdiscarded ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate UserAgent Spinner () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġset UserAgent ( name , Ġtext ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button (" Cancel ") Ġ{ Ġ_, Ġ_ Ġ-> Ġupdate UserAgent Spinner () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setOn Cancel Listener Ġ{ Ġupdate UserAgent Spinner () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setOn Dismiss Listener Ġ{ Ġupdate UserAgent Spinner () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġset UserAgent ( name , Ġuser Agents [ name ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrefresh Spinner . on ItemSelected Listener Ġ= Ġobject Ġ: ĠAdapter View . On ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( parent : ĠAdapter View < *> ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( a : ĠAdapter View < *> ?, Ġb : ĠView ?, Ġposition : ĠInt , Ġc : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPref . stream Refresh Delay Ġ= Ġtimes List [ position ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmax Parallel Downloads . setOn TextChanged Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġ{ Ġit . str . toInt () Ġ} Ġotherwise Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Sn ackBar (" Parallel Ġdownloads ' Ġcount Ġcannot Ġbe Ġzero ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Parallel Downloads . setText (" 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Parallel Downloads . setSelection ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĠPref . max Parallel Downloads Ġ= Ġcount ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġhome Page . setOn TextChanged Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPref . browser Home Ġ= Ġit . str ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġhistory Limit . setOn TextChanged Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġ{ Ġit . str . toInt () Ġ} Ġotherwise Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ== Ġ 0 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Sn ackBar (" Your Ġbrowser Ġwon 't Ġstore Ġhistory Ġwhen Ġlimit Ġis Ġzero ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ> Ġ 5 0 0 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhistory Limit . setText (" 5 0 0 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhistory Limit . setSelection ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOn TextChanged Listener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ> Ġ 1 0 0 0 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Sn ackBar (" Setting Ġthis Ġlimit Ġtoo Ġmuch Ġcauses ĠHistory Ġto Ġhang Ġin Ġlow Ġend Ġdevices ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPref . history Limit Ġ= Ġcount ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġblock Popup . setOn Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isChecked ) Ġshow Sn ackBar (" Web sites Ġwon 't Ġbe Ġallowed Ġto Ġlaunch Ġa Ġnew Ġtab ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġshow Sn ackBar (" Web sites Ġare Ġallowed Ġto Ġlaunch Ġnew Ġtabs ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPref . block Browser Popup Ġ= Ġis Checked ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtoggle Download Prompt . setOn Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isChecked ) Ġshow Sn ackBar (" Download Ġlocation Ġwill Ġalways Ġbe Ġasked Ġwhen Ġstarting Ġa Ġdownload Ġfrom Ġbrowser ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġshow Sn ackBar (" Files Ġwill Ġdirectly Ġstart Ġdownload Ġto Ġdefault Ġfolder ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPref . prompt Download Name Ġ= Ġis Checked ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprefer Desktop Mode . setOn Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isChecked ) Ġshow Sn ackBar (" All Ġwebsites Ġwill Ġbe Ġloaded Ġin Ġdesktop Ġmode ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġshow Sn ackBar (" Web sites Ġwill Ġbe Ġlaunched Ġin Ġmobile Ġfriendly Ġmode ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPref . prefer Desktop Mode Ġ= Ġis Checked ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġignore Ssl Errors . setOn Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Ignore ĠSSL Ġerrors ?") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" Any ĠSSL Ġsecurity Ġerrors Ġwill Ġbe Ġignored Ġwhile Ġloading Ġpage . ĠThis Ġmight Ġmake Ġyou Ġvulner able Ġto Ġattacks ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button (" Ignore Ġanyway Ġ( unsafe )") Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPref . ignore Ssl Errors Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button (" Remain Ġsafe ") Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPref . ignore Ssl Errors Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġignore Ssl Errors . isChecked Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Neutral Button (" Ignore Ġfor Ġthis Ġsession ") Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBrowser . ignore Ssl Errors For This Session Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĠPref . ignore Ssl Errors Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġauto Sort . setOn Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Sn ackBar ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Files Ġwon 't Ġbe Ġsorted Ġbefore Ġadding Ġto Ġfile Ġjoin er .< br /> " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" You Ġmay Ġhave Ġto Ġmanually Ġre - order Ġitems Ġbefore Ġjoining " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġshow Sn ackBar (" HTTP - Downloader Ġwill Ġsort Ġfiles Ġ( wh ose Ġnames Ġare Ġof Ġdefault Ġformat ) Ġbefore Ġadding ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPref . auto Sort File Join er Ġ= Ġis Checked ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdisable Sound . setOn Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isChecked ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Sn ackBar (" You Ġwon 't Ġbe Ġnotified Ġwhen Ġyour Ġdownload Ġfails Ġor Ġsucceeds ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPref . disable Notification Sound Ġ= Ġis Checked ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġappend Files . setOn Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Sn ackBar ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" When Ġa Ġdownload Ġis Ġstarted , Ġand Ġa Ġfile Ġwith Ġsame Ġname Ġexists , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" the Ġdownload Ġwill Ġbe Ġrequested Ġfrom Ġend Ġof Ġexisting Ġfile Ġ& Ġwill Ġbe Ġappended Ġto Ġit " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Sn ackBar ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" When Ġa Ġdownload Ġis Ġstarted , Ġand Ġa Ġfile Ġwith Ġsame Ġname Ġexists , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" the Ġdownload Ġwill Ġautomatically Ġbe Ġrenamed ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPref . append Conflict ing Files Ġ= Ġis Checked ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata ?. data ?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF OLDER _ CH OOSE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Resolver . take Persist able Uri Permission ( it , Ġdata . get RW Flags ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Folder Name ( it . str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPref . download Location Ġ= Ġit . str ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPref . use Internal Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBACK UP _ CH OOSE Ġ-> Ġbackup DataTo ( content Resolver . open OutputStream ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREST ORE _ CH OOSE Ġ-> Ġrestore Data From ( content Resolver . open InputStream ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġshow Sn ackBar (" Invalid Ġoutput Ġdestination ", Ġduration Ġ= ĠSn ackbar . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġshow Sn ackBar (" No Ġoutput Ġdestination Ġselected ", Ġduration Ġ= ĠSn ackbar . LENGTH _ LONG ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġchange Download Folder ( view : ĠView ) Ġ= ĊĠĠĠĠĠĠĠ Ġlaunch File Picker ( Intent . ACTION _ OPEN _ DOCUMENT _ TREE , ĠF OLDER _ CH OOSE ) ĊĊĠĠĠ Ġprivate Ġfun Ġdown () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġmax Parallel Downloads . text . str ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġ{ Ġtext . toInt () Ġ} Ġotherwise Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġcount Text Ġ= Ġ( count Ġ- Ġ 1 ). str ĊĠĠĠĠĠĠĠ Ġmax Parallel Downloads . setText ( count Text ) ĊĠĠĠĠĠĠĠ Ġmax Parallel Downloads . setSelection ( count Text . length ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġup () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġmax Parallel Downloads . text . str ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġ{ Ġtext . toInt () Ġ} Ġotherwise Ġ 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( count Ġ== Ġ 9 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Sn ackBar (" Maximum Ġparallel Ġdownloads Ġcannot Ġbe Ġmore Ġthan Ġ 9 9 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcount Text Ġ= Ġ( count Ġ+ Ġ 1 ). str ĊĠĠĠĠĠĠĠ Ġmax Parallel Downloads . setText ( count Text ) ĊĠĠĠĠĠĠĠ Ġmax Parallel Downloads . setSelection ( count Text . length ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġallow Auto Sort ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġauto Sort . isChecked Ġ= Ġ! auto Sort . isChecked ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdisable Not if Sound ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdisable Sound . isChecked Ġ= Ġ! disable Sound . isChecked ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġappend File ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġappend Files . isChecked Ġ= Ġ! append Files . isChecked ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Reset Ġsettings ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" Are Ġyou Ġsure Ġyou Ġwant Ġto Ġreset Ġsettings Ġto Ġdefault ?") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button (" Yes ") Ġ{ Ġd , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" Settings Activity ", Ġ" reset ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPref . use Internal Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPref . download Location Ġ= ĠC . INTERNAL _ DOWNLOAD _ FOLDER . absolute Path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPref . max Parallel Downloads Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPref . browser Home Ġ= ĠC . HOME _ PAGE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPref . history Limit Ġ= Ġ 5 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPref . auto Sort File Join er Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPref . disable Notification Sound Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPref . append Conflict ing Files Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart ( this , Ġfrom ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button (" Cancel ") Ġ{ Ġd , Ġ_ Ġ-> Ġd . dismiss () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġknow More ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog (" Settings Activity ", Ġ" know More ") ĊĠĠĠĠĠĠĠ ĠBrowser . start ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Ġ= ĠBrowser . Companion . From Options . SETTINGS , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġ" https :// res on ance 0 0 x 0 . github . io / http - downloader /", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= ĠC . misc . start Download ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhelp ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog (" Settings Activity ", Ġ" help ") ĊĠĠĠĠĠĠĠ ĠBrowser . start ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Ġ= ĠBrowser . Companion . From Options . SETTINGS , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġ" https :// res on ance 0 0 x 0 . github . io / http - downloader / faq ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= ĠC . misc . start Download ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreport Bug ( view : ĠView ) Ġ= Ġshow Confirm Send Mail Alert Ġ{ ĊĠĠĠĠĠĠĠ Ġlog (" Settings Activity ", Ġ" report Bug ") ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ SEND TO ) ĊĠĠĠĠĠĠĠ Ġintent . type Ġ= Ġ" message / rfc 8 2 2 " ĊĠĠĠĠĠĠĠ Ġintent . data Ġ= ĠUri . parse ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" mailto : res on ance 0 0 x 0 @ gmail . com " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"? subject = Bug % 2 FS uggest ion % 2 0 in % 2 0 HTTP - Downloader " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġsilently Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexternal File Ġ= Ġget Database Path (" logs "). copy To ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Ġ= ĠFile ( get External Files Dir ( null ), Ġ" logs "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverwrite Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Intent . EXTRA _ STREAM , ĠUri . from File ( external File )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent . create Chooser ( intent , Ġ" Send Ġemail ... ")) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠActivity NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Sn ackBar (" Please Ġinstall Ġan Ġemail Ġapp Ġand Ġtry Ġagain ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Folder Name ( uri Str : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUri . parse ( uri Str ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfolder Name . text Ġ= Ġ"< font Ġcolor = red > Error </ font >". as Html () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfolder Ġ= ĠDocument File . from Tree Uri ( this , Ġuri ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( folder . isFile Ġ|| Ġfolder . name Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġfolder Name . text Ġ= Ġ"${ folder . name }/ " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear B rowsing Data ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselected Ġ= Ġmutable ListOf ( 0 , Ġ 1 ) ĊĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Clear Ġdata ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Multi Choice Items ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf (" History ", Ġ" Cache ", Ġ" Cookies ", Ġ" Site Ġstorage "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboolean ArrayOf ( true , Ġtrue , Ġfalse , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġ_, Ġwhich , Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isChecked ) Ġselected . add ( which ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġselected . remove ( which ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button (" Clear ") Ġ{ Ġd , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" Settings Activity ", Ġ" clear B rowsing Data : Ġ$ selected ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( 0 Ġin Ġselected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoom . database Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHistory DB :: class . java , Ġ" browser History " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). build (). conn (). clear All () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( 1 Ġin Ġselected ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( get Dir (" webview ", ĠContext . MODE _ PRIVATE ), Ġ" Cache "). delete Re cursively () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( 3 Ġin Ġselected ) ĠWeb Storage . getInstance (). delete All Data () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( 2 Ġin Ġselected ) ĠCookie Manager . getInstance (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove All Cookies ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflush () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Sn ackBar (" Cle ared Ġall Ġdata ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button (" cancel ") Ġ{ Ġd , Ġ_ Ġ-> Ġd . dismiss () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġblock Browser Popup ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġblock Popup . isChecked Ġ= Ġ! block Popup . isChecked ĊĠĠĠĠĠĠĠ ĠPref . block Browser Popup Ġ= Ġblock Popup . isChecked ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprefer Desktop Mode () Ġ{ ĊĠĠĠĠĠĠĠ Ġprefer Desktop Mode . isChecked Ġ= Ġ! prefer Desktop Mode . isChecked ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġignore Ssl Errors () Ġ{ ĊĠĠĠĠĠĠĠ Ġignore Ssl Errors . isChecked Ġ= Ġ! ignore Ssl Errors . isChecked ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Downloads ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Are Ġyou Ġsure ?") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" This Ġwill Ġclear Ġall Ġyour Ġdownloads Ġfrom Ġlist .< br > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|< b > It Ġis Ġrecommended Ġto Ġstop Ġall Ġongoing Ġdownloads Ġbefore Ġyou Ġclear Ġthem </ b >< br > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|< font Ġcolor = red > Note : ĠThis Ġaction Ġcannot Ġbe Ġund one </ font > """. trim Margin (). as Html () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button (" clear ") Ġ{ Ġd , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfigs Folder ( this @ Settings Activity ). list Files ()?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ Ġit . delete () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Sn ackBar (" All Ġdownloads Ġcleared ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button (" cancel ") Ġ{ Ġd , Ġ_ Ġ-> Ġd . dismiss () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh Interval Info () Ġ{ ĊĠĠĠĠĠĠĠ ĠBrowser . start ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Ġ= ĠBrowser . Companion . From Options . SETTINGS , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġ" https :// res on ance 0 0 x 0 . github . io / http - downloader / faq " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"# what - is - continuous - reconnect - mode ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= ĠC . misc . start Download ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtoggle Download Prompt ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtoggle Download Prompt . isChecked Ġ= Ġ! toggle Download Prompt . isChecked ĊĠĠĠĠĠĠĠ ĠPref . prompt Download Name Ġ= Ġtoggle Download Prompt . isChecked ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlimit Download Speed () Ġ= Ġshow Speed Limit Dialog ( Pref . speed Limit ) Ġ{ ĊĠĠĠĠĠĠĠ ĠPref . speed Limit Ġ= Ġit ĊĠĠĠĠĠĠĠ ĠTransfer . global Speed Limit Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġupdate Speed Limit Text ( it ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Speed Limit Text ( it : ĠInt ) Ġ= Ġif Ġ( it Ġ!= ĠInt . MAX _ VALUE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlimit Speed Txt . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Maximum Ġdownload Ġspeed : Ġ${ format Size ( Pref . speed Limit . to Long (), Ġ 2 ) }/ s " ĊĠĠĠĠĠĠĠ Ġlimit Speed Txt . setTextColor ( Context Compat . getColor ( this , ĠR . color . color Accent _ light )) ĊĠĠĠĠĠĠĠ Ġlimit Speed I co . setImage Resource ( R . drawable . speed _ limited ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġlimit Speed Txt . setText ( R . string . limit _ download _ speed ) ĊĠĠĠĠĠĠĠ Ġlimit Speed Txt . setTextColor ( Color . BLACK ) ĊĠĠĠĠĠĠĠ Ġlimit Speed I co . setImage Resource ( R . drawable . speed ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġauto Retry ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġauto Retry . isChecked Ġ= Ġ! auto Retry . isChecked ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Backup Restore Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġshow Backup Dialog () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected Options Ġ= ĠPref . items To Backup ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Items Ġto Ġbackup ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Multi Choice Items ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf (" App Ġsettings ", Ġ" Download Ġitems ", Ġ" Browser Ġdata "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Options ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġ_, Ġindex , Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Options [ index ] Ġ= Ġis Checked ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPref . items To Backup Ġ= Ġselected Options ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button (" Backup ") Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch File Picker ( Intent . ACTION _ CREATE _ DOCUMENT , ĠBACK UP _ CH OOSE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button (" Cancel ") Ġ{ Ġ_, Ġ_ Ġ-> Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġchoose Restore File () Ġ= Ġlaunch File Picker ( Intent . ACTION _ OPEN _ DOCUMENT , ĠREST ORE _ CH OOSE ) ĊĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" This Ġwill Ġlet Ġyou Ġbackup / restore Ġyour Ġdownload Ġdata Ġand Ġapp Ġsettings Ġto Ġa Ġportable Ġzip Ġfile .< br /> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠYou Ġcan Ġrestore Ġthis Ġdata Ġfrom Ġany Ġdevice Ġwith Ġ< b > HTTP - Downloader Ġ 0 . 4 . 9 Ġor Ġlater </ b >< br />< br /> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ< font Ġcolor =' red '> It Ġis Ġrecommended Ġto Ġkeep Ġthe Ġbackup Ġfile Ġconf idential Ġas ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġit Ġmight Ġcontain Ġsensitive Ġuser Ġdata </ font > """. trim Margin (). as Html () ĊĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Backup / Restore ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( msg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button (" Backup ") Ġ{ Ġ_, Ġ_ Ġ-> Ġshow Backup Dialog () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button (" Restore ") Ġ{ Ġ_, Ġ_ Ġ-> Ġchoose Restore File () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Neutral Button (" Cancel ") Ġ{ Ġ_, Ġ_ Ġ-> Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbackup DataTo ( op : ĠOutputStream ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( op Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġio Scope Ġ= ĠCor outine Scope ( Dispatch ers . IO ) ĊĠĠĠĠĠĠĠ Ġio Scope . start Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( backup Sync ( op )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui Scope . launch Ġ{ Ġshow Sn ackBar (" Backup Ġsuccessful ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġui Scope . launch Ġ{ Ġshow Sn ackBar (" Failed Ġto Ġbackup Ġdata ") Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbackup Sync ( op : ĠOutputStream ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems To Backup Ġ= ĠPref . items To Backup ĊĠĠĠĠĠĠĠĠĠĠĠ ĠZip OutputStream ( op ). use Ġ{ Ġzip Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( items To Backup [ Backup Options . APP _ SETTINGS ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshared Pref Ġ= ĠPreference Manager . getDefault SharedPreferences ( this ). all ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsettings Ġ= ĠJSONObject () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( key Ġin ĠPref . key . values ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġshared Pref [ key . name ] Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings . put ( key . name , ĠJSONObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput (" value ", Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput (" type ", Ġvalue . java Class . simple Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzip . put Next Entry ( Zip Entry (" preferences . json ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzip . write ( settings . toString (). toByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( items To Backup [ Backup Options . DOWNLOAD _ DATA ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfigs Folder ( this ). list Files ()?. forEach Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzip . put Next Entry ( Zip Entry (" downloads /${ file . name } ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFileInputStream ( file ). use Ġ{ Ġit . copy To ( zip ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( items To Backup [ Backup Options . BROWSER _ DATA ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( files Dir . parent File , Ġ" databases "). list Files ()?. forEach Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file . isFile Ġ&& Ġfile . name Ġin ĠBackup Options . db Files ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzip . put Next Entry ( Zip Entry (" databases /${ file . name } ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFileInputStream ( file ). use Ġ{ Ġit . copy To ( zip ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" Backup Ġdata ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrestore Data From ( ip : ĠInputStream ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( ip Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġio Scope Ġ= ĠCor outine Scope ( Dispatch ers . IO ) ĊĠĠĠĠĠĠĠ Ġio Scope . start Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( restore Sync ( ip )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui Scope . launch Ġ{ Ġshow Sn ackBar (" Data Ġrestored , Ġreboot Ġdevice Ġto Ġcomplete Ġthe Ġprocess ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġui Scope . launch Ġ{ Ġshow Sn ackBar (" Rest oring Ġdata Ġfailed , Ġno Ġchanges Ġwere Ġmade ") Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrestore Sync ( ip : ĠInputStream , Ġis Internal Restore : ĠBoolean Ġ= Ġfalse ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠwriteTo Pref ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor : ĠSharedPreferences . Editor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype : ĠString ĊĠĠĠĠĠĠĠ Ġ) Ġ= Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Integer " Ġ-> Ġeditor . put Int ( key , Ġvalue . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Long " Ġ-> Ġeditor . put Long ( key , Ġvalue . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Boolean " Ġ-> Ġeditor . put Boolean ( key , Ġvalue . to Boolean ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" String " Ġ-> Ġeditor . putString ( key , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Float " Ġ-> Ġeditor . put Float ( key , Ġvalue . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠRuntimeException (" Type Ġ$ type Ġis Ġnot Ġsupported Ġfor Ġrest oring ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcurrent Data Backup Ġ= ĠFile ( files Dir , Ġ" data _ backup . zip ") ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Internal Restore ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackup Sync ( File OutputStream ( current Data Backup )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠZip InputStream ( ip ). use Ġ{ Ġzip Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġentry Ġ= Ġzip . next Entry ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdb Folder Ġ= ĠFile ( files Dir . parent File , Ġ" databases ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfigs Path Ġ= Ġconfigs Folder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( entry Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry . name Ġ== Ġ" preferences . json " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entry . size Ġ> Ġ 1 0 0 . KB ) Ġthrow ĠRuntimeException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Over - sized Ġpreferences . json Ġ(${ format Size ( entry . size )} Ġ= Ġ${ entry . size } Ġbytes )" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw Data Ġ= ĠString ( zip . read Bytes ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠJSONObject ( raw Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzip . close Entry () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpref Ġ= ĠPreference Manager . getDefault SharedPreferences ( this ). edit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( key Ġin Ġdata . keys ()) Ġdata . getJSONObject ( key ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠwriteTo Pref ( pref , Ġkey , ĠgetString (" value "), ĠgetString (" type ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpref . apply () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry . name . startsWith (" databases /") Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġentry . name . substring (" databases / ". length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fileName Ġin ĠBackup Options . db Files ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFileOutputStream ( File ( db Folder , ĠfileName )). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entry . size Ġ> Ġ 5 . MB ) Ġthrow ĠRuntimeException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Over - sized Ġ$ fileName Ġ(${ format Size ( entry . size )} Ġ= Ġ${ entry . size } Ġbytes )" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzip . copy To ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzip . close Entry () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry . name . startsWith (" downloads /") Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġentry . name . substring (" downloads / ". length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fileName . matches ( Regex ("\\ d + \\. json "))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFileOutputStream ( File ( configs Path , ĠfileName )). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entry . size Ġ> Ġ 2 0 0 . KB ) Ġthrow ĠRuntimeException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Over - sized Ġ$ fileName Ġ(${ format Size ( entry . size )} Ġ= Ġ${ entry . size } Ġbytes )" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzip . copy To ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzip . close Entry () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Internal Restore ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrestore Sync ( FileInputStream ( current Data Backup ), Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry Ġ= Ġzip . next Entry ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Data Backup . delete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" Restore Ġdata ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Internal Restore ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrestore Sync ( FileInputStream ( current Data Backup ), Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlaunch File Picker ( ĊĠĠĠĠĠĠĠ Ġaction : ĠString , ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠĠĠĠĠ ĠmimeType : ĠString Ġ= Ġ" application / zip " ĊĠĠĠ Ġ) Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( action ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Ġ== ĠIntent . ACTION _ OPEN _ DOCUMENT Ġ|| Ġaction Ġ== ĠIntent . ACTION _ CREATE _ DOCUMENT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Category ( Intent . CATEGORY _ OP ENABLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠmimeType ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , Ġrequest Code ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Sn ackBar (" Can 't Ġlaunch Ġfile Ġpicker ", Ġduration Ġ= ĠSn ackbar . LENGTH _ SHORT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Remaining Time ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ ĠPref . show Remaining TimeIn Notification Ġ= Ġ! show Remaining Time . isChecked ĊĠĠĠĠĠĠĠ Ġshow Remaining Time . isChecked Ġ= ĠPref . show Remaining TimeIn Notification ĊĠĠĠ Ġ} Ċ } Ċ