package Ġcom . example . tooth pick . activity Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . widget . Button Ċ import Ġandroidx . annotation . Visible ForTesting Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . coordinator layout . widget . Coordinator Layout Ċ import Ġandroidx . recyclerview . widget . Divider Item Decoration Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . example . tooth pick . R Ċ import Ġcom . example . tooth pick . activity . AddNew Activity . NEW _ ITEM _ NAME _ KEY Ċ import Ġcom . example . tooth pick . adapter . Back pack Adapter Ċ import Ġcom . example . tooth pick . adapter . I Back pack Adapter Ċ import Ġcom . example . tooth pick . annotation . Application Scope Ċ import Ġcom . example . tooth pick . helper . Notification Helper Ċ import Ġcom . example . tooth pick . model . Back pack Ċ import Ġtoo th pick . k tp . K TP Ċ import Ġtoo th pick . k tp . binding . bind Ċ import Ġtoo th pick . k tp . binding . module Ċ import Ġtoo th pick . k tp . delegate . inject Ċ import Ġtoo th pick . k tp . delegate . lazy Ċ import Ġtoo th pick . smooth ie . lifecycle . close On Destroy ĊĊ Ċ /** Ċ Ġ* ĠSimple Ġversion Ġof Ġthe ĠBack pack Items Activity . Ċ Ġ* Ċ Ġ* ĠIn Ġthis Ġexample Ġthe Ġback pack Ġis Ġnot Ġretained Ġon Ġconfiguration Ġchanges Ċ Ġ* Ġas Ġit Ġbelongs Ġto Ġthe Ġactivity Ġscope Ġwhich Ġfollows Ġthe Ġlifecycle Ġof Ġactivity Ċ Ġ* Ġinstances : Ġwhen Ġan Ġinstance Ġis Ġdestroyed , Ġits Ġassociated Ġscope Ġis Ġclosed Ċ Ġ* Ġand Ġa Ġnew Ġscope Ġwith Ġa Ġnew Ġback pack Ġwill Ġbe Ġcreated Ġwhen Ġthe Ġnew Ġinstance Ċ Ġ* Ġof Ġthe Ġactivity Ġis Ġcreated . Ċ Ġ*/ Ċ class ĠSimple Back pack Items Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠADD _ NEW _ REQUEST Ġ= Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// will Ġbe Ġcreated Ġin Ġthe Ġapp Ġscope ĊĠĠĠ Ġ// as Ġit Ġis Ġannotated Ġwith Ġ@ Singleton ĊĠĠĠ Ġval Ġnotification Helper : ĠNotification Helper Ġby Ġlazy () ĊĠĠĠ Ġ// will Ġbe Ġcreated Ġin Ġthe Ġcurrent Ġscope Ġ= Ġactivity Ġscope ĊĠĠĠ Ġ// as Ġthey Ġare Ġnot Ġannotated Ġby Ġa Ġscope Ġannotation . ĊĠĠĠ Ġval Ġback pack : ĠBack pack Ġby Ġinject () ĊĠĠĠ Ġ// will Ġbe Ġinjected Ġin Ġthe Ġactivity Ġscope Ġas Ġthe Ġbinding ĊĠĠĠ Ġ// is Ġdefined Ġthere ĊĠĠĠ Ġval Ġview Adapter : ĠI Back pack Adapter Ġby Ġinject () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcoord inator Layout : ĠCoord inator Layout ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġinject Dependencies () ĊĠĠĠĠĠĠĠ Ġsetup UI Components () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Visible ForTesting Ġfun Ġinject Dependencies () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ 1 . ĠOpen ĠActivity Ġscope Ġas Ġchild Ġof ĠApplication Ġscope ĊĠĠĠĠĠĠĠ Ġ// Ġ 2 . ĠInstall Ġmodule Ġinside ĠActivity Ġscope Ġcontaining : ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠ 2 . 1 Ġh en Ġinjection ĠI Back pack Adapter , Ġuse Ġthe Ġclass ĠBack pack Adapter ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠ 2 . 2 Ġinstall Ġback pack Ġas Ġa Ġsingleton Ġon Ġthe ĠActivity Ġscope Ġvia Ġbinding ĊĠĠĠĠĠĠĠ Ġ// Ġ 3 . ĠClose Ġwhen Ġactivity Ġis Ġdestroyed ĊĠĠĠĠĠĠĠ Ġ// Ġ 4 . ĠInject Ġdependencies ĊĠĠĠĠĠĠĠ ĠK TP . open Scopes ( Application Scope :: class . java , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. install Modules ( module Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind < I Back pack Adapter >(). to Class < Back pack Adapter >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind < Back pack >(). singleton () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. close On Destroy ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. inject ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠADD _ NEW _ REQUEST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠRESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata ?. getString Extra ( NEW _ ITEM _ NAME _ KEY )?. also Ġ{ Ġitem Name Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback pack . addItem ( itemName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Helper . show Notification ( coordinator Layout , Ġ" New ĠItem Ġadded ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġsetup UI Components () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . back pack _ list ) ĊĠĠĠĠĠĠĠ Ġcoord inator Layout Ġ= ĠfindViewById ( R . id . coordinator Layout ) ĊĊĊĠĠĠĠĠĠĠ ĠfindViewById < RecyclerView >( R . id . list ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( this @ Simple Back pack Items Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġview Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Item Decoration ( Divider Item Decoration ( getContext (), ĠDiv ider Item Decoration . VERTICAL )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠfindViewById < Button >( R . id . add _ new ). setOnClickListener Ġ{ Ġgo ToAdd New Activity () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgo ToAdd New Activity () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠAdd New Activity :: class . java ) ĊĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠADD _ NEW _ REQUEST ) ĊĠĠĠ Ġ} Ċ } Ċ