package Ġcom . example . android . self Planner . day planner Ċ Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . content . DialogInterface Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . animation . Animation Utils Ċ import Ġandroid . widget .* Ċ import Ġandroidx . appcompat . widget . PopupMenu Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . example . android . self Planner . R Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . firestore . Firebase Fire store Ċ import Ġcom . google . firebase . firestore . Firebase Fire store Settings ĊĊ Ċ class ĠDay Plan Adapter ( private Ġvar Ġday List : ĠArrayList < Day User Plan Model >) Ġ: ĊĠĠĠ ĠRecyclerView . Adapter < Day Plan Adapter . Day Plan ViewHolder >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdb : ĠFirebase Fire store ĊĠĠĠ Ġprivate Ġval Ġuser UUID : ĠString Ġ= Ġ"${ Firebase Auth . getInstance (). uid }" ĊĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġdb Ġ= ĠFirebase Fire store . getInstance () ĊĠĠĠĠĠĠĠ Ġdb . firestore Settings Ġ= ĠFirebase Fire store Settings . Builder (). build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( ĊĠĠĠĠĠĠĠ Ġparent : ĠViewGroup , ĊĠĠĠĠĠĠĠ Ġview Type : ĠInt ĊĠĠĠ Ġ): ĠDay Plan Adapter . Day Plan ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠitemView Ġ= ĠLayoutInflater . from ( parent . context ). inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . day _ item , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent , Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn ĠDay Plan ViewHolder ( item View ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠDay Plan Adapter . Day Plan ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Item Ġ= Ġday List [ position ] ĊĠĠĠĠĠĠĠ Ġholder . days OfWeek . text Ġ= Ġcurrent Item . days ĊĠĠĠĠĠĠĠ Ġholder . user Days Day Plan . text Ġ= Ġcurrent Item . user Day Plan ĊĠĠĠĠĠĠĠ Ġ// Ġholder . day out Expand View . visibility Ġ= Ġif Ġ( currentItem . expand ) ĠView . VISIBLE Ġelse Ġif Ġ(! currentItem . expand ) ĠView . GONE ĊĠĠĠĠĠĠĠ Ġholder . item View . set BackgroundColor ( Color . WHITE ) ĊĠĠĠĠĠĠĠ Ġholder . day User Plan Menu . set BackgroundColor ( Color . WHITE ) ĊĠĠĠĠĠĠĠ Ġholder . day User Plan Menu . setImage Resource ( R . drawable . ic _ more ) ĊĠĠĠĠĠĠĠ Ġholder . item View . animation Ġ= ĠAnimation Utils . load Animation ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . context , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . anim . daily _ recyclerview _ animation ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( currentItem . expand Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( currentItem . day Task Completed Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . set BackgroundColor ( Color . GRAY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . day User Plan Menu . set BackgroundColor ( Color . GRAY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . day User Plan Menu . setImage Resource ( R . drawable . ic _ check ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . day Expand View . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( currentItem . expand Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( currentItem . day Task Completed Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . set BackgroundColor ( Color . GRAY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . day User Plan Menu . set BackgroundColor ( Color . GRAY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . day User Plan Menu . setImage Resource ( R . drawable . ic _ check ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . day Expand View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġholder . complete Day Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( it . context , Ġ" position : Ġ$ position ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġval Ġdaily Plan Post ion Ġ= Ġday List [ position ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( it . context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Are ĠYou Ġdone Ġthis Ġtask ?") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button (" Yes ", ĠDialog Interface . OnClickListener Ġ{ Ġdialog Interface , Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Item . day Task Completed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠ Ġholder . item View . set BackgroundColor ( Color . GRAY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Day Planner Into Data Base ( day List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Interface . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġuser Daily Planner Into Data Base ( daily User Plan ListModel ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button (" No ", ĠDialog Interface . OnClickListener Ġ{ Ġdialog Interface , Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Interface . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġholder . item View . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Item . expand Ġ= Ġ! currentItem . expand ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠ Ġholder . item View . set BackgroundColor ( Color . GRAY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠ Ġholder . day User Plan Menu . set BackgroundColor ( Color . GRAY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġholder . day User Plan Menu . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġit . context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠToast . makeText ( it . context , Ġ" position : Ġ$ binding Adapter Position ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġday Plan Post ion Ġ= Ġday List [ position ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpopup Menus Ġ= ĠPopup Menu ( context , Ġholder . item View , ĠGr avity . END ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Menus . inflate ( R . menu . daily _ plan _ menu ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Menus . menu . find Item ( R . id . delete Text ). setVisible ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Menus . setOn MenuItem ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . edit Text Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= ĠLayoutInflater . from ( holder . item View . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( R . layout . add _ day _ dialog , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Day Plan Ġ= Ġv . findViewById < EditText >( R . id . user Day Plan Input ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Day Plan . setText ("${ day Plan Post ion . user Day Plan }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( holder . item View . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setView ( v ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button (" Change ĠPlan !") Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday Plan Post ion . user Day Plan Ġ= Ġnew Day Plan . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Day Planner Into Data Base ( day List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" You Ġhave Ġchanged Ġyour Ġplan !", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// This Ġfunction Ġis Ġupdating Ġthe Ġwhole Ġarray Ġof Ġdaily User Plan Ġfrom Ġfire store Ġdatabase . ĠI 've Ġtried Ġonly Ġupdate Ġfor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSpecific Ġindex Ġof Ġarray Ġbut Ġit Ġseems Ġimpossible . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Found Ġthis Ġanswer Ġfrom Ġstack overflow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// https :// stackoverflow . com / questions / 5 4 0 0 4 2 7 2 / is - there - any - way - to - update - a - specific - index - from - the - array - in - firestore ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// To - do : ĠIf Ġanything ĠI Ġfind Ġthe Ġway Ġonly Ġupdate Ġfor Ġspecific Ġindex ( binding Adapter Position ), Ġto Ġdo Ġso . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// user Daily Planner Into Data Base ( daily User Plan ListModel ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button (" Cancel ") Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Menus . show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpopup Ġ= Ġandroidx . appcompat . widget . PopupMenu :: class . java . getDeclared Field (" m Popup ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmenu Ġ= Ġpopup . get ( popup Menus ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . java Class . getDeclared Method (" set Force Show Icon ", ĠBoolean :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. invoke ( menu , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠDay Plan ViewHolder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdays OfWeek : ĠTextView Ġ= ĠitemView . findViewById ( R . id . days OfWeek ) ĊĠĠĠĠĠĠĠ Ġval Ġuser Days Day Plan : ĠTextView Ġ= ĠitemView . findViewById ( R . id . user Days Day Plan ) ĊĠĠĠĠĠĠĠ Ġval Ġday Expand View : ĠConstraint Layout Ġ= ĠitemView . findViewById ( R . id . day Expand View ) ĊĠĠĠĠĠĠĠ Ġval Ġday User Plan Menu : ĠImage Button Ġ= ĠitemView . findViewById ( R . id . day User Plan Menu ) ĊĠĠĠĠĠĠĠ Ġval Ġcomplete Day Button : ĠImage Button Ġ= ĠitemView . findViewById ( R . id . complete Day Button ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġuser Day Planner Into Data Base ( day : ĠArrayList < Day User Plan Model >) Ġ{ ĊĠĠĠĠĠĠĠ Ġdb . collection (" users "). document ("${ user UUID }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. update (" day plan ", Ġday ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ Ġdocument Reference Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġday List . size ĊĠĠĠ Ġ} Ċ }