// Â © Ġ 2 0 1 8 ĠD ' N arial ĠBrown - Press ley ĠAll ĠRights ĠReserved . Ċ package Ġcom . example . dn arial press ley . n clude _ a Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . design . widget . Navigation View Ċ import Ġandroid . support . v 4 . widget . Drawer Layout Ċ import Ġandroid . support . v 7 . app . ActionBar Drawer Toggle Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . support . v 7 . widget . Toolbar Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġcom . google . firebase . database .* Ċ import Ġio . realm . Realm Ċ Ċ class ĠClo thing Product Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĊĠĠĠ Ġprivate Ġval Ġm Database : ĠDatabase Reference Ġ= ĠFirebase Database . getInstance (). reference ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main _ product ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġadds Ġa Ġcustom Ġtoolbar Ġto Ġthe Ġactivity ĊĠĠĠĠĠĠĠ Ġval Ġmy Toolbar Ġ= ĠfindViewById < Toolbar >( R . id . tool Bar ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( my Toolbar ) ĊĊĊĠĠĠĠĠĠĠ Ġ// Ġthis Ġwill Ġfind Ġthe Ġnavigation Ġview Ġand Ġhandle Ġthe Ġonclick Ġevents ( move Ġto Ġnew Ġactivity ) Ġof Ġthe Ġitems Ġinside Ġit ĊĠĠĠĠĠĠĠ Ġval Ġnav View Ġ= ĠfindViewById < Navigation View >( R . id . navigation View ) ĊĠĠĠĠĠĠĠ Ġnav View . set Navigation ItemSelected Listener ( Navigation View . On Navigation ItemSelected Listener Ġ{ Ġmenu Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( menuItem . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . p ant Item Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this @ Clo thing Product Activity , ĠP ants Product Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . tech Item Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this @ Clo thing Product Activity , ĠMain Product Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . sh oe Item Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this @ Clo thing Product Activity , ĠSh oe Product Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . clo th Item Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// val Ġintent Ġ= ĠIntent ( this @ Clo thing Product Activity , ĠClo thing Product Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// startActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . contact Us Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this @ Clo thing Product Activity , ĠFeed Back Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// this Ġadds Ġa Ġbutton Ġto Ġopen Ġthe Ġnavigation Ġdrawer Ġto Ġthe Ġaction Ġbar ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Home Button Enabled ( true ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdrawer Layout Ġ= ĠfindViewById < Drawer Layout >( R . id . first Layout ) ĊĠĠĠĠĠĠĠ Ġval Ġm Drawer Toggle Ġ= Ġobject Ġ: ĠAction Bar Drawer Toggle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , Ġ/* Ġhost ĠActivity Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer Layout , Ġ/* ĠDraw er Layout Ġobject Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Toolbar , Ġ/* Ġthe Ġtoolbar */ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . Open , Ġ/* Ġ" open Ġdrawer " Ġdescription Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . Close Ġ Ġ/* Ġ" close Ġdrawer " Ġdescription Ġ*/ ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĠCalled Ġwhen Ġa Ġdrawer Ġhas Ġset tled Ġin Ġa Ġcompletely Ġclosed Ġstate . Ġ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Drawer Closed ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Drawer Closed ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĠCalled Ġwhen Ġa Ġdrawer Ġhas Ġset tled Ġin Ġa Ġcompletely Ġopen Ġstate . Ġ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Drawer Opened ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Drawer Opened ( view ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġdrawer Ġtoggle Ġas Ġthe ĠDraw er Listener ĊĠĠĠĠĠĠĠ Ġdrawer Layout . add Drawer Listener ( m Drawer Toggle ) ĊĠĠĠĠĠĠĠ Ġm Drawer Toggle . sync State () ĊĊĊĠĠĠĠĠĠĠ Ġ// Ġthis Ġis Ġthe Ġfunction Ġthat Ġif Ġcalled Ġwill Ġadd Ġitems Ġto Ġthe ĠFirebase Ġdatabase Ġ( items Ġalready Ġin , Ġnot Ġcalled ) ĊĠĠĠĠĠĠĠ Ġfun ĠaddTo Database () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem 1 Ġ= ĠProduct Information () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem 2 Ġ= ĠProduct Information () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem 3 Ġ= ĠProduct Information () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem 1 . product Name Ġ= Ġ" C andy " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem 1 . product Price Ġ= Ġ"$ 5 . 6 4 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem 1 . product Image Ġ= ĠR . drawable . d 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem 2 . product Name Ġ= Ġ" Robot " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem 2 . product Price Ġ= Ġ"$ 7 0 . 5 6 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem 2 . product Image Ġ= ĠR . drawable . d 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem 3 . product Name Ġ= Ġ" Car " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem 3 . product Price Ġ= Ġ"$ 7 0 5 0 0 . 5 6 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem 3 . product Image Ġ= ĠR . drawable . d 3 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġcreates Ġa Ġlist Ġof Ġproducts Ġwe Ġcurrently Ġhave Ġto Ġoffer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġproduct List In Ġ= ĠlistOf < Product Information >( item 1 , Ġitem 2 , Ġitem 3 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġwill Ġadd Ġthe Ġitems Ġto Ġthe ĠFirebase Ġdatabase ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Database . child (" Tech nology ĠProducts "). setValue ( product List In ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// addTo Database () ĊĊĊĠĠĠĠĠĠĠ Ġ// Ġthis Ġcreates Ġan Ġempty Ġproduct Ġlist ĊĠĠĠĠĠĠĠ Ġvar Ġproduct List Out Ġ= Ġmutable ListOf < Product Information >() ĊĊĠĠĠĠĠĠĠ Ġ// Ġthis Ġwill Ġquery Ġthe Ġdatabase Ġand Ġadd Ġthe Ġitems Ġto Ġthe Ġempty Ġproduct Ġlist Ġ( Still Ġneed Ġto Ġre visit Ġto Ġlook Ġat Ġthe Ġpicture Ġstorage . ĠMust Ġstore Ġactual Ġimages Ġon Ġthe Ġdatabase ) ĊĠĠĠĠĠĠĠ Ġval Ġitem Query : ĠQuery Ġ= Ġm Database . child (" Tech nology ĠProducts ") ĊĠĠĠĠĠĠĠ Ġitem Query . addListener For Single Value Event ( object Ġ: ĠValue EventListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Data Change ( data Snapshot : ĠData Snapshot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGo es Ġthrough Ġeach Ġitem Ġin Ġthis Ġpart Ġof Ġthe Ġdatabase Ġand Ġadd Ġit Ġto Ġthe Ġempty Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( single Snapshot Ġin Ġdata Snapshot . children ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠProduct Information () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . product Name Ġ= Ġsingle Snapshot . child (" product Name "). value . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . product Price Ġ= Ġsingle Snapshot . child (" product Price "). value . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . product Image Ġ= Ġsingle Snapshot . child (" product Image "). value . toString (). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduct List Out . add ( item ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġiniti ates Ġa ĠRealm Ġdatabase Ġinstance Ġ( phone - side Ġdatabase ) Ġ( used Ġinside Ġthe Ġcustom Ġadapter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRealm . init ( this @ Clo thing Product Activity ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġtakes Ġthe Ġlist view Ġand Ġdraw s Ġit Ġinto Ġa Ġvariable Ġby Ġits Ġid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġre cycle View Ġ= ĠfindViewById < RecyclerView >( R . id . product Re cycle View ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Manager Ġ= ĠLinearLayoutManager ( this @ Clo thing Product Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager . orientation Ġ= ĠLinearLayoutManager . VERTICAL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cycle View . layout Manager Ġ= Ġlayout Manager ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġtakes Ġour Ġlist Ġand Ġad ap ts Ġit Ġto Ġthe Ġlayout Ġwe Ġprefer Ġset Ġup Ġin Ġour Ġcustom Ġadapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠProduct Adapter _ A ( product List Out ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġimplements Ġthe Ġre cycle view Ġshown Ġin Ġthe ĠUI Ġas Ġits Ġsetup Ġin Ġthe Ġadapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cycle View . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cancelled ( database Error : ĠDatabase Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Server ĠResponse ", Ġ" on Cancelled ", Ġdatabase Error . to Exception ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġadd Ġthe Ġaction bar Ġmenu Ġto Ġthe Ġaction Ġbar Ġ( this Ġcontains Ġthe Ġcart Ġbutton ) ĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġmenu ; Ġthis Ġadds Ġitems Ġto Ġthe Ġaction Ġbar Ġif Ġit Ġis Ġpresent . ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . action bar _ menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġfind Ġthe Ġitem Ġids Ġinside Ġthe Ġmenu Ġand Ġhandle Ġtheir Ġrespective Ġclick Ġactions ĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠHandle Ġaction Ġbar Ġitem Ġclicks Ġhere . ĠThe Ġaction Ġbar Ġwill ĊĠĠĠĠĠĠĠ Ġ// Ġautomatically Ġhandle Ġclicks Ġon Ġthe Ġbuttons , Ġin Ġthis Ġcase Ġwe Ġhandle Ġthe Ġmovement Ġto Ġthe Ġcart Ġactivity ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġitem . itemId ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( id Ġ== ĠR . id . cart Button ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠCart Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} Ċ } ĊĊ