package Ġcom . prog de elite . dca . language Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . activity . On Back Pressed Callback Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . view . Window Insets Controller Compat Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . view binding . View Binding Ċ import Ġcom . prog de elite . dca . MainActivity Ċ import Ġcom . prog de elite . dca . R Ċ import Ġcom . prog de elite . dca . util _ extension . get Shared Prefs Ċ import Ġcom . prog de elite . dca . util _ extension . setColor Ċ import Ġtim ber . log . Tim ber Ċ Ċ /** Ċ Ġ* ĠBase Ġclass Ġfor Ġall Ġfragments Ġwith Ġa Ġgeneric Ġview Ġbinding Ġand Ġan Ġactivity Ġcallback , Ċ Ġ* Ġwhich Ġis Ġcleared Ġand Ġassigned Ġin Ġthe Ġlifecycle Ġmethods Ġof Ġthis Ġbase Ġfragment . Ċ Ġ* ĠThe Ġgeneric Ġview Ġbinding Ġavoids Ġboilerplate Ġcode Ġand Ġthe Ġactivity Ġcallback Ġallows Ċ Ġ* Ġany Ġextending Ġfragment Ġto Ġcall Ġmethods Ġof Ġthe Ġparent Ġactivity Ġwithout Ġcasting Ġit Ġto Ġa Ċ Ġ* Ġspecific Ġtype . Ċ Ġ**/ Ċ Ċ // Ġ 1 ) ĠCom o Ġcriar Ġuma Ġclasse Ġbase Ġpara Ġseus Ġfragments Ċ // Ġ 2 ) ĠCom o Ġautomat izar Ġe Ġsimpl ificar Ġo Ġdesenv olv imento Ġre us ando ĠcÃ³digo Ċ // Ġ 3 ) ĠCom o Ġaplic ar / us ar Ġess a Ġclasse Ġna Ġpr Ã¡t ica Ċ abstract Ġclass ĠBase Fragment < view Binding Ġ: ĠView Binding > Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġ_ binding : Ġview Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġactivity CallBack : ĠActivity Callback ? Ġ= Ġnull ĊĊĠĠĠ Ġ// Ġ 1 ) ĠCom o Ġmud ar Ġde Ġidi oma Ġsem Ġre - in iciar Ġseu Ġapp Ġ( Model ĠView ĠLanguage ) ĊĠĠĠ Ġ// Ġ 2 ) ĠCom o Ġt orn ar Ġuma Ġsimp les Ġmud an Ã§a Ġde Ġidi oma Ġem Ġuma Ġexperi Ãªncia Ġdiv ert ida / dif ern ci ada Ġpara Ġo ĠusuÃ¡rio ĊĠĠĠ Ġ// Ġ 3 ) ĠOn de Ġdefin ir Ġos Ġrecursos Ġde Ġtrad uÃ§Ã£o Ġn este Ġmodelo Ġ( raw ) ĊĠĠĠ Ġ// Ġ 3 ) ĠCom o Ġusar Ġna Ġpr Ã¡t ica Ġe Ġcomo Ġanim ar Ġa Ġtro ca Ġde Ġidi omas Ġ( total Ġli ber d ade Ġde Ġcustom izaÃ§Ã£o ) ĊĠĠĠ Ġprivate Ġval Ġtranslation Model : ĠLanguage ViewModel Ġby Ġview Models () ĊĊĠĠĠ Ġprotected Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġset StatusBar Color () ĊĠĠĠĠĠĠĠ Ġtranslation Model . translate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ 1 ) Ġcomo Ġalter ar Ġcor Ġstatus Ġbar Ġ( cri ando Ġl Ã³g ica ) ĊĠĠĠ Ġ// Ġ 2 ) Ġcomo Ġgar ant ir Ġcores Ġentre Ġfragments ĊĠĠĠ Ġ// Ġ 3 ) Ġcomo Ġaltern ar Ġentre Ġtem as Ġdiferentes ĊĠĠĠ Ġprivate Ġfun Ġset StatusBar Color () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠisIn verted Ġ= Ġhas In verted StatusBar () ĊĠĠĠĠĠĠĠ Ġval Ġstatus Bar Color Ġ= ĠContext Compat . getColor ( require Context (), Ġif Ġ( isIn verted ) ĠR . color . status Bar Color In verted Ġelse ĠR . color . status Bar Color ) ĊĠĠĠĠĠĠĠ Ġactivity ?. window ?. let Ġ{ Ġwindow Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . status Bar Color Ġ= Ġstatus Bar Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . navigation Bar Color Ġ= Ġstatus Bar Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Bar Is Light Ġ= Ġ!( is Dark Mode () Ġ|| ĠisIn verted ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Insets Controller Compat ( window , Ġwindow . decor View ). is Appearance Light StatusBar s Ġ= Ġstatus Bar Is Light ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Insets Controller Compat ( window , Ġwindow . decor View ). is Appearance Light Navigation Bars Ġ= Ġstatus Bar Is Light ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Dark Mode (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( resources . configuration ?. ui Mode ?. and ( Configuration . UI _ MODE _ N IGHT _ MASK )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfiguration . UI _ MODE _ N IGHT _ YES Ġ-> Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfiguration . UI _ MODE _ N IGHT _ NO Ġ-> Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfiguration . UI _ MODE _ N IGHT _ UNDEFINED Ġ-> Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġhas In verted StatusBar (): ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġ// ĠDET AL HE ĠIMPORT AN TE ĊĠĠĠĠĠĠĠ Ġtranslation Model . observable Language Resource . observe ( view Lifecycle Owner ) Ġ{ Ġtranslate Ui ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġtranslation Model . init App Language ( require Context (), Ġrequire Context (). get Shared Prefs ()) ĊĠĠĠĠĠĠĠ Ġinitialize Ui () ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( show ActionBar Option Menu ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġshow ActionBar Option Menu (): ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĠOne Ġof Ġthose : ĠApp Languages Settings Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġset Language ( app Language : ĠString ){ ĊĠĠĠĠĠĠĠ Ġtranslation Model . set App Language ( require Context (), Ġapp Language , Ġrequire Context (). get Shared Prefs ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠUsed Ġto Ġtranslate ĠUI Ġdynamically Ġwithout Ġre - starting / re - loading Ġthe Ġapp Ġpossibly Ġlo osing Ġdata / states / flows Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġtranslate Ui ( resource : ĠLanguage Resource ) ĊĊĠĠĠ Ġ/** ĠIn fl ates Ġand Ġreturns Ġthe Ġfragment 's Ġcorresponding Ġview Ġbinding . ĊĠĠĠĠ Ġ* ĠEx : Your ClassName Binding . inflate ( layout Inflater ) Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġget View Binding (): Ġview Binding ĊĊĠĠĠ Ġ/** Ġfragment Ġmethod Ġto Ġinitialize ĠUI Ġcomponents . Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġinitialize Ui () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= Ġget View Binding () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , container : ĠViewGroup ?, savedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ_ binding ?. root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCast Ġthe Ġcontext Ġto Ġthe Ġinterface Ġimplemented Ġin Ġthe Ġhost Ġactivity , ĊĠĠĠĠ Ġ* Ġso Ġwe Ġcan Ġaccess Ġactivity Ġmethods Ġfrom Ġall Ġfragments Ġin Ġthat Ġactivity . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity CallBack Ġ= Ġcontext Ġas ĠActivity Callback ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( class CastException : ĠClass CastException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d ( class CastException , Ġ" The Ġactivity Ġdoes Ġnot Ġimplement Ġthe Ġactivity Ġcallback ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠClear Ġthe Ġactivity Ġcallback Ġbinding Ġto Ġavoid Ġmemory Ġle aks . Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Detach () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Detach () ĊĠĠĠĠĠĠĠ Ġactivity CallBack Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠClear Ġthe Ġview Ġbinding Ġto Ġavoid Ġmemory Ġle aks . Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAllow Ġcustom Ġback Ġpressed Ġactions Ġin Ġfragments , ĊĠĠĠĠ Ġ* Ġwhich Ġget Ġexecuted Ġbefore Ġthe Ġdefault Ġbehavior ĊĠĠĠĠ Ġ* Ġof Ġthe Ġactivity Â ´ s Ġon Back Pressed ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġset On Back Pressed Callback ( back Press Action : Ġ() Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcallback : ĠOn Back Pressed Callback Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠOn Back Pressed Callback ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle On Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback Press Action () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrequire Activity (). on Back Pressed Dispatcher . add Callback ( this , Ġcallback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġlog ( msg : ĠString ) Ġ= ĠTim ber . d ( msg ) ĊĊĠĠĠ Ġ// Ġ 1 ) Ġcomo Ġe Ġon de Ġdefin ir Ġo Ġprogress bar Ġda ĠaplicaÃ§Ã£o ĊĠĠĠ Ġ// Ġ 2 ) ĠCom o Ġexib ir Ġou Ġes con der Ġo Ġprogress bar ĊĠĠĠ Ġ// Ġ 3 ) Ġcomo Ġch amar Ġos Ġmet od os Ġpart indo Ġdo Ġfragment ĊĠĠĠ Ġfun Ġstart Loading () Ġ= Ġactivity CallBack ?. show Loading Spinner () ĊĠĠĠ Ġfun Ġstop Loading () Ġ= Ġactivity CallBack ?. hide Loading Spinner () ĊĊĠĠĠ Ġ// Ġ 1 ) ĠCom o Ġse Ġcom unic ar Ġcom Ġa Ġmain Ġactivity ĊĠĠĠ Ġ// Ġ 2 ) Ġcomo Ġdefin ir Ġcallbacks ĊĠĠĠ Ġ// Ġ 3 ) Ġcomo Ġch amar Ġos Ġmet od os Ġpart indo Ġdo Ġfragment ĊĠĠĠ Ġfun Ġshow AppBar Back Button ( show : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( show ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġback Arrow Ġ= ĠContext Compat . get Drawable ( require Context (), ĠR . drawable . ic _ back ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġback Arrow ?. setColor ( require Context (), ĠR . color . image _ button ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity CallBack Ġas ĠMainActivity ). support ActionBar ?. set Home As Up Indicator ( back Arrow ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity CallBack ?. show AppBar Back Button ( show ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity CallBack ?. show AppBar Back Button ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow AppBar Title () Ġ= Ġactivity CallBack ?. show AppBar Back Button ( true ) ĊĠĠĠ Ġfun Ġhide AppBar Title () Ġ= Ġactivity CallBack ?. show AppBar Back Button ( false ) ĊĠĠĠ Ġfun Ġshow ActionBar () Ġ= Ġactivity CallBack ?. show ActionBar ( true ) ĊĠĠĠ Ġfun Ġhide ActionBar () Ġ= Ġactivity CallBack ?. show ActionBar ( false ) Ċ }