// ĠCopyright Ġ 2 0 1 5 - present Ġ 6 5 0 ĠInd ust ries . ĠAll Ġrights Ġreserved . Ċ package Ġhost . exp . exponent . utils Ċ Ċ import Ġex po . modules . updates . manifest . raw . Raw Manifest Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . pm . Activity Info Ċ import Ġandroid . view . WindowManager Ċ import Ġhost . exp . exponent . Exponent Manifest Ċ import Ġandroid . view . Window Insets Ċ import Ġhost . exp . exponent . Exponent Manifest . Bitmap Listener Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . app . Activity Manager . Task Description Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Build Ċ import Ġandroid . view . View Ċ import Ġandroidx . annotation . Ui Thread Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . app . AppCompat Delegate Ċ import Ġandroidx . core . view . View Compat Ċ import Ġhost . exp . exponent . analytics . EX L Ċ Ċ object ĠExperience Activity Utils Ġ{ ĊĠ Ġprivate Ġval ĠTAG Ġ= ĠExperience Activity Utils :: class . java . simple Name ĊĊĠ Ġprivate Ġconst Ġval ĠSTATUS _ BAR _ STYLE _ DARK _ CONTENT Ġ= Ġ" dark - content " ĊĠ Ġprivate Ġconst Ġval ĠSTATUS _ BAR _ STYLE _ LIGHT _ CONTENT Ġ= Ġ" light - content " ĊĊĠ Ġfun Ġupdate Orientation ( manifest : ĠRaw Manifest , Ġactivity : ĠActivity ) Ġ{ ĊĠĠĠ Ġval Ġorientation Ġ= Ġmanifest . get Orientation () ĊĠĠĠ Ġif Ġ( orientation Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġactivity . requested Orientation Ġ= ĠActivity Info . SCREEN _ OR IENTATION _ UNSPECIFIED ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġwhen Ġ( orientation ) Ġ{ ĊĠĠĠĠĠ Ġ" default " Ġ-> Ġactivity . requested Orientation Ġ= ĠActivity Info . SCREEN _ OR IENTATION _ UNSPECIFIED ĊĠĠĠĠĠ Ġ" portrait " Ġ-> Ġactivity . requested Orientation Ġ= ĠActivity Info . SCREEN _ OR IENTATION _ POR TRA IT ĊĠĠĠĠĠ Ġ" land scape " Ġ-> Ġactivity . requested Orientation Ġ= ĠActivity Info . SCREEN _ OR IENTATION _ LAND SC APE ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġupdate Software Keyboard Layout Mode ( manifest : ĠRaw Manifest , Ġactivity : ĠActivity ) Ġ{ ĊĠĠĠ Ġval Ġkeyboard Layout Mode Ġ= Ġmanifest . get Android Keyboard Layout Mode () Ġ?: Ġ" resize " ĊĊĠĠĠ Ġ// ĠIt 's Ġonly Ġnecessary Ġto Ġset Ġthis Ġmanually Ġfor Ġpan , Ġresize Ġis Ġthe Ġdefault Ġfor Ġthe Ġactivity . ĊĠĠĠ Ġif Ġ( keyboard Layout Mode Ġ== Ġ" pan ") Ġ{ ĊĠĠĠĠĠ Ġactivity . window . set Soft Input Mode ( WindowManager . LayoutParams . SOFT _ INPUT _ ADJ UST _ PAN ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ// Ġregion Ġuser Ġinterface Ġstyle Ġ- Ġlight / dark / automatic Ġmode ĊĠ Ġ/** ĊĠĠ Ġ* ĠSets Ġui Mode Ġto Ġaccording Ġto Ġwhat Ġis Ġbeing Ġset Ġin Ġmanifest . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġoverride Ui Mode ( manifest : ĠRaw Manifest , Ġactivity : ĠAppCompatActivity ) Ġ{ ĊĠĠĠ Ġval Ġuser Interface Style Ġ= Ġmanifest . get Android User Interface Style () Ġ?: Ġ" light " ĊĠĠĠ Ġactivity . delegate . local Night Mode Ġ= Ġnight Mode FromString ( user Interface Style ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġnight Mode FromString ( user Interface Style : ĠString ?): ĠInt Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( user Interface Style Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ ĠAppCompat Delegate . MODE _ N IGHT _ NO ĊĠĠĠ Ġ} Ġelse Ġwhen Ġ( user Interface Style ) Ġ{ ĊĠĠĠĠĠ Ġ" automatic " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . P ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠAppCompat Delegate . MODE _ N IGHT _ AUTO _ B ATTER Y ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĠAppCompat Delegate . MODE _ N IGHT _ FOLLOW _ SYSTEM ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ" dark " Ġ-> ĠAppCompat Delegate . MODE _ N IGHT _ YES ĊĠĠĠĠĠ Ġ" light " Ġ-> ĠAppCompat Delegate . MODE _ N IGHT _ NO ĊĠĠĠĠĠ Ġelse Ġ-> ĠAppCompat Delegate . MODE _ N IGHT _ NO ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ// Ġend region ĊĊĠ Ġ// Ġregion ĠStatus Bar Ġconfiguration ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠReact ĠNative Ġis Ġnot Ġusing Ġflag Ġ[ WindowManager . LayoutParams . FLAG _ TRANSL UC ENT _ STATUS ] Ġnor Ġview / manifest Ġattribute Ġ' android : window Trans luc ent Status ' ĊĠĠ Ġ* Ġ( https :// developer . android . com / reference / android / view / WindowManager . LayoutParams . html # FLAG _ TRANSL UC ENT _ STATUS ) ĊĠĠ Ġ* Ġ( https :// developer . android . com / reference / android / R . attr . html # window Trans luc ent Status ) ĊĠĠ Ġ* ĠInstead Ġit 's Ġusing Ġ[ Window Insets ] Ġto Ġlimit Ġavailable Ġspace Ġon Ġthe Ġscreen Ġ([ com . facebook . react . modules . status bar . StatusBar Module . set Trans luc ent ]). ĊĠĠ Ġ* ĊĠĠ Ġ* ĊĠĠ Ġ* ĠIn Ġcase Ġ' android :' window Trans luc ent Status ' Ġis Ġused Ġin Ġactivity 's Ġtheme , Ġit Ġhas Ġto Ġbe Ġremoved Ġin Ġorder Ġto Ġmake ĠRN 's ĠStatus ĠBar ĠAPI Ġwork . ĊĠĠ Ġ* ĠOut Ġapproach Ġto Ġachieve Ġtrans luc ency Ġof ĠStatus Bar Ġhas Ġto Ġbe Ġaligned Ġwith ĠRN 's Ġapproach Ġto Ġensure Ġ[ com . facebook . react . modules . status bar . StatusBar Module ] Ġworks . ĊĠĠ Ġ* ĊĠĠ Ġ* ĊĠĠ Ġ* ĠLinks Ġto Ġfollow Ġin Ġcase Ġof Ġneed Ġof Ġmore Ġdetailed Ġunder st ating . ĊĠĠ Ġ* Ġhttps :// chr is . ban es . dev / talk s / 2 0 1 7 / be coming - a - master - window - f itter - lon / ĊĠĠ Ġ* Ġhttps :// www . youtube . com / watch ? v =_ m G DM V RO 3 i E ĊĠĠ Ġ*/ ĊĠ Ġfun Ġconfigure StatusBar ( manifest : ĠRaw Manifest , Ġactivity : ĠActivity ) Ġ{ ĊĠĠĠ Ġval Ġstatus Bar Options Ġ= Ġmanifest . get Android StatusBar Options () ĊĠĠĠ Ġval Ġstatus Bar Style Ġ= Ġstatus Bar Options ?. opt String ( Exponent Manifest . MAN IFEST _ STATUS _ BAR _ AP PE AR ANCE ) ĊĠĠĠ Ġval Ġstatus Bar BackgroundColor Ġ= Ġstatus Bar Options ?. opt String ( Exponent Manifest . MAN IFEST _ STATUS _ BAR _ BACKGROUND _ COLOR , Ġnull ) ĊĊĠĠĠ Ġval Ġstatus Bar Hidden Ġ= Ġstatus Bar Options Ġ!= Ġnull Ġ&& Ġstatus Bar Options . opt Boolean ( ĊĠĠĠĠĠ ĠExp onent Manifest . MAN IFEST _ STATUS _ BAR _ HIDDEN , ĊĠĠĠĠĠ Ġfalse ĊĠĠĠ Ġ) ĊĠĠĠ Ġval Ġstatus Bar Trans luc ent Ġ= Ġstatus Bar Options Ġ== Ġnull Ġ|| Ġstatus Bar Options . opt Boolean ( ĊĠĠĠĠĠ ĠExp onent Manifest . MAN IFEST _ STATUS _ BAR _ TRANSL UC ENT , ĊĠĠĠĠĠ Ġtrue ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġactivity . run On Ui Thread Ġ{ ĊĠĠĠĠĠ Ġ// Ġclear Ġandroid : window Trans luc ent Status Ġflag Ġfrom ĠWindow Ġas ĠRN Ġach ie ves Ġtrans luc ency Ġusing ĠWindow Insets ĊĠĠĠĠĠ Ġactivity . window . clear Flags ( WindowManager . LayoutParams . FLAG _ TRANSL UC ENT _ STATUS ) ĊĊĠĠĠĠĠ Ġset Hidden ( status Bar Hidden , Ġactivity ) ĊĊĠĠĠĠĠ Ġset Trans luc ent ( status Bar Trans luc ent , Ġactivity ) ĊĊĠĠĠĠĠ Ġval Ġapplied StatusBar Style Ġ= Ġset Style ( status Bar Style , Ġactivity ) ĊĊĠĠĠĠĠ Ġ// ĠColor Ġpassed Ġfrom Ġmanifest Ġis Ġin Ġformat Ġ'# RR G GB B ( AA )' Ġand ĠAndroid Ġuses Ġ'# A ARR G GB B ' ĊĠĠĠĠĠ Ġval Ġnormalized StatusBar BackgroundColor Ġ= ĠRGBA to ARGB ( status Bar BackgroundColor ) ĊĊĠĠĠĠĠ Ġif Ġ( normalized StatusBar BackgroundColor Ġ== Ġnull Ġ|| Ġ! Color Parser . isValid ( normalized StatusBar BackgroundColor )) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠbackgroundColor Ġis Ġinvalid Ġor Ġnot Ġset ĊĠĠĠĠĠĠĠ Ġif Ġ( applied StatusBar Style Ġ== ĠSTATUS _ BAR _ STYLE _ LIGHT _ CONTENT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// Ġapplied StatusBar Style Ġis Ġ" light - content " Ġso Ġbackground Ġcolor Ġshould Ġbe Ġsemi Ġtransparent Ġblack ĊĠĠĠĠĠĠĠĠĠ Ġset Color ( Color . parse Color ("# 8 8 0 0 0 0 0 0 "), Ġactivity ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// Ġotherwise Ġit Ġhas Ġto Ġbe Ġtransparent ĊĠĠĠĠĠĠĠĠĠ Ġset Color ( Color . TRANSP ARENT , Ġactivity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġset Color ( Color . parse Color ( normalized StatusBar BackgroundColor ), Ġactivity ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠIf Ġthe Ġstring Ġcon forms Ġto Ġthe Ġ"# RR G GB B AA " Ġformat Ġthen Ġit 's Ġconverted Ġinto Ġthe Ġ"# A ARR G GB B " Ġformat . ĊĠĠ Ġ* ĠOtherwise Ġnoop . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun ĠRGBA to ARGB ( rgba : ĠString ?): ĠString ? Ġ{ ĊĠĠĠ Ġif Ġ( rgba Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġif Ġ( rgba . startsWith ("# ") Ġ&& Ġrgba . length Ġ== Ġ 9 ) Ġ{ ĊĠĠĠĠĠ Ġ"#" Ġ+ Ġrgba . substring ( 7 , Ġ 9 ) Ġ+ Ġrgba . substring ( 1 , Ġ 7 ) ĊĠĠĠ Ġ} Ġelse Ġrgba ĊĠ Ġ} ĊĊĠ Ġ@ Ui Thread ĊĠ Ġfun Ġset Color ( color : ĠInt , Ġactivity : ĠActivity ) Ġ{ ĊĠĠĠ Ġactivity ĊĠĠĠĠĠ Ġ. window ĊĠĠĠĠĠ Ġ. add Flags ( WindowManager . LayoutParams . FLAG _ DR AWS _ SYSTEM _ BAR _ BACK GRO UN DS ) ĊĠĠĠ Ġactivity ĊĠĠĠĠĠ Ġ. window . status Bar Color Ġ= Ġcolor ĊĠ Ġ} ĊĊĠ Ġ@ Ui Thread ĊĠ Ġfun Ġset Trans luc ent ( trans luc ent : ĠBoolean , Ġactivity : ĠActivity ) Ġ{ ĊĠĠĠ Ġ// ĠIf Ġthe Ġstatus Ġbar Ġis Ġtrans luc ent Ġhook Ġinto Ġthe Ġwindow Ġin sets Ġcalculations ĊĠĠĠ Ġ// Ġand Ġconsume Ġall Ġthe Ġtop Ġin sets Ġso Ġno Ġpadding Ġwill Ġbe Ġadded Ġunder Ġthe Ġstatus Ġbar . ĊĠĠĠ Ġval Ġdecor View Ġ= Ġactivity . window . decor View ĊĠĠĠ Ġif Ġ( trans luc ent ) Ġ{ ĊĠĠĠĠĠ Ġdecor View . setOn Apply Window Insets Listener Ġ{ Ġv : ĠView , Ġin sets : ĠWindow Insets ? Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġdefault Insets Ġ= Ġv . on Apply Window Insets ( in sets ) ĊĠĠĠĠĠĠĠ Ġdefault Insets . replace System Window Insets ( ĊĠĠĠĠĠĠĠĠĠ Ġdefault Insets . system Window Inset Left , ĊĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠ Ġdefault Insets . system Window Inset Right , ĊĠĠĠĠĠĠĠĠĠ Ġdefault Insets . system Window Inset Bottom ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġdecor View . setOn Apply Window Insets Listener ( null ) ĊĠĠĠ Ġ} ĊĠĠĠ ĠView Compat . request Apply Insets ( decor View ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ@ return ĠEffect ive Ġstyle Ġthat Ġis Ġactually Ġapplied Ġto Ġthe Ġstatus Ġbar . ĊĠĠ Ġ*/ ĊĠ Ġ@ Ui Thread ĊĠ Ġprivate Ġfun Ġset Style ( style : ĠString ?, Ġactivity : ĠActivity ): ĠString Ġ{ ĊĠĠĠ Ġvar Ġapplied StatusBar Style Ġ= ĠSTATUS _ BAR _ STYLE _ LIGHT _ CONTENT ĊĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠ Ġval Ġdecor View Ġ= Ġactivity . window . decor View ĊĠĠĠĠĠ Ġvar Ġsystem Ui Visibility Flags Ġ= Ġdecor View . system Ui Visibility ĊĠĠĠĠĠ Ġwhen Ġ( style ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSTATUS _ BAR _ STYLE _ LIGHT _ CONTENT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġsystem Ui Visibility Flags Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsystem Ui Visibility Flags Ġand ĠView . SYSTEM _ UI _ FLAG _ LIGHT _ STATUS _ BAR . inv () ĊĠĠĠĠĠĠĠĠĠ Ġapplied StatusBar Style Ġ= ĠSTATUS _ BAR _ STYLE _ LIGHT _ CONTENT ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠSTATUS _ BAR _ STYLE _ DARK _ CONTENT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġsystem Ui Visibility Flags Ġ= Ġsystem Ui Visibility Flags Ġor ĠView . SYSTEM _ UI _ FLAG _ LIGHT _ STATUS _ BAR ĊĠĠĠĠĠĠĠĠĠ Ġapplied StatusBar Style Ġ= ĠSTATUS _ BAR _ STYLE _ DARK _ CONTENT ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġsystem Ui Visibility Flags Ġ= Ġsystem Ui Visibility Flags Ġor ĠView . SYSTEM _ UI _ FLAG _ LIGHT _ STATUS _ BAR ĊĠĠĠĠĠĠĠĠĠ Ġapplied StatusBar Style Ġ= ĠSTATUS _ BAR _ STYLE _ DARK _ CONTENT ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġdecor View . system Ui Visibility Ġ= Ġsystem Ui Visibility Flags ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġapplied StatusBar Style ĊĠ Ġ} ĊĊĠ Ġ@ Ui Thread ĊĠ Ġprivate Ġfun Ġset Hidden ( hidden : ĠBoolean , Ġactivity : ĠActivity ) Ġ{ ĊĠĠĠ Ġif Ġ( hidden ) Ġ{ ĊĠĠĠĠĠ Ġactivity . window . add Flags ( WindowManager . LayoutParams . FLAG _ FULL SCREEN ) ĊĠĠĠĠĠ Ġactivity . window . clear Flags ( WindowManager . LayoutParams . FLAG _ FORCE _ NOT _ FULL SCREEN ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġactivity . window . add Flags ( WindowManager . LayoutParams . FLAG _ FORCE _ NOT _ FULL SCREEN ) ĊĠĠĠĠĠ Ġactivity . window . clear Flags ( WindowManager . LayoutParams . FLAG _ FULL SCREEN ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ// Ġend region ĊĊĠ Ġfun Ġset Task Description ( ĊĠĠĠ Ġexponent Manifest : ĠExp onent Manifest , ĊĠĠĠ Ġmanifest : ĠRaw Manifest , ĊĠĠĠ Ġactivity : ĠActivity ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġval Ġicon Url Ġ= Ġmanifest . get Icon Url () ĊĠĠĠ Ġval Ġcolor Ġ= Ġexponent Manifest . getColor From Manifest ( manifest ) ĊĠĠĠ Ġexponent Manifest . load Icon Bitmap ( ĊĠĠĠĠĠ Ġicon Url , ĊĠĠĠĠĠ Ġobject Ġ: ĠBitmap Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonLoad Bitmap ( bitmap : ĠBitmap ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġif Ġstatement Ġis Ġonly Ġneeded Ġso Ġthe Ġcompiler Ġdoesn 't Ġshow Ġan Ġerror . ĊĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . set Task Description ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTask Description ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanifest . getName () Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEX L . e ( TAG , Ġe ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġfun Ġset NavigationBar ( manifest : ĠRaw Manifest , Ġactivity : ĠActivity ) Ġ{ ĊĠĠĠ Ġval Ġnav Bar Options Ġ= Ġmanifest . get Android NavigationBar Options () Ġ?: Ġreturn ĊĊĠĠĠ Ġ// ĠSet Ġbackground Ġcolor Ġof Ġnavigation Ġbar ĊĠĠĠ Ġval Ġnav Bar Color Ġ= Ġif Ġ( nav Bar Options . has ( Exponent Manifest . MAN IFEST _ NAV IG ATION _ BAR _ BACKGROUND _ COLOR )) Ġ{ ĊĠĠĠĠĠ Ġnav Bar Options . opt String ( Exponent Manifest . MAN IFEST _ NAV IG ATION _ BAR _ BACKGROUND _ COLOR ) ĊĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠ Ġif Ġ( nav Bar Color Ġ!= Ġnull Ġ&& ĠColor Parser . isValid ( nav Bar Color )) Ġ{ ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity . window . clear Flags ( WindowManager . LayoutParams . FLAG _ TRANSL UC ENT _ NAV IG ATION ) ĊĠĠĠĠĠĠĠ Ġactivity . window . navigation Bar Color Ġ= ĠColor . parse Color ( nav Bar Color ) ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ ĠEX L . e ( TAG , Ġe ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠSet Ġicon Ġcolor Ġof Ġnavigation Ġbar ĊĠĠĠ Ġval Ġnav Bar Appearance Ġ= Ġif Ġ( nav Bar Options . has ( Exponent Manifest . MAN IFEST _ NAV IG ATION _ BAR _ AP PE AR ANCE )) Ġ{ ĊĠĠĠĠĠ Ġnav Bar Options . opt String ( Exponent Manifest . MAN IFEST _ NAV IG ATION _ BAR _ AP PE AR ANCE ) ĊĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠ Ġif Ġ( nav Bar Appearance Ġ!= Ġnull Ġ&& ĠBuild . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity . window . clear Flags ( WindowManager . LayoutParams . FLAG _ TRANSL UC ENT _ NAV IG ATION ) ĊĠĠĠĠĠĠĠ Ġactivity . window . add Flags ( WindowManager . LayoutParams . FLAG _ DR AWS _ SYSTEM _ BAR _ BACK GRO UN DS ) ĊĠĠĠĠĠĠĠ Ġif Ġ( nav Bar Appearance Ġ== Ġ" dark - content ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġdecor View Ġ= Ġactivity . window . decor View ĊĠĠĠĠĠĠĠĠĠ Ġvar Ġflags Ġ= Ġdecor View . system Ui Visibility ĊĠĠĠĠĠĠĠĠĠ Ġflags Ġ= Ġflags Ġor ĠView . SYSTEM _ UI _ FLAG _ LIGHT _ NAV IG ATION _ BAR ĊĠĠĠĠĠĠĠĠĠ Ġdecor View . system Ui Visibility Ġ= Ġflags ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ ĠEX L . e ( TAG , Ġe ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠSet Ġvisibility Ġof Ġnavigation Ġbar ĊĠĠĠ Ġval Ġnav Bar Visible Ġ= Ġif Ġ( nav Bar Options . has ( Exponent Manifest . MAN IFEST _ NAV IG ATION _ BAR _ VIS IB L ILITY )) Ġ{ ĊĠĠĠĠĠ Ġnav Bar Options . opt String ( Exponent Manifest . MAN IFEST _ NAV IG ATION _ BAR _ VIS IB L ILITY ) ĊĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠ Ġif Ġ( nav Bar Visible Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġ// ĠHide Ġboth Ġthe Ġnavigation Ġbar Ġand Ġthe Ġstatus Ġbar . ĠThe ĠAndroid Ġdocs Ġrecommend , Ġ" you Ġshould ĊĠĠĠĠĠ Ġ// Ġdesign Ġyour Ġapp Ġto Ġhide Ġthe Ġstatus Ġbar Ġwhenever Ġyou Ġhide Ġthe Ġnavigation Ġbar ." ĊĠĠĠĠĠ Ġval Ġdecor View Ġ= Ġactivity . window . decor View ĊĠĠĠĠĠ Ġvar Ġflags Ġ= Ġdecor View . system Ui Visibility ĊĠĠĠĠĠ Ġwhen Ġ( nav Bar Visible ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" lean back " Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġflags Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġor Ġ( View . SYSTEM _ UI _ FLAG _ HIDE _ NAV IG ATION Ġor ĠView . SYSTEM _ UI _ FLAG _ FULL SCREEN ) ĊĠĠĠĠĠĠĠ Ġ" imm ers ive " Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġflags Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġor Ġ( View . SYSTEM _ UI _ FLAG _ HIDE _ NAV IG ATION Ġor ĠView . SYSTEM _ UI _ FLAG _ FULL SCREEN Ġor ĠView . SYSTEM _ UI _ FLAG _ IM MER SIVE ) ĊĠĠĠĠĠĠĠ Ġ" sticky - imm ers ive " Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġflags Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġor Ġ( View . SYSTEM _ UI _ FLAG _ HIDE _ NAV IG ATION Ġor ĠView . SYSTEM _ UI _ FLAG _ FULL SCREEN Ġor ĠView . SYSTEM _ UI _ FLAG _ IM MER SIVE _ STICK Y ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġdecor View . system Ui Visibility Ġ= Ġflags ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġset Root View BackgroundColor ( manifest : ĠRaw Manifest , Ġroot View : ĠView ) Ġ{ ĊĠĠĠ Ġvar Ġcolor String Ġ= Ġmanifest . get Android BackgroundColor () ĊĠĠĠ Ġif Ġ( color String Ġ== Ġnull Ġ|| Ġ! Color Parser . isValid ( color String )) Ġ{ ĊĠĠĠĠĠ Ġcolor String Ġ= Ġ"# ffffff " ĊĠĠĠ Ġ} ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġval Ġcolor Ġ= ĠColor . parse Color ( color String ) ĊĠĠĠĠĠ Ġroot View . set BackgroundColor ( color ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠ ĠEX L . e ( TAG , Ġe ) ĊĠĠĠĠĠ Ġroot View . set BackgroundColor ( Color . WHITE ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ