Commit bd380d58 authored by PANKAJ KUMAR's avatar PANKAJ KUMAR

Revert "MainActivity Documentation"

This reverts commit 90e6fe4b
parent 90e6fe4b
......@@ -45,12 +45,8 @@ import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
/**
* \brief Main Activity class
* This activity is the entry point of the app and is responsible for handling User Authentication and Landing page view
*/
public class MainActivity extends AppCompatActivity {
private static final int RC_SIGN_IN = 123; // Choose an arbitrary request code value
private RecyclerView reminderListView;
private SimpleAdapter mAdapter;
private Toolbar mToolbar;
......@@ -61,12 +57,15 @@ public class MainActivity extends AppCompatActivity {
private ReminderDatabase rb;
private MultiSelector mMultiSelector = new MultiSelector();
private AlarmReceiver mAlarmReceiver;
private FirebaseDatabase firebaseDatabase; //Entrypoint for our firebase database
private DatabaseReference reminderDatabaseReference; //To references specific part of the database
private ChildEventListener dbChildEventListener; //No notify the app whenever data changes in firebase database
private FirebaseAuth firebaseAuth; //For User authentication
private FirebaseAuth.AuthStateListener authStateListener; //Listener which invokes whenever auth state changes
private ArrayList<ReminderDO> reminderDOArrayList = new ArrayList<>();
private static final int RC_SIGN_IN = 123; // Choose an arbitrary request code value
// Multi select items in recycler view
private ModalMultiSelectorCallback mDeleteMode = new ModalMultiSelectorCallback(mMultiSelector) {
......@@ -76,12 +75,6 @@ public class MainActivity extends AppCompatActivity {
return true;
}
/** Defines the behaviour of different menu items
* Overridden Method
* @param actionMode
* @param menuItem
* @return
*/
@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
switch (menuItem.getItemId()) {
......@@ -145,11 +138,6 @@ public class MainActivity extends AppCompatActivity {
}
};
/**onCreate() implementation
* Overridden method. In this method initial life cycle of the app is implemented.
* If user is not authenticated then user is sent for login/signup, else database instance and main view is initialized
* @param savedInstanceState
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
......@@ -159,13 +147,11 @@ public class MainActivity extends AppCompatActivity {
firebaseDatabase = FirebaseDatabase.getInstance();
firebaseAuth = FirebaseAuth.getInstance();
FirebaseUser user = firebaseAuth.getCurrentUser();
//AuthStateListener: check the user's authentication state. if not signed in the send it for login/signup
authStateListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
if(user != null){
//User is signed in
reminderDatabaseReference = firebaseDatabase.getReference().child("reminders").child(user.getUid());
Toast.makeText(MainActivity.this, "You're now signed in.\nWelcome to Talking ReminderDO!", Toast.LENGTH_SHORT).show();
......@@ -226,33 +212,25 @@ public class MainActivity extends AppCompatActivity {
mAlarmReceiver = new AlarmReceiver();
}
/* Private Helper method
* This method attaches a listener to the Firebase database reference. The listener listens to any kind of changes in the database.
*
*/
private void attachDatabaseReadListener() {
//Private Helper methods
private void attachDatabaseReadListener(){
//TODO Attaching Listener to ChildEventListener
if (dbChildEventListener == null) { // Create new Event Listener only when no listener is attached yet
if (dbChildEventListener == null) { // Only now create new Event Listener
dbChildEventListener = new ChildEventListener() {
//Specify what to do when a new entry is added in the database. New entry here means "new Reminder object"
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
ReminderDO reminderObject = dataSnapshot.getValue(ReminderDO.class);
reminderDOArrayList.add(reminderObject);
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
......@@ -261,21 +239,15 @@ public class MainActivity extends AppCompatActivity {
reminderDatabaseReference.addChildEventListener(dbChildEventListener);
}
/* Private helper method
* this method is called to Detach the database listener in the events of logout or app failure
*/
private void detachDatabaseReadListener() {
private void detachDatabaseReadListener(){
if (dbChildEventListener != null) {
reminderDatabaseReference.removeEventListener(dbChildEventListener);
dbChildEventListener = null;
}
}
/**Define what happens when user closes the app
* Overridden method
*/
@Override
protected void onPause() {
protected void onPause(){
super.onPause();
if (authStateListener != null) {
firebaseAuth.removeAuthStateListener(authStateListener);
......@@ -284,20 +256,13 @@ public class MainActivity extends AppCompatActivity {
//reminderAdapter.clear();
}
/** Create context menu for long press actions
*
* @param menu
* @param view
* @param menuInfo
*/
// Create context menu for long press actions
@Override
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) {
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
getMenuInflater().inflate(R.menu.menu_add_reminder, menu);
}
/*Private Helper method :
* Implement behaviour : On clicking a reminder item, user shoud be taken to Reminder Edit Activity
*/
// On clicking a reminder item
private void selectReminder(int mClickID) {
String mStringClickID = Integer.toString(mClickID);
......@@ -308,39 +273,32 @@ public class MainActivity extends AppCompatActivity {
startActivityForResult(i, 1);
}
/** Standard method for handling the outcome of an activity.
* If user signs in is successful then only take the user to main page. Else force the user to login in first
*
* @param requestCode
* @param resultCode
* @param data
*/
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mAdapter.setItemCount(getDefaultItemCount());
if (requestCode == RC_SIGN_IN) {
//If user signs in is successful then only take the user to main page. Else force the user to login in first
if (resultCode == RESULT_OK) {
if(requestCode == RC_SIGN_IN){
if(resultCode == RESULT_OK){
Toast.makeText(this, "Signed in", Toast.LENGTH_SHORT);
startActivity(new Intent(MainActivity.this, ReminderAddActivity.class));
} else if (requestCode == RESULT_CANCELED) {
}
else if (requestCode == RESULT_CANCELED){
Toast.makeText(this, "Sign in cancelled", Toast.LENGTH_SHORT);
finish();
}
}
}
/** Define the behaviour of the app in case user comes back after suspending the app.
* -Recreate recycler view : This is done so that newly created reminders are also displayed
}
*/
// Recreate recycler view
// This is done so that newly created reminders are displayed
@Override
public void onResume() {
super.onResume();
firebaseAuth.addAuthStateListener(authStateListener);
// Get all the reminders : If there are no reminders display a message
// To check is there are saved reminders
// If there are no reminders display a message asking the user to create reminders
List<ReminderDO> mTest = rb.getAllReminders();
if (mTest.isEmpty()) {
......@@ -352,42 +310,28 @@ public class MainActivity extends AppCompatActivity {
mAdapter.setItemCount(getDefaultItemCount());
}
/** Layout manager for recycler view
*
* @return LinearLayoutManager instance
*/
// Layout manager for recycler view
protected RecyclerView.LayoutManager getLayoutManager() {
return new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
}
/** Helper method
*
* @return integer 100
*/
protected int getDefaultItemCount() {
return 100;
}
/**
* Creating main menu
*
* @param Menu object
* @return boolean
* Main menu actions
* @param menu
* @return
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
return true;
}
/**Defines behaviours for the menu items.
*
* @param item
* @return Boolean
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
switch (item.getItemId()){
case R.id.sign_out:
//sign out
AuthUI.getInstance().signOut(this);
......@@ -398,10 +342,7 @@ public class MainActivity extends AppCompatActivity {
}
/**\brief Adapter class (Inner Class) for implementing recycler view
*
* This class will handle how to display the reminder data on the main page.
*/
// Adapter class for recycler view
public class SimpleAdapter extends RecyclerView.Adapter<SimpleAdapter.VerticalItemHolder> {
private ArrayList<ReminderItem> mItems;
......@@ -420,13 +361,7 @@ public class MainActivity extends AppCompatActivity {
notifyItemRemoved(selected);
}
/** View holder for recycler view items
* Overridden method
*
* @param container
* @param viewType
* @return an object of VerticalItemHolder
*/
// View holder for recycler view items
@Override
public VerticalItemHolder onCreateViewHolder(ViewGroup container, int viewType) {
LayoutInflater inflater = LayoutInflater.from(container.getContext());
......@@ -435,12 +370,6 @@ public class MainActivity extends AppCompatActivity {
return new VerticalItemHolder(root, this);
}
/**Bind a reminder item to a position in the main view
* Overridden method
*
* @param itemHolder
* @param position
*/
@Override
public void onBindViewHolder(VerticalItemHolder itemHolder, int position) {
ReminderItem item = mItems.get(position);
......@@ -450,28 +379,23 @@ public class MainActivity extends AppCompatActivity {
itemHolder.setActiveImage(item.mActive);
}
/**Retuns the number of reminders in the database
*
* @return
*/
@Override
public int getItemCount() {
return mItems.size();
}
public void setItemCount(int count) {
mItems.clear();
mItems.addAll(generateData(count));
notifyDataSetChanged();
}
/** Prepare data for each reminder item to facilitate proper displaying in the view.
* this Helper method required because all the data in database are not directly representable.
*
* @param count
* @return
*/
// Generate random test data
public ReminderItem generateDummyData() {
return new ReminderItem("1", "2", "3", "4", "5", "6");
}
// Generate real data for each item
public List<ReminderItem> generateData(int count) {
ArrayList<SimpleAdapter.ReminderItem> items = new ArrayList<>();
......@@ -512,7 +436,7 @@ public class MainActivity extends AppCompatActivity {
int k = 0;
// Plug in the data to each recycler view item
// Add data to each recycler view item
for (DateTimeSorter item : DateTimeSortList) {
int i = item.getIndex();
......@@ -524,9 +448,7 @@ public class MainActivity extends AppCompatActivity {
return items;
}
/** Data-Object class for recycler view items
* This class is slightly different form ReminderDO class. Very specific to the requirement of the recyler view
*/
// Class for recycler view items
public class ReminderItem {
public String mTitle;
public String mDateTime;
......@@ -535,15 +457,6 @@ public class MainActivity extends AppCompatActivity {
public String mRepeatType;
public String mActive;
/**Constructor
*
* @param Title
* @param DateTime
* @param Repeat
* @param RepeatNo number of repeatition
* @param RepeatType
* @param Active
*/
public ReminderItem(String Title, String DateTime, String Repeat, String RepeatNo, String RepeatType, String Active) {
this.mTitle = Title;
this.mDateTime = DateTime;
......@@ -554,9 +467,7 @@ public class MainActivity extends AppCompatActivity {
}
}
/** Inner class to compare date and time so that items can be sorted in ascending/decending order of date and time
*
*/
// Class to compare date and time so that items are sorted in ascending order
public class DateTimeComparator implements Comparator {
DateFormat f = new SimpleDateFormat("dd/mm/yyyy hh:mm");
......@@ -572,9 +483,7 @@ public class MainActivity extends AppCompatActivity {
}
}
/** UI and data class (Adapter) for recycler view items
*
*/
// UI and data class for recycler view items
public class VerticalItemHolder extends SwappingHolder
implements View.OnClickListener, View.OnLongClickListener {
private TextView mTitleText, mDateAndTimeText, mRepeatInfoText;
......@@ -583,17 +492,10 @@ public class MainActivity extends AppCompatActivity {
private TextDrawable mDrawableBuilder;
private SimpleAdapter mAdapter;
/**
* Sets up recycler item selector in the context.
* On long clicks the items should be selected so that user can take actions (like delete) on those items
*
* @param itemView
* @param adapter
*/
public VerticalItemHolder(View itemView, SimpleAdapter adapter) {
super(itemView, mMultiSelector);
itemView.setOnClickListener(this);
itemView.setOnLongClickListener(this); //Set for long clicks
itemView.setOnLongClickListener(this);
itemView.setLongClickable(true);
// Initialize adapter for the items
......@@ -607,14 +509,11 @@ public class MainActivity extends AppCompatActivity {
mThumbnailImage = itemView.findViewById(R.id.thumbnail_image);
}
/** On clicking a reminder item
*
* @param view
*/
// On clicking a reminder item
@Override
public void onClick(View view) {
public void onClick(View v) {
if (!mMultiSelector.tapSelection(this)) {
mTempPost = reminderListView.getChildAdapterPosition(view);
mTempPost = reminderListView.getChildAdapterPosition(v);
int mReminderClickID = IDmap.get(mTempPost);
selectReminder(mReminderClickID);
......@@ -624,29 +523,22 @@ public class MainActivity extends AppCompatActivity {
}
}
/** On long press enter action mode with context menu
*
* @param view
* @return
*/
// On long press enter action mode with context menu
@Override
public boolean onLongClick(View view) {
public boolean onLongClick(View v) {
AppCompatActivity activity = MainActivity.this;
activity.startSupportActionMode(mDeleteMode);
mMultiSelector.setSelected(this, true);
return true;
}
/** Set reminder title view
*
* @param reminderTitle
*/
public void setReminderTitle(String reminderTitle) {
mTitleText.setText(reminderTitle);
// Set reminder title view
public void setReminderTitle(String title) {
mTitleText.setText(title);
String letter = "A";
if (reminderTitle != null && !reminderTitle.isEmpty()) {
letter = reminderTitle.substring(0, 1);
if (title != null && !title.isEmpty()) {
letter = title.substring(0, 1);
}
int color = mColorGenerator.getRandomColor();
......@@ -657,20 +549,12 @@ public class MainActivity extends AppCompatActivity {
mThumbnailImage.setImageDrawable(mDrawableBuilder);
}
/** Set date and time views
*
* @param datetime
*/
// Set date and time views
public void setReminderDateTime(String datetime) {
mDateAndTimeText.setText(datetime);
}
/** Set repeat views
*
* @param repeat
* @param repeatNo
* @param repeatType
*/
// Set repeat views
public void setReminderRepeatInfo(String repeat, String repeatNo, String repeatType) {
if (repeat.equals("true")) {
mRepeatInfoText.setText("Every " + repeatNo + " " + repeatType + "(s)");
......@@ -679,10 +563,7 @@ public class MainActivity extends AppCompatActivity {
}
}
/** Set active image as on or off
* This method is apparently not consistent because on/off behaviour doesn't always work
* @param active
*/
// Set active image as on or off
public void setActiveImage(String active) {
if (active.equals("true")) {
mActiveImage.setImageResource(R.drawable.ic_notifications_active);
......
<vector android:height="24dp" android:tint="#646464"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10C17.52,22 22,17.52 22,12S17.52,2 11.99,2zM12,20c-4.42,0 -8,-3.58 -8,-8s3.58,-8 8,-8 8,3.58 8,8 -3.58,8 -8,8zM12.5,7H11v6l5.25,3.15 0.75,-1.23 -4.5,-2.67z"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M7.58,4.08L6.15,2.65C3.75,4.48 2.17,7.3 2.03,10.5h2c0.15,-2.65 1.51,-4.97 3.55,-6.42zM19.97,10.5h2c-0.15,-3.2 -1.73,-6.02 -4.12,-7.85l-1.42,1.43c2.02,1.45 3.39,3.77 3.54,6.42zM18,11c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2v-5zM12,22c0.14,0 0.27,-0.01 0.4,-0.04 0.65,-0.14 1.18,-0.58 1.44,-1.18 0.1,-0.24 0.15,-0.5 0.15,-0.78h-4c0.01,1.1 0.9,2 2.01,2z"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M20,18.69L7.84,6.14 5.27,3.49 4,4.76l2.8,2.8v0.01c-0.52,0.99 -0.8,2.16 -0.8,3.42v5l-2,2v1h13.73l2,2L21,19.72l-1,-1.03zM12,22c1.11,0 2,-0.89 2,-2h-4c0,1.11 0.89,2 2,2zM18,14.68L18,11c0,-3.08 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68c-0.15,0.03 -0.29,0.08 -0.42,0.12 -0.1,0.03 -0.2,0.07 -0.3,0.11h-0.01c-0.01,0 -0.01,0 -0.02,0.01 -0.23,0.09 -0.46,0.2 -0.68,0.31 0,0 -0.01,0 -0.01,0.01L18,14.68z"/>
</vector>
<vector android:height="24dp" android:tint="#646464"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M12,4L12,1L8,5l4,4L12,6c3.31,0 6,2.69 6,6 0,1.01 -0.25,1.97 -0.7,2.8l1.46,1.46C19.54,15.03 20,13.57 20,12c0,-4.42 -3.58,-8 -8,-8zM12,18c-3.31,0 -6,-2.69 -6,-6 0,-1.01 0.25,-1.97 0.7,-2.8L5.24,7.74C4.46,8.97 4,10.43 4,12c0,4.42 3.58,8 8,8v3l4,-4 -4,-4v3z"/>
</vector>
......@@ -3,4 +3,6 @@
<color name="primary">#008577</color>
<color name="primary_dark">#00574B</color>
<color name="accent">#D81B60</color>
<color name="textheader">#ffffff</color>
<color name="textbody">#000000</color>
</resources>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment