package Ġcom . mike pen z . material drawer . widget Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Type face Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View . OnClickListener Ċ import Ġandroid . view . View . On Long ClickListener Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . content . res . AppCompat Resources Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġandroidx . constraint layout . widget . Guide line Ċ import Ġandroidx . core . view . View Compat Ċ import Ġcom . mike pen z . material drawer . R Ċ import Ġcom . mike pen z . material drawer . holder . Dim en Holder Ċ import Ġcom . mike pen z . material drawer . holder . Image Holder Ċ import Ġcom . mike pen z . material drawer . holder . String Holder Ċ import Ġcom . mike pen z . material drawer . model . interfaces . Color ful Badge able Ċ import Ġcom . mike pen z . material drawer . model . interfaces . ID raw er Item Ċ import Ġcom . mike pen z . material drawer . model . interfaces . I Profile Ċ import Ġcom . mike pen z . material drawer . util .* Ċ import Ġcom . mike pen z . material drawer . view . Be zel ImageView Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠThis Ġview Ġoffers Ġsupport Ġto Ġadd Ġan Ġaccount Ġswitch er Ġto Ġthe Ġ[ Material Drawer Slider View ] Ċ Ġ* ĠIt Ġwill Ġhook Ġonto Ġthe Ġ[ Material Drawer Slider View ] Ġand Ġcoordinate Ġupdating Ġand Ġshowing Ġthe Ġproper Ġset Ġof Ġelements Ċ Ġ*/ Ċ open Ġclass ĠAccount Header View Ġ@ Jvm Over loads Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style Attr : ĠInt Ġ= Ġ 0 , Ġcompact : ĠBoolean ? Ġ= Ġnull ) Ġ: ĠConstraint Layout ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĠĠĠ Ġvar Ġsaved Instance Key : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġ// Ġglobal Ġreferences Ġto Ġviews Ġwe Ġneed Ġlater ĊĠĠĠ Ġval Ġaccount Header : ĠView ĊĠĠĠ Ġval Ġstatus Bar Guide line : ĠGuide line ĊĠĠĠ Ġval Ġaccount Header Background : ĠImageView ĊĠĠĠ Ġval Ġcurrent Profile View : ĠBe zel ImageView ĊĠĠĠ Ġval Ġcurrent Profile Badge View : ĠTextView ĊĠĠĠ Ġval Ġaccount Switch er Arrow : ĠImageView ĊĠĠĠ Ġval Ġcurrent Profile Name : ĠTextView ĊĠĠĠ Ġval Ġcurrent Profile Email : ĠTextView ĊĠĠĠ Ġval Ġprofile First View : ĠBe zel ImageView ĊĠĠĠ Ġval Ġprofile First Badge View : ĠTextView ĊĠĠĠ Ġval Ġprofile Second View : ĠBe zel ImageView ĊĠĠĠ Ġval Ġprofile Second Badge View : ĠTextView ĊĠĠĠ Ġval Ġprofile Third View : ĠBe zel ImageView ĊĠĠĠ Ġval Ġprofile Third Badge View : ĠTextView ĊĊĠĠĠ Ġ/** ĠTemp or arily Ġdisable Ġinvalid ation Ġfor Ġoptimizations Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġinvalid ation Enabled : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġinvalidate Header : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġinvalidate List : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSelect s Ġthe Ġgiven Ġprofile Ġand Ġsets Ġit Ġto Ġthe Ġnew Ġactive Ġprofile ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġprofile ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġactive Profile : ĠI Profile ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcurrent Profile ĊĠĠĠĠĠĠĠ Ġset ( profile ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile ?. also Ġ{ Ġset Active Profile ( it , Ġfalse ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġglobal Ġreferences Ġto Ġthe Ġprofiles ĊĠĠĠ Ġinternal Ġvar Ġcurrent Profile : ĠI Profile ? Ġ= Ġnull ĊĠĠĠ Ġinternal Ġvar Ġprofile First : ĠI Profile ? Ġ= Ġnull ĊĠĠĠ Ġinternal Ġvar Ġprofile Second : ĠI Profile ? Ġ= Ġnull ĊĠĠĠ Ġinternal Ġvar Ġprofile Third : ĠI Profile ? Ġ= Ġnull ĊĊĠĠĠ Ġ// Ġglobal Ġstuff ĊĠĠĠ Ġinternal Ġvar Ġ_ selection List Shown Ġ= Ġfalse ĊĠĠĠ Ġvar Ġselection List Shown : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ selection List Shown ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġ_ selection List Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Selection List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġaccount Header Text Section Background Resource Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Profiles () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġdefines Ġif Ġwe Ġuse Ġthe Ġcompact Style ĊĠĠĠ Ġinternal Ġvar Ġcompact Style Ġ= Ġfalse ĊĊĠĠĠ Ġ// Ġthe Ġtype face Ġused Ġfor Ġtext Views Ġwithin Ġthe ĠAccount Header ĊĠĠĠ Ġvar Ġtype face : ĠType face ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreconstruct Header () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġthe Ġtype face Ġused Ġfor Ġname ĠtextView Ġonly . Ġoverrides Ġtype face ĊĠĠĠ Ġvar Ġname Type face : ĠType face ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreconstruct Header () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġthe Ġtype face Ġused Ġfor Ġemail ĠtextView Ġonly . Ġoverrides Ġtype face ĊĠĠĠ Ġvar Ġemail Type face : ĠType face ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreconstruct Header () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġset Ġthe Ġaccount Ġheader Ġheight ĊĠĠĠ Ġvar Ġheight : ĠDim en Holder ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreconstruct Header () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// the Ġcurrent Ġselected Ġprofile Ġis Ġvisible Ġin Ġthe Ġlist ĊĠĠĠ Ġvar Ġcurrent Hidden In List Ġ= Ġfalse ĊĊĠĠĠ Ġ// set Ġto Ġhide Ġthe Ġfirst Ġor Ġsecond Ġline ĊĠĠĠ Ġvar Ġselection First Line Shown Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Header And List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġselection Second Line Shown Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Header And List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// set Ġone Ġof Ġthese Ġto Ġdefine Ġthe Ġtext Ġin Ġthe Ġfirst Ġor Ġsecond Ġline Ġwith Ġin Ġthe Ġaccount Ġselector ĊĠĠĠ Ġvar Ġselection First Line : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Header And List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġselection Second Line : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Header And List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġset Ġno Ġdivider Ġbelow Ġthe Ġheader ĊĠĠĠ Ġvar Ġpadding Below Header Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslider View ?. header Padding Ġ= Ġpadding Below Header ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġset Ġno Ġdivider Ġbelow Ġthe Ġheader ĊĠĠĠ Ġvar Ġdivider Below Header Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslider View ?. header Divider Ġ= Ġdivider Below Header ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// the Ġbackground Ġfor Ġthe Ġheader ĊĠĠĠ Ġvar Ġheader Background : ĠImage Holder ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ?. apply To ( account Header Background , ĠDraw er Image Loader . Tags . ACCOUNT _ HEADER . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// background Ġscale Ġtype ĊĠĠĠ Ġvar Ġheader Background Scale Type : ĠImageView . Scale Type ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġaccount Header Background . scale Type ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Header Background . scale Type Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// profile Ġimages Ġin Ġthe Ġheader Ġare Ġshown Ġor Ġnot ĊĠĠĠ Ġvar Ġprofile Images Visible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Profiles () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// only Ġthe Ġmain Ġprofile Ġimage Ġis Ġvisible ĊĠĠĠ Ġvar Ġonly Main Profile Image Visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Profiles () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// show Ġsmall Ġprofile Ġimages Ġbut Ġhide ĠMain Profile Image ĊĠĠĠ Ġvar Ġonly Small Profile Images Visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Profiles () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// close Ġthe Ġdrawer Ġafter Ġa Ġprofile Ġwas Ġclicked Ġin Ġthe Ġlist ĊĠĠĠ Ġvar Ġclose Drawer On Profile List Click : ĠBoolean ? Ġ= Ġnull ĊĊĠĠĠ Ġ// reset Ġthe Ġdrawer Ġlist Ġto Ġthe Ġmain Ġdrawer Ġlist Ġafter Ġthe Ġprofile Ġwas Ġclicked Ġin Ġthe Ġlist ĊĠĠĠ Ġvar Ġreset Drawer On Profile List Click Ġ= Ġtrue ĊĊĠĠĠ Ġ// Ġset Ġthe Ġprofile Ġimages Ġclick able Ġor Ġnot ĊĠĠĠ Ġvar Ġprofile Images Clickable Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Profiles () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġset Ġto Ġuse Ġthe Ġalternative Ġprofile Ġheader Ġswitching ĊĠĠĠ Ġvar Ġalternative Profile Header Switch ing Ġ= Ġfalse ĊĊĠĠĠ Ġ// Ġenable Ġ 3 Ġsmall Ġheader Ġpre views ĊĠĠĠ Ġvar Ġthree Small Profile Images Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Profiles () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġenable Ġto Ġshow Ġbad ges Ġon Ġsmall Ġprofile Ġimages ĊĠĠĠ Ġvar Ġdisplay Bad ges On Small Profile Images Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Profiles () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// the Ġdelay Ġwhich Ġis Ġwait ed Ġbefore Ġthe Ġdrawer Ġis Ġclosed ĊĠĠĠ Ġvar Ġon Profile Click Drawer Close Delay Ġ= Ġ 1 0 0 ĊĊĠĠĠ Ġ// Ġthe Ġon Account Header Profile Image Listener Ġto Ġset ĊĠĠĠ Ġvar Ġon Account Header Profile Image Listener : Ġ(( view : ĠView , Ġprofile : ĠI Profile , Ġcurrent : ĠBoolean ) Ġ-> ĠBoolean )? Ġ= Ġnull ĊĊĠĠĠ Ġ// Ġthe Ġon Account Header Selection Listener Ġto Ġset ĊĠĠĠ Ġvar Ġon Account Header Selection View ClickListener : Ġ(( view : ĠView , Ġprofile : ĠI Profile ) Ġ-> ĠBoolean )? Ġ= Ġnull ĊĊĠĠĠ Ġ// set Ġthe Ġselection Ġlist Ġenabled Ġif Ġthere Ġis Ġonly Ġa Ġsingle Ġprofile ĊĠĠĠ Ġvar Ġselection List Enabled For Single Profile Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Profiles () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// set Ġthe Ġselection Ġenabled Ġdisabled ĊĠĠĠ Ġvar Ġselection List Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Profiles () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġthe Ġprofiles Ġto Ġdisplay ĊĠĠĠ Ġvar Ġprofiles : ĠMutable List < I Profile >? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ?. map NotNull Ġ{ Ġit Ġas ? ĠID raw er Item < *> Ġ} ?. forEach Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslider View ?. id Distribut or ?. check Id ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Header And List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġthe Ġclick Ġlistener Ġto Ġbe Ġfired Ġon Ġprofile Ġor Ġselection Ġclick ĊĠĠĠ Ġvar Ġon Account Header Listener : Ġ(( view : ĠView ?, Ġprofile : ĠI Profile , Ġcurrent : ĠBoolean ) Ġ-> ĠBoolean )? Ġ= Ġnull ĊĊĠĠĠ Ġ// the Ġon Ġlong Ġclick Ġlistener Ġto Ġbe Ġfired Ġon Ġprofile Ġlong Click Ġinside Ġthe Ġlist ĊĠĠĠ Ġvar Ġon Account Header Item Long ClickListener : Ġ(( view : ĠView ?, Ġprofile : ĠI Profile , Ġcurrent : ĠBoolean ) Ġ-> ĠBoolean )? Ġ= Ġnull ĊĊĠĠĠ Ġ// Ġthe Ġdrawer Ġto Ġset Ġthe ĠAccount Switch er Ġfor ĊĠĠĠ Ġvar Ġslider View : ĠMaterial Drawer Slider View ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field ?. account Header Ġ!= Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield ?. account Header Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġmini Drawer ĊĠĠĠ Ġval Ġmini Drawer : ĠMini Drawer Slider View ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġslider View ?. mini Drawer ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġon Profile ClickListener Ġto Ġnotify ĠonClick Ġon Ġthe Ġcurrent Ġprofile Ġimage ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġon Current Profile ClickListener Ġ= ĠOn ClickListener Ġ{ Ġv Ġ-> Ġon Profile Image Click ( v , Ġtrue ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġon Profile ClickListener Ġto Ġnotify ĠonClick Ġon Ġa Ġprofile Ġimage ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġon Profile ClickListener Ġ= ĠOn ClickListener Ġ{ Ġv Ġ-> Ġon Profile Image Click ( v , Ġfalse ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġon Profile Long ClickListener Ġto Ġcall Ġthe Ġon Profile Image Long Click Ġon Ġthe Ġcurrent Ġprofile Ġimage ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġon Current Profile Long ClickListener Ġ= ĠOn Long ClickListener Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( on Account Header Profile Image Listener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprofile Ġ= Ġv . getTag ( R . id . material _ drawer _ profile _ header ) Ġas ĠI Profile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On Long ClickListener Ġon Account Header Profile Image Listener ?. invoke ( v , Ġprofile , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġon Profile Long ClickListener Ġto Ġcall Ġthe Ġon Profile Image Long Click Ġon Ġa Ġprofile Ġimage ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġon Profile Long ClickListener Ġ= ĠOn Long ClickListener Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( on Account Header Profile Image Listener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprofile Ġ= Ġv . getTag ( R . id . material _ drawer _ profile _ header ) Ġas ĠI Profile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On Long ClickListener Ġon Account Header Profile Image Listener ?. invoke ( v , Ġprofile , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġget Ġthe Ġcurrent Ġselection ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġval Ġcurrent Selection : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Profiles Ġ= Ġthis . profiles Ġ?: Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmCurrent Profile Ġ= Ġthis . current Profile Ġ?: Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( i , Ġprofile ) Ġin Ġm Profiles . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( profile Ġ=== ĠmCurrent Profile ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġon Drawer ItemClickListener Ġto Ġcatch Ġthe Ġselection Ġfor Ġthe Ġnew Ġprofile ! ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġon Drawer ItemClickListener : Ġ(( View ?, ĠID raw er Item <* >, ĠInt ) Ġ-> ĠBoolean ) Ġ= Ġ{ Ġview : ĠView ?, Ġdrawer Item : ĠID raw er Item <* >, Ġposition : ĠInt Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġis Current Selected Profile : ĠBoolean Ġ= Ġif Ġ( drawer Item Ġis ĠI Profile Ġ&& Ġdrawer Item . is Selectable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġswitch Profiles ( drawer Item Ġas ĠI Profile ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( reset Drawer On Profile List Click ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslider View ?. on Drawer ItemClickListener Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// wrap Ġthe Ġon Selection Ġcall Ġand Ġthe Ġreset Ġstuff Ġwithin Ġa Ġhandler Ġto Ġprevent Ġlag ĊĠĠĠĠĠĠĠ Ġif Ġ( reset Drawer On Profile List Click Ġ&& Ġslider View Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreset Drawer Content () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// notify Ġthe ĠMini Drawer Ġabout Ġthe Ġclicked Ġprofile Ġ( only Ġif Ġone Ġexists Ġand Ġis Ġhook ed Ġto Ġthe ĠDraw er ĊĠĠĠĠĠĠĠ Ġmini Drawer ?. on Profile Click () ĊĊĠĠĠĠĠĠĠ Ġvar Ġconsumed Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( drawer Item Ġis ĠI Profile ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsumed Ġ= Ġon Account Header Listener ?. invoke ( view , Ġdrawer Item Ġas ĠI Profile , Ġis Current Selected Profile ) Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// if Ġa Ġcustom Ġbehavior Ġwas Ġchosen Ġvia Ġthe ĠClose Drawer On Profile List Click Ġthen Ġuse Ġthis . Ġelse Ġreact Ġon Ġthe Ġresult Ġof Ġthe Ġon Profile Changed Ġlistener ĊĠĠĠĠĠĠĠ Ġclose Drawer On Profile List Click ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsumed Ġ= Ġconsumed Ġ&& Ġ(! it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// tot ally Ġcustom Ġhandling Ġof Ġthe Ġdrawer Ġbehavior Ġas Ġotherwise Ġthe Ġselection Ġof Ġthe Ġprofile Ġlist Ġis Ġset Ġto Ġthe ĠDraw er ĊĠĠĠĠĠĠĠ Ġif Ġ(! consumed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// close Ġthe Ġdrawer Ġafter Ġclick ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslider View ?. close Drawer Delayed () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// consume Ġthe Ġevent Ġto Ġprevent Ġsetting Ġthe Ġclicked Ġitem Ġas Ġselected Ġin Ġthe Ġalready Ġswitched Ġitem Ġlist ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġon Drawer Item Long ClickListener Ġto Ġcatch Ġthe Ġlong Click Ġfor Ġa Ġprofile ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġon Drawer Item Long ClickListener : Ġ(( View ?, ĠID raw er Item <* >, ĠInt ) Ġ-> ĠBoolean ) Ġ= Ġ{ Ġview : ĠView ?, Ġdrawer Item : ĠID raw er Item <* >, Ġposition : ĠInt Ġ-> ĊĠĠĠĠĠĠĠ Ġ// if Ġa Ġlong ClickListener Ġwas Ġdefined Ġuse Ġit ĊĠĠĠĠĠĠĠ Ġif Ġ( on Account Header Item Long ClickListener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Current Selected Profile : ĠBoolean Ġ= Ġdrawer Item . isSelected ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( drawer Item Ġis ĠI Profile ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Account Header Item Long ClickListener ?. invoke ( view , Ġdrawer Item Ġas ĠI Profile , Ġis Current Selected Profile ) Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheader Layout Ġ= Ġcontext . resolve Styled HeaderValue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompact Style Ġ= Ġcompact Ġ?: Ġit . getBoolean ( R . style able . Account Header View _ material Drawer Compact Style , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . getResource Id ( R . style able . Account Header View _ material Drawer Header Layout , Ġif Ġ( compact Style ) ĠR . layout . material _ drawer _ compact _ header Ġelse ĠR . layout . material _ drawer _ header ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġthe Ġaccount Ġheader ĊĠĠĠĠĠĠĠ Ġaccount Header Ġ= ĠLayoutInflater . from ( context ). inflate ( header Layout , Ġthis , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġthe Ġheader Ġview Ġwithin Ġthe Ġcontainer ĊĠĠĠĠĠĠĠ Ġstatus Bar Guide line Ġ= ĠfindViewById ( R . id . material _ drawer _ status bar _ guide line ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġthe Ġbackground Ġview ĊĠĠĠĠĠĠĠ Ġaccount Header Background Ġ= ĠfindViewById ( R . id . material _ drawer _ account _ header _ background ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġthe Ġarrow Ġ: D ĊĠĠĠĠĠĠĠ Ġaccount Switch er Arrow Ġ= ĠfindViewById ( R . id . material _ drawer _ account _ header _ text _ switch er ) ĊĊĠĠĠĠĠĠĠ Ġ// get Ġthe Ġfields Ġfor Ġthe Ġname ĊĠĠĠĠĠĠĠ Ġcurrent Profile View Ġ= ĠfindViewById ( R . id . material _ drawer _ account _ header _ current ) ĊĠĠĠĠĠĠĠ Ġcurrent Profile Badge View Ġ= ĠfindViewById ( R . id . material _ drawer _ account _ header _ current _ badge ) ĊĠĠĠĠĠĠĠ Ġcurrent Profile Name Ġ= ĠfindViewById ( R . id . material _ drawer _ account _ header _ name ) ĊĠĠĠĠĠĠĠ Ġcurrent Profile Email Ġ= ĠfindViewById ( R . id . material _ drawer _ account _ header _ email ) ĊĊĠĠĠĠĠĠĠ Ġprofile First View Ġ= ĠfindViewById ( R . id . material _ drawer _ account _ header _ small _ first ) ĊĠĠĠĠĠĠĠ Ġprofile First Badge View Ġ= ĠfindViewById ( R . id . material _ drawer _ account _ header _ small _ first _ badge ) ĊĠĠĠĠĠĠĠ Ġprofile Second View Ġ= ĠfindViewById ( R . id . material _ drawer _ account _ header _ small _ second ) ĊĠĠĠĠĠĠĠ Ġprofile Second Badge View Ġ= ĠfindViewById ( R . id . material _ drawer _ account _ header _ small _ second _ badge ) ĊĠĠĠĠĠĠĠ Ġprofile Third View Ġ= ĠfindViewById ( R . id . material _ drawer _ account _ header _ small _ third ) ĊĠĠĠĠĠĠĠ Ġprofile Third Badge View Ġ= ĠfindViewById ( R . id . material _ drawer _ account _ header _ small _ third _ badge ) ĊĊĠĠĠĠĠĠĠ Ġreconstruct Header () ĊĊĠĠĠĠĠĠĠ Ġ// the Ġdefault Ġmin Ġheader Ġheight Ġby Ġdefault Ġ 1 4 8 dp ĊĠĠĠĠĠĠĠ Ġval Ġdefault Header Min Height Ġ= Ġcontext . resources . get Dimension Pixel Size ( R . dim en . material _ drawer _ account _ header _ height ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġthe Ġin sets ĊĠĠĠĠĠĠĠ ĠView Compat . setOn Apply Window Insets Listener ( this ) Ġ{ Ġv , Ġin sets Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhandle Ġeverything Ġif Ġwe Ġhave Ġa Ġtrans luc ent Ġstatus Ġbar Ġwhich Ġonly Ġis Ġpossible Ġon ĠAPI Ġ>= Ġ 1 9 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Inset Ġ= Ġin sets . system Window Inset Top Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Bar Guide line . set Guide line Begin ( top Inset ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġresolve Height () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnew Height Ġ= Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// in Ġfact Ġit Ġmakes Ġno Ġdifference Ġif Ġwe Ġhave Ġa Ġtrans luc ent Ġstatus Bar Ġor Ġnot . Ġwe Ġwant Ġ 9 / 1 6 Ġjust Ġif Ġwe Ġare Ġnot Ġcompact ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( compact Style ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Height Ġ+= Ġtop Inset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( new Height Ġ- Ġtop Inset Ġ<= Ġdefault Header Min Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// if Ġthe Ġheight Ġ+ Ġstatus Bar Ġof Ġthe Ġheader Ġis Ġlower Ġthan Ġthe Ġrequired Ġ 1 4 8 dp Ġ+ Ġstatus Bar Ġwe Ġchange Ġthe Ġheight Ġto Ġbe Ġable Ġto Ġdisplay Ġall Ġthe Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Height Ġ= Ġdefault Header Min Height Ġ+ Ġtop Inset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// set Ġthe Ġheight Ġfor Ġthe Ġheader ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Header Height ( new Height ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġin sets ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġresolve Height (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġhandle Ġthe Ġheight Ġfor Ġthe Ġheader ĊĠĠĠĠĠĠĠ Ġvar Ġheight Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġthis . height ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġit . as Pixel ( context ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġif Ġ( compact Style ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . resources . get Dimension Pixel Size ( R . dim en . material _ drawer _ account _ header _ height _ compact ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// calculate Ġthe Ġheader Ġheight Ġby Ġgetting Ġthe Ġoptimal Ġdrawer Ġwidth Ġand Ġcalculating Ġit Ġ* Ġ 9 Ġ/ Ġ 1 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( get Opt imal Drawer Width ( context ) Ġ* ĠNAV IG ATION _ DRAW ER _ ACCOUNT _ AS PECT _ RATIO ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġheight ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreconstruct Header () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! invalid ation Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate Header Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinvalidate Header Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ// set Ġthe Ġheight Ġfor Ġthe Ġheader ĊĠĠĠĠĠĠĠ Ġset Header Height ( resolve Height ()) ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġthe Ġbackground ĊĠĠĠĠĠĠĠ Ġheader Background ?. apply To ( account Header Background , ĠDraw er Image Loader . Tags . ACCOUNT _ HEADER . name ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġthe Ġtext Ġcolor Ġto Ġuse Ġfor Ġthe Ġtext Ġsection ĊĠĠĠĠĠĠĠ Ġval ĠtextColor Ġ= Ġcontext . getHeader Selection TextColor () Ġ// ĠtextColor . apply Color ( context , ĠR . attr . material Drawer Header Selection Text , ĠR . color . material _ drawer _ header _ selection _ text ) ĊĠĠĠĠĠĠĠ Ġval Ġsub TextColor Ġ= Ġcontext . getHeader Selection Sub TextColor () Ġ Ġ// Ġthis . textColor . apply Color ( context , ĠR . attr . material Drawer Header Selection Sub text , ĠR . color . material _ drawer _ header _ selection _ sub text ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( account Header Text Section Background Resource Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Header Text Section Background Resource Ġ= Ġcontext . get Selectable Background Res () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġhandle Selection View ( current Profile , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġthe Ġarrow ĊĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= ĠAppCompat Resources . get Drawable ( context , ĠR . drawable . material _ drawer _ ico _ menu _ down ) ĊĠĠĠĠĠĠĠ Ġif Ġ( drawable Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġcontext . resources . get Dimension Pixel Size ( R . dim en . material _ drawer _ account _ header _ dropdown ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Switch er Arrow . setImage Drawable ( Fix State List Drawable ( drawable , Ġsub TextColor ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Bounds ( 0 , Ġ 0 , Ġsize , Ġsize ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Icon ics Drawable ( context , ĠMaterial Drawer Font . Icon . md f _ arrow _ drop _ down ). size ( Icon ics Size . res ( R . dim en . material _ drawer _ account _ header _ dropdown )). padding ( Icon ics Size . res ( R . dim en . material _ drawer _ account _ header _ dropdown _ padding )). color ( Icon ics Color . color List ( sub TextColor )) ĊĠĠĠĠĠĠĠ Ġ// set Ġthe Ġtype face Ġfor Ġthe ĠAccount Header ĊĠĠĠĠĠĠĠ Ġif Ġ( name Type face Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Profile Name . type face Ġ= Ġname Type face ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type face Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Profile Name . type face Ġ= Ġtype face ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( email Type face Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Profile Email . type face Ġ= Ġemail Type face ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type face Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Profile Email . type face Ġ= Ġtype face ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcurrent Profile Name . setTextColor ( textColor ) ĊĠĠĠĠĠĠĠ Ġcurrent Profile Email . setTextColor ( sub TextColor ) ĊĊĠĠĠĠĠĠĠ Ġ// calculate Ġthe Ġprofiles Ġto Ġset ĊĠĠĠĠĠĠĠ Ġcalculate Profiles () ĊĊĠĠĠĠĠĠĠ Ġ// process Ġand Ġbuild Ġthe Ġprofiles ĊĠĠĠĠĠĠĠ Ġbuild Profiles () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attached To Window () ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . KIT K AT _ WATCH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Apply Insets () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġon Selection ClickListener Ġto Ġnotify Ġthe ĠonClick Ġon Ġthe Ġcheckbox ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġon Selection ClickListener Ġ= ĠOn ClickListener Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġconsumed Ġ= Ġon Account Header Selection View ClickListener ?. invoke ( v , Ġv . getTag ( R . id . material _ drawer _ profile _ header ) Ġas ĠI Profile ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( account Switch er Arrow . visibility Ġ== ĠView . VISIBLE Ġ&& Ġ! consumed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Selection List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġa Ġnew Ġprofile Ġat Ġa Ġspecific Ġposition Ġto Ġthe Ġlist ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġprofile ĊĠĠĠĠ Ġ* Ġ@ param Ġposition ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Profile ( profile : ĠI Profile , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( profiles Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofiles Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprofiles ?. add ( position , Ġprofile ) ĊĠĠĠĠĠĠĠ Ġupdate Header And List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġadd Ġsingle Ġo re Ġmore ĠDraw er Items Ġto Ġthe ĠDraw er ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Profiles ( var arg Ġprofiles : ĠI Profile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . profiles Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . profiles Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . profiles ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . map NotNull Ġ{ Ġdi Ġ-> Ġdi Ġas ? ĠID raw er Item < *> Ġ}. forEach Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslider View ?. id Distribut or ?. check Id ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCollections . addAll < I Profile >( it , Ġ* profiles ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupdate Header And List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġremove Ġa Ġprofile Ġfrom Ġthe Ġgiven Ġposition ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Profile ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . profiles Ġ!= Ġnull Ġ&& Ġthis . profiles ?. size Ġ?: Ġ 0 Ġ> Ġposition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . profiles ?. remove At ( position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupdate Header And List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġremove Ġthe Ġprofile Ġwith Ġthe Ġgiven Ġidentifier ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Profile ById entifier ( identifier : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfound Ġ= Ġget Position ById entifier ( identifier ) ĊĠĠĠĠĠĠĠ Ġif Ġ( found Ġ> Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . profiles ?. remove At ( found ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . update Header And List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġtry Ġto Ġremove Ġthe Ġgiven Ġprofile ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Profile ( profile : ĠI Profile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġremove Profile ById entifier ( profile . identifier ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClear Ġthe Ġheader ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . profiles Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ// calculate Ġthe Ġprofiles Ġto Ġset ĊĠĠĠĠĠĠĠ Ġcalculate Profiles () ĊĠĠĠĠĠĠĠ Ġ// process Ġand Ġbuild Ġthe Ġprofiles ĊĠĠĠĠĠĠĠ Ġbuild Profiles () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġdrawer ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġattach To Slider View ( slider View : ĠMaterial Drawer Slider View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . slider View Ġ= Ġslider View ĊĊĠĠĠĠĠĠĠ Ġ// set Ġthe Ġtop Ġpadding Ġto Ġ 0 Ġas Ġthis Ġwould Ġhappen Ġwhen Ġthe ĠAccount Header Ġis Ġcreated Ġduring ĠDraw er Ġbuild Ġtime ĊĠĠĠĠĠĠĠ Ġslider View . re cyclerView . set Padding ( slider View . re cyclerView . padding Left , Ġ 0 , Ġslider View . re cyclerView . padding Right , Ġslider View . re cyclerView . padding Bottom ) ĊĊĠĠĠĠĠĠĠ Ġ// everything Ġcreated . Ġnow Ġset Ġthe Ġheader ĊĠĠĠĠĠĠĠ Ġslider View . header View Ġ= Ġthis ĊĊĠĠĠĠĠĠĠ Ġthis . slider View ?. account Header Ġ= Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġcreate Ġthe Ġdrawer Ġwith Ġthe Ġvalues Ġof Ġa Ġsaved Instance ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsaved Instance ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġwith Saved Instance ( saved Instance : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsaved Instance Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġ// Ġtry Ġto Ġrestore Ġall Ġsaved Ġvalues Ġagain ĊĠĠĠĠĠĠĠ Ġval Ġselection Ġ= Ġsaved Instance . getInt ( B UNDLE _ SELECTION _ HEADER Ġ+ Ġsaved Instance Key , Ġ- 1 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( selection Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// pre define Ġselection Ġ( should Ġbe Ġthe Ġfirst Ġelement ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofiles ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selection Ġ> Ġ- 1 Ġ&& Ġselection Ġ< Ġit . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswitch Profiles ( it [ selection ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġhelper Ġmethod Ġto Ġset Ġthe Ġheight Ġfor Ġthe Ġheader ! ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġheight ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġset Header Height ( height : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . layout Params ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . height Ġ= Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . layout Params Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlp Ġ= Ġaccount Header . layout Params ĊĠĠĠĠĠĠĠ Ġif Ġ( lp Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlp . height Ġ= Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Header . layout Params Ġ= Ġlp ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġaccount Header Background . layout Params ĊĠĠĠĠĠĠĠ Ġp . height Ġ= Ġheight ĊĠĠĠĠĠĠĠ Ġaccount Header Background . layout Params Ġ= Ġp ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġa Ġsmall Ġhelper Ġto Ġhandle Ġthe Ġselection View ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġon ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġhandle Selection View ( profile : ĠI Profile ?, Ġon : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( on ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 2 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . foreground Ġ= ĠAppCompat Resources . get Drawable ( this . context , Ġaccount Header Text Section Background Resource ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtodo Ġforeground Ġthing ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . setOnClickListener ( on Selection ClickListener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . setTag ( R . id . material _ drawer _ profile _ header , Ġprofile ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 2 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . foreground Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġforeground Ġreset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . setOnClickListener ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġhelper Ġmethod Ġto Ġcalculate Ġthe Ġorder Ġof Ġthe Ġprofiles ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġcalculate Profiles () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( profiles Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofiles Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprofiles ?. let Ġ{ Ġm Profiles Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Profile Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġset Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġm Profiles . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Profiles . size Ġ> Ġi Ġ&& Ġm Profiles [ i ]. is Selectable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( set Count Ġ== Ġ 0 Ġ&& Ġcurrent Profile Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Profile Ġ= Ġm Profiles [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( set Count Ġ== Ġ 1 Ġ&& Ġprofile First Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile First Ġ= Ġm Profiles [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( set Count Ġ== Ġ 2 Ġ&& Ġprofile Second Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Second Ġ= Ġm Profiles [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( set Count Ġ== Ġ 3 Ġ&& Ġprofile Third Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Third Ġ= Ġm Profiles [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprevious Active Profiles Ġ= ĠarrayOf ( current Profile , Ġprofile First , Ġprofile Second , Ġprofile Third ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Active Profiles Ġ= ĠarrayOf Null s < I Profile >( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġunused Profiles Ġ= ĠStack < I Profile >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtry Ġto Ġkeep Ġexisting Ġactive Ġprofiles Ġin Ġthe Ġsame Ġpositions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġm Profiles . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġm Profiles [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p . is Selectable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġused Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 .. 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( previous Active Profiles [ j ] Ġ=== Ġp ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Active Profiles [ j ] Ġ= Ġp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġused Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! used ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunused Profiles . push ( p ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactive Profiles Ġ= ĠStack < I Profile >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtry Ġto Ġfill Ġthe Ġg aps Ġwith Ġnew Ġavailable Ġprofiles ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Active Profiles [ i ] Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Profiles . push ( new Active Profiles [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! unused Profiles . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Profiles . push ( unused Profiles . pop ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreversed Active Profiles Ġ= ĠStack < I Profile >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(! active Profiles . empty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreversed Active Profiles . push ( active Profiles . pop ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġre assign Ġactive Ġprofiles ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Profile Ġ= Ġif Ġ( reversed Active Profiles . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreversed Active Profiles . pop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile First Ġ= Ġif Ġ( reversed Active Profiles . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreversed Active Profiles . pop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Second Ġ= Ġif Ġ( reversed Active Profiles . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreversed Active Profiles . pop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Third Ġ= Ġif Ġ( reversed Active Profiles . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreversed Active Profiles . pop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġhelper Ġmethod Ġto Ġswitch Ġthe Ġprofiles ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġnew Selection ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġthe Ġnew Ġselection Ġwas Ġthe Ġcurrent Ġprofile ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġswitch Profiles ( new Selection : ĠI Profile ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( new Selection Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( current Profile Ġ=== Ġnew Selection ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( alternative Profile Header Switch ing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġprev Selection Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile First Ġ=== Ġnew Selection Ġ-> Ġprev Selection Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Second Ġ=== Ġnew Selection Ġ-> Ġprev Selection Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Third Ġ=== Ġnew Selection Ġ-> Ġprev Selection Ġ= Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtmp Ġ= Ġcurrent Profile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Profile Ġ= Ġnew Selection ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( prev Selection ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġprofile First Ġ= Ġtmp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġprofile Second Ġ= Ġtmp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġprofile Third Ġ= Ġtmp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( profiles Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprevious Active Profiles Ġ= ĠArrayList < I Profile >( Arrays . asList < I Profile >( current Profile , Ġprofile First , Ġprofile Second , Ġprofile Third )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( previous Active Profiles . contains ( new Selection )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġposition Ġ= Ġ- 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( previous Active Profiles [ i ] Ġ=== Ġnew Selection ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Active Profiles . remove At ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Active Profiles . add ( 0 , Ġnew Selection ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Profile Ġ= Ġprevious Active Profiles [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile First Ġ= Ġprevious Active Profiles [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Second Ġ= Ġprevious Active Profiles [ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Third Ġ= Ġprevious Active Profiles [ 3 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Third Ġ= Ġprofile Second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Second Ġ= Ġprofile First ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile First Ġ= Ġcurrent Profile ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Profile Ġ= Ġnew Selection ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// if Ġwe Ġonly Ġshow Ġthe Ġsmall Ġprofile Ġimages Ġwe Ġhave Ġto Ġmake Ġsure Ġthe Ġfirst Ġ( would Ġbe Ġthe Ġcurrent Ġselected ) Ġprofile Ġis Ġalso Ġshown ĊĠĠĠĠĠĠĠ Ġif Ġ( only Small Profile Images Visible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Third Ġ= Ġprofile Second ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Second Ġ= Ġprofile First ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile First Ġ= Ġcurrent Profile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// current Profile Ġ= Ġprofile Third ; ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbuild Profiles () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġhelper Ġmethod Ġto Ġbuild Ġthe Ġviews Ġfor Ġthe Ġui ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġbuild Profiles () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! invalid ation Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate List Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinvalidate List Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġcurrent Profile View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġcurrent Profile Badge View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġaccount Switch er Arrow . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġprofile First View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġprofile First View . setOnClickListener ( null ) ĊĠĠĠĠĠĠĠ Ġprofile First Badge View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġprofile Second View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġprofile Second View . setOnClickListener ( null ) ĊĠĠĠĠĠĠĠ Ġprofile Second Badge View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġprofile Third View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġprofile Third View . setOnClickListener ( null ) ĊĠĠĠĠĠĠĠ Ġprofile Third Badge View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġcurrent Profile Name . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġcurrent Profile Email . text Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġhandle Selection View ( current Profile , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval ĠmCurrent Profile Ġ= Ġthis . current Profile ĊĠĠĠĠĠĠĠ Ġval Ġm Profiles Ġ= Ġthis . profiles ĊĠĠĠĠĠĠĠ Ġif Ġ( m Current Profile Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( profile Images Visible Ġ|| Ġonly Main Profile Image Visible ) Ġ&& Ġ! only Small Profile Images Visible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Profile View . content Description Ġ= ĠmCurrent Profile . description ?. getText ( context ) Ġ?: ĠmCurrent Profile . name ?. getText ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġcurrent Profile View . context . getString ( R . string . material _ drawer _ profile _ content _ description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Image Or Placeholder ( current Profile View , ĠmCurrent Profile . icon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( profile Images Clickable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Profile View . setOnClickListener ( on Current Profile ClickListener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Profile View . setOn Long ClickListener ( on Current Profile Long ClickListener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Profile View . disable Touch Feedback ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Profile View . disable Touch Feedback ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Profile View . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Profile View . invalidate () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbadge Visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( m Current Profile Ġas ? ĠColor ful Badge able )?. let Ġ{ Ġbadge able Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbadge Visible Ġ= ĠString Holder . apply To Or Hide ( badge able . badge , Ġcurrent Profile Badge View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( badge Visible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbadge able . badge Style ?. style ( current Profile Badge View , Ġcontext . get Primary Drawer TextColor ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype face ?. let Ġ{ Ġtype face Ġ-> Ġcurrent Profile Badge View . type face Ġ= Ġtype face Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Profile Badge View . visibility Ġ= Ġif Ġ( badge Visible ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( compact Style ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Profile View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Profile Badge View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Selection View ( m Current Profile , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Switch er Arrow . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Profile View . setTag ( R . id . material _ drawer _ profile _ header , ĠmCurrent Profile ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠString Holder . apply To ( m Current Profile . name , Ġcurrent Profile Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠString Holder . apply To ( m Current Profile . description , Ġcurrent Profile Email ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠApply Ġthe Ġprofile Ġinformation Ġto Ġthe Ġprovided ĠimageView ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun ĠI Profile ?. apply Profile ( imageView : ĠBe zel ImageView , Ġbadge View : ĠTextView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Image Or Placeholder ( imageView , Ġthis . icon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . setTag ( R . id . material _ drawer _ profile _ header , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . content Description Ġ= Ġthis . description ?. getText ( context ) Ġ?: Ġthis . name ?. getText ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠimageView . context . getString ( R . string . material _ drawer _ profile _ content _ description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( profile Images Clickable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . setOnClickListener ( on Profile ClickListener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . setOn Long ClickListener ( on Profile Long ClickListener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . disable Touch Feedback ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . disable Touch Feedback ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . invalidate () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbadge Visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( display Bad ges On Small Profile Images ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( this Ġas ? ĠColor ful Badge able )?. let Ġ{ Ġbadge able Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbadge Visible Ġ= ĠString Holder . apply To Or Hide ( badge able . badge , Ġbadge View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( badge Visible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbadge able . badge Style ?. style ( badge View , Ġcontext . get Primary Drawer TextColor ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype face ?. let Ġ{ Ġtype face Ġ-> Ġbadge View . type face Ġ= Ġtype face Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbadge View . visibility Ġ= Ġif Ġ( badge Visible ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( profile Images Visible Ġ&& Ġ! only Main Profile Image Visible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile First . apply Profile ( profile First View , Ġprofile First Badge View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Second . apply Profile ( profile Second View , Ġprofile Second Badge View ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( three Small Profile Images ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Third . apply Profile ( profile Third View , Ġprofile Third Badge View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( m Profiles Ġ!= Ġnull Ġ&& Ġm Profiles . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprofile Ġ= Ġm Profiles [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Tag ( R . id . material _ drawer _ profile _ header , Ġprofile ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Selection View ( m Current Profile , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Switch er Arrow . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! selection First Line Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Profile Name . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( selection First Line )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Profile Name . text Ġ= Ġselection First Line ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! selection Second Line Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Profile Email . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( selection Second Line )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Profile Email . text Ġ= Ġselection Second Line ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// if Ġwe Ġdisabled Ġthe Ġlist ĊĠĠĠĠĠĠĠ Ġif Ġ(! selection List Enabled Ġ|| Ġ! selection List Enabled For Single Profile Ġ&& Ġprofile First Ġ== Ġnull Ġ&& Ġ( m Profiles Ġ== Ġnull Ġ|| Ġm Profiles ?. size Ġ== Ġ 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Switch er Arrow . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Selection View ( null , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// if Ġwe Ġdisabled Ġthe Ġlist Ġbut Ġstill Ġhave Ġset Ġa Ġcustom Ġlistener ĊĠĠĠĠĠĠĠ Ġif Ġ( on Account Header Selection View ClickListener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Selection View ( m Current Profile , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġsmall Ġhelper Ġmethod Ġto Ġset Ġan Ġprofile Ġimage Ġor Ġa Ġplaceholder ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġiv ĊĠĠĠĠ Ġ* Ġ@ param Ġimage Holder ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġset Image Or Placeholder ( iv : ĠImageView , Ġimage Holder : ĠImage Holder ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// cancel Ġprevious Ġstarted Ġimage Ġloading Ġprocesses ĊĠĠĠĠĠĠĠ ĠDraw er Image Loader . instance . cancel Image ( iv ) ĊĠĠĠĠĠĠĠ Ġ// set Ġthe Ġplaceholder ĊĠĠĠĠĠĠĠ Ġiv . setImage Drawable ( Drawer Image Loader . instance . image Loader ?. placeholder ( iv . context , ĠDraw er Image Loader . Tags . PROFILE . name )) ĊĠĠĠĠĠĠĠ Ġ// set Ġthe Ġreal Ġimage Ġ( prob ably Ġalso Ġthe Ġuri ) ĊĠĠĠĠĠĠĠ Ġimage Holder ?. apply To ( iv , ĠDraw er Image Loader . Tags . PROFILE . name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġcalls Ġthe Ġm On Account HE ader Profile Image Listener Ġand Ġcontinues Ġwith Ġthe Ġactions Ġafterwards ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġv ĊĠĠĠĠ Ġ* Ġ@ param Ġcurrent ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġon Profile Image Click ( v : ĠView , Ġcurrent : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprofile Ġ= Ġv . getTag ( R . id . material _ drawer _ profile _ header ) Ġas ĠI Profile ĊĊĠĠĠĠĠĠĠ Ġval Ġconsumed Ġ= Ġon Account Header Profile Image Listener ?. invoke ( v , Ġprofile , Ġcurrent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ// if Ġthe Ġevent Ġwas Ġalready Ġconsumed Ġby Ġthe Ġclick Ġdon 't Ġcontinue . Ġnote Ġthat Ġthis Ġwill Ġalso Ġstop Ġthe Ġprofile Ġchange Ġevent ĊĠĠĠĠĠĠĠ Ġif Ġ(! consumed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Profile Click ( v , Ġcurrent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġon Profile Click ( v : ĠView , Ġcurrent : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprofile Ġ= Ġv . getTag ( R . id . material _ drawer _ profile _ header ) Ġas ĠI Profile ĊĠĠĠĠĠĠĠ Ġswitch Profiles ( profile ) ĊĊĠĠĠĠĠĠĠ Ġ// reset Ġthe Ġdrawer Ġcontent ĊĠĠĠĠĠĠĠ Ġreset Drawer Content () ĊĊĠĠĠĠĠĠĠ Ġ// notify Ġthe ĠMini Drawer Ġabout Ġthe Ġclicked Ġprofile Ġ( only Ġif Ġone Ġexists Ġand Ġis Ġhook ed Ġto Ġthe ĠDraw er ĊĠĠĠĠĠĠĠ Ġmini Drawer ?. on Profile Click () ĊĊĠĠĠĠĠĠĠ Ġ// notify Ġabout Ġthe Ġchanged Ġprofile ĊĠĠĠĠĠĠĠ Ġval Ġconsumed Ġ= Ġon Account Header Listener ?. invoke ( v , Ġprofile , Ġcurrent ) Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ(! consumed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Profile Click Drawer Close Delay Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHandler (). post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslider View ?. drawer Layout ?. close Draw ers () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġon Profile Click Drawer Close Delay . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslider View ?. drawer Layout ?. close Draw ers () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġhelper Ġmethod Ġto Ġtoggle Ġthe Ġcollection ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġtoggle Selection List () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġslider View Ġ= Ġslider View Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġ// if Ġwe Ġalready Ġshow Ġthe Ġlist . Ġreset Ġeverything Ġinstead ĊĠĠĠĠĠĠĠ Ġ_ selection List Shown Ġ= Ġif Ġ( slider View . sw itched Drawer Content ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreset Drawer Content () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// build Ġand Ġset Ġthe Ġdrawer Ġselection Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Drawer Selection List () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġupdate Ġthe Ġarrow Ġimage Ġwithin Ġthe Ġdrawer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Switch er Arrow . clear Animation () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . animate ( account Switch er Arrow ). rotation ( 1 8 0 f ). start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġhelper Ġmethod Ġto Ġbuild Ġand Ġset Ġthe Ġdrawer Ġselection Ġlist ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġbuild Drawer Selection List () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġselected Position Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġvar Ġposition Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġprofile Drawer Items Ġ= ĠArrayList < ID raw er Item <* >>() ĊĠĠĠĠĠĠĠ Ġprofiles ?. let Ġ{ Ġm Profiles Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( profile Ġin Ġm Profiles ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( profile Ġ=== Ġcurrent Profile ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Hidden In List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Position Ġ= Ġslider View ?. item Adapter ?. getGlobal Position ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( profile Ġis ĠID raw er Item <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( profile Ġas ĠID raw er Item < *> ). isSelected Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Drawer Items . add ( profile Ġas ĠID raw er Item <* >) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġslider View ?. switch Drawer Content ( on Drawer ItemClickListener , Ġon Drawer Item Long ClickListener , Ġprofile Drawer Items , Ġselected Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġhelper Ġmethod Ġto Ġreset Ġthe Ġdrawer Ġcontent ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġreset Drawer Content () Ġ{ ĊĠĠĠĠĠĠĠ Ġslider View ?. reset Drawer Content () ĊĊĠĠĠĠĠĠĠ Ġaccount Switch er Arrow . clear Animation () ĊĠĠĠĠĠĠĠ ĠView Compat . animate ( account Switch er Arrow ). rotation ( 0 f ). start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdates Ġthe Ġheader Ġand Ġalso Ġre bu ids Ġthe Ġlist . ĊĠĠĠĠ Ġ* ĠThis Ġis Ġcalled Ġafter Ġmodifications Ġto Ġthe Ġitems Ġwere Ġmade ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġupdate Header And List () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! invalid ation Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate List Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinvalidate List Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ// re calculate Ġthe Ġprofiles ĊĠĠĠĠĠĠĠ Ġcalculate Profiles () ĊĠĠĠĠĠĠĠ Ġ// update Ġthe Ġprofiles Ġin Ġthe Ġheader ĊĠĠĠĠĠĠĠ Ġbuild Profiles () ĊĠĠĠĠĠĠĠ Ġ// if Ġwe Ġcurrently Ġshow Ġthe Ġlist Ġadd Ġthe Ġnew Ġitem Ġdirectly Ġto Ġit ĊĠĠĠĠĠĠĠ Ġif Ġ( selection List Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Drawer Selection List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġadd Ġthe Ġvalues Ġto Ġthe Ġbundle Ġfor Ġsave InstanceState ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠsavedInstanceState ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsave InstanceState ( savedInstanceState : ĠBundle ): ĠBundle Ġ{ ĊĠĠĠĠĠĠĠ ĠsavedInstanceState . put Int ( B UNDLE _ SELECTION _ HEADER Ġ+ Ġsaved Instance Key , Ġcurrent Selection ) ĊĠĠĠĠĠĠĠ Ġreturn ĠsavedInstanceState ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSelect s Ġthe Ġgiven Ġprofile Ġand Ġsets Ġit Ġto Ġthe Ġnew Ġactive Ġprofile ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġprofile ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Active Profile ( profile : ĠI Profile , Ġfire On Profile Changed : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Current Selected Profile Ġ= Ġswitch Profiles ( profile ) ĊĠĠĠĠĠĠĠ Ġ// if Ġthe Ġselection List Ġis Ġshown Ġwe Ġshould Ġalso Ġupdate Ġthe Ġcurrent Ġselected Ġprofile Ġin Ġthe Ġlist ĊĠĠĠĠĠĠĠ Ġif Ġ( slider View Ġ!= Ġnull Ġ&& Ġselection List Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslider View ?. setSelection ( profile . identifier , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// fire Ġthe Ġevent Ġif Ġenabled Ġand Ġa Ġlistener Ġis Ġset ĊĠĠĠĠĠĠĠ Ġif Ġ( fire On Profile Changed Ġ&& Ġon Account Header Listener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Account Header Listener ?. invoke ( null , Ġprofile , Ġis Current Selected Profile ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSelect s Ġa Ġprofile Ġby Ġits Ġidentifier ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġidentifier ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġset Active Profile ( identifier : ĠLong , Ġfire On Profile Changed : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprofiles ?. forEach Ġ{ Ġprofile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( profile . identifier Ġ== Ġidentifier ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Active Profile ( profile , Ġfire On Profile Changed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHelper Ġmethod Ġto Ġupdate Ġa Ġprofile Ġusing Ġits Ġidentifier ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġnew Profile ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġupdate Profile ( new Profile : ĠI Profile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfound Ġ= Ġget Position ById entifier ( new Profile . identifier ) ĊĠĠĠĠĠĠĠ Ġif Ġ( found Ġ> Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofiles ?. set ( found , Ġnew Profile ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Header And List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġgets Ġthe Ġposition Ġof Ġa Ġprofile Ġby Ġits Ġidentifier ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġidentifier ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Position ById entifier ( identifier : ĠLong ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( identifier Ġ!= Ġ- 1 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofiles ?. forEach Indexed Ġ{ Ġindex , Ġi Profile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Profile . identifier Ġ== Ġidentifier ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠApplies Ġproperties Ġin Ġan Ġoptimized Ġform . ĠWill Ġdisable Ġinvalid ation Ġof Ġthe ĠAccount Header View Ġfor Ġthe Ġinner Ġproperty Ġset Ġoperations Ġ*/ ĊĠĠĠ Ġfun Ġapply ( block : ĠAccount Header View . () Ġ-> ĠUnit ): ĠAccount Header View Ġ{ ĊĠĠĠĠĠĠĠ Ġinvalid ation Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġblock () ĊĠĠĠĠĠĠĠ Ġinvalid ation Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( invalidate List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Header And List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( invalidate Header ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreconstruct Header () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNAV IG ATION _ DRAW ER _ ACCOUNT _ AS PECT _ RATIO Ġ= Ġ 9 . 0 Ġ/ Ġ 1 6 . 0 ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠB UNDLE _ SELECTION _ HEADER Ġ= Ġ" bundle _ selection _ header " ĊĠĠĠ Ġ} Ċ }