package Ġcom . fib el att i . pin board . features . posts . presentation Ċ Ċ import Ġandroid . content . Activity NotFoundException Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . webkit . MimeType Map Ċ import Ġandroid . webkit . Web Resource Error Ċ import Ġandroid . webkit . Web Resource Request Ċ import Ġandroid . webkit . WebView Ċ import Ġandroid . webkit . WebView Client Ċ import Ġandroidx . annotation . Menu Res Ċ import Ġandroidx . fragment . app . activity ViewModels Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġcom . fib el att i . core . extension . g one Ċ import Ġcom . fib el att i . core . extension . navigate Back Ċ import Ġcom . fib el att i . core . extension . setOnClickListener Ċ import Ġcom . fib el att i . core . extension . share Text Ċ import Ġcom . fib el att i . core . extension . show Styled Dialog Ċ import Ġcom . fib el att i . core . extension . visible Ċ import Ġcom . fib el att i . core . extension . visible If Ċ import Ġcom . fib el att i . pin board . R Ċ import Ġcom . fib el att i . pin board . core . android . Connectivity Info Provider Ċ import Ġcom . fib el att i . pin board . core . android . base . Base Fragment Ċ import Ġcom . fib el att i . pin board . core . extension . show Ċ import Ġcom . fib el att i . pin board . core . extension . view Binding Ċ import Ġcom . fib el att i . pin board . databinding . Fragment Post Detail Binding Ċ import Ġcom . fib el att i . pin board . features . app state . AppState ViewModel Ċ import Ġcom . fib el att i . pin board . features . app state . Edit Post Ċ import Ġcom . fib el att i . pin board . features . app state . Pop ular Post Detail Content Ċ import Ġcom . fib el att i . pin board . features . app state . Post Detail Content Ċ import Ġcom . fib el att i . pin board . features . main Activity Ċ import Ġcom . fib el att i . pin board . features . posts . domain . model . Post Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ Ċ @ Android EntryPoint Ċ class ĠPost Detail Fragment Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġconnectivity Info Provider : ĠConnect ivity Info Provider , Ċ ) Ġ: ĠBase Fragment () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġval ĠTAG : ĠString Ġ= Ġ" Post Detail Fragment " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġapp State ViewModel : ĠApp State ViewModel Ġby Ġactivity ViewModels () ĊĠĠĠ Ġprivate Ġval Ġpost Detail ViewModel : ĠPost Detail ViewModel Ġby Ġview Models () ĊĠĠĠ Ġprivate Ġval Ġpopular Posts ViewModel : ĠPop ular Posts ViewModel Ġby Ġview Models () ĊĊĠĠĠ Ġprivate Ġvar Ġbinding Ġby Ġview Binding < Fragment Post Detail Binding >() ĊĊĠĠĠ Ġprivate Ġval Ġknown File Extensions Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ Ġ" pdf ", ĊĠĠĠĠĠĠĠ Ġ" doc ", Ġ" docx ", ĊĠĠĠĠĠĠĠ Ġ" ppt ", Ġ" ppt x ", ĊĠĠĠĠĠĠĠ Ġ" xls ", Ġ" xlsx ", ĊĠĠĠĠĠĠĠ Ġ" zip ", Ġ" rar ", ĊĠĠĠĠĠĠĠ Ġ" txt ", Ġ" rtf ", ĊĠĠĠĠĠĠĠ Ġ" mp 3 ", Ġ" wav ", ĊĠĠĠĠĠĠĠ Ġ" gif ", Ġ" jpg ", Ġ" jpeg ", Ġ" png ", Ġ" svg ", ĊĠĠĠĠĠĠĠ Ġ" mp 4 ", Ġ" 3 gp ", Ġ" mp g ", Ġ" mpeg ", Ġ" avi " ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġvar Ġpost WebView Client : ĠPost WebView Client ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ?, ĊĠĠĠ Ġ): ĠView Ġ= ĠFragment Post Detail Binding . inflate ( in flater , Ġcontainer , Ġfalse ). run Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġsetup ViewModels () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġmain Activity ?. update Title Layout Ġ{ Ġhide ActionButton () Ġ} ĊĠĠĠĠĠĠĠ Ġpost WebView Client ?. callback Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup ViewModels () Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp State ViewModel . post Detail Content . collect (:: update Views ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp State ViewModel . popular Post Detail Content . collect (:: update Views ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Detail ViewModel . loading . collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . layout ProgressBar . root . visible If ( it , Ġotherwise Visibility Ġ= ĠView . GONE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Detail ViewModel . deleted . collect Ġ{ Ġmain Activity ?. show Banner ( getString ( R . string . posts _ deleted _ feedback )) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Detail ViewModel . delete Error . collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. show Styled Dialog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Style Ġ= ĠR . style . App Theme _ AlertDialog , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Background Ġ= ĠR . drawable . background _ contrast _ rounded ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Message ( R . string . posts _ deleted _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Positive Button ( R . string . hint _ ok ) Ġ{ Ġdialog , Ġ_ Ġ-> Ġdialog ?. dismiss () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Detail ViewModel . updated . collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Activity ?. show Banner ( getString ( R . string . posts _ marked _ as _ read _ feedback )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Activity ?. update Title Layout Ġ{ Ġhide ActionButton () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Detail ViewModel . update Error . collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Activity ?. show Banner ( getString ( R . string . posts _ marked _ as _ read _ error )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Detail ViewModel . error . collect (:: handleError ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopular Posts ViewModel . loading . collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . layout ProgressBar . root . visible If ( it , Ġotherwise Visibility Ġ= ĠView . GONE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopular Posts ViewModel . saved . collect Ġ{ Ġmain Activity ?. show Banner ( getString ( R . string . posts _ saved _ feedback )) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopular Posts ViewModel . error . collect (:: handleError ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Views ( post Detail Content : ĠPost Detail Content ) Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Views ( post Detail Content . post , ĠR . menu . menu _ link ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Views ( popular Post Detail Content : ĠPop ular Post Detail Content ) Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Views ( popular Post Detail Content . post , ĠR . menu . menu _ popular ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Views ( post : ĠPost , Ġ@ Menu Res Ġmenu : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( post . url . substring After Last (".") Ġin Ġknown File Extensions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow File View ( post ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow WebView ( post ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmain Activity ?. update Title Layout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Title () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Sub Title () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Navigate Up Ġ{ Ġnavigate Back () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmain Activity ?. update Views Ġ{ Ġbottom AppBar , Ġfab Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom AppBar . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Icon Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreplace Menu ( menu ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset On MenuItem ClickListener Ġ{ Ġitem Ġ-> Ġhandle Menu Click ( item , Ġpost ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisible () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfab . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Image Resource ( R . drawable . ic _ share ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (). share Text ( R . string . posts _ share _ title , Ġpost . url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow File View ( post : ĠPost ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmain Activity ?. update Title Layout Ġ{ Ġhide ActionButton () Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . layout File View . root . visible () ĊĠĠĠĠĠĠĠ Ġbinding . layout ScrollView Web . g one () ĊĠĠĠĠĠĠĠ Ġbinding . layout ProgressBar . root . g one () ĊĊĠĠĠĠĠĠĠ Ġbinding . layout File View . textView File Url Title . text Ġ= Ġpost . title ĊĠĠĠĠĠĠĠ Ġbinding . layout File View . textView File Url . text Ġ= Ġpost . url ĊĠĠĠĠĠĠĠ Ġbinding . layout File View . button Open In File Viewer . setOnClickListener Ġ{ Ġopen Url In File Viewer ( post . url ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow WebView ( post : ĠPost ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . layout File View . root . g one () ĊĠĠĠĠĠĠĠ Ġbinding . layout ScrollView Web . visible () ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! connectivity Info Provider . isConnected ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . layout ProgressBar . root . g one () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . layout Url Error . root . visible () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . layout Url Error . textView Error Url Title . text Ġ= Ġpost . title ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . layout Url Error . textView Error Url . text Ġ= Ġpost . url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . layout Url Error . textView Error Description . setText ( R . string . posts _ url _ offline _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . layout Url Error . button ErrorAction . setOnClickListener ( R . string . offline _ retry ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow WebView ( post ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( post . read Later ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain Activity ?. update Title Layout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset ActionButton ( R . string . hint _ mark _ as _ read ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Detail ViewModel . mark As Read ( post ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( binding . web View . url Ġ!= Ġpost . url ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost WebView Client Ġ= ĠPost WebView Client ( object Ġ: ĠPost WebView Client . Callback Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Started () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . layout ProgressBar . root . visible () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Finished () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . layout ProgressBar . root . g one () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . layout Url Error . root . g one () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error Layout ( post ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}). also ( binding . web View :: set WebView Client ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . web View . load Url ( post . url ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Error Layout ( post : ĠPost ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . layout Url Error . root . visible () ĊĊĠĠĠĠĠĠĠ Ġbinding . layout Url Error . textView Error Url Title . text Ġ= Ġpost . title ĊĠĠĠĠĠĠĠ Ġbinding . layout Url Error . textView Error Url . text Ġ= Ġpost . url ĊĠĠĠĠĠĠĠ Ġbinding . layout Url Error . button ErrorAction . setOnClickListener Ġ{ Ġopen Url In External Browser ( post ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Url In File Viewer ( url : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠmimeType Ġ= ĠMime TypeMap . get Singleton () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get MimeType From Extension ( url . substring After Last (". ")) ĊĠĠĠĠĠĠĠ Ġval Ġnew Intent Ġ= ĠIntent ( Intent . ACTION _ VIEW ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetData And Type ( Uri . parse ( url ), ĠmimeType ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġ= ĠIntent . FLAG _ ACTIVITY _ NEW _ TASK ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( new Intent ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠActivity NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain Activity ?. show Banner ( getString ( R . string . posts _ open _ with _ file _ viewer _ error )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Menu Click ( item : ĠMenuItem ?, Ġpost : ĠPost ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item ?. itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menuItem Delete Ġ-> Ġdelete Post ( post ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menuItem Edit Link Ġ-> Ġapp State ViewModel . run Action ( Edit Post ( post )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menuItem Save Ġ-> Ġpopular Posts ViewModel . save Link ( post ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menuItem Open In Browser Ġ-> Ġopen Url In External Browser ( post ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete Post ( post : ĠPost ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext ?. show Styled Dialog ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Style Ġ= ĠR . style . App Theme _ AlertDialog , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Background Ġ= ĠR . drawable . background _ contrast _ rounded ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Message ( R . string . alert _ confirm _ deletion ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Positive Button ( R . string . hint _ yes ) Ġ{ Ġ_, Ġ_ Ġ-> Ġpost Detail ViewModel . delete Post ( post ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Negative Button ( R . string . hint _ no ) Ġ{ Ġdialog , Ġ_ Ġ-> Ġdialog ?. dismiss () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Url In External Browser ( post : ĠPost ) Ġ{ ĊĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( Intent . ACTION _ VIEW ). apply Ġ{ Ġdata Ġ= ĠUri . parse ( post . url ) Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠPost WebView Client ( callback : ĠCallback ) Ġ: ĠWebView Client () Ġ{ ĊĊĠĠĠ Ġinterface ĠCallback Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Page Started () ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Page Finished () ĊĊĠĠĠĠĠĠĠ Ġfun ĠonError () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġcallback : ĠCallback ? Ġ= Ġcallback ĊĊĠĠĠ Ġoverride Ġfun Ġon Page Started ( view : ĠWebView ?, Ġurl : ĠString ?, Ġfav icon : ĠBitmap ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Page Started ( view , Ġurl , Ġfav icon ) ĊĠĠĠĠĠĠĠ Ġcallback ?. on Page Started () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Page Finished ( view : ĠWebView ?, Ġurl : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Page Finished ( view , Ġurl ) ĊĠĠĠĠĠĠĠ Ġcallback ?. on Page Finished () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Received Error ( ĊĠĠĠĠĠĠĠ Ġview : ĠWebView ?, ĊĠĠĠĠĠĠĠ Ġrequest : ĠWeb Resource Request ?, ĊĠĠĠĠĠĠĠ Ġerror : ĠWeb Resource Error ?, ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Received Error ( view , Ġrequest , Ġerror ) ĊĠĠĠĠĠĠĠ Ġcallback ?. onError () ĊĠĠĠ Ġ} Ċ } Ċ