/* čĊ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 . čĊ Ġ* ĠJo Ã£o ĠP au lo ĠS ena Ġ< jo aop au lo 7 6 1 @ gmail . com > čĊ Ġ* čĊ Ġ* ĠThis Ġfile Ġis Ġpart Ġof Ġthe ĠUN ES ĠOpen ĠSource ĠProject . čĊ Ġ* čĊ Ġ* ĠUN ES Ġis Ġlicensed Ġunder Ġthe ĠMIT ĠLicense čĊ Ġ* čĊ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy čĊ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal čĊ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights čĊ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell čĊ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis čĊ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : čĊ Ġ* čĊ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall čĊ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . čĊ Ġ* čĊ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR čĊ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , čĊ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE čĊ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER čĊ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , čĊ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE čĊ Ġ* ĠSOFTWARE . čĊ Ġ*/ čĊč Ċ package Ġcom . for c et ower . ue fs . feature . home čĊč Ċ import Ġandroid . content . Intent č Ċ import Ġandroid . content . SharedPreferences č Ċ import Ġandroid . net . Uri č Ċ import Ġandroid . os . Bundle č Ċ import Ġandroid . view . LayoutInflater č Ċ import Ġandroid . view . View č Ċ import Ġandroid . view . View . GONE č Ċ import Ġandroid . view . View . VISIBLE č Ċ import Ġandroid . view . ViewGroup č Ċ import Ġandroid . widget . Toast č Ċ import Ġandroidx . annotation . Id Res č Ċ import Ġandroidx . appcompat . app . AppCompat Delegate č Ċ import Ġandroidx . lifecycle . Observer č Ċ import Ġandroidx . navigation . fragment . find Nav Controller č Ċ import Ġandroidx . navigation . ui . Navigation UI č Ċ import Ġcom . for c et ower . ue fs . Build Config č Ċ import Ġcom . for c et ower . ue fs . R č Ċ import Ġcom . for c et ower . ue fs . core . constants . Constants č Ċ import Ġcom . for c et ower . ue fs . core . injection . Injectable č Ċ import Ġcom . for c et ower . ue fs . core . vm . U ViewModel Factory č Ċ import Ġcom . for c et ower . ue fs . databinding . Home Bottom Binding č Ċ import Ġcom . for c et ower . ue fs . feature . about . About Activity č Ċ import Ġcom . for c et ower . ue fs . feature . feedback . Send Feedback Fragment č Ċ import Ġcom . for c et ower . ue fs . feature . settings . Settings Activity č Ċ import Ġcom . for c et ower . ue fs . feature . shared . U Fragment č Ċ import Ġcom . for c et ower . ue fs . feature . shared . extensions . provide Activity ViewModel č Ċ import Ġcom . google . firebase . auth . Firebase Auth č Ċ import Ġcom . google . firebase . remote config . Firebase Remote Config č Ċ import Ġcom . google . firebase . storage . Firebase Storage č Ċ import Ġcom . mike pen z . about libraries . Lib s č Ċ import Ġcom . mike pen z . about libraries . Lib s Builder č Ċ import Ġjavax . inject . Inject čĊč Ċ class ĠHome Bottom Fragment Ġ: ĠU Fragment (), ĠInjectable Ġ{ čĊĠĠĠ Ġ@ Inject čĊĠĠĠ Ġlateinit Ġvar ĠviewModel Factory : ĠU ViewModel Factory čĊĠĠĠ Ġ@ Inject čĊĠĠĠ Ġlateinit Ġvar Ġfirebase Auth : ĠFirebase Auth čĊĠĠĠ Ġ@ Inject čĊĠĠĠ Ġlateinit Ġvar Ġfirebase Storage : ĠFirebase Storage čĊĠĠĠ Ġ@ Inject čĊĠĠĠ Ġlateinit Ġvar Ġremote Config : ĠFirebase Remote Config čĊĠĠĠ Ġ@ Inject čĊĠĠĠ Ġlateinit Ġvar Ġpreferences : ĠSharedPreferences čĊčĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠHome Bottom Binding čĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠHome ViewModel čĊčĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ čĊĠĠĠĠĠĠĠ ĠviewModel Ġ= Ġprovide Activity ViewModel ( viewModel Factory ) čĊčĊĠĠĠĠĠĠĠ Ġreturn ĠHome Bottom Binding . inflate ( in flater , Ġcontainer , Ġfalse ). also Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding Ġ= Ġit čĊĠĠĠĠĠĠĠ Ġ}. apply Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Owner Ġ= Ġthis @ Home Bottom Fragment čĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Ġ= Ġthis @ Home Bottom Fragment . viewModel čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirebase Storage Ġ= Ġthis @ Home Bottom Fragment . firebase Storage čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirebase User Ġ= Ġthis @ Home Bottom Fragment . firebase Auth . currentUser čĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Pending Bindings () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage User Picture . setOnClickListener Ġ{ Ġthis @ Home Bottom Fragment . viewModel . on Me Profile Clicked () Ġ} čĊĠĠĠĠĠĠĠ Ġ}. root čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġnight Switch er Listener () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġnight Switch er Listener () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= Ġpreferences . getString (" stg _ night _ mode ", Ġ" 0 ") ?. toInt OrNull () Ġ?: Ġ 0 čĊĠĠĠĠĠĠĠ Ġval Ġactive Ġ= Ġconfig Ġ== Ġ 2 čĊĠĠĠĠĠĠĠ Ġbinding . switch Night . isChecked Ġ= Ġactive čĊĠĠĠĠĠĠĠ Ġbinding . switch Night . setOn Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflag Ġ= Ġif Ġ( isChecked ) ĠAppCompat Delegate . MODE _ N IGHT _ YES Ġelse ĠAppCompat Delegate . MODE _ N IGHT _ NO čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġif Ġ( isChecked ) Ġ 2 Ġelse Ġ 1 čĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences . edit (). putString (" stg _ night _ mode ", Ġstate . toString ()). apply () čĊĠĠĠĠĠĠĠĠĠĠĠ ĠAppCompat Delegate . setDefault Night Mode ( flag ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. re create () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) čĊĠĠĠĠĠĠĠ Ġsetup Navigation () čĊĠĠĠĠĠĠĠ Ġfeature Flags () čĊĠĠĠĠĠĠĠ ĠviewModel . is Dark Mode Enabled . observe ( this , ĠObserver Ġ{ Ġtoggle Night Mode Switch er ( it ) Ġ}) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġfeature Flags () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġdemand Flag Ġ= Ġremote Config . getBoolean (" feature _ flag _ demand ") čĊĠĠĠĠĠĠĠ ĠviewModel . flags . observe ( this , ĠObserver Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ?. demand Open Ġ== Ġtrue Ġ|| Ġdemand Flag ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Item ( R . id . demand , Ġtrue ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ}) čĊčĊĠĠĠĠĠĠĠ Ġval Ġstore Flag Ġ= Ġremote Config . getBoolean (" feature _ flag _ store ") čĊĠĠĠĠĠĠĠ Ġtoggle Item ( R . id . p urchases , Ġstore Flag ) čĊčĊĠĠĠĠĠĠĠ Ġval Ġdark Ġ= Ġpreferences . getBoolean (" stg _ night _ mode _ menu ", Ġtrue ) čĊĠĠĠĠĠĠĠ Ġtoggle Item ( R . id . dark _ theme _ event , Ġdark ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġtoggle Night Mode Switch er ( enabled : ĠBoolean ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġbinding . switch Night . run Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= Ġif Ġ( enabled Ġ== Ġtrue ) ĠVIS IBLE čĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠG ONE čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġtoggle Item (@ Id Res Ġid : ĠInt , Ġvisible : ĠBoolean ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġbinding . navigation View . menu . find Item ( id ) čĊĠĠĠĠĠĠĠ Ġitem ?. isVisible Ġ= Ġvisible čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġsetup Navigation () Ġ{ čĊĠĠĠĠĠĠĠ Ġbinding . navigation View . set Navigation ItemSelected Listener Ġ{ Ġitem Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . about Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAbout Activity . startActivity ( require Activity ()) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . logout Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . logout () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . open _ source Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLib s Builder () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Activity Style ( Lib s . Activity Style . DARK ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with About Icon Shown ( true ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with About Version Shown ( true ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with About Description ( getString ( R . string . about _ description )) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start ( require Context ()) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . profile Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on Me Profile Clicked () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . settings Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Settings Activity . start Intent ( require Context ())) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . bug _ report Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( firebase Auth . currentUser Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= ĠSend Feedback Fragment () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . show ( child FragmentManager , Ġ" feedback _ modal ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( require Context (), ĠR . string . you _ are _ not _ connected _ to _ the _ unes ver so , ĠToast . LENGTH _ SHORT ). show () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"\ n \ n Version : Ġ${ Build Config . VERSION _ NAME }\ n Code : Ġ${ Build Config . VERSION _ CODE }" čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ SEND TO , ĠUri . from Parts (" mailto ", ĠConstants . DE VELO PER _ EMAIL , Ġnull )). apply Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( Intent . EXTRA _ SUBJECT , Ġ"[ UN ES ] App _ Feedback ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( Intent . EXTRA _ TEXT , Ġtext ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent . create Chooser ( intent , ĠgetString ( R . string . send _ email ))) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠNavigation UI . on Nav Destination Selected ( item , Ġfind Nav Controller ()) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} č Ċ }