/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 ĠR az ew are ĠLLC Ċ Ġ* ĠĊ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* ĠĊ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* ĠĊ Ġ* ĠNot with standing Ġthe Ġfore going , Ġyou Ġmay Ġnot Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ċ Ġ* Ġdistribute , Ġsublicense , Ġcreate Ġa Ġderivative Ġwork , Ġand / or Ġsell Ġcopies Ġof Ġthe Ċ Ġ* ĠSoftware Ġin Ġany Ġwork Ġthat Ġis Ġdesigned , Ġintended , Ġor Ġmarket ed Ġfor Ġped ag og ical Ġor Ċ Ġ* Ġinstruction al Ġpurposes Ġrelated Ġto Ġprogramming , Ġcoding , Ġapplication Ġdevelopment , Ċ Ġ* Ġor Ġinformation Ġtechnology . Ġ ĠPermission Ġfor Ġsuch Ġuse , Ġcopying , Ġmodification , Ċ Ġ* Ġmer ger , Ġpublication , Ġdistribution , Ġsublic ensing , Ġcreation Ġof Ġderivative Ġworks , Ċ Ġ* Ġor Ġsale Ġis Ġexpress ly Ġwith held . Ċ Ġ* ĠĊ Ġ* ĠThis Ġproject Ġand Ġsource Ġcode Ġmay Ġuse Ġlibraries Ġor Ġframeworks Ġthat Ġare Ċ Ġ* Ġreleased Ġunder Ġvarious ĠOpen - Source Ġlicenses . ĠUse Ġof Ġthose Ġlibraries Ġand Ċ Ġ* Ġframeworks Ġare Ġgoverned Ġby Ġtheir Ġown Ġindividual Ġlicenses . Ċ Ġ* ĠĊ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN Ċ Ġ* ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ package Ġcom . ray w ender lich . android . fr uits al ad Ċ Ċ import Ġandroid . content . Clip Data Ċ import Ġandroid . content . Clipboard Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġcom . google . android . material . dialog . Material AlertDialog Builder ĊĊ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠ Ġprivate Ġval Ġfruit Items ĊĠĠĠ Ġget () Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠ ĠgetString ( R . string . fruit _ ban ana ), ĊĠĠĠĠĠĠĠ ĠgetString ( R . string . fruit _ orange ), ĊĠĠĠĠĠĠĠ ĠgetString ( R . string . fruit _ lime )) ĊĊĠ Ġprivate Ġval Ġfruit List : ĠString ĊĠĠĠ Ġget () Ġ= ĠgetString ( R . string . fruit _ list , Ġno Of B anan as , Ġno Of Orange s , Ġno Of L imes ) ĊĊĠ Ġprivate Ġvar Ġno Of B anan as : ĠInt Ġ= ĠDEFAULT _ QU ANT ITY ĊĠ Ġprivate Ġvar Ġno Of Orange s : ĠInt Ġ= ĠDEFAULT _ QU ANT ITY ĊĠ Ġprivate Ġvar Ġno Of L imes : ĠInt Ġ= ĠDEFAULT _ QU ANT ITY ĊĊĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠ Ġ// ĠSwitch Ġto ĠApp Theme Ġfor Ġdisplaying Ġthe Ġactivity ĊĠĠĠ Ġset Theme ( R . style . App Theme ) ĊĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠ Ġupdate Views () ĊĠĠĠ Ġsetup Click Listeners () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġupdate Views () Ġ{ ĊĠĠĠ Ġtext _ ban ana _ quantity . text Ġ= Ġno Of B anan as . toString () ĊĠĠĠ Ġtext _ orange _ quantity . text Ġ= Ġno Of Orange s . toString () ĊĠĠĠ Ġtext _ lime _ quantity . text Ġ= Ġno Of L imes . toString () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġsetup Click Listeners () Ġ{ ĊĠĠĠ Ġcard _ m yst ery . setOnClickListener Ġ{ Ġload Sur prise Dialog () Ġ} ĊĠĠĠ Ġbutton _ add . setOnClickListener Ġ{ Ġshow Add F ruit Dialog () Ġ} ĊĠĠĠ Ġbutton _ copy . setOnClickListener Ġ{ Ġsave To Clipboard () Ġ} ĊĠĠĠ Ġbutton _ clear . setOnClickListener Ġ{ Ġshow Clear List Confirmation Dialog () Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġshow Add F ruit Dialog () Ġ{ ĊĠĠĠ Ġval Ġchecked Items Ġ= Ġboolean ArrayOf ( false , Ġfalse , Ġfalse ) ĊĠĠĠ ĠMaterial AlertDialog Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( resources . getString ( R . string . dialog _ add _ fruit _ title )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Neutral Button ( resources . getString ( R . string . dialog _ cancel )) Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( resources . getString ( R . string . dialog _ add _ fruit _ positive _ button )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchecked Items . forEach Indexed Ġ{ Ġfruit Item , Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isChecked ) Ġupdate F ruit Quantity ( fruit Item , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Multi Choice Items ( fruit Items , Ġchecked Items ) Ġ{ Ġ_, Ġposition , Ġchecked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchecked Items [ position ] Ġ= Ġchecked ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġshow Clear List Confirmation Dialog () Ġ{ ĊĠĠĠ ĠMaterial AlertDialog Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( getString ( R . string . dialog _ clear _ list _ title )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( resources . getString ( R . string . dialog _ clear _ list _ message )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Neutral Button ( resources . getString ( R . string . dialog _ cancel )){ dialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( resources . getString ( R . string . dialog _ negative _ button )){ dialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( resources . getString ( R . string . dialog _ clear _ list _ positive _ button )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ dialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate F ruit Quantity ( null , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġload Sur prise Dialog () Ġ{ ĊĠĠĠ Ġ// ĠTODO : Ġshow Ġprogress Ġindicator ĊĠĠĠ Ġ// ĠTODO : Ġshow Ġdialog Ġwith Ġcustom Ġview ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġshow Snackbar ( selected F ruit Item : ĠInt ) Ġ{ ĊĠĠĠ Ġ// ĠTODO : Ġshow Ġsn ackbar Ġwith Ġundo Ġaction ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġsave To Clipboard () Ġ{ ĊĠĠĠ Ġval Ġclipboard Ġ= Ġget System Service ( Context . CLIP BOARD _ SERVICE ) Ġas ĠClip board Manager ĊĠĠĠ Ġval Ġclip Ġ= ĠClip Data . new Plain Text ( getString ( R . string . fruit _ list _ title ), Ġfruit List ) ĊĠĠĠ Ġclipboard . set Primary Clip ( clip ) ĊĠĠĠ Ġshow Toast () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġshow Toast () Ġ{ ĊĠĠĠ Ġ// ĠTODO : Ġshow Ġtoast Ġconfirmation ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġupdate F ruit Quantity ( selected F ruit Item : ĠInt ? Ġ= Ġnull , Ġis Increase : ĠBoolean ) Ġ{ ĊĠĠĠ Ġwhen Ġ( selected F ruit Item ) Ġ{ ĊĠĠĠĠĠ ĠPOSITION _ BAN ANA Ġ-> Ġif Ġ( isIn crease ) Ġno Of B anan as ++ Ġelse Ġno Of B anan as -- ĊĠĠĠĠĠ ĠPOSITION _ OR ANGE Ġ-> Ġif Ġ( isIn crease ) Ġno Of Orange s ++ Ġelse Ġno Of Orange s -- ĊĠĠĠĠĠ ĠPOSITION _ LI ME Ġ-> Ġif Ġ( isIn crease ) Ġno Of L imes ++ Ġelse Ġno Of L imes -- ĊĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġno Of B anan as Ġ= ĠDEFAULT _ QU ANT ITY ĊĠĠĠĠĠĠĠ Ġno Of Orange s Ġ= ĠDEFAULT _ QU ANT ITY ĊĠĠĠĠĠĠĠ Ġno Of L imes Ġ= ĠDEFAULT _ QU ANT ITY ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġupdate Views () ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ QU ANT ITY Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġconst Ġval ĠPOSITION _ BAN ANA Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġconst Ġval ĠPOSITION _ OR ANGE Ġ= Ġ 1 ĊĠĠĠ Ġprivate Ġconst Ġval ĠPOSITION _ LI ME Ġ= Ġ 2 ĊĠĠĠ Ġprivate Ġconst Ġval ĠTAG _ FR UIT _ DIALOG Ġ= Ġ" fruit Dialog " ĊĠĠĠ Ġprivate Ġconst Ġval ĠDEL AY Ġ= Ġ 2 0 0 0 L ĊĠ Ġ} Ċ } Ċ