package Ġcom . ub erge ek 4 2 . W ee chat Android . views Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Build Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View Tree Observer Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . view . update Padding Ċ import Ġandroidx . lifecycle . Default Lifecycle Observer Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġcom . ub erge ek 4 2 . W ee chat Android . W ee chat Activity Ċ import Ġcom . ub erge ek 4 2 . W ee chat Android . fragments . Buffer Fragment Ċ import Ġcom . ub erge ek 4 2 . W ee chat Android . fragments . Buffer List Fragment Ċ import Ġcom . ub erge ek 4 2 . W ee chat Android . service . P Ċ import Ġcom . ub erge ek 4 2 . W ee chat Android . upload . i Ċ import Ġcom . ub erge ek 4 2 . W ee chat Android . utils . Theme Fix ĊĊ Ċ // Ġthis Ġcan Ġtechnically Ġwork Ġon Ġearlier ĠAndroid Ġversions , Ċ // Ġe . g . Ġon Ġapi Ġ 2 4 Ġ( 7 . 0 ) Ġit Ġworks Ġperfectly Ġin Ġdark Ġmode , Ċ // Ġbut Ġin Ġlight Ġmode Ġthe Ġstatus Ġbar Ġicons Ġremain Ġlight Ċ val ĠFULL _ SCREEN _ DRAW ER _ ENABLED Ġ= ĠBuild . VERSION . SDK _ INT Ġ>= Ġ 2 6 ĠĠĠ Ġ// Ġ 8 . 0 , ĠO re o ĊĊ Ċ data Ġclass ĠSystem Window Insets ( ĊĠĠĠ Ġval Ġtop : ĠInt , ĊĠĠĠ Ġval Ġbottom : ĠInt , ĊĠĠĠ Ġval Ġleft : ĠInt , ĊĠĠĠ Ġval Ġright : ĠInt , Ċ ) Ċ Ċ var Ġsystem Window Insets Ġ= ĠSystem Window Insets ( 0 , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĊ Ċ fun Ġinterface ĠIn set Listener Ġ{ ĊĠĠĠ Ġfun Ġon Insets Changed () Ċ } ĊĊ Ċ private Ġval Ġinset Listeners Ġ= Ġmutable ListOf < Inset Listener >() ĊĊ Ċ //////////////////////////////////////////////////////////////// //////////////////////////////// //// Ċ //////////////////////////////////////////////////////////////// //////////////////////// /// Ġactivity Ċ //////////////////////////////////////////////////////////////// //////////////////////////////// //// Ċ Ċ class ĠW ee chat Activity FullScreen Controller ( val Ġactivity : ĠW ee chat Activity ) Ġ: ĠDefault Lifecycle Observer Ġ{ ĊĠĠĠ Ġfun Ġobserve Lifecycle () Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity . lifecycle . add Observer ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġonly Ġused Ġto Ġwe ed Ġout Ġchanges Ġwe Ġdon 't Ġcare Ġabout ĊĠĠĠ Ġprivate Ġvar Ġold System Window Insets Ġ= ĠSystem Window Insets (- 1 , Ġ- 1 , Ġ- 1 , Ġ- 1 ) ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( owner : ĠLifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! FULL _ SCREEN _ DRAW ER _ ENABLED ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġroot View Ġ= Ġactivity . ui . pager . root View ĊĊĠĠĠĠĠĠĠ Ġactivity . ui . navigation Padding . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠ Ġ// Ġtodo Ġuse ĠWindow Compat . set Decor Fits System Windows ( window , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ// Ġtodo Ġneeds Ġapi Ġ 3 0 + ? Ġand / or Ġandroidx . core : core - k tx : 1 . 5 . 0 - beta 0 2 ĊĠĠĠĠĠĠĠ Ġroot View . system Ui Visibility Ġ= Ġroot View . system Ui Visibility Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . SYSTEM _ UI _ FLAG _ LAYOUT _ ST ABLE Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . SYSTEM _ UI _ FLAG _ LAYOUT _ HIDE _ NAV IG ATION ĊĊĠĠĠĠĠĠĠ Ġroot View . setOn Apply Window Insets Listener Ġlistener @{ Ġ_, Ġin sets Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew System Window Insets Ġ= ĠSystem Window Insets ( in sets . system Window Inset Top , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin sets . system Window Inset Bottom , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin sets . system Window Inset Left , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin sets . system Window Inset Right ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( old System Window Insets Ġ!= Ġnew System Window Insets ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold System Window Insets Ġ= Ġnew System Window Insets ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsystem Window Insets Ġ= Ġnew System Window Insets ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinset Listeners . forEach Ġ{ Ġit . on Insets Changed () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġin sets ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġwe e chat Activity Insets Listener Ġ= ĠIn set Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . ui . toolbar Container . update Padding ( top Ġ= Ġsystem Window Insets . top , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġsystem Window Insets . left , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġsystem Window Insets . right ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . ui . navigation Padding . update Dimensions ( height Ġ= Ġsystem Window Insets . bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . ui . pager . update Margins ( bottom Ġ= Ġsystem Window Insets . bottom ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinset Listeners . add ( w ee chat Activity Insets Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġstatus Ġbar Ġcan Ġbe Ġcolored Ġsince Ġapi Ġ 2 1 Ġand Ġhave Ġdark Ġicons Ġsince Ġapi Ġ 2 3 ĊĠĠĠ Ġ// Ġnavigation Ġbar Ġcan Ġbe Ġcolored Ġsince Ġapi Ġ 2 1 Ġand Ġcan Ġhave Ġdark Ġicons Ġsince Ġapi Ġ 2 6 Ġvia ĊĠĠĠ Ġ// ĠSYSTEM _ UI _ FLAG _ LIGHT _ NAV IG ATION _ BAR , Ġwhich Ġthe Ġthem ing Ġengine Ġseems Ġto Ġbe Ġsetting ĊĠĠĠ Ġ// Ġautomatically , Ġand Ġsince Ġapi Ġ 2 7 Ġvia Ġandroid : navigation Bar Color ĊĠĠĠ Ġoverride Ġfun ĠonStart ( owner : ĠLifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( FULL _ SCREEN _ DRAW ER _ ENABLED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . ui . navigation Padding . set BackgroundColor ( P . color Primary Dark ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsystem Area BackgroundColor Is Dark Ġ= Ġ! Theme Fix . is Color Light ( P . color Primary Dark ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Bar Icon Can Be Dark Ġ= ĠBuild . VERSION . SDK _ INT Ġ>= Ġ 2 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnavigation Bar Icons Can Be Dark Ġ= ĠBuild . VERSION . SDK _ INT Ġ>= Ġ 2 6 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( system Area BackgroundColor Is Dark Ġ|| Ġstatus Bar Icon Can Be Dark ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . window . status Bar Color Ġ= ĠP . color Primary Dark ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( system Area BackgroundColor Is Dark Ġ|| Ġnavigation Bar Icons Can Be Dark ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . window . navigation Bar Color Ġ= ĠP . color Primary Dark ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy ( owner : ĠLifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinset Listeners . clear () ĊĠĠĠ Ġ} Ċ } Ċ Ċ //////////////////////////////////////////////////////////////// //////////////////////////////// //// Ċ //////////////////////////////////////////////////////////////// //////////////////////// Ġbuffer Ġlist Ċ //////////////////////////////////////////////////////////////// //////////////////////////////// //// Ċ Ċ class ĠBuffer List Fragment FullScreen Controller ( val Ġfragment : ĠBuffer List Fragment ) Ġ: ĠDefault Lifecycle Observer Ġ{ ĊĠĠĠ Ġfun Ġobserve Lifecycle () Ġ{ ĊĠĠĠĠĠĠĠ Ġfragment . lifecycle . add Observer ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġfilter Bar Height Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun ĠonStart ( owner : ĠLifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( filter Bar Height Ġ== Ġ 0 ) Ġfilter Bar Height Ġ= Ġfragment . require Context (). get ActionBar Height () ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! FULL _ SCREEN _ DRAW ER _ ENABLED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . ui . buffer List . update Margins ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġif Ġ( P . show Buffer Filter ) Ġfilter Bar Height Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinset Listeners . add ( in set Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinset Listener . on Insets Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop ( owner : ĠLifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinset Listeners . remove ( in set Listener ) ĊĠĠĠĠĠĠĠ Ġfilter Bar Height Ġ= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġinset Listener Ġ= ĠIn set Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġui Ġ= Ġfragment . ui ĊĠĠĠĠĠĠĠ Ġval Ġlayout Manager Ġ= Ġui . buffer List . layout Manager Ġas ? ĠFull Screen Drawer Linear LayoutManager ĊĊĠĠĠĠĠĠĠ Ġif Ġ( P . show Buffer Filter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġui . buffer List . update Margins ( bottom Ġ= Ġfilter Bar Height Ġ+ Ġsystem Window Insets . bottom ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġui . filter Input . update Margins ( bottom Ġ= Ġsystem Window Insets . bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġui . filter Input . update Padding ( left Ġ= Ġsystem Window Insets . left ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġui . filter Clear . update Margins ( bottom Ġ= Ġsystem Window Insets . bottom ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager ?. set Insets ( system Window Insets . top , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsystem Window Insets . left ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġui . buffer List . update Margins ( bottom Ġ= Ġ 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager ?. set Insets ( system Window Insets . top , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsystem Window Insets . bottom , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsystem Window Insets . left ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ //////////////////////////////////////////////////////////////// //////////////////////////////// //// Ċ //////////////////////////////////////////////////////////////////////////////// //// Ġbuffer Ġfragment Ċ //////////////////////////////////////////////////////////////// //////////////////////////////// //// ĊĊ Ċ class ĠBuffer Fragment FullScreen Controller ( val Ġfragment : ĠBuffer Fragment ) Ġ: ĠDefault Lifecycle Observer Ġ{ ĊĠĠĠ Ġfun Ġobserve Lifecycle () Ġ{ ĊĠĠĠĠĠĠĠ Ġfragment . lifecycle . add Observer ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart ( owner : ĠLifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! FULL _ SCREEN _ DRAW ER _ ENABLED ) Ġreturn ĊĠĠĠĠĠĠĠ Ġinset Listeners . add ( in set Listener ) ĊĠĠĠĠĠĠĠ Ġinset Listener . on Insets Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop ( owner : ĠLifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! FULL _ SCREEN _ DRAW ER _ ENABLED ) Ġreturn ĊĠĠĠĠĠĠĠ Ġinset Listeners . remove ( in set Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġinset Listener Ġ= ĠIn set Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġui Ġ= Ġfragment . ui Ġ?: Ġreturn @ Inset Listener ĊĊĠĠĠĠĠĠĠ Ġval Ġlines Top Padding Ġ= Ġif Ġ( P . auto Hide Action bar ) Ġsystem Window Insets . top Ġelse Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġfab Right Margin Ġ= Ġsystem Window Insets . right Ġ+ Ġ( P ._ 1 dp Ġ* Ġ 1 2 ). i ĊĊĠĠĠĠĠĠĠ Ġui . chat Lines . update Padding ( top Ġ= Ġlines Top Padding , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġsystem Window Insets . left , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġsystem Window Insets . right ) ĊĊĠĠĠĠĠĠĠ Ġui . bottom Bar . update Padding ( left Ġ= Ġsystem Window Insets . left , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġsystem Window Insets . right ) ĊĊĠĠĠĠĠĠĠ Ġui . scrollTo Bottom Fab . update Margins ( right Ġ= Ġfab Right Margin ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ //////////////////////////////////////////////////////////////// //////////////////////////////// //// Ċ //////////////////////////////////////////////////////////////////////////////// //// Ġheight Ġobserver Ċ //////////////////////////////////////////////////////////////// //////////////////////////////// //// ĊĊ Ċ fun Ġinterface ĠSystem Area Height Observer Ġ{ ĊĠĠĠ Ġfun Ġon System Area Height Changed ( system Area Height : ĠInt ) Ċ } ĊĊ Ċ abstract Ġclass ĠSystem Area Height Ex amin er ( ĊĠĠĠĠĠĠĠ Ġval Ġactivity : ĠAppCompatActivity , Ċ ) Ġ: ĠDefault Lifecycle Observer Ġ{ ĊĠĠĠ Ġfun Ġobserve Lifecycle () Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity . lifecycle . add Observer ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġobserver : ĠSystem Area Height Observer ? Ġ= Ġnull ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġobtain ( activity : ĠAppCompatActivity ) Ġ= Ġif Ġ( FULL _ SCREEN _ DRAW ER _ ENABLED ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNew System Area Height Ex amin er ( activity ) Ġelse ĠOld System Area Height Ex amin er ( activity ) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ private Ġclass ĠOld System Area Height Ex amin er ( ĊĠĠĠĠĠĠĠ Ġactivity : ĠAppCompatActivity , Ċ ) Ġ: ĠSystem Area Height Ex amin er ( activity ) Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontent : ĠView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġroot View : ĠView ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( owner : ĠLifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontent Ġ= Ġactivity . findViewById ( android . R . id . content ) ĊĠĠĠĠĠĠĠ Ġroot View Ġ= Ġcontent . root View ĊĠĠĠĠĠĠĠ Ġcontent . view Tree Observer . add On Global Layout Listener ( global Layout Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġwindow Height Ġis Ġthe Ġheight Ġof Ġthe Ġactivity Ġthat Ġincludes Ġthe Ġheight Ġof Ġthe Ġstatus Ġbar Ġand Ġthe ĊĠĠĠ Ġ// Ġnavigation Ġbar . Ġif Ġthe Ġactivity Ġis Ġsplit , Ġthis Ġheight Ġseems Ġto Ġbe Ġonly Ġincluding Ġthe Ġsystem ĊĠĠĠ Ġ// Ġbar Ġthat Ġthe Ġactivity Ġis ĠâĢľ touch ing âĢĿ. Ġthis Ġheight Ġdoesn 't Ġinclude Ġthe Ġkeyboard Ġheight Ġper Ġse , ĊĠĠĠ Ġ// Ġbut Ġif Ġthe Ġactivity Ġchanges Ġsize Ġdue Ġto Ġthe Ġkeyboard , Ġthis Ġnumber Ġremains Ġthe Ġsame . ĊĠĠĠ Ġ// Ġactivity Height Ġis Ġthe Ġheight Ġof Ġthe Ġactivity Ġnot Ġincluding Ġany Ġof Ġthe Ġsystem Ġstuff . ĊĠĠĠ Ġprivate Ġval Ġglobal Layout Listener Ġ= ĠView Tree Observer . On Global Layout Listener Ġlistener @{ ĊĠĠĠĠĠĠĠ Ġ// Ġon Ġandroid Ġ 7 , Ġif Ġchanging Ġthe Ġday / night Ġtheme Ġin Ġsettings , Ġthe Ġactivity Ġcan Ġbe Ġre created ĊĠĠĠĠĠĠĠ Ġ// Ġright Ġaway Ġbut Ġwith Ġa Ġwrong Ġwindow Ġheight . Ġso Ġwe Ġwait Ġuntil Ġit 's Ġactually Ġres umed ĊĠĠĠĠĠĠĠ Ġif Ġ( activity . lifecycle . currentState Ġ!= ĠLifecycle . State . RE SU MED ) Ġreturn @ listener ĊĊĠĠĠĠĠĠĠ Ġval Ġwindow Height Ġ= Ġroot View . height ĊĠĠĠĠĠĠĠ Ġval Ġactivity Height Ġ= Ġcontent . height ĊĠĠĠĠĠĠĠ Ġval Ġsystem Area Height Ġ= Ġwindow Height Ġ- Ġactivity Height ĊĊĠĠĠĠĠĠĠ Ġ// Ġwe ed Ġout Ġsome Ġins an ity Ġthat 's Ġhappening Ġwhen Ġthe Ġwindow Ġis Ġin Ġsplit Ġscreen Ġmode . ĊĠĠĠĠĠĠĠ Ġ// Ġit Ġseems Ġthat Ġwhile Ġres izing Ġsome Ġelements Ġcan Ġtemporarily Ġhave Ġthe Ġheight Ġ 0 . ĊĠĠĠĠĠĠĠ Ġif Ġ( window Height Ġ<= Ġ 0 Ġ|| Ġactivity Height Ġ<= Ġ 0 Ġ|| Ġsystem Area Height Ġ<= Ġ 0 ) Ġreturn @ listener ĊĊĠĠĠĠĠĠĠ Ġobserver ?. on System Area Height Changed ( system Area Height ) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ private Ġclass ĠNew System Area Height Ex amin er ( ĊĠĠĠĠĠĠĠ Ġactivity : ĠAppCompatActivity , Ċ ) Ġ: ĠSystem Area Height Ex amin er ( activity ) Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( owner : ĠLifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinset Listeners . add ( in set Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġinset Listener Ġ= ĠIn set Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġobserver ?. on System Area Height Changed ( system Window Insets . bottom ) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ //////////////////////////////////////////////////////////////// //////////////////////////////// //// Ċ //////////////////////////////////////////////////////////////// //////////////////////////////// //// Ċ //////////////////////////////////////////////////////////////// //////////////////////////////// //// ĊĊ Ċ fun ĠContext . get ActionBar Height (): ĠInt Ġ{ ĊĠĠĠ Ġval Ġtyped Value Ġ= ĠTyped Value () ĊĠĠĠ Ġreturn Ġif Ġ( theme . resolve Attribute ( android . R . attr . action Bar Size , Ġtyped Value , Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠ ĠTyped Value . complex To Dimension Pixel Size ( typed Value . data , Ġresources . display Metrics ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠ 0 ĊĠĠĠ Ġ} Ċ } Ċ