package Ġcom . py am soft . tr ick le . main Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . os . Bundle Ċ import Ġcom . py am soft . py d roid . core . require NotNull Ċ import Ġcom . py am soft . py d roid . inject . Injector Ċ import Ġcom . py am soft . py d roid . ui . app . PY Droid Activity Ċ import Ġcom . py am soft . py d roid . ui . changelog . build Change Log Ċ import Ġcom . py am soft . py d roid . ui . navigator . Navigator Ċ import Ġcom . py am soft . py d roid . ui . util . dispose Ċ import Ġcom . py am soft . py d roid . ui . util . re compose Ċ import Ġcom . py am soft . py d roid . util . stable Layout Hide Navigation Ċ import Ġcom . py am soft . tr ick le . R Ċ import Ġcom . py am soft . tr ick le . Tr ick le Component Ċ import Ġcom . py am soft . tr ick le . databinding . Activity Main Binding Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠMainActivity Ġ: ĠPY Droid Activity () Ġ{ ĊĊĠ Ġoverride Ġval Ġapplication Icon Ġ= ĠR . mip map . ic _ launcher _ round ĊĊĠ Ġoverride Ġval Ġchangelog Ġ= Ġbuild Change Log Ġ{ ĊĠĠĠ Ġbug fix (" Fix Ġrotation Ġcausing Ġincorrect Ġlayouts ") ĊĠĠĠ Ġbug fix (" UI Ġperformance Ġimprovements ") ĊĠĠĠ Ġbug fix (" Fix Ġpower Ġsaving Ġmode Ġaccidentally Ġbeing Ġtoggle d Ġat Ġthe Ġwrong Ġtime ") ĊĠ Ġ} ĊĊĠ Ġprivate Ġvar Ġinjector : ĠMain Component ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġview Binding : ĠActivity Main Binding ? Ġ= Ġnull ĊĊĠ Ġ@ Jvm Field Ġ@ Inject Ġinternal Ġvar Ġnavigator : ĠNavigator < Main Page >? Ġ= Ġnull ĊĠ Ġ@ Jvm Field Ġ@ Inject Ġinternal Ġvar ĠviewModel : ĠMain ViewModel er ? Ġ= Ġnull ĊĊĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠ Ġ// ĠNOTE ( P eter ): ĊĠĠĠ Ġ// ĠNot Ġfull ĠCompose Ġyet ĊĠĠĠ Ġ// ĠCompose Ġhas Ġan Ġissue Ġhandling ĠF rag ments . ĊĠĠĠ Ġ// ĊĠĠĠ Ġ// ĠWe Ġneed Ġan ĠAndroid View Ġto Ġhandle Ġa ĠFragment , Ġbut Ġa ĠFragment Ġout li ves Ġthe ĠActivity Ġvia Ġthe ĊĠĠĠ Ġ// ĠFragment Manager Ġkeeping Ġstate . ĠThe ĠCompose Ġrender Ġdoes Ġnot , Ġso Ġwhen Ġan Ġactivity Ġdies Ġfrom ĊĠĠĠ Ġ// Ġconfiguration Ġchange , Ġthe ĠFragment Ġis Ġhead less Ġsomewhere Ġin Ġthe Ġgreat Ġbeyond . ĠThis Ġleads Ġto ĊĠĠĠ Ġ// Ġmemory Ġle aks Ġand Ġother Ġissues Ġlike ĠDis posable Ġhooks Ġnot Ġbeing Ġcalled Ġon ĠDispose Effect Ġblocks . ĊĠĠĠ Ġ// ĠTo Ġavoid Ġthese Ġgrowing Ġp ains , Ġwe Ġuse Ġan ĠActivity Ġlayout Ġfile Ġand Ġthen Ġhost Ġthe ĠCompose Views ĊĠĠĠ Ġ// Ġfrom Ġit Ġthat Ġare Ġthen Ġused Ġto Ġrender ĠActivity Ġlevel Ġviews . ĠFragment Ġtransactions Ġhappen Ġas ĊĠĠĠ Ġ// Ġnormal Ġand Ġthen ĠF rag ments Ġhost ĠCompose Views Ġtoo . ĊĠĠĠ Ġval Ġbinding Ġ= ĠActivity Main Binding . inflate ( layout Inflater ). apply Ġ{ Ġview Binding Ġ= Ġthis Ġ} ĊĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠ Ġinjector Ġ= ĊĠĠĠĠĠĠĠ ĠInject or . obtain From Application < Tr ick le Component >( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus Main Component () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . main Fragment Container View . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġc Ġ-> Ġc . inject ( this ) Ġ} ĊĠĠĠ Ġset Theme ( R . style . Theme _ Tr ick le ) ĊĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠ Ġstable Layout Hide Navigation () ĊĊĠĠĠ Ġ// ĠSn ackbar Ġrespect s Ġwindow Ġoffsets Ġand Ġhosts Ġsn ackbar Ġcomp os ables ĊĠĠĠ Ġ// ĠBecause Ġthese Ġare Ġnot Ġin Ġa Ġnice ĠScaffold , Ġwe Ġcannot Ġtake Ġadvantage Ġof ĠCoord inator Ġstyle ĊĠĠĠ Ġ// Ġactions Ġ( a ĠF AB Ġwill Ġnot Ġmove Ġout Ġof Ġthe Ġway Ġfor Ġexample ) ĊĠĠĠ Ġval Ġvm Ġ= ĠviewModel . require NotNull () ĊĊĠĠĠ Ġvm . restore State ( savedInstanceState ) ĊĊĠĠĠ Ġbinding . main Compose Bottom . setContent Ġ{ ĊĠĠĠĠĠ Ġvm . Render Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġtheme Ġ= Ġstate . theme ĊĠĠĠĠĠĠĠ ĠSystem Bars ( theme ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvm . handle Sync Dark Theme ( this ) ĊĠĠĠ Ġnavigator . require NotNull (). also Ġ{ Ġn Ġ-> ĊĠĠĠĠĠ Ġn . restore State ( savedInstanceState ) ĊĠĠĠĠĠ Ġn . load If Empty Ġ{ ĠMain Page . Home . as Screen () Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠ Ġon Back Pressed Dispatcher . also Ġ{ Ġdispatcher Ġ-> ĊĠĠĠĠĠ Ġif Ġ( dispatcher . has Enabled Callbacks ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġdispatcher . on Back Pressed () ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon New Intent ( intent : ĠIntent ) Ġ{ ĊĠĠĠ Ġsuper . on New Intent ( intent ) ĊĠĠĠ Ġset Intent ( intent ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Configuration Changed ( new Config : ĠConfiguration ) Ġ{ ĊĠĠĠ Ġsuper . on Configuration Changed ( new Config ) ĊĠĠĠ ĠviewModel ?. handle Sync Dark Theme ( this ) ĊĠĠĠ Ġview Binding ?. apply Ġ{ Ġmain Compose Bottom . re compose () Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget System Service ( name : ĠString ): ĠAny ? Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( name ) Ġ{ ĊĠĠĠĠĠ Ġ// ĠMust Ġbe Ġdefined Ġbefore Ġsuper . onCreate Ġor Ġthrows Ġn pe ĊĠĠĠĠĠ ĠMain Component :: class . java . name Ġ-> Ġinjector . require NotNull () ĊĠĠĠĠĠ Ġelse Ġ-> Ġsuper . getSystem Service ( name ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠ ĠviewModel ?. save State ( out State ) ĊĠĠĠ Ġnavigator ?. save State ( out State ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġview Binding ?. apply Ġ{ Ġthis . main Compose Bottom . dispose () Ġ} ĊĠĠĠ Ġview Binding Ġ= Ġnull ĊĊĠĠĠ Ġnavigator Ġ= Ġnull ĊĠĠĠ ĠviewModel Ġ= Ġnull ĊĠĠĠ Ġinjector Ġ= Ġnull ĊĠ Ġ} Ċ } Ċ