package Ġcom . to sh . pool android . view . fragment Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View . GONE Ċ import Ġandroid . view . View . VISIBLE Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . activity . On Back Pressed Callback Ċ import Ġandroidx . fragment . app . FragmentManager Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . google . android . material . dialog . Material AlertDialog Builder Ċ import Ġcom . to sh . pool android . R Ċ import Ġcom . to sh . pool android . model . database . Cart Item Entity Ċ import Ġcom . to sh . pool android . model . database . Main Database Ċ import Ġcom . to sh . pool android . util . get SharedPreferences Value Ċ import Ġcom . to sh . pool android . view . activity . MainActivity Ċ import Ġcom . to sh . pool android . view . adapter . Cart Adapter Ċ import Ġcom . to sh . pool android . view model . Main ViewModel Ċ import Ġkotlinx . android . synt hetic . main . fragment _ cart .* Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠCart Fragment Ġ: ĠBase Fragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġmain ViewModel : ĠMain ViewModel ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġadapter : ĠCart Adapter ? Ġ= Ġnull ĊĠĠĠ Ġlateinit Ġvar Ġplaceholder Fragment : ĠCart Fragment ĊĠĠĠ Ġlateinit Ġvar Ġgrand Total : ĠString ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ cart , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġmain ViewModel Ġ= ĠViewModel Providers . of ( this ). get ( Main ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġplaceholder Fragment Ġ= ĠCart Fragment () ĊĊĠĠĠĠĠĠĠ Ġfetch Data From Cart () ĊĠĠĠĠĠĠĠ Ġdelete All Cart Items () ĊĠĠĠĠĠĠĠ Ġopen Checkout Fragment () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ Ġval Ġcallback : ĠOn Back Pressed Callback Ġ= Ġobject Ġ: ĠOn Back Pressed Callback ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle On Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcart Empty . visibility Ġ= ĠG ONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfm : ĠFragment Manager ? Ġ= Ġfragment Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfm !!. pop Back Stack () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrequire Activity (). on Back Pressed Dispatcher . add Callback ( this , Ġcallback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfetch Data From Cart () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġphone Ġ= Ġget SharedPreferences Value ( context !! , Ġ" phone ") ĊĊĠĠĠĠĠĠĠ Ġ( activity Ġas ĠMainActivity ). setup Toolbar ( getString ( R . string . shopping _ cart )) ĊĊĠĠĠĠĠĠĠ Ġcart Rv . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmain ViewModel !!. get Cart Total (). observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġtotal Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrand Total Ġ= Ġtotal . toInt (). toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Cart . text Ġ= Ġ" Total Ġ$ grand Total ĠK ES " ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcart Items Ġ= ĠMain Database . getInstance ( it !! ) !!. cart Item Dao (). get Cart Items () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cart Items . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcart Rv . adapter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCart Adapter ( cart Items Ġas ĠArrayList < Cart Item Entity >) Ġ{ Ġcart Items Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Single Cart Item ( cart Items ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Buy . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Cart . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcart Ll . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcart Empty . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Checkout Fragment () Ġ{ ĊĠĠĠĠĠĠĠ Ġbtn Buy . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Checkout Ġ= ĠCheckout Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Manager Ġ= Ġactivity !!. support FragmentManager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Transaction Ġ= Ġfragment Manager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcheckout Total Ġ= Ġgrand Total . toInt (). plus ( 1 5 0 ). toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . putString (" CHECK OUT _ TOTAL ", Ġcheckout Total ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . putString (" TOTAL ", Ġgrand Total ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Checkout . arguments Ġ= Ġbundle ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Transaction . addTo Back Stack ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Transaction . replace ( R . id . details _ fragment , Ġfragment Checkout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Transaction . addTo Back Stack ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Transaction . commit () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete Single Cart Item ( cart Item : ĠCart Item Entity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmain ViewModel !!. delete Cart Item ( cart Item . id ) ĊĊĠĠĠĠĠĠĠ ĠHandler (). post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġactivity !!. support FragmentManager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . replace ( R . id . details _ fragment , Ġplaceholder Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . commit () ĊĠĠĠĠĠĠĠ Ġ}, Ġ 4 0 0 ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete All Cart Items () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġempty Dialog Ġ= ĠMaterial AlertDialog Builder ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Clear ĠCart ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" Are Ġyou Ġsure Ġyou Ġwant Ġto Ġclear Ġyour Ġcart Ġ? ") ĊĠĠĠĠĠĠĠ Ġempty Cart . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty Dialog . set Positive Button (" Yes ") Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMain Database . getInstance ( it !! ) !!. cart Item Dao (). delete Cart () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġactivity !!. support FragmentManager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . replace ( R . id . details _ fragment , Ġplaceholder Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . commit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button (" No ") Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ