package Ġorg . fu us io . api . feature Ċ Ċ import Ġandroidx . annotation . Call Super Ċ import Ġorg . k oin . core . context . load K oin Modules Ċ import Ġorg . k oin . core . context . unload K oin Modules Ċ import Ġorg . k oin . core . module . Module Ċ Ċ abstract Ġclass ĠFeature ( val Ġid : Int Ġ= ĠhashCode ()) Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" Le aking This ") ĊĠĠĠĠĠĠĠ Ġregister Feature ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġis Activated Ġ= Ġfalse ĊĊĠĠĠ Ġabstract Ġfun Ġget Feature Module (): ĠModule ĊĊĠĠĠ Ġ@ Call Super ĊĠĠĠ Ġopen Ġfun Ġactivate () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Activated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Activated Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload K oin Modules ( get Feature Module ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Call Super ĊĠĠĠ Ġopen Ġfun Ġdeactivate () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Activated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Activated Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġun load K oin Modules ( get Feature Module ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġfeatures Ġ= Ġmutable Map Of < Int , ĠFeature >() ĊĊĠĠĠĠĠĠĠ Ġfun Ġget ( id : ĠInt ) Ġ= Ġfeatures [ id ] !! ĊĊĠĠĠĠĠĠĠ Ġfun Ġregister Feature ( feature : ĠFeature ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeatures [ feature . id ] Ġ= Ġfeature ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ