/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠJe el ĠV ank hed de Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . awesome _ lib . core Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . annotation . Call Super Ċ import Ġandroidx . annotation . Id Res Ċ import Ġandroidx . annotation . Layout Res Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . fragment . app . Fragment Ċ Ċ /** Ċ Ġ* Ġ[ Abstract Base Fragment ] Ġ: Ċ Ġ* Ċ Ġ* Ġ## Ġ** Base ** Ġfragment Ġclass Ġprovides Ġsetup Ġmethods Ġand Ġfunctionality Ġuseful Ġacross Ġentire Ġapp . Ġ## Ċ Ġ* ĠThis Ġfragment Ġprovides Ġ** abstract Ġmethod ** Ġ[ Abstract Base Fragment . setUp Builder ] Ċ Ġ* Ġthat Ġaccepts Ġconfigurations Ġneeded Ġfor Ġfragment Ġto Ġwork Ġproperly Ġlike Ġ` content View ` Ġfrom Ġ[ Abstract Base Fragment . builder ]. Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠCalls Ġ[ Abstract Base Fragment . on View Ready ] Ġwhen Ġsetup Ġcompletes , Ċ Ġ* Ġso Ġthat Ġ* child Ġfragment * Ġreceives Ġcallback Ġregarding Ġ[ Fragment . on View Created ] Ġhappened . Ċ Ġ* Ċ Ġ* ĠCheck Ġout Ġsome Ġmethods Ġ& Ġvariables : Ċ Ġ* Ċ Ġ* ĠĠĠ 1 . Ġ#[ Abstract Base Fragment . setUp Builder ] Ċ Ġ* ĠĠĠ 2 . Ġ#[ Abstract Base Fragment . on View Ready ] Ċ Ġ* ĠĠĠ 3 . Ġ#[ Abstract Base Fragment . setUp Toolbar ] Ċ Ġ* ĠĠĠ 4 . Ġ[ Abstract Base Fragment . builder ] Ċ Ġ* ĠĠĠ 5 . Ġ[ Abstract Base Fragment . root View ] Ċ Ġ* ĠĠĠ 6 . Ġ[ Abstract Base Fragment . shared Preference ] Ċ Ġ* ĠĠĠ 7 . Ġ[ Abstract Base Fragment . on Hidden Change ] Ċ Ġ* Ċ Ġ* Ġ@ author Ġ: ĠJe el ĠV ank he de Ċ Ġ* Ġ@ version Ġ 1 . 0 . 0 Ċ Ġ* Ġ@ since Ġ 7 / 2 / 2 0 1 9 Ċ Ġ*/ Ċ abstract Ġclass ĠAbstract Base Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠVariable Ġacts Ġas Ġutility Ġfor Ġthis Ġfragment Ġ& Ġprovides Ġnecessary Ġfields ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġbuilder : ĠAbstract Builder ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRoot Ġ[ ViewGroup ] Ġof Ġthis Ġfragment ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġroot View : ĠViewGroup ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġprovides Ġ[ SharedPreferences ] Ġobject Ġto Ġhandle Ġlocal ĠI / O ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġshared Preference : ĠSharedPreferences ? Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn @ lazy Ġ( activity Ġas ? ĠAbstract Base Activity )?. shared Preference ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠVariable Ġprovides Ġcallback Ġfor Ġvisibility Ġchanges Ġ( attach / Detach ) Ġof Ġthis Ġfragment ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġon Hidden Change : Ġ( Boolean . () Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġlifecycle Callback Provider : ĠLifecycle Callback Provider ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ Ġbuilder Ġ= ĠsetUp Builder () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Hidden Changed ( hidden : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( builder ?. is Cache Fragment Ġ== Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Hidden Change ?. invoke ( hidden ) ĊĠĠĠĠĠĠĠ Ġsuper . on Hidden Changed ( hidden ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( builder ?. abstract Binding Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder ?. content View ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder ?. abstract Binding ?. binding Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Binding Util . inflate ( in flater , Ġit , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot View Ġ= Ġbuilder ?. abstract Binding ?. binding ?. root Ġas ? ĠViewGroup ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder ?. content View ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot View Ġ= Ġinflater . inflate ( it , Ġcontainer , Ġfalse ) Ġas ? ĠViewGroup ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġroot View ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġlifecycle Callback Provider Ġ= ĠLifecycle Callback Provider ( view Lifecycle Owner . lifecycle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon View Ready ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder ?. abstract Binding ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Abstract Base Fragment . view Lifecycle Owner . lifecycle . add Observer ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . lifecycle Ġ= Ġthis @ Abstract Base Fragment . view Lifecycle Owner . lifecycle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . binding ?. lifecycle Owner Ġ= Ġthis @ Abstract Base Fragment . view Lifecycle Owner ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlifecycle Callback Provider ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Abstract Base Fragment . view Lifecycle Owner . lifecycle . add Observer ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġbuilder ?. abstract Binding ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Abstract Base Fragment . view Lifecycle Owner . lifecycle . remove Observer ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . lifecycle Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġlifecycle Callback Provider ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Abstract Base Fragment . view Lifecycle Owner . lifecycle . remove Observer ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlifecycle Callback Provider Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod Ġto Ġreplace Ġcontent Ġof Ġ[ Toolbar ] Ġby Ġprovided Ġview , Ġuses Ġ[ Toolbar Util ] Ġinternally Ġto Ġupdate Ġview Ġof Ġ[ Toolbar ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠProvides Ġ[ callback ] Ġto Ġmade Ġappropriate Ġchanges Ġon Ġinfl ated Ġ[ View ] Ġduring Ġcallback ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtoolbar Id Ġas Ġ[ Int ] Ġresource Ġid Ġof Ġtoolbar Ġobject Ġof Ġwhich Ġview Ġneeds Ġto Ġbe Ġupdated ĊĠĠĠĠ Ġ* Ġ@ param Ġlayout Id Ġas Ġ[ Int ] Ġlayout Ġres Ġid Ġthat Ġneeded Ġto Ġbe Ġreplaced / updated ĊĠĠĠĠ Ġ* Ġ@ param Ġclean Up All Ġas Ġboolean Ġflag Ġindicates Ġwhether Ġremove Ġall Ġviews Ġfrom Ġtoolbar Ġor Ġnot ĊĠĠĠĠ Ġ* Ġ@ param Ġcallback Ġas Ġparameter Ġwhen Ġview Ġis Ġinfl ated Ġon Ġtoolbar ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠsetUp Toolbar ( ĊĠĠĠĠĠĠĠ Ġ@ Id Res Ġtoolbar Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġ@ Layout Res Ġlayout Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġclean Up All : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġcallback : Ġ( View ?. () Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtoolbar View Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToolbar Util . add Remove View From Toolbar ( activity , Ġlayout Id , Ġclean Up All , Ġtoolbar Id ) ĊĠĠĠĠĠĠĠ Ġcallback ?. invoke ( toolbar View ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAbstract Ġmethod Ġprovides Ġ[ Abstract Builder ] Ġneeded Ġto Ġbuild Ġthis Ġbase Ġfragment . ĊĠĠĠĠ Ġ* ĠSetup Ġsome Ġbase Ġparameters Ġfrom Ġ[ Abstract Builder ] Ġthat Ġthis Ġbase Ġrequires Ġand Ġrest Ġof Ġit Ġwould Ġbe Ġhandled Ġsuccessfully . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ Abstract Builder ] Ġobject Ġrequired Ġby Ġthis Ġ[ Abstract Builder ] Ġclass . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun ĠsetUp Builder (): ĠAbstract Builder ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCallback Ġmethod Ġprovided Ġby Ġthis Ġ[ Abstract Base Fragment ], Ġm imic Ġbehavior Ġof Ġ[ Fragment . on View Created ] ĊĠĠĠĠ Ġ* Ġrequires Ġ** super ** Ġcall ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Call Super ĊĠĠĠ Ġopen Ġfun Ġon View Ready ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( builder ?. is Cache Fragment Ġ== Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Hidden Changed ( false ) ĊĠĠĠ Ġ} Ċ }