Talking Reminder
this project is intenfed for people who are not tech savvy
MainActivity.java
1 package com.sudogeeks.talking_reminder;
2 
3 import android.content.Intent;
4 import android.os.Bundle;
5 import android.view.ContextMenu;
6 import android.view.LayoutInflater;
7 import android.view.Menu;
8 import android.view.MenuItem;
9 import android.view.View;
10 import android.view.ViewGroup;
11 import android.widget.ImageView;
12 import android.widget.TextView;
13 import android.widget.Toast;
14 
15 import androidx.annotation.NonNull;
16 import androidx.annotation.Nullable;
17 import androidx.appcompat.app.AppCompatActivity;
18 import androidx.appcompat.view.ActionMode;
19 import androidx.appcompat.widget.Toolbar;
20 import androidx.recyclerview.widget.LinearLayoutManager;
21 import androidx.recyclerview.widget.RecyclerView;
22 
23 import com.amulyakhare.textdrawable.TextDrawable;
24 import com.amulyakhare.textdrawable.util.ColorGenerator;
25 import com.bignerdranch.android.multiselector.ModalMultiSelectorCallback;
26 import com.bignerdranch.android.multiselector.MultiSelector;
27 import com.bignerdranch.android.multiselector.SwappingHolder;
28 import com.firebase.ui.auth.AuthUI;
29 import com.google.android.material.floatingactionbutton.FloatingActionButton;
30 import com.google.firebase.auth.FirebaseAuth;
31 import com.google.firebase.auth.FirebaseUser;
32 import com.google.firebase.database.ChildEventListener;
33 import com.google.firebase.database.DataSnapshot;
34 import com.google.firebase.database.DatabaseError;
35 import com.google.firebase.database.DatabaseReference;
36 import com.google.firebase.database.FirebaseDatabase;
37 
38 import java.text.DateFormat;
39 import java.text.ParseException;
40 import java.text.SimpleDateFormat;
41 import java.util.ArrayList;
42 import java.util.Arrays;
43 import java.util.Collections;
44 import java.util.Comparator;
45 import java.util.LinkedHashMap;
46 import java.util.List;
47 
52 public class MainActivity extends AppCompatActivity {
53  private static final int RC_SIGN_IN = 123; // Choose an arbitrary request code value
54  private RecyclerView reminderListView;
55  private SimpleAdapter mAdapter;
56  private Toolbar mToolbar;
57  private TextView mNoReminderView;
58  private FloatingActionButton mAddReminderButton;
59  private int mTempPost;
60  private LinkedHashMap<Integer, Integer> IDmap = new LinkedHashMap<>();
61  private ReminderDatabase rb;
62  private MultiSelector mMultiSelector = new MultiSelector();
63  private AlarmReceiver mAlarmReceiver;
64  private FirebaseDatabase firebaseDatabase; //Entrypoint for our firebase database
65  private DatabaseReference reminderDatabaseReference; //To references specific part of the database
66  private ChildEventListener dbChildEventListener; //No notify the app whenever data changes in firebase database
67  private FirebaseAuth firebaseAuth; //For User authentication
68  private FirebaseAuth.AuthStateListener authStateListener; //Listener which invokes whenever auth state changes
69  private ArrayList<ReminderDO> reminderDOArrayList = new ArrayList<>();
70  // Multi select items in recycler view
71  private ModalMultiSelectorCallback mDeleteMode = new ModalMultiSelectorCallback(mMultiSelector) {
72 
73  @Override
74  public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
75  getMenuInflater().inflate(R.menu.menu_add_reminder, menu);
76  return true;
77  }
78 
85  @Override
86  public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
87  switch (menuItem.getItemId()) {
88 
89  // On clicking discard reminders
90  case R.id.discard_reminder:
91  // Close the context menu
92  actionMode.finish();
93 
94  // Get the reminder id associated with the recycler view item
95  for (int i = IDmap.size(); i >= 0; i--) {
96  if (mMultiSelector.isSelected(i, 0)) {
97  int id = IDmap.get(i);
98 
99  // Get reminder from reminder database using id
100  ReminderDO temp = rb.getReminder(id);
101  // Delete reminder
102  rb.deleteReminder(temp);
103  // Remove reminder from recycler view
104  mAdapter.removeItemSelected(i);
105  // Delete reminder alarm
106  mAlarmReceiver.cancelAlarm(getApplicationContext(), id);
107  }
108  }
109 
110  // Clear selected items in recycler view
111  mMultiSelector.clearSelections();
112  // Recreate the recycler items
113  // This is done to remap the item and reminder ids
114  mAdapter.onDeleteItem(getDefaultItemCount());
115 
116  // Display toast to confirm delete
117  Toast.makeText(getApplicationContext(),
118  "Deleted",
119  Toast.LENGTH_SHORT).show();
120 
121  // To check is there are saved reminders
122  // If there are no reminders display a message asking the user to create reminders
123  List<ReminderDO> mTest = rb.getAllReminders();
124 
125  if (mTest.isEmpty()) {
126  mNoReminderView.setVisibility(View.VISIBLE);
127  } else {
128  mNoReminderView.setVisibility(View.GONE);
129  }
130 
131  return true;
132 
133  // On clicking save reminders
134  case R.id.save_reminder:
135  // Close the context menu
136  actionMode.finish();
137  // Clear selected items in recycler view
138  mMultiSelector.clearSelections();
139  return true;
140 
141  default:
142  break;
143  }
144  return false;
145  }
146  };
147 
153  @Override
154  protected void onCreate(Bundle savedInstanceState) {
155  super.onCreate(savedInstanceState);
156  setContentView(R.layout.activity_main);
157 
158  //Routine : check user Authentication
159  firebaseDatabase = FirebaseDatabase.getInstance();
160  firebaseAuth = FirebaseAuth.getInstance();
161  FirebaseUser user = firebaseAuth.getCurrentUser();
162 
163  //AuthStateListener: check the user's authentication state. if not signed in the send it for login/signup
164  authStateListener = new FirebaseAuth.AuthStateListener() {
165  @Override
166  public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
167  FirebaseUser user = firebaseAuth.getCurrentUser();
168  if (user != null) {
169  //User is signed in
170  reminderDatabaseReference = firebaseDatabase.getReference().child("reminders").child(user.getUid());
171  Toast.makeText(MainActivity.this, "You're now signed in.\nWelcome to Talking ReminderDO!", Toast.LENGTH_SHORT).show();
172  attachDatabaseReadListener();
173  } else {
174  //User is signed out
175  startActivityForResult(
176  AuthUI.getInstance()
177  .createSignInIntentBuilder()
178  .setIsSmartLockEnabled(false)
179  .setAvailableProviders(Arrays.asList(
180  new AuthUI.IdpConfig.GoogleBuilder().build(),
181  new AuthUI.IdpConfig.EmailBuilder().build()))
182  .build(),
183  RC_SIGN_IN);
184  }
185  }
186  };
187 
188  // Initialize reminder database
189  rb = new ReminderDatabase(getApplicationContext());
190 
191  // Initialize views
192  mToolbar = findViewById(R.id.toolbar);
193  mAddReminderButton = findViewById(R.id.add_reminder);
194  reminderListView = findViewById(R.id.reminder_list);
195  mNoReminderView = findViewById(R.id.no_reminder_text);
196 
197  // To check is there are saved reminders
198  // If there are no reminders display a message asking the user to create reminders
199  List<ReminderDO> mTest = rb.getAllReminders();
200 
201  if (mTest.isEmpty()) {
202  mNoReminderView.setVisibility(View.VISIBLE);
203  }
204 
205  // Create recycler view
206  reminderListView.setLayoutManager(getLayoutManager());
207  registerForContextMenu(reminderListView);
208  mAdapter = new SimpleAdapter();
209  mAdapter.setItemCount(getDefaultItemCount());
210  reminderListView.setAdapter(mAdapter);
211 
212  // Setup toolbar
213  setSupportActionBar(mToolbar);
214  mToolbar.setTitle(R.string.app_name);
215 
216  // On clicking the floating action button
217  mAddReminderButton.setOnClickListener(new View.OnClickListener() {
218  @Override
219  public void onClick(View v) {
220  Intent intent = new Intent(v.getContext(), ReminderAddActivity.class);
221  startActivity(intent);
222  }
223  });
224 
225  // Initialize alarm
226  mAlarmReceiver = new AlarmReceiver();
227  }
228 
229  /* Private Helper method
230  * This method attaches a listener to the Firebase database reference. The listener listens to any kind of changes in the database.
231  *
232  */
233  private void attachDatabaseReadListener() {
234  //TODO Attaching Listener to ChildEventListener
235  if (dbChildEventListener == null) { // Create new Event Listener only when no listener is attached yet
236  dbChildEventListener = new ChildEventListener() {
237  //Specify what to do when a new entry is added in the database. New entry here means "new Reminder object"
238  @Override
239  public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
240  ReminderDO reminderObject = dataSnapshot.getValue(ReminderDO.class);
241  reminderDOArrayList.add(reminderObject);
242  }
243 
244  @Override
245  public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
246  }
247 
248  @Override
249  public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
250  }
251 
252  @Override
253  public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
254  }
255 
256  @Override
257  public void onCancelled(@NonNull DatabaseError databaseError) {
258  }
259  };
260  }
261  reminderDatabaseReference.addChildEventListener(dbChildEventListener);
262  }
263 
264  /* Private helper method
265  * this method is called to Detach the database listener in the events of logout or app failure
266  */
267  private void detachDatabaseReadListener() {
268  if (dbChildEventListener != null) {
269  reminderDatabaseReference.removeEventListener(dbChildEventListener);
270  dbChildEventListener = null;
271  }
272  }
273 
277  @Override
278  protected void onPause() {
279  super.onPause();
280  if (authStateListener != null) {
281  firebaseAuth.removeAuthStateListener(authStateListener);
282  }
283  detachDatabaseReadListener();
284  //reminderAdapter.clear();
285  }
286 
293  @Override
294  public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) {
295  getMenuInflater().inflate(R.menu.menu_add_reminder, menu);
296  }
297 
298  /*Private Helper method :
299  * Implement behaviour : On clicking a reminder item, user shoud be taken to Reminder Edit Activity
300  */
301  private void selectReminder(int mClickID) {
302  String mStringClickID = Integer.toString(mClickID);
303 
304  // Create intent to edit the reminder
305  // Put reminder id as extra
306  Intent i = new Intent(this, ReminderEditActivity.class);
307  i.putExtra(ReminderEditActivity.EXTRA_REMINDER_ID, mStringClickID);
308  startActivityForResult(i, 1);
309  }
310 
318  @Override
319  public void onActivityResult(int requestCode, int resultCode, Intent data) {
320  super.onActivityResult(requestCode, resultCode, data);
321  mAdapter.setItemCount(getDefaultItemCount());
322 
323  if (requestCode == RC_SIGN_IN) {
324  //If user signs in is successful then only take the user to main page. Else force the user to login in first
325  if (resultCode == RESULT_OK) {
326  Toast.makeText(this, "Signed in", Toast.LENGTH_SHORT);
327  startActivity(new Intent(MainActivity.this, ReminderAddActivity.class));
328  } else if (requestCode == RESULT_CANCELED) {
329  Toast.makeText(this, "Sign in cancelled", Toast.LENGTH_SHORT);
330  finish();
331  }
332  }
333  }
334 
339  @Override
340  public void onResume() {
341  super.onResume();
342  firebaseAuth.addAuthStateListener(authStateListener);
343  // Get all the reminders : If there are no reminders display a message
344  List<ReminderDO> mTest = rb.getAllReminders();
345 
346  if (mTest.isEmpty()) {
347  mNoReminderView.setVisibility(View.VISIBLE);
348  } else {
349  mNoReminderView.setVisibility(View.GONE);
350  }
351 
352  mAdapter.setItemCount(getDefaultItemCount());
353  }
354 
359  protected RecyclerView.LayoutManager getLayoutManager() {
360  return new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
361  }
362 
367  protected int getDefaultItemCount() {
368  return 100;
369  }
370 
377  @Override
378  public boolean onCreateOptionsMenu(Menu menu) {
379  getMenuInflater().inflate(R.menu.main_menu, menu);
380  return true;
381  }
382 
388  @Override
389  public boolean onOptionsItemSelected(MenuItem item) {
390  switch (item.getItemId()) {
391  case R.id.sign_out:
392  //sign out
393  AuthUI.getInstance().signOut(this);
394  return true;
395  default:
396  return super.onOptionsItemSelected(item);
397  }
398  }
399 
400 
405  public class SimpleAdapter extends RecyclerView.Adapter<SimpleAdapter.VerticalItemHolder> {
406  private ArrayList<ReminderItem> mItems;
407 
408  public SimpleAdapter() {
409  mItems = new ArrayList<>();
410  }
411 
412  public void onDeleteItem(int count) {
413  mItems.clear();
414  mItems.addAll(generateData(count));
415  }
416 
417  public void removeItemSelected(int selected) {
418  if (mItems.isEmpty()) return;
419  mItems.remove(selected);
420  notifyItemRemoved(selected);
421  }
422 
430  @Override
431  public VerticalItemHolder onCreateViewHolder(ViewGroup container, int viewType) {
432  LayoutInflater inflater = LayoutInflater.from(container.getContext());
433  View root = inflater.inflate(R.layout.recycle_items, container, false);
434 
435  return new VerticalItemHolder(root, this);
436  }
437 
444  @Override
445  public void onBindViewHolder(VerticalItemHolder itemHolder, int position) {
446  ReminderItem item = mItems.get(position);
447  itemHolder.setReminderTitle(item.mTitle);
448  itemHolder.setReminderDateTime(item.mDateTime);
449  itemHolder.setReminderRepeatInfo(item.mRepeat, item.mRepeatNo, item.mRepeatType);
450  itemHolder.setActiveImage(item.mActive);
451  }
452 
457  @Override
458  public int getItemCount() {
459  return mItems.size();
460  }
461 
462 
463  public void setItemCount(int count) {
464  mItems.clear();
465  mItems.addAll(generateData(count));
466  notifyDataSetChanged();
467  }
468 
475  public List<ReminderItem> generateData(int count) {
476  ArrayList<SimpleAdapter.ReminderItem> items = new ArrayList<>();
477 
478  // Get all reminderDOS from the database
479  List<ReminderDO> reminderDOS = rb.getAllReminders();
480 
481  // Initialize lists
482  List<String> Titles = new ArrayList<>();
483  List<String> Repeats = new ArrayList<>();
484  List<String> RepeatNos = new ArrayList<>();
485  List<String> RepeatTypes = new ArrayList<>();
486  List<String> Actives = new ArrayList<>();
487  List<String> DateAndTime = new ArrayList<>();
488  List<Integer> IDList = new ArrayList<>();
489  List<DateTimeSorter> DateTimeSortList = new ArrayList<>();
490 
491  // Add details of all reminderDOS in their respective lists
492  for (ReminderDO reminderDO : reminderDOS) {
493  Titles.add(reminderDO.getTitle());
494  DateAndTime.add(reminderDO.getDate() + " " + reminderDO.getTime());
495  Repeats.add(reminderDO.getRepeat());
496  RepeatNos.add(reminderDO.getRepeatNo());
497  RepeatTypes.add(reminderDO.getRepeatType());
498  Actives.add(reminderDO.getActive());
499  IDList.add(reminderDO.getID());
500  }
501 
502  int key = 0;
503 
504  // Add date and time as DateTimeSorter objects
505  for (int k = 0; k < Titles.size(); k++) {
506  DateTimeSortList.add(new DateTimeSorter(key, DateAndTime.get(k)));
507  key++;
508  }
509 
510  // Sort items according to date and time in ascending order
511  Collections.sort(DateTimeSortList, new DateTimeComparator());
512 
513  int k = 0;
514 
515  // Plug in the data to each recycler view item
516  for (DateTimeSorter item : DateTimeSortList) {
517  int i = item.getIndex();
518 
519  items.add(new SimpleAdapter.ReminderItem(Titles.get(i), DateAndTime.get(i), Repeats.get(i),
520  RepeatNos.get(i), RepeatTypes.get(i), Actives.get(i)));
521  IDmap.put(k, IDList.get(i));
522  k++;
523  }
524  return items;
525  }
526 
530  public class ReminderItem {
531  public String mTitle;
532  public String mDateTime;
533  public String mRepeat;
534  public String mRepeatNo;
535  public String mRepeatType;
536  public String mActive;
537 
547  public ReminderItem(String Title, String DateTime, String Repeat, String RepeatNo, String RepeatType, String Active) {
548  this.mTitle = Title;
549  this.mDateTime = DateTime;
550  this.mRepeat = Repeat;
551  this.mRepeatNo = RepeatNo;
552  this.mRepeatType = RepeatType;
553  this.mActive = Active;
554  }
555  }
556 
560  public class DateTimeComparator implements Comparator {
561  DateFormat f = new SimpleDateFormat("dd/mm/yyyy hh:mm");
562 
563  public int compare(Object a, Object b) {
564  String o1 = ((DateTimeSorter) a).getDateTime();
565  String o2 = ((DateTimeSorter) b).getDateTime();
566 
567  try {
568  return f.parse(o1).compareTo(f.parse(o2));
569  } catch (ParseException e) {
570  throw new IllegalArgumentException(e);
571  }
572  }
573  }
574 
578  public class VerticalItemHolder extends SwappingHolder
579  implements View.OnClickListener, View.OnLongClickListener {
580  private TextView mTitleText, mDateAndTimeText, mRepeatInfoText;
581  private ImageView mActiveImage, mThumbnailImage;
582  private ColorGenerator mColorGenerator = ColorGenerator.DEFAULT;
583  private TextDrawable mDrawableBuilder;
584  private SimpleAdapter mAdapter;
585 
593  public VerticalItemHolder(View itemView, SimpleAdapter adapter) {
594  super(itemView, mMultiSelector);
595  itemView.setOnClickListener(this);
596  itemView.setOnLongClickListener(this); //Set for long clicks
597  itemView.setLongClickable(true);
598 
599  // Initialize adapter for the items
600  mAdapter = adapter;
601 
602  // Initialize views
603  mTitleText = itemView.findViewById(R.id.recycle_title);
604  mDateAndTimeText = itemView.findViewById(R.id.recycle_date_time);
605  mRepeatInfoText = itemView.findViewById(R.id.recycle_repeat_info);
606  mActiveImage = itemView.findViewById(R.id.active_image);
607  mThumbnailImage = itemView.findViewById(R.id.thumbnail_image);
608  }
609 
614  @Override
615  public void onClick(View view) {
616  if (!mMultiSelector.tapSelection(this)) {
617  mTempPost = reminderListView.getChildAdapterPosition(view);
618 
619  int mReminderClickID = IDmap.get(mTempPost);
620  selectReminder(mReminderClickID);
621 
622  } else if (mMultiSelector.getSelectedPositions().isEmpty()) {
623  mAdapter.setItemCount(getDefaultItemCount());
624  }
625  }
626 
632  @Override
633  public boolean onLongClick(View view) {
634  AppCompatActivity activity = MainActivity.this;
635  activity.startSupportActionMode(mDeleteMode);
636  mMultiSelector.setSelected(this, true);
637  return true;
638  }
639 
644  public void setReminderTitle(String reminderTitle) {
645  mTitleText.setText(reminderTitle);
646  String letter = "A";
647 
648  if (reminderTitle != null && !reminderTitle.isEmpty()) {
649  letter = reminderTitle.substring(0, 1);
650  }
651 
652  int color = mColorGenerator.getRandomColor();
653 
654  // Create a circular icon consisting of a random background colour and first letter of title
655  mDrawableBuilder = TextDrawable.builder()
656  .buildRound(letter, color);
657  mThumbnailImage.setImageDrawable(mDrawableBuilder);
658  }
659 
664  public void setReminderDateTime(String datetime) {
665  mDateAndTimeText.setText(datetime);
666  }
667 
674  public void setReminderRepeatInfo(String repeat, String repeatNo, String repeatType) {
675  if (repeat.equals("true")) {
676  mRepeatInfoText.setText("Every " + repeatNo + " " + repeatType + "(s)");
677  } else if (repeat.equals("false")) {
678  mRepeatInfoText.setText("Repeat Off");
679  }
680  }
681 
686  public void setActiveImage(String active) {
687  if (active.equals("true")) {
688  mActiveImage.setImageResource(R.drawable.ic_notifications_active);
689  } else if (active.equals("false")) {
690  mActiveImage.setImageResource(R.drawable.ic_notifications_off);
691  }
692  }
693  }
694  }
695 }
com.sudogeeks.talking_reminder.DateTimeSorter
Data Object class for creating DateTime objects to facilitate easy sorting.
Definition: DateTimeSorter.java:7
com.sudogeeks.talking_reminder.MainActivity.SimpleAdapter.VerticalItemHolder
Definition: MainActivity.java:578
com.sudogeeks.talking_reminder.ReminderDatabase.deleteReminder
void deleteReminder(ReminderDO reminderDO)
Definition: ReminderDatabase.java:208
com.sudogeeks.talking_reminder.MainActivity.onResume
void onResume()
Definition: MainActivity.java:340
com.sudogeeks.talking_reminder.ReminderDatabase.getReminder
ReminderDO getReminder(int id)
Definition: ReminderDatabase.java:106
com.sudogeeks.talking_reminder.MainActivity.onOptionsItemSelected
boolean onOptionsItemSelected(MenuItem item)
Definition: MainActivity.java:389
com.sudogeeks.talking_reminder.MainActivity.onCreateContextMenu
void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo)
Definition: MainActivity.java:294
com.sudogeeks.talking_reminder.ReminderDatabase.getAllReminders
List< ReminderDO > getAllReminders()
Definition: ReminderDatabase.java:138
com.sudogeeks.talking_reminder.MainActivity.SimpleAdapter.VerticalItemHolder.onClick
void onClick(View view)
Definition: MainActivity.java:615
com.sudogeeks.talking_reminder.MainActivity.SimpleAdapter
Adapter class (Inner Class) for implementing recycler view.
Definition: MainActivity.java:405
com.sudogeeks.talking_reminder.ReminderDO
Data Object class for Reminder This class conatins all the attributes of reminder.
Definition: ReminderDO.java:15
com.sudogeeks.talking_reminder.MainActivity.SimpleAdapter.VerticalItemHolder.onLongClick
boolean onLongClick(View view)
Definition: MainActivity.java:633
com.sudogeeks.talking_reminder.MainActivity.SimpleAdapter.VerticalItemHolder.setReminderDateTime
void setReminderDateTime(String datetime)
Definition: MainActivity.java:664
com.sudogeeks.talking_reminder.MainActivity.onCreateOptionsMenu
boolean onCreateOptionsMenu(Menu menu)
Definition: MainActivity.java:378
com.sudogeeks.talking_reminder.MainActivity
Main Activity class This activity is the entry point of the app and is responsible for handling User ...
Definition: MainActivity.java:52
com.sudogeeks.talking_reminder.MainActivity.SimpleAdapter.ReminderItem.ReminderItem
ReminderItem(String Title, String DateTime, String Repeat, String RepeatNo, String RepeatType, String Active)
Definition: MainActivity.java:547
com.sudogeeks.talking_reminder.MainActivity.onPause
void onPause()
Definition: MainActivity.java:278
com.sudogeeks.talking_reminder.ReminderDatabase
Class to manage database This class is for managing the database.
Definition: ReminderDatabase.java:15
com.sudogeeks.talking_reminder.MainActivity.SimpleAdapter.VerticalItemHolder.VerticalItemHolder
VerticalItemHolder(View itemView, SimpleAdapter adapter)
Definition: MainActivity.java:593
com.sudogeeks.talking_reminder.MainActivity.getDefaultItemCount
int getDefaultItemCount()
Definition: MainActivity.java:367
com.sudogeeks.talking_reminder.MainActivity.SimpleAdapter.DateTimeComparator
Definition: MainActivity.java:560
com.sudogeeks.talking_reminder.MainActivity.SimpleAdapter.VerticalItemHolder.setActiveImage
void setActiveImage(String active)
Definition: MainActivity.java:686
com.sudogeeks.talking_reminder.AlarmReceiver
A class implementing basic alarm functions This class includes very basic features for an alarm.
Definition: AlarmReceiver.java:21
com.sudogeeks.talking_reminder.MainActivity.SimpleAdapter.getItemCount
int getItemCount()
Definition: MainActivity.java:458
com.sudogeeks.talking_reminder.MainActivity.SimpleAdapter.onCreateViewHolder
VerticalItemHolder onCreateViewHolder(ViewGroup container, int viewType)
Definition: MainActivity.java:431
com.sudogeeks.talking_reminder.AlarmReceiver.cancelAlarm
void cancelAlarm(Context context, int ID)
Definition: AlarmReceiver.java:139
com.sudogeeks.talking_reminder.MainActivity.onCreate
void onCreate(Bundle savedInstanceState)
Definition: MainActivity.java:154
com.sudogeeks.talking_reminder.MainActivity.getLayoutManager
RecyclerView.LayoutManager getLayoutManager()
Definition: MainActivity.java:359
com.sudogeeks.talking_reminder.ReminderEditActivity
Java class for handling UI component of Edit reminder layout.
Definition: ReminderEditActivity.java:32
com.sudogeeks.talking_reminder.MainActivity.onActivityResult
void onActivityResult(int requestCode, int resultCode, Intent data)
Definition: MainActivity.java:319
com.sudogeeks.talking_reminder.MainActivity.SimpleAdapter.VerticalItemHolder.setReminderTitle
void setReminderTitle(String reminderTitle)
Definition: MainActivity.java:644
com.sudogeeks.talking_reminder.MainActivity.SimpleAdapter.generateData
List< ReminderItem > generateData(int count)
Definition: MainActivity.java:475
com.sudogeeks.talking_reminder.ReminderAddActivity
Java class for handling UI component of Add reminder layout.
Definition: ReminderAddActivity.java:48
com.sudogeeks.talking_reminder.MainActivity.SimpleAdapter.ReminderItem
Definition: MainActivity.java:530
com.sudogeeks.talking_reminder.MainActivity.SimpleAdapter.onBindViewHolder
void onBindViewHolder(VerticalItemHolder itemHolder, int position)
Definition: MainActivity.java:445
com.sudogeeks.talking_reminder.MainActivity.SimpleAdapter.VerticalItemHolder.setReminderRepeatInfo
void setReminderRepeatInfo(String repeat, String repeatNo, String repeatType)
Definition: MainActivity.java:674