OVIDIUS University of Constant a [616589]

Ministry of National Education
"OVIDIUS" University of Constant a
Faculty of Mathematics and Computer Science
Degree Program: Computer Science
Home Assistant for Elderly People
Scienti c Adviser:
Conf. dr. Pelican Elena
Student: [anonimizat] a
2018

Outline
Outline 1
1 Solutions 2
2 Application 20
3 Future works 21
1

Chapter 1
Solutions
Reminder This feature has three activities: ReminderActivity (the main window
of the Reminder feature), ReminderNewActivity (when the user wants to add a new
reminder this is the activity that will be user) and ReminderEditActivity (for chang-
ing some details about a reminder). Beside the three activities mentioned above, this
features also contains three java classes: DateTimeClass (this class creates date and
time objects for a easier sorting), ReminderClass (is used for setting and getting the
data) adn the last class is the ReminderDatabaseClass (which is used to create the
database "AletheiaDatabase" with the ReminderTable, it is also responsabile for in-
serting, updating and deleting data from the table). The last two components of this
feature are the recievers: BootReciever (is used for getting the data from the layout)
and AlarmReciever (which is used for processing the data and sent a noti cation when
the time is right)
ReminderActivity
package o v i d i u s . univ . a l e t h e i a ;
public c l a s s ReminderActivity extends AppCompatActivity f
p r i v a t e RecyclerView rmdlist ;
p r i v a t e SimpleAdapter adpt ;
p r i v a t e Toolbar apptoolbar ;
p r i v a t e TextView normdv ;
p r i v a t e FloatingActionButton nrmddbtn ;
p r i v a t e i n t tmp ;
p r i v a t e LinkedHashMap <Integer , Integer >mapid = new LinkedHashMap <>();
p r i v a t e ReminderDatabase rmddb ;
p r i v a t e Mu l ti Se l ec t or multis = new M u lt iS e le c to r ( ) ;
p r i v a t e AlarmReciever alrmrec ;
@Override
protected void onCreate ( Bundle savedInstanceState ) f
2

Solutions Solutions
super . onCreate ( savedInstanceState ) ;
setContentView (R. layout . a c ti v it y m ai n ) ;
rmddb = new ReminderDatabase ( getApplicationContext ( ) ) ;
apptoolbar = ( Toolbar ) findViewById (R. id . toolbar ) ;
nrmddbtn = ( FloatingActionButton ) findViewById (R. id . add reminder ) ;
rmdlist = ( RecyclerView ) findViewById (R. id . r e m i n d e r l i s t ) ;
normdv = ( TextView ) findViewById (R. id . no reminder text ) ;
List<Reminder >rmds = rmddb . getAllallrmd ( ) ;
i f ( rmds . isEmpty ( ) ) f
normdv . s e t V i s i b i l i t y ( View . VISIBLE ) ;
g
rmdlist . setLayoutManager ( getLayoutManager ( ) ) ;
registerForContextMenu ( rmdlist ) ;
adpt = new SimpleAdapter ( ) ;
adpt . setItemCount ( getDefaultItemCount ( ) ) ;
rmdlist . setAdapter ( adpt ) ;
setSupportActionBar ( apptoolbar ) ;
apptoolbar . s e t T i t l e (R. s t r i n g . app name ) ;
nrmddbtn . setOnClickListener (new View . OnClickListener ( ) f
@Override
public void onClick ( View v ) f
Intent i n t e n t = new Intent ( v . getContext ( ) , ReminderNewActivity . c l a s s ) ;
s t a r t A c t i v i t y ( i n t e n t ) ;
g
g) ;
alrmrec = new AlarmReciever ( ) ;
g
@Override
public void onCreateContextMenu ( ContextMenu menu , View v , ContextMenu . ContextMenuInfo menuInfo ) f
getMenuInflater ( ) . i n f l a t e (R. menu . menu new reminder , menu ) ;
g
p r i v a t e android . support . v7 . view . ActionMode . Callback delmode = new ModalMultiSelectorCallback ( multis ) f
@Override
public boolean onCreateActionMode ( android . support . v7 . view . ActionMode actionMode , Menu menu) f
getMenuInflater ( ) . i n f l a t e (R. menu . menu new reminder , menu ) ;
return true ;
g
3

Solutions Solutions
@Override
public boolean onActionItemClicked ( android . support . v7 . view . ActionMode actionMode , MenuItem menuItem ) f
switch ( menuItem . getItemId ( ) ) f
case R. id . exit reminder :
actionMode . f i n i s h ( ) ;
f o r ( i n t i = mapid . s i z e ( ) ; i >= 0 ; i)f
i f ( multis . i s S e l e c t e d ( i , 0)) f
i n t id = mapid . get ( i ) ;
Reminder temp = rmddb . getReminder ( id ) ;
rmddb . deleteReminder ( temp ) ;
adpt . removeItemSelected ( i ) ;
alrmrec . cancelAlarm ( getApplicationContext ( ) , id ) ;
g
g
multis . c l e a r S e l e c t i o n s ( ) ;
adpt . onDeleteItem ( getDefaultItemCount ( ) ) ;
Toast . makeText ( getApplicationContext ( ) ,
" Deleted " ,
Toast .LENGTH SHORT) . show ( ) ;
List<Reminder >rmds = rmddb . getAllallrmd ( ) ;
i f ( rmds . isEmpty ( ) ) f
normdv . s e t V i s i b i l i t y ( View . VISIBLE ) ;
ge l s ef
normdv . s e t V i s i b i l i t y ( View .GONE) ;
g
return true ;
case R. id . save reminder :
actionMode . f i n i s h ( ) ;
multis . c l e a r S e l e c t i o n s ( ) ;
return true ;
d e f a u l t :
break ;
g
return f a l s e ;
g
4

Solutions Solutions
g;
p r i v a t e void selectReminder ( i n t c l k i d ) f
String c l k i d s t r = I n t e g e r . t oS tri ng ( c l k i d ) ;
Intent i = new Intent ( this , ReminderEditActivity . c l a s s ) ;
i . putExtra ( ReminderEditActivity .EXTRA REMINDER ID, c l k i d s t r ) ;
s t a r t A c t i v i t y F o r R e s u l t ( i , 1 ) ;
g
@Override
public void onActivityResult ( i n t requestCode , i n t resultCode , Intent data ) f
adpt . setItemCount ( getDefaultItemCount ( ) ) ;
g
@Override
public void onResume () f
super . onResume ( ) ;
List<Reminder >rmds = rmddb . getAllallrmd ( ) ;
i f ( rmds . isEmpty ( ) ) f
normdv . s e t V i s i b i l i t y ( View . VISIBLE ) ;
ge l s ef
normdv . s e t V i s i b i l i t y ( View .GONE) ;
g
adpt . setItemCount ( getDefaultItemCount ( ) ) ;
g
protected RecyclerView . LayoutManager getLayoutManager ( ) f
return new LinearLayoutManager ( this , LinearLayoutManager .VERTICAL, f a l s e ) ;
g
@Override
public boolean onCreateOptionsMenu (Menu menu) f
getMenuInflater ( ) . i n f l a t e (R. menu . main menu , menu ) ;
return true ;
g
public c l a s s SimpleAdapter extends RecyclerView . Adapter <SimpleAdapter . VerticalItemHolder >f
p r i v a t e ArrayList <ReminderItem >i t m s l i s t ;
5

Solutions Solutions
public SimpleAdapter ( ) f
i t m s l i s t = new ArrayList <>();
g
public void setItemCount ( i n t count ) f
i t m s l i s t . c l e a r ( ) ;
i t m s l i s t . addAll ( generateData ( count ) ) ;
notifyDataSetChanged ( ) ;
g
public void onDeleteItem ( i n t count ) f
i t m s l i s t . c l e a r ( ) ;
i t m s l i s t . addAll ( generateData ( count ) ) ;
g
public void removeItemSelected ( i n t s e l e c t e d ) f
i f ( i t m s l i s t . isEmpty ( ) ) return ;
i t m s l i s t . remove ( s e l e c t e d ) ;
notifyItemRemoved ( s e l e c t e d ) ;
g
@Override
public VerticalItemHolder onCreateViewHolder ( ViewGroup container , i n t viewType ) f
L a y ou t I n f la t e r i n f l a t e r = L a y o u tI n f l a te r . from ( container . getContext ( ) ) ;
View root = i n f l a t e r . i n f l a t e (R. layout . r e c y c l e i t e m s , container , f a l s e ) ;
return new VerticalItemHolder ( root , t h i s ) ;
g
@Override
public void onBindViewHolder ( VerticalItemHolder itemHolder , i n t p o s i t i o n ) f
ReminderItem item = i t m s l i s t . get ( p o s i t i o n ) ;
itemHolder . setReminderTitle ( item . rm dti tle ) ;
itemHolder . setReminderDateTime ( item . rmddat ) ;
itemHolder . setReminderRepeatInfo ( item . rmdrep , item . rmdnorep , item . rmdtyperep ) ;
itemHolder . setisActiveImg ( item . rmdactive ) ;
g
@Override
public i n t getItemCount ( ) f
return i t m s l i s t . s i z e ( ) ;
g
public c l a s s ReminderItem f
public String r md tit le ;
6

Solutions Solutions
public String rmddat ;
public String rmdrep ;
public String rmdnorep ;
public String rmdtyperep ;
public String rmdactive ;
public ReminderItem ( String Title , String DateTime , String Repeat , String RepeatNo , String RepeatType , String Active ) f
t h i s . r md tit le = T i t l e ;
t h i s . rmddat = DateTime ;
t h i s . rmdrep = Repeat ;
t h i s . rmdnorep = RepeatNo ;
t h i s . rmdtyperep = RepeatType ;
t h i s . rmdactive = Active ;
g
g
public c l a s s DateTimeComparator implements Comparator f
DateFormat f = new SimpleDateFormat ("dd/m m/yyyy hh :m m" ) ;
public i n t compare ( Object a , Object b) f
String o1 = ( ( DateTimeClass ) a ) . getDateTime ( ) ;
String o2 = ( ( DateTimeClass )b ) . getDateTime ( ) ;
tryf
return f . parse ( o1 ) . compareTo ( f . parse ( o2 ) ) ;
gcatch ( ParseException e ) f
throw new IllegalArgumentException ( e ) ;
g
g
g
protected i n t getDefaultItemCount ( ) f
return 100;
g
public c l a s s VerticalItemHolder extends SwappingHolder
implements View . OnClickListener , View . OnLongClickListener f
p r i v a t e TextView rmdtitleText , rmddatText , rmdrepText ;
p r i v a t e ImageView rmdactiveImage , rmpimg ;
p r i v a t e ColorGenerator colorgen = ColorGenerator .DEFAULT;
p r i v a t e TextDrawable b l d r t x t ;
p r i v a t e SimpleAdapter adpt ;
public VerticalItemHolder ( View itemView , SimpleAdapter adapter ) f
super ( itemView , multis ) ;
itemView . setOnClickListener ( t h i s ) ;
7

Solutions Solutions
itemView . setOnLongClickListener ( t h i s ) ;
itemView . setLongClickable ( true ) ;
adpt = adapter ;
rmdtitleText = ( TextView ) itemView . findViewById (R. id . r e m i n d e r t i t l e ) ;
rmddatText = ( TextView ) itemView . findViewById (R. id . reminder dat ) ;
rmdrepText = ( TextView ) itemView . findViewById (R. id . reminder repinfo ) ;
rmdactiveImage = ( ImageView ) itemView . findViewById (R. id . i s a c t i v e i m g ) ;
rmpimg = ( ImageView ) itemView . findViewById (R. id . reminder img ) ;
g
@Override
public void onClick ( View v ) f
i f ( ! multis . t a p S e l e c t i o n ( t h i s ) ) f
tmp = rmdlist . getChildAdapterPosition ( v ) ;
i n t mReminderClickID = mapid . get (tmp ) ;
selectReminder ( mReminderClickID ) ;
ge l s e i f ( multis . g e t S e l e c t e d P o s i t i o n s ( ) . isEmpty ( ) ) f
adpt . setItemCount ( getDefaultItemCount ( ) ) ;
g
g
@Override
public boolean onLongClick ( View v ) f
AppCompatActivity a c t i v i t y = ReminderActivity . t h i s ;
a c t i v i t y . startSupportActionMode ( delmode ) ;
multis . s e t S e l e c t e d ( this , true ) ;
return true ;
g
public void setReminderTitle ( String t i t l e ) f
rmdtitleText . setText ( t i t l e ) ;
String l e t t e r = "A" ;
i f ( t i t l e != n u l l && ! t i t l e . isEmpty ( ) ) f
l e t t e r = t i t l e . s u b s t r i n g (0 , 1 ) ;
g
i n t c o l o r = colorgen . getRandomColor ( ) ;
b l d r t x t = TextDrawable . b u i l d e r ( )
. buildRound ( l e t t e r , c o l o r ) ;
rmpimg . setImageDrawable ( b l d r t x t ) ;
g
8

Solutions Solutions
public void setReminderDateTime ( String datetime ) f
rmddatText . setText ( datetime ) ;
g
public void setReminderRepeatInfo ( String repeat , String repeatNo , String repeatType ) f
i f ( repeat . equals (" true ")) f
rmdrepText . setText (" Every " + repeatNo + " " + repeatType + "( s ) " ) ;
ge l s e i f ( repeat . equals (" f a l s e ")) f
rmdrepText . setText (" Repeat Off " ) ;
g
g
public void setisActiveImg ( String a c t i v e ) f
i f ( a c t i v e . equals (" true ")) f
rmdactiveImage . setImageResource (R. drawable . b a s e l i n e c l e a r w h i t e 1 8 d p ) ;
ge l s e i f ( a c t i v e . equals (" f a l s e ")) f
rmdactiveImage . setImageResource (R. drawable . baseline done white 18dp ) ;
g
g
g
public ReminderItem generateDummyData ( ) f
return new ReminderItem ("1" , "2" , "3" , "4" , "5" , " 6 " ) ;
g
public List <ReminderItem >generateData ( i n t count ) f
ArrayList <SimpleAdapter . ReminderItem >items = new ArrayList <>();
List<Reminder >allrmd = rmddb . getAllallrmd ( ) ;
List<String >a l l r m d t i t l e s = new ArrayList <>();
List<String >a l l r e p = new ArrayList <>();
List<String >a l l n o r e p = new ArrayList <>();
List<String >a l l r e p t y p e s = new ArrayList <>();
List<String >a l l i s a c t i v e = new ArrayList <>();
List<String >dat = new ArrayList <>();
List<Integer >l i s t i d= new ArrayList <>();
List<DateTimeClass >DateTimeClassList = new ArrayList <>();
f o r ( Reminder r : allrmd ) f
a l l r m d t i t l e s . add ( r . g e t T i t l e ( ) ) ;
dat . add ( r . getDate ( ) + " " + r . getTime ( ) ) ;
a l l r e p . add ( r . getRepeat ( ) ) ;
a l l n o r e p . add ( r . getRepeatNo ( ) ) ;
a l l r e p t y p e s . add ( r . getRepeatType ( ) ) ;
a l l i s a c t i v e . add ( r . getActive ( ) ) ;
9

Solutions Solutions
l i s t i d . add ( r . getID ( ) ) ;
g
i n t key = 0 ;
f o r ( i n t k = 0 ; k <a l l r m d t i t l e s . s i z e ( ) ; k++) f
DateTimeClassList . add (new DateTimeClass ( key , dat . get ( k ) ) ) ;
key++;
g
C o l l e c t i o n s . s o r t ( DateTimeClassList , new DateTimeComparator ( ) ) ;
i n t k = 0 ;
f o r ( DateTimeClass item : DateTimeClassList ) f
i n t i = item . getIndex ( ) ;
items . add (new SimpleAdapter . ReminderItem ( a l l r m d t i t l e s . get ( i ) , dat . get ( i ) , a l l r e p . get ( i ) ,
a l l n o r e p . get ( i ) , a l l r e p t y p e s . get ( i ) , a l l i s a c t i v e . get ( i ) ) ) ;
mapid . put (k , l i s t i d . get ( i ) ) ;
k++;
g
return items ;
g
g
g
p r i v a t e RecyclerView rmdlist ;
p r i v a t e SimpleAdapter adpt ;
p r i v a t e Toolbar apptoolbar ;
p r i v a t e TextView normdv ;
p r i v a t e FloatingActionButton mAddRemindermddbutton ;
p r i v a t e i n t tmp ;
p r i v a t e LinkedHashMap <Integer , Integer >mapid = new LinkedHashMap <>();
p r i v a t e ReminderDatabase rmddb ;
p r i v a t e Mu l ti Se l ec t or multis = new M u lt iS e le c to r ( ) ;
p r i v a t e AlarmReceiver alrmrec ;
@Override
protected void onCreate ( Bundle savedInstanceState ) f
super . onCreate ( savedInstanceState ) ;
setContentView (R. layout . a c ti v it y m ai n ) ;
// I n i t i a l i z e reminder database
rmddb = new ReminderDatabase ( getApplicationContext ( ) ) ;
// I n i t i a l i z e views
apptoolbar = ( Toolbar ) findViewById (R. id . toolbar ) ;
mAddRemindermddbutton = ( FloatingActionButton ) findViewById (R. id . add reminder ) ;
rmdlist = ( RecyclerView ) findViewById (R. id . r e m i n d e r l i s t ) ;
10

Solutions Solutions
normdv = ( TextView ) findViewById (R. id . no reminder text ) ;
// To check i s there are saved allrmd
// I f there are no allrmd d i s p l a y a message asking the user to c r e a t e allrmd
List<Reminder >rmds = rmddb . getAllallrmd ( ) ;
i f ( rmds . isEmpty ( ) ) f
normdv . s e t V i s i b i l i t y ( View . VISIBLE ) ;
g
// Create r e c y c l e r view
rmdlist . setLayoutManager ( getLayoutManager ( ) ) ;
registerForContextMenu ( rmdlist ) ;
adpt = new SimpleAdapter ( ) ;
adpt . setItemCount ( getDefaultItemCount ( ) ) ;
rmdlist . setAdapter ( adpt ) ;
// Setup toolbar
setSupportActionBar ( apptoolbar ) ;
apptoolbar . s e t T i t l e (R. s t r i n g . app name ) ;
// On c l i c k i n g the f l o a t i n g action button
mAddRemindermddbutton . setOnClickListener (new View . OnClickListener ( ) f
@Override
public void onClick ( View v ) f
Intent i n t e n t = new Intent ( v . getContext ( ) , ReminderAddActivity . c l a s s ) ;
s t a r t A c t i v i t y ( i n t e n t ) ;
g
g) ;
// I n i t i a l i z e alarm
alrmrec = new AlarmReceiver ( ) ;
g
// Create context menu f o r long press a c t i o n s
@Override
public void onCreateContextMenu ( ContextMenu menu , View v , ContextMenu . ContextMenuInfo menuInfo ) f
getMenuInflater ( ) . i n f l a t e (R. menu . menu add reminder , menu ) ;
g
// Multi s e l e c t items in r e c y c l e r view
p r i v a t e android . support . v7 . view . ActionMode . Callback delmode = new ModalMultiSelectorCallback ( multis ) f
@Override
public boolean onCreateActionMode ( android . support . v7 . view . ActionMode actionMode , Menu menu) f
getMenuInflater ( ) . i n f l a t e (R. menu . menu add reminder , menu ) ;
11

Solutions Solutions
return true ;
g
@Override
public boolean onActionItemClicked ( android . support . v7 . view . ActionMode actionMode , MenuItem menuItem ) f
switch ( menuItem . getItemId ( ) ) f
// On c l i c k i n g discard allrmd
case R. id . discard reminder :
// Close the context menu
actionMode . f i n i s h ( ) ;
// Get the reminder id a s s o c i a t e d with the r e c y c l e r view item
f o r ( i n t i = mapid . s i z e ( ) ; i >= 0 ; i)f
i f ( multis . i s S e l e c t e d ( i , 0)) f
i n t id = mapid . get ( i ) ;
// Get reminder from reminder database using id
Reminder temp = rmddb . getReminder ( id ) ;
// Delete reminder
rmddb . deleteReminder ( temp ) ;
// Remove reminder from r e c y c l e r view
adpt . removeItemSelected ( i ) ;
// Delete reminder alarm
alrmrec . cancelAlarm ( getApplicationContext ( ) , id ) ;
g
g
// Clear s e l e c t e d items in r e c y c l e r view
multis . c l e a r S e l e c t i o n s ( ) ;
// Recreate the r e c y c l e r items
// This i s done to remap the item and reminder i d s
adpt . onDeleteItem ( getDefaultItemCount ( ) ) ;
// Display toast to confirm d e l e t e
Toast . makeText ( getApplicationContext ( ) ,
" Deleted " ,
Toast .LENGTH SHORT) . show ( ) ;
// To check i s there are saved allrmd
// I f there are no allrmd d i s p l a y a message asking the user to c r e a t e allrmd
List<Reminder >rmds = rmddb . getAllallrmd ( ) ;
i f ( rmds . isEmpty ( ) ) f
normdv . s e t V i s i b i l i t y ( View . VISIBLE ) ;
ge l s ef
12

Solutions Solutions
normdv . s e t V i s i b i l i t y ( View .GONE) ;
g
return true ;
// On c l i c k i n g save allrmd
case R. id . save reminder :
// Close the context menu
actionMode . f i n i s h ( ) ;
// Clear s e l e c t e d items in r e c y c l e r view
multis . c l e a r S e l e c t i o n s ( ) ;
return true ;
d e f a u l t :
break ;
g
return f a l s e ;
g
g;
// On c l i c k i n g a reminder item
p r i v a t e void selectReminder ( i n t c l k i d ) f
String c l k i d s t r = I n t e g e r . t oS tri ng ( c l k i d ) ;
// Create i n t e n t to e d i t the reminder
// Put reminder id as extra
Intent i = new Intent ( this , ReminderEditActivity . c l a s s ) ;
i . putExtra ( ReminderEditActivity .EXTRA REMINDER ID, c l k i d s t r ) ;
s t a r t A c t i v i t y F o r R e s u l t ( i , 1 ) ;
g
@Override
public void onActivityResult ( i n t requestCode , i n t resultCode , Intent data ) f
adpt . setItemCount ( getDefaultItemCount ( ) ) ;
g
// Recreate r e c y c l e r view
// This i s done so that newly created allrmd are displayed
@Override
public void onResume () f
super . onResume ( ) ;
// To check i s there are saved allrmd
// I f there are no allrmd d i s p l a y a message asking the user to c r e a t e allrmd
List<Reminder >rmds = rmddb . getAllallrmd ( ) ;
13

Solutions Solutions
i f ( rmds . isEmpty ( ) ) f
normdv . s e t V i s i b i l i t y ( View . VISIBLE ) ;
ge l s ef
normdv . s e t V i s i b i l i t y ( View .GONE) ;
g
adpt . setItemCount ( getDefaultItemCount ( ) ) ;
g
// Layout manager f o r r e c y c l e r view
protected RecyclerView . LayoutManager getLayoutManager ( ) f
return new LinearLayoutManager ( this , LinearLayoutManager .VERTICAL, f a l s e ) ;
g
protected i n t getDefaultItemCount ( ) f
return 100;
g
// Create menu
@Override
public boolean onCreateOptionsMenu (Menu menu) f
getMenuInflater ( ) . i n f l a t e (R. menu . main menu , menu ) ;
return true ;
g
// Setup menu
@Override
public boolean onOptionsItemSelected ( MenuItem item ) f
switch ( item . getItemId ( ) ) f
// s t a r t l i c e n s e s a c t i v i t y
case R. id . a c t i o n l i c e n s e s :
Intent i n t e n t = new Intent ( this , L i c e n c e s A c t i v i t y . c l a s s ) ;
s t a r t A c t i v i t y ( i n t e n t ) ;
return true ;
d e f a u l t :
return super . onOptionsItemSelected ( item ) ;
g
g
// Adapter c l a s s f o r r e c y c l e r view
public c l a s s SimpleAdapter extends RecyclerView . Adapter <SimpleAdapter . VerticalItemHolder >f
p r i v a t e ArrayList <ReminderItem >i t m s l i s t ;
public SimpleAdapter ( ) f
14

Solutions Solutions
i t m s l i s t = new ArrayList <>();
g
public void setItemCount ( i n t count ) f
i t m s l i s t . c l e a r ( ) ;
i t m s l i s t . addAll ( generateData ( count ) ) ;
notifyDataSetChanged ( ) ;
g
public void onDeleteItem ( i n t count ) f
i t m s l i s t . c l e a r ( ) ;
i t m s l i s t . addAll ( generateData ( count ) ) ;
g
public void removeItemSelected ( i n t s e l e c t e d ) f
i f ( i t m s l i s t . isEmpty ( ) ) return ;
i t m s l i s t . remove ( s e l e c t e d ) ;
notifyItemRemoved ( s e l e c t e d ) ;
g
// View holder f o r r e c y c l e r view items
@Override
public VerticalItemHolder onCreateViewHolder ( ViewGroup container , i n t viewType ) f
L a y ou t I n f la t e r i n f l a t e r = L a y o u tI n f l a te r . from ( container . getContext ( ) ) ;
View root = i n f l a t e r . i n f l a t e (R. layout . r e c y c l e i t e m s , container , f a l s e ) ;
return new VerticalItemHolder ( root , t h i s ) ;
g
@Override
public void onBindViewHolder ( VerticalItemHolder itemHolder , i n t p o s i t i o n ) f
ReminderItem item = i t m s l i s t . get ( p o s i t i o n ) ;
itemHolder . setReminderTitle ( item . rm dti tle ) ;
itemHolder . setReminderDateTime ( item . rmddat ) ;
itemHolder . setReminderRepeatInfo ( item . rmdrep , item . rmdnorep , item . rmdtyperep ) ;
itemHolder . setisActiveImg ( item . rmdactive ) ;
g
@Override
public i n t getItemCount ( ) f
return i t m s l i s t . s i z e ( ) ;
g
// Class f o r r e c y c l e r view items
public c l a s s ReminderItem f
public String r md tit le ;
15

Solutions Solutions
public String rmddat ;
public String rmdrep ;
public String rmdnorep ;
public String rmdtyperep ;
public String rmdactive ;
public ReminderItem ( String Title , String DateTime , String Repeat , String RepeatNo , String RepeatType , String Active ) f
t h i s . r md tit le = T i t l e ;
t h i s . rmddat = DateTime ;
t h i s . rmdrep = Repeat ;
t h i s . rmdnorep = RepeatNo ;
t h i s . rmdtyperep = RepeatType ;
t h i s . rmdactive = Active ;
g
g
// Class to compare date and time so that items are sorted in ascending order
public c l a s s DateTimeComparator implements Comparator f
DateFormat f = new SimpleDateFormat ("dd/m m/yyyy hh :m m" ) ;
public i n t compare ( Object a , Object b) f
String o1 = ( ( DateTimeClass ) a ) . getDateTime ( ) ;
String o2 = ( ( DateTimeClass )b ) . getDateTime ( ) ;
tryf
return f . parse ( o1 ) . compareTo ( f . parse ( o2 ) ) ;
gcatch ( ParseException e ) f
throw new IllegalArgumentException ( e ) ;
g
g
g
// UI and data c l a s s f o r r e c y c l e r view items
public c l a s s VerticalItemHolder extends SwappingHolder
implements View . OnClickListener , View . OnLongClickListener f
p r i v a t e TextView rmdtitleText , rmddatText , rmdrepText ;
p r i v a t e ImageView rmdactiveImage , rmpimg ;
p r i v a t e ColorGenerator colorgen = ColorGenerator .DEFAULT;
p r i v a t e TextDrawable b l d r t x t ;
p r i v a t e SimpleAdapter adpt ;
public VerticalItemHolder ( View itemView , SimpleAdapter adapter ) f
super ( itemView , multis ) ;
itemView . setOnClickListener ( t h i s ) ;
itemView . setOnLongClickListener ( t h i s ) ;
itemView . setLongClickable ( true ) ;
16

Solutions Solutions
// I n i t i a l i z e adapter f o r the items
adpt = adapter ;
// I n i t i a l i z e views
rmdtitleText = ( TextView ) itemView . findViewById (R. id . r e m i n d e r t i t l e ) ;
rmddatText = ( TextView ) itemView . findViewById (R. id . reminder dat ) ;
rmdrepText = ( TextView ) itemView . findViewById (R. id . reminder repinfo ) ;
rmdactiveImage = ( ImageView ) itemView . findViewById (R. id . i s a c t i v e i m g ) ;
rmpimg = ( ImageView ) itemView . findViewById (R. id . reminder img ) ;
g
// On c l i c k i n g a reminder item
@Override
public void onClick ( View v ) f
i f ( ! multis . t a p S e l e c t i o n ( t h i s ) ) f
tmp = rmdlist . getChildAdapterPosition ( v ) ;
i n t mReminderClickID = mapid . get (tmp ) ;
selectReminder ( mReminderClickID ) ;
ge l s e i f ( multis . g e t S e l e c t e d P o s i t i o n s ( ) . isEmpty ( ) ) f
adpt . setItemCount ( getDefaultItemCount ( ) ) ;
g
g
// On long press enter action mode with context menu
@Override
public boolean onLongClick ( View v ) f
AppCompatActivity a c t i v i t y = ReminderActivity . t h i s ;
a c t i v i t y . startSupportActionMode ( delmode ) ;
multis . s e t S e l e c t e d ( this , true ) ;
return true ;
g
// Set reminder t i t l e view
public void setReminderTitle ( String t i t l e ) f
rmdtitleText . setText ( t i t l e ) ;
String l e t t e r = "A" ;
i f ( t i t l e != n u l l && ! t i t l e . isEmpty ( ) ) f
l e t t e r = t i t l e . s u b s t r i n g (0 , 1 ) ;
g
i n t c o l o r = colorgen . getRandomColor ( ) ;
17

Solutions Solutions
// Create a c i r c u l a r icon c o n s i s t i n g of a random background colour and f i r s t l e t t e r of t i t l e
b l d r t x t = TextDrawable . b u i l d e r ( )
. buildRound ( l e t t e r , c o l o r ) ;
rmpimg . setImageDrawable ( b l d r t x t ) ;
g
// Set date and time views
public void setReminderDateTime ( String datetime ) f
rmddatText . setText ( datetime ) ;
g
// Set repeat views
public void setReminderRepeatInfo ( String repeat , String repeatNo , String repeatType ) f
i f ( repeat . equals (" true ")) f
rmdrepText . setText (" Every " + repeatNo + " " + repeatType + "( s ) " ) ;
ge l s e i f ( repeat . equals (" f a l s e ")) f
rmdrepText . setText (" Repeat Off " ) ;
g
g
// Set a c t i v e image as on or o f f
public void setisActiveImg ( String a c t i v e ) f
i f ( a c t i v e . equals (" true ")) f
rmdactiveImage . setImageResource (R. drawable . i c n o t i f i c a t i o n s o nw h i t e 2 4 d p ) ;
ge l s e i f ( a c t i v e . equals (" f a l s e ")) f
rmdactiveImage . setImageResource (R. drawable . i c n o t i f i c a t i o n s o f f g r e y 6 0 0 2 4 d p ) ;
g
g
g
// Generate random t e s t data
public ReminderItem generateDummyData ( ) f
return new ReminderItem ("1" , "2" , "3" , "4" , "5" , " 6 " ) ;
g
// Generate r e a l data f o r each item
public List <ReminderItem >generateData ( i n t count ) f
ArrayList <SimpleAdapter . ReminderItem >items = new ArrayList <>();
// Get a l l allrmd from the database
List<Reminder >allrmd = rmddb . getAllallrmd ( ) ;
// I n i t i a l i z e l i s t s
List<String >a l l r m d t i t l e s = new ArrayList <>();
List<String >a l l r e p = new ArrayList <>();
List<String >a l l n o r e p = new ArrayList <>();
18

Solutions Solutions
List<String >a l l r e p t y p e s = new ArrayList <>();
List<String >a l l i s a c t i v e = new ArrayList <>();
List<String >dat = new ArrayList <>();
List<Integer >l i s t i d= new ArrayList <>();
List<DateTimeClass >DateTimeClassList = new ArrayList <>();
// Add d e t a i l s of a l l allrmd in t h e i r r e s p e c t i v e l i s t s
f o r ( Reminder r : allrmd ) f
a l l r m d t i t l e s . add ( r . g e t T i t l e ( ) ) ;
dat . add ( r . getDate ( ) + " " + r . getTime ( ) ) ;
a l l r e p . add ( r . getRepeat ( ) ) ;
a l l n o r e p . add ( r . getRepeatNo ( ) ) ;
a l l r e p t y p e s . add ( r . getRepeatType ( ) ) ;
a l l i s a c t i v e . add ( r . getActive ( ) ) ;
l i s t i d . add ( r . getID ( ) ) ;
g
i n t key = 0 ;
// Add date and time as DateTimeClass o b j e c t s
f o r ( i n t k = 0 ; k <a l l r m d t i t l e s . s i z e ( ) ; k++) f
DateTimeClassList . add (new DateTimeClass ( key , dat . get ( k ) ) ) ;
key++;
g
// Sort items according to date and time in ascending order
C o l l e c t i o n s . s o r t ( DateTimeClassList , new DateTimeComparator ( ) ) ;
i n t k = 0 ;
// Add data to each r e c y c l e r view item
f o r ( DateTimeClass item : DateTimeClassList ) f
i n t i = item . getIndex ( ) ;
items . add (new SimpleAdapter . ReminderItem ( a l l r m d t i t l e s . get ( i ) , dat . get ( i ) , a l l r e p . get ( i ) ,
a l l n o r e p . get ( i ) , a l l r e p t y p e s . get ( i ) , a l l i s a c t i v e . get ( i ) ) ) ;
mapid . put (k , l i s t i d . get ( i ) ) ;
k++;
g
return items ;
g
g
g
19

Chapter 2
Application
20

Chapter 3
Future works
21

Similar Posts