package Ġcom . fal dez . sh ach i Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Animator Listener Adapter Ċ import Ġandroid . animation . Layout Transition Ċ import Ġandroid . app . Notification Channel Ċ import Ġandroid . app . Notification Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . app . AppCompat Delegate Ċ import Ġandroidx . constraint layout . widget . Constraint Set Ċ import Ġandroidx . core . view . Window Compat Ċ import Ġandroidx . core . view . is G one Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġandroidx . navigation . fragment . Nav Host Fragment Ċ import Ġandroidx . navigation . ui . setup With Nav Controller Ċ import Ġandroidx . preference . Preference Ċ import Ġandroidx . preference . Preference Fragment Compat Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġcom . fal dez . sh ach i . data . preference . Sh ach i Preference Ċ import Ġcom . fal dez . sh ach i . databinding . Activity Main Binding Ċ import Ġcom . google . android . material . bottomnavigation . Bottom Navigation View Ċ import Ġcom . google . android . material . navigation rail . Navigation R ail View Ċ import Ġcom . google . firebase . crash ly t ics . k tx . crash ly t ics Ċ import Ġcom . google . firebase . k tx . Firebase Ċ import Ġcom . google . modern storage . permissions . Request Access Ċ import Ġcom . google . modern storage . permissions . Storage Permissions Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity (), ĊĠĠĠ ĠPreference Fragment Compat . On Preference Start Fragment Callback Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġnav Controller : ĠNav Controller ĊĠĠĠ Ġlateinit Ġvar Ġshared Preferences : ĠSharedPreferences ĊĠĠĠ Ġlateinit Ġvar Ġbinding : ĠActivity Main Binding ĊĠĠĠ Ġvar Ġis Show Navigation : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠWindow Compat . set Decor Fits System Windows ( window , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Main Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠĠĠĠĠ Ġ( binding . main Layout Ġas ĠViewGroup ). layout Transition ?. enable Transition Type ( Layout Transition . CHANG ING ) ĊĊĠĠĠĠĠĠĠ Ġshared Preferences Ġ= ĠPreference Manager . getDefault SharedPreferences ( this ) ĊĊĠĠĠĠĠĠĠ Ġsetup Nav Controller () ĊĊĠĠĠĠĠĠĠ Ġnav Controller . add On Destination Changed Listener Ġ{ Ġ_, Ġdestination , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Show Ġ= Ġwhen Ġ( destination . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . saved Fragment Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . browse Fragment Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . browse Saved Fragment Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . more Fragment Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . favorite Fragment Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Show ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Navigation () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . side Navigation R ail ?. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Navigation () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . side Navigation R ail ?. hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" MainActivity ", Ġ" add On Destination Changed Listener Ġ$ is Show ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Theme () ĊĠĠĠĠĠĠĠ Ġset Send Crash Reports () ĊĊĠĠĠĠĠĠĠ Ġval Ġpermissions Ġ= Ġcheck Permission () ĊĠĠĠĠĠĠĠ ĠLog . d (" MainActivity ", Ġ" permission Ġ$ permissions ") ĊĠĠĠĠĠĠĠ Ġif Ġ( permissions . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permission () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcreate Notification Channel (" download ", Ġ" Download Ġnotification Ġchannel ") ĊĠĠĠĠĠĠĠ Ġcreate Notification Channel (" system ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" System Ġnotification Ġchannel ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Manager . IMPORT ANCE _ DEFAULT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Nav Controller () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnav Fragment Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager . find Fragment ById ( R . id . nav Fragment ) Ġas ĠNav Host Fragment ĊĠĠĠĠĠĠĠ Ġnav Controller Ġ= Ġnav Fragment . nav Controller ĊĠĠĠĠĠĠĠ Ġbinding . bottom Navigation View ?. setup With Nav Controller ( nav Controller ) ĊĠĠĠĠĠĠĠ Ġbinding . side Navigation R ail ?. setup With Nav Controller ( nav Controller ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Support Navigate Up (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnav Controller . pop Back Stack () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Theme () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtheme Ġ= Ġshared Preferences . getString ( Sh ach i Preference . KEY _ THEME , Ġ" follow _ system ") ĊĊĠĠĠĠĠĠĠ Ġval Ġmode Ġ= Ġwhen Ġ( theme ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" light " Ġ-> ĠAppCompat Delegate . MODE _ N IGHT _ NO ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" dark " Ġ-> ĠAppCompat Delegate . MODE _ N IGHT _ YES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠAppCompat Delegate . MODE _ N IGHT _ FOLLOW _ SYSTEM ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠLog . d (" MainActivity ", Ġ"$ theme Ġ$ mode ") ĊĠĠĠĠĠĠĠ ĠAppCompat Delegate . setDefault Night Mode ( mode ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Send Crash Reports () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Send Ġ= Ġshared Preferences . getBoolean ( Sh ach i Preference . KEY _ SEND _ CR ASH _ REPORT S , Ġtrue ) ĊĠĠĠĠĠĠĠ ĠFirebase . crash ly t ics . set Crash ly t ics Collection Enabled ( is Send ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Preference Start Fragment ( ĊĠĠĠĠĠĠĠ Ġcaller : ĠPreference Fragment Compat , ĊĠĠĠĠĠĠĠ Ġpref : ĠPreference , ĊĠĠĠ Ġ): ĠBoolean Ġ= Ġwhen Ġ( pref . key ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSh ach i Preference . KEY _ SETTINGS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( R . id . action _ more _ to _ settings ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠSh ach i Preference . KEY _ SERVER S Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( R . id . action _ global _ to _ servers ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠSh ach i Preference . KEY _ BLACK LIST ED _ TAGS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( R . id . action _ global _ to _ black listed _ tags ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠSh ach i Preference . KEY _ OSS _ NOT ICES Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( R . id . action _ more _ to _ oss ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠSh ach i Preference . KEY _ AB OUT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( R . id . action _ more _ to _ about ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Navigation ( callback : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . bottom Navigation View ?. show ( callback ) ĊĠĠĠĠĠĠĠ Ġbinding . side Navigation R ail ?. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhide Navigation ( callback : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . bottom Navigation View ?. hide ( callback ) ĊĠĠĠĠĠĠĠ Ġbinding . side Navigation R ail ?. hide () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠBottom Navigation View . hide ( callback : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Show Navigation ) Ġreturn ĊĠĠĠĠĠĠĠ Ġis Show Navigation Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġconstraint Ġ= Ġbinding . main Layout ĊĠĠĠĠĠĠĠ Ġval Ġconstraint Set Ġ= ĠConstraint Set () ĊĠĠĠĠĠĠĠ Ġconstraint Set . clone ( binding . main Layout ) ĊĠĠĠĠĠĠĠ Ġconstraint Set . connect ( R . id . nav Fragment , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstraint Set . BOTTOM , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . main Layout , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstraint Set . BOTTOM ) ĊĠĠĠĠĠĠĠ Ġconstraint Set . apply To ( constraint ) ĊĠĠĠĠĠĠĠ Ġanimate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. translation Y ( height . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Listener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Start ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Animation Start ( animation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( callback Ġ!= Ġnull ) Ġcallback () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Animation End ( animation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠNavigation R ail View . hide () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Show Navigation ) Ġreturn ĊĠĠĠĠĠĠĠ Ġis Show Navigation Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġis G one Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠBottom Navigation View . show ( callback : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Show Navigation ) Ġreturn ĊĠĠĠĠĠĠĠ Ġis Show Navigation Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġanimate (). translation Y ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Listener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Start ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Animation Start ( animation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Animation End ( animation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstraint Ġ= Ġbinding . main Layout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstraint Set Ġ= ĠConstraint Set () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint Set . clone ( constraint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint Set . connect ( R . id . nav Fragment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstraint Set . BOTTOM , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . bottom Navigation View , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstraint Set . TOP ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint Set . apply To ( constraint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( callback Ġ!= Ġnull ) Ġcallback () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠNavigation R ail View . show () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Show Navigation ) Ġreturn ĊĠĠĠĠĠĠĠ Ġis Show Navigation Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġis Visible Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Permission (): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠStorage Permissions . get Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ= ĠStorage Permissions . Action . READ _ AND _ WRITE , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtypes Ġ= ĠlistOf ( Storage Permissions . FileType . Image , ĠStorage Permissions . FileType . Video ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreated By Ġ= ĠStorage Permissions . CreatedBy . Self ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġrequest Access Ġ= Ġregister For Activity Result ( Request Access ()) Ġ{ Ġhas Access Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( has Access ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" MainActivity ", Ġ"$ has Access ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest Permission () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d (" MainActivity ", Ġ" request Ġpermission ") ĊĠĠĠĠĠĠĠ Ġrequest Access . launch ( Request Access . Args ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ= ĠStorage Permissions . Action . READ _ AND _ WRITE , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtypes Ġ= ĠlistOf ( Storage Permissions . FileType . Image , ĠStorage Permissions . FileType . Video ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreated By Ġ= ĠStorage Permissions . CreatedBy . Self ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Notification Channel ( ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġdescription Text : ĠString , ĊĠĠĠĠĠĠĠ Ġimportance : ĠInt Ġ= ĠNotification Manager . IMPORT ANCE _ LOW , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= ĠNotification Channel ( name , Ġname , Ġimportance ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġdescription Text ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnotification Manager : ĠNotification Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget System Service ( Context . NOTIFICATION _ SERVICE ) Ġas ĠNotification Manager ĊĠĠĠĠĠĠĠ Ġnotification Manager . create Notification Channel ( channel ) ĊĠĠĠ Ġ} Ċ }