package Ġcom . pr 0 gram m . app . ui Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroid . view .* Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroidx . appcompat . app . ActionBar Drawer Toggle Ċ import Ġandroidx . appcompat . view . menu . Action MenuItem Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . core . view . Gravity Compat Ċ import Ġandroidx . core . view . update Padding Ċ import Ġandroidx . drawer layout . widget . Drawer Layout Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . pr 0 gram m . app .* Ċ import Ġcom . pr 0 gram m . app . Duration . Companion . seconds Ċ import Ġcom . pr 0 gram m . app . feed . Feed Filter Ċ import Ġcom . pr 0 gram m . app . feed . Feed Type Ċ import Ġcom . pr 0 gram m . app . model . config . Config Ċ import Ġcom . pr 0 gram m . app . model . info . Info Message Ċ import Ġcom . pr 0 gram m . app . orm . bookmark Of Ċ import Ġcom . pr 0 gram m . app . services .* Ċ import Ġcom . pr 0 gram m . app . services . config . Config Service Ċ import Ġcom . pr 0 gram m . app . sync . Sync Worker Ċ import Ġcom . pr 0 gram m . app . ui . back . Back Fragment Helper Ċ import Ġcom . pr 0 gram m . app . ui . base . Base AppCompatActivity Ċ import Ġcom . pr 0 gram m . app . ui . base . launch Ignore Errors Ċ import Ġcom . pr 0 gram m . app . ui . dialogs . Update Dialog Fragment Ċ import Ġcom . pr 0 gram m . app . ui . fragments .* Ċ import Ġcom . pr 0 gram m . app . ui . intro . Intro Activity Ċ import Ġcom . pr 0 gram m . app . ui . upload . Upload Type Dialog Fragment Ċ import Ġcom . pr 0 gram m . app . util .* Ċ import Ġcom . pr 0 gram m . app . util . di . instance Ċ import Ġcom . trello . rx lifecycle . android . Activity Event Ċ import Ġkotlinx . coroutines . launch Ċ import Ġk ot ter knife . bind Optional View Ċ import Ġk ot ter knife . bind View Ċ import Ġrx . Observable Ċ import Ġrx . subjects . Behavior Subject Ċ import Ġkotlin . properties . Deleg ates ĊĊ Ċ /** Ċ Ġ* ĠThis Ġis Ġthe Ġmain Ġclass Ġof Ġour Ġpr 0 gram m Ġapp . Ċ Ġ*/ Ċ class ĠMainActivity Ġ: ĠBase AppCompatActivity (" MainActivity "), ĊĠĠĠĠĠĠĠ ĠDraw er Fragment . Callbacks , ĊĠĠĠĠĠĠĠ Ġandroidx . fragment . app . FragmentManager . On Back Stack Changed Listener , ĊĠĠĠĠĠĠĠ ĠScroll Hide Toolbar Listener . Toolbar Activity , ĊĠĠĠĠĠĠĠ ĠMain Action Handler , ĊĠĠĠĠĠĠĠ ĠPermission Helper Activity , ĊĠĠĠĠĠĠĠ ĠAd Control Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġhandler Ġ= ĠHandler ( Looper . get Main Looper ()) ĊĠĠĠ Ġprivate Ġval Ġdo Not Show Ads Ġ= ĠBehavior Subject . create ( false ) ĊĠĠĠ Ġprivate Ġvar Ġpermission Helper Ġ= ĠPermission Helper ( this ) ĊĠĠĠ Ġprivate Ġval Ġsettings Ġ= ĠSettings . get () ĊĊĠĠĠ Ġprivate Ġval Ġdrawer Layout : ĠDraw er Layout Ġby Ġbind View ( R . id . drawer _ layout ) ĊĠĠĠ Ġprivate Ġval Ġtoolbar : ĠToolbar Ġby Ġbind View ( R . id . toolbar ) ĊĠĠĠ Ġprivate Ġval Ġcontent Container : ĠView Ġby Ġbind View ( R . id . content ) ĊĊĠĠĠ Ġprivate Ġval Ġtoolbar Container : ĠView ? Ġby Ġbind Optional View ( R . id . toolbar _ container ) ĊĊĠĠĠ Ġprivate Ġval ĠuserService : ĠUserService Ġby Ġinstance () ĊĠĠĠ Ġprivate Ġval Ġconfig Service : ĠConfig Service Ġby Ġinstance () ĊĠĠĠ Ġprivate Ġval Ġbookmark Service : ĠBook mark Service Ġby Ġinstance () ĊĠĠĠ Ġprivate Ġval Ġsingle Shot Service : ĠSingle Shot Service Ġby Ġinstance () ĊĠĠĠ Ġprivate Ġval Ġinfo Message Service : ĠInfo Message Service Ġby Ġinstance () ĊĠĠĠ Ġprivate Ġval Ġad Service : ĠAd Service Ġby Ġinstance () ĊĊĠĠĠ Ġprivate Ġval Ġwindow Insets : ĠBehavior Subject < Custom Window Insets > Ġ= ĠBehavior Subject . create () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdrawer Toggle : ĠAction Bar Drawer Toggle ĊĊĠĠĠ Ġprivate Ġvar Ġstarted With Intent Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġvar Ġscroll Hide Toolbar Listener : ĠScroll Hide Toolbar Listener Ġby ĠDeleg ates . notNull () ĊĊĠĠĠ Ġ// Ġhow Ġthe Ġapp Ġwas Ġstarted Ġas Ġseen Ġby ĠonCreate ĊĠĠĠ Ġprivate Ġvar Ġcold Start : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġval Ġrx Window Insets : ĠObservable < Custom Window Insets > Ġ= Ġwindow Insets . distinct Until Changed () ĊĊĠĠĠ Ġpublic Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Theme ( Theme Helper . theme . trans luc ent Status ) ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( settings . secure App ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhide Ġapp Ġfrom Ġrecent Ġapps Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . add Flags ( WindowManager . LayoutParams . FLAG _ SECURE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġuse Ġtoolbar Ġas Ġaction Ġbar ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġand Ġhide Ġit Ġaway Ġon Ġscrolling ĊĠĠĠĠĠĠĠ Ġscroll Hide Toolbar Listener Ġ= ĠScroll Hide Toolbar Listener ( toolbar Container Ġ?: Ġtoolbar ) ĊĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġprepare Ġdrawer Ġlayout ĊĠĠĠĠĠĠĠ Ġdrawer Toggle Ġ= ĠAction Bar Drawer Toggle ( this , Ġdrawer Layout , ĠR . string . app _ name , ĠR . string . app _ name ) ĊĠĠĠĠĠĠĠ Ġdrawer Layout . set Drawer Shadow ( R . drawable . drawer _ shadow , ĠGr avity Compat . START ) ĊĠĠĠĠĠĠĠ Ġdrawer Layout . add Drawer Listener ( drawer Toggle ) ĊĊĠĠĠĠĠĠĠ Ġdrawer Layout . setOn Apply Window Insets Listener Ġ{ Ġv , Ġin sets Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar . update Padding ( top Ġ= Ġin sets . system Window Inset Top ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar . layout Params Ġ= ĠFrame Layout . LayoutParams ( ViewGroup . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAndroid Utility . get ActionBar Height ( v . context ) Ġ+ Ġin sets . system Window Inset Top ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Insets . onNext ( Custom Window Insets ( in sets )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġin sets . consume System Window Insets () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġlisten Ġto Ġfragment Ġchanges ĊĠĠĠĠĠĠĠ Ġsupport FragmentManager . add On Back Stack Changed Listener ( this ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent : ĠIntent ? Ġ= Ġintent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstarted From Launcher Ġ= Ġintent Ġ== Ġnull Ġ|| Ġintent . action Ġ== ĠIntent . ACTION _ MAIN Ġ|| Ġintent . action Ġ== ĠIntent . ACTION _ SEARCH ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcold Start Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreset Ġto Ġs fw Ġonly . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( settings . feed Start At S fw Ġ&& Ġstarted From Launcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" Force - switch Ġto Ġs fw Ġonly ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings . edit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Boolean (" pref _ feed _ type _ sf w ", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Boolean (" pref _ feed _ type _ ns fw ", Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Boolean (" pref _ feed _ type _ ns fl ", Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Drawer Fragment () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( started From Launcher Ġ|| Ġintent Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġload Ġfeed - fragment Ġinto Ġview ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoto Feed Fragment ( default Feed Filter (), Ġtrue ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take First Ġ{ Ġit Ġ== ĠActivity Event . START Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġcheck For Info Message () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstarted With Intent Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon New Intent ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġshow Ġthe Ġintro Ġactivity Ġif Ġthis Ġis Ġthe Ġfirst Ġtime Ġthe Ġapp Ġstarted . ĊĠĠĠĠĠĠĠ Ġsingle Shot Service . do Once (" on boarding - activity : 1 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntro Activity . launch ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġextra Ġslides Ġto Ġshow Ġduring Ġsome Ġmigration ĊĠĠĠĠĠĠĠ Ġ// Ġval Ġextra Slides Ġ= Ġmutable ListOf < Intro Activity . Slides >() ĊĠĠĠĠĠĠĠ Ġ// Ġif Ġ( extra Slides . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠ ĠIntro Activity . launch ( this , Ġextra Slides ) ĊĠĠĠĠĠĠĠ Ġ// Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġschedule Ġan Ġupdate Ġin Ġthe Ġbackground ĊĠĠĠĠĠĠĠ Ġdo In Background Ġ{ Ġbookmark Service . update () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshould Show Buy Prem ium Hint (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsingle Shot Service . first Time Today (" hint _ ads _ pr 0 m ium : 2 ") Ġ&& Ġ! userService . user Is Prem ium ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Buy Prem ium Hint () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġshow Any Ads Ġ= Ġad Service . enabled ForType ( Config . Ad Type . FEED ). take ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġshow Any Ads . take First Ġ{ Ġv Ġ-> Ġv Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On MainThread () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. bind To Lifecycle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Resume Empty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ! userService . user Is Prem ium Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( content Container , ĠR . string . hint _ dont _ like _ ads , Ġ 1 0 0 0 0 ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure New Style () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Action (" pr 0 m ium ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrack . register Link Clicked () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠUri . parse (" https :// pr 0 gram m . com / pr 0 m ium / i ap ? i ap = true ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBrowser Helper . open Custom Tab ( this @ MainActivity , Ġuri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhint Book marks Editable With Prem ium () Ġ{ ĊĠĠĠĠĠĠĠ Ġdrawer Layout . close Draw ers () ĊĊĠĠĠĠĠĠĠ ĠSn ackbar . make ( content Container , ĠR . string . hint _ edit _ bookmarks _ premium , Ġ 1 0 0 0 0 ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure New Style ( this @ MainActivity ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Action (" pr 0 m ium ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrack . register Link Clicked () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠUri . parse (" https :// pr 0 gram m . com / pr 0 m ium / i ap ? i ap = true ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBrowser Helper . open Custom Tab ( this @ MainActivity , Ġuri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Ads ( show : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Not Show Ads . onNext (! show ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck For Info Message () Ġ{ ĊĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcatch All Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġinfo Message Service . fetch () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Info Message ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshould Show Feedback Reminder (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfirst Time Today Ġ= Ġsingle Shot Service . first Time Today (" hint _ feedback _ reminder ") ĊĠĠĠĠĠĠĠ Ġval Ġfirst In Version Ġ= Ġsingle Shot Service . first TimeIn Version (" hint _ feedback _ reminder ") ĊĠĠĠĠĠĠĠ Ġreturn Ġsettings . use Beta Channel Ġ&& Ġ( first In Version Ġ|| Ġfirst Time Today ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon New Intent ( intent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on New Intent ( intent ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Intent . ACTION _ VIEW Ġ!= Ġintent . action ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠ Ġhandle Intent ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠRequest Codes . INT RO _ ACTIVITY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAndroid Utility . re create Activity ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠRequest Codes . FEED BACK Ġ&& ĠresultCode Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( drawer Layout , ĠR . string . feedback _ sent , ĠSn ackbar . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. configure New Style ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( R . string . ok ay , Ġ{ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsupport FragmentManager . remove On Back Stack Changed Listener ( this ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Stack Changed () Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Toolbar Back Button () ĊĠĠĠĠĠĠĠ Ġupdate Action bar Title () ĊĊĠĠĠĠĠĠĠ Ġdrawer Fragment ?. update Current Filters ( current Feed Filter ) ĊĊĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstack Ġ= Ġ( 0 Ġuntil Ġsupport FragmentManager . back Stack Entry Count ). join ToString (" Ġ-> Ġ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager . get Back Stack Entry At ( it ). name Ġ?: Ġ" null " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Stack : Ġ$ stack " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon KeyDown ( keyCode : ĠInt , Ġevent : ĠKeyEvent ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnavigation Type Ġ= Ġsettings . volume Navigation ĊĊĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= Ġcurrent Fragment ĊĠĠĠĠĠĠĠ Ġif Ġ( fragment Ġis ĠPost Pager Navigation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġvolume Ġkeys Ġnavigation Ġ( only Ġif Ġenabled ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( navigation Type Ġ!== ĠSettings . Volume Navigation Type . DISABLED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( keyCode Ġ== ĠKeyEvent . KEYCODE _ VOLUME _ UP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( navigation Type Ġ=== ĠSettings . Volume Navigation Type . UP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . moveTo Next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . moveTo Prev () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( keyCode Ġ== ĠKeyEvent . KEYCODE _ VOLUME _ DOWN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( navigation Type Ġ=== ĠSettings . Volume Navigation Type . UP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . moveTo Prev () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . moveTo Next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġkeyboard Ġor Ġd - pad Ġnavigation Ġ( always Ġpossible ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( keyCode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . KEYCODE _ DP AD _ UP , ĠKeyEvent . KEYCODE _ DP AD _ RIGHT Ġ-> Ġfragment . moveTo Next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . KEYCODE _ DP AD _ DOWN , ĠKeyEvent . KEYCODE _ DP AD _ LEFT Ġ-> Ġfragment . moveTo Prev () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on KeyDown ( keyCode , Ġevent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Action bar Title () Ġ{ ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. let Ġ{ Ġbar Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= Ġcurrent Fragment Ġas ? ĠFilter Fragment ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fragment Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbar . setTitle ( R . string . pr 0 gram m ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbar . subtitle Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfeed Ġ= ĠFeed Filter Formatter . format ( this , Ġfragment . current Filter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbar . title Ġ= Ġfragment . fragment Title Ġ?: Ġfeed . title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbar . subtitle Ġ= Ġfeed . subtitle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġdrawer Fragment : ĠDraw er Fragment ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġsupport FragmentManager . find Fragment ById ( R . id . left _ drawer ) Ġas ? ĠDraw er Fragment ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġcurrent Ġfeed Ġfilter . ĠMight Ġbe Ġnull , Ġif Ġno Ġfilter Ġcould Ġbe Ġdetected . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġcurrent Feed Filter : ĠFeed Filter ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( current Fragment Ġas ? ĠFilter Fragment )?. current Filter ĊĊĠĠĠ Ġprivate Ġval Ġcurrent Fragment : ĠFragment ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġsupport FragmentManager ?. find Fragment ById ( R . id . content ) ĊĊĠĠĠ Ġprivate Ġval Ġshould Clear On Intent : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcurrent Fragment Ġ! is ĠF avorites Fragment Ġ&& Ġsupport FragmentManager . back Stack Entry Count Ġ== Ġ 0 ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Toolbar Back Button () Ġ{ ĊĠĠĠĠĠĠĠ Ġdrawer Toggle . is Drawer Indicator Enabled Ġ= Ġshould Clear On Intent ĊĠĠĠĠĠĠĠ Ġdrawer Toggle . sync State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Drawer Fragment () Ġ{ ĊĠĠĠĠĠĠĠ Ġsupport FragmentManager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( R . id . left _ drawer , ĠDraw er Fragment ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Post Create ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Post Create ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġdrawer Toggle . sync State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Configuration Changed ( new Config : ĠConfiguration ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Configuration Changed ( new Config ) ĊĠĠĠĠĠĠĠ Ġdrawer Toggle . on Configuration Changed ( new Config ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! drawer Toggle . is Drawer Indicator Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . itemId Ġ== Ġandroid . R . id . home ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! dispatch Fake Home Event ( item )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Back Pressed () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdrawer Toggle . on Options ItemSelected ( item ) Ġ|| Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Restricted Api ") ĊĠĠĠ Ġprivate Ġfun Ġdispatch Fake Home Event ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġon MenuItem Selected ( Window . FEATURE _ OPTIONS _ PANEL , ĠAction MenuItem ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , Ġitem . groupId , ĠID _ FA KE _ HOME , Ġ 0 , Ġitem . order , Ġitem . title )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( drawer Layout . is Drawer Open ( Gravity Compat . START )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer Layout . close Draw ers () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġdispatch Ġto Ġfragments ĊĠĠĠĠĠĠĠ Ġif Ġ( Back Fragment Helper . dispatch On Back Action ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġat Ġthe Ġend , Ġgo Ġback Ġto Ġthe Ġ" top " Ġpage Ġbefore Ġstopping Ġeverything . ĊĠĠĠĠĠĠĠ Ġif Ġ( support FragmentManager . back Stack Entry Count Ġ== Ġ 0 Ġ&& Ġ! started With Intent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= Ġcurrent Feed Filter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( filter Ġ!= Ġnull Ġ&& Ġ! is Default Filter ( filter )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoto Feed Fragment ( default Feed Filter (), Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( err : ĠIllegalStateException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġworkaround Ġfor : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġis Ġsometimes Ġcalled Ġafter Ġon Save InstanceState ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Error Ġin Ġon Back Pressed :", Ġerr ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Default Filter ( filter : ĠFeed Filter ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdefault Feed Filter () Ġ== Ġfilter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Info Message ( message : ĠInfo Message ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( message . end Of Life Ġ>= ĠAndroid Utility . build Version Code ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Dialog ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent With Links (" Support ĠfÃ¼r Ġde ine ĠVersion Ġist Ġe ingest ellt . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Um Ġdie Ġpr 0 gram m - App Ġwe iter Ġben ut zen Ġzu ĠkÃ¶nnen , Ġl ade Ġeine Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" akt uelle ĠVersion Ġvon Ġhttps :// app . pr 0 gram m . com Ġher unter .") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpositive ( R . string . ok ay ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( Intent . ACTION _ VIEW , ĠUri . parse (" https :// app . pr 0 gram m . com "))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġmessage . message ?. take If ( String :: isNotBlank ) ĊĠĠĠĠĠĠĠ Ġif Ġ( text Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Dialog ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent With Links ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpositive () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġon Resume Impl () Ġ{ ĊĠĠĠĠĠĠĠ Ġon Back Stack Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun ĠonStart Impl () Ġ{ ĊĠĠĠĠĠĠĠ Ġlaunch Ignore Errors Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Every ( Duration . seconds ( 4 5 )) Ġ{ ĠSync Worker . sync Now ( this @ MainActivity ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( cold Start ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġupdate Check Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġupdate Check Delay Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Shot Service . first TimeIn Version (" changelog ") Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Check Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠChange Log Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show ( support FragmentManager , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Show Feedback Reminder () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( content Container , ĠR . string . feedback _ reminder , Ġ 1 0 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. configure New Style ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( R . string . ok ay ) Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Check Delay Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Show Buy Prem ium Hint () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Buy Prem ium Hint () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuild . VERSION . SDK _ INT Ġ<= Ġconfig Service . config (). end Of Life Android Version Ġ&& Ġsingle Shot Service . first Time Today (" end Of Life Android Version Hint ") Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( content Container , ĠR . string . old _ android _ reminder , Ġ 1 0 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. configure New Style ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( R . string . ok ay ) Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( update Check ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Ignore Errors Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( update Check Delay ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( seconds ( 1 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUpdate Dialog Fragment . check For Updates In Background ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ MainActivity , Ġsupport FragmentManager ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Logout Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġdrawer Layout . close Draw ers () ĊĠĠĠĠĠĠĠ ĠTrack . logout () ĊĊĠĠĠĠĠĠĠ Ġlaunch With ErrorHandler ( busy Indicator Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserService . logout () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġshow Ġa Ġshort Ġinformation . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( content Container , ĠR . string . logout _ successful _ hint , ĠSn ackbar . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. configure New Style ( this @ MainActivity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( R . string . ok ay ) Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreset Ġeverything ! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgoto Feed Fragment ( default Feed Filter (), Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdefault Feed Filter (): ĠFeed Filter Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġif Ġ( settings . feed Start At New ) ĠFeed Type . NEW Ġelse ĠFeed Type . PRO MOT ED ĊĠĠĠĠĠĠĠ Ġreturn ĠFeed Filter (). with Feed Type ( type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Feed Filter Selected In Navigation ( filter : ĠFeed Filter , Ġstart At : ĠComment Ref ?, Ġtitle : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġgoto Feed Fragment ( filter , Ġtrue , Ġstart Ġ= Ġstart At , Ġtitle Ġ= Ġtitle ) ĊĠĠĠĠĠĠĠ Ġdrawer Layout . close Draw ers () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Other Navigation Item Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġdrawer Layout . close Draw ers () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Navigate To F avorites ( username : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġmove Ġto Ġnew Ġfragment ĊĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= ĠF avorites Fragment . newInstance ( username ) ĊĠĠĠĠĠĠĠ Ġmove To Fragment ( fragment , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġdrawer Layout . close Draw ers () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Username Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= ĠuserService . name ĊĠĠĠĠĠĠĠ Ġif Ġ( name Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= ĠFeed Filter (). with Feed Type ( Feed Type . NEW ). with User ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgoto Feed Fragment ( filter , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdrawer Layout . close Draw ers () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Feed Filter Selected ( filter : ĠFeed Filter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgoto Feed Fragment ( filter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Feed Filter Selected ( filter : ĠFeed Filter , Ġsearch Query State : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġgoto Feed Fragment ( filter , Ġquery State Ġ= Ġsearch Query State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Feed Filter Selected ( filter : ĠFeed Filter , Ġquery State : ĠBundle ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart At : ĠComment Ref ?, Ġpop Back stack : ĠBoolean ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( pop Back stack ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager . pop Back Stack Immediate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġgoto Feed Fragment ( filter , Ġfalse , Ġstart At , Ġquery State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbookmark Filter ( filter : ĠFeed Filter , Ġtitle : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbookmark Service . save ( bookmark Of ( title , Ġfilter )) ĊĠĠĠĠĠĠĠ Ġdrawer Layout . open Drawer ( Gravity Compat . START ) ĊĊĠĠĠĠĠĠĠ Ġdrawer Fragment ?. scrollTo ( filter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgoto Feed Fragment ( new Filter : ĠFeed Filter , Ġclear : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart : ĠComment Ref ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery State : ĠBundle ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle : ĠString ? Ġ= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġmove To Fragment ( Feed Fragment . newInstance ( new Filter , Ġstart , Ġquery State , Ġtitle ), Ġclear ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmove To Fragment ( fragment : ĠFragment , Ġclear : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Finish ing ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif Ġ( clear ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Back Stack () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġand Ġshow Ġthe Ġfragment ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġsupport FragmentManager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( R . id . content , Ġfragment ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! clear ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" Adding Ġfragment Ġ${ fragment . java Class . name } Ġto Ġback stack " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . addTo Back Stack (" Feed $ fragment ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . commit () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( err : ĠIllegalStateException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Error Ġin Ġcommit : Ġ", Ġerr ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġtrigger Ġa Ġback - stack Ġchanged Ġafter Ġadding Ġthe Ġfragment . ĊĠĠĠĠĠĠĠ Ġhandler . post Ġ{ Ġon Back Stack Changed () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear Back Stack () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager . pop Back Stack Immediate ( null , Ġandroidx . fragment . app . FragmentManager . POP _ BACK _ STACK _ INCL USIVE ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( err : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAndroid Utility . log To Crash ly t ics ( RuntimeException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ign oring Ġexception Ġfrom Ġpop Back Stack Immediate :", Ġerr )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHandles Ġa Ġuri Ġto Ġsomething Ġon Ġpr 0 gram m ĊĊĠĠĠĠ Ġ* Ġ@ param Ġuri ĠThe Ġuri Ġto Ġhandle ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġhandle Intent ( intent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġintent . data Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġuri String Ġ= Ġuri . toString () ĊĠĠĠĠĠĠĠ Ġif Ġ( uri String . matches (". */ user / [^ / ]+ / reset pass / [^ / ]+ ". to Regex ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġopen Intent Ġ= ĠIntent ( this , ĠPassword Recovery Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Intent . putExtra (" url ", Ġuri String ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( open Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( uri String . endsWith ("/ inbox / messages ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( activity Intent < Inbox Activity >( this )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! this . should Clear On Intent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ"/ inbox / messages / ([^ / ]+ )$ ". to Regex (). find ( uri String )?. let Ġ{ Ġmatch Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconversation Name Ġ= Ġmatch . group Values [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCon versation Activity . start ( this , Ġconversation Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! this . should Clear On Intent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnotification Time : ĠInstant ? Ġ= Ġintent . get Parcelable Extra (" MainActivity . NOTIFICATION _ TIME ") ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠFilter Parser . parse ( uri , Ġnotification Time ) ĊĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= Ġresult . filter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġresult . start ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġgoto Feed Fragment ( filter , Ġshould Clear On Intent , Ġstart ) ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgoto Feed Fragment ( default Feed Filter (), Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < String >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġpermission Helper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrequire Permission ( permission : ĠString , Ġcallback : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpermission Helper . require Permission ( permission , Ġcallback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Upload Bottom Sheet () Ġ{ ĊĠĠĠĠĠĠĠ ĠUpload Type Dialog Fragment (). show ( support FragmentManager , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġwe Ġuse Ġthis Ġto Ġpropagate Ġa Ġfake - home Ġevent Ġto Ġthe Ġfragments . ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠID _ FA KE _ HOME Ġ= Ġandroid . R . id . list ĊĠĠĠ Ġ} Ċ } Ċ