diff --git a/Habitica/google-services.json b/Habitica/google-services.json
new file mode 100644
index 000000000..9087babbb
--- /dev/null
+++ b/Habitica/google-services.json
@@ -0,0 +1,73 @@
+{
+ "project_info": {
+ "project_number": "726830572661",
+ "firebase_url": "https://habitica-android.firebaseio.com",
+ "project_id": "habitica-android",
+ "storage_bucket": "habitica-android.appspot.com"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:726830572661:android:d2e86a80d3b5f4f7",
+ "android_client_info": {
+ "package_name": "com.habitrpg.android.habitica"
+ }
+ },
+ "oauth_client": [
+ {
+ "client_id": "726830572661-e0bp1cplmf3v2sfl7e7goog768b7dv7b.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ],
+ "api_key": [
+ {
+ "current_key": "AIzaSyDbtO8iErLD14Gk42Gg48fijX1mzfPKzS8"
+ }
+ ],
+ "services": {
+ "analytics_service": {
+ "status": 1
+ },
+ "appinvite_service": {
+ "status": 1,
+ "other_platform_oauth_client": []
+ },
+ "ads_service": {
+ "status": 2
+ }
+ }
+ },
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:726830572661:android:ffd6914ad1a696e4",
+ "android_client_info": {
+ "package_name": "com.habitrpg.android.habitica.debug"
+ }
+ },
+ "oauth_client": [
+ {
+ "client_id": "726830572661-e0bp1cplmf3v2sfl7e7goog768b7dv7b.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ],
+ "api_key": [
+ {
+ "current_key": "AIzaSyDbtO8iErLD14Gk42Gg48fijX1mzfPKzS8"
+ }
+ ],
+ "services": {
+ "analytics_service": {
+ "status": 1
+ },
+ "appinvite_service": {
+ "status": 1,
+ "other_platform_oauth_client": []
+ },
+ "ads_service": {
+ "status": 2
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/Habitica/res/layout/custom_date_time_dialogue.xml b/Habitica/res/layout/custom_date_time_dialogue.xml
new file mode 100644
index 000000000..411fc249f
--- /dev/null
+++ b/Habitica/res/layout/custom_date_time_dialogue.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/TaskAlarmManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskAlarmManager.java
similarity index 98%
rename from Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/TaskAlarmManager.java
rename to Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskAlarmManager.java
index 0414c12d6..977b70627 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/TaskAlarmManager.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskAlarmManager.java
@@ -1,4 +1,4 @@
-package com.habitrpg.android.habitica.ui.helpers;
+package com.habitrpg.android.habitica.helpers;
import com.habitrpg.android.habitica.events.TaskSaveEvent;
import com.habitrpg.android.habitica.receivers.TaskReceiver;
@@ -14,7 +14,6 @@ import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
-import android.util.Log;
import java.util.Calendar;
import java.util.Date;
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/TaskAlarmBootReceiver.java b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/TaskAlarmBootReceiver.java
index 34a1ac85c..4ddd35355 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/TaskAlarmBootReceiver.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/TaskAlarmBootReceiver.java
@@ -1,6 +1,6 @@
package com.habitrpg.android.habitica.receivers;
-import com.habitrpg.android.habitica.ui.helpers.TaskAlarmManager;
+import com.habitrpg.android.habitica.helpers.TaskAlarmManager;
import android.content.BroadcastReceiver;
import android.content.Context;
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/TaskReceiver.java b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/TaskReceiver.java
index 3082d030d..267f9e859 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/TaskReceiver.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/TaskReceiver.java
@@ -2,9 +2,8 @@ package com.habitrpg.android.habitica.receivers;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.ui.activities.MainActivity;
-import com.habitrpg.android.habitica.ui.helpers.TaskAlarmManager;
+import com.habitrpg.android.habitica.helpers.TaskAlarmManager;
-import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.java
index 43b43e069..dd12ec442 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.java
@@ -9,7 +9,7 @@ import com.habitrpg.android.habitica.ui.adapter.tasks.CheckListAdapter;
import com.habitrpg.android.habitica.ui.adapter.tasks.RemindersAdapter;
import com.habitrpg.android.habitica.ui.helpers.MarkdownParser;
import com.habitrpg.android.habitica.ui.helpers.SimpleItemTouchHelperCallback;
-import com.habitrpg.android.habitica.ui.helpers.TaskAlarmManager;
+import com.habitrpg.android.habitica.helpers.TaskAlarmManager;
import com.habitrpg.android.habitica.ui.helpers.ViewHelper;
import com.magicmicky.habitrpgwrapper.lib.models.Tag;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.ChecklistItem;
@@ -26,6 +26,7 @@ import net.pherth.android.emoji_library.EmojiPopup;
import org.greenrobot.eventbus.EventBus;
import android.app.DatePickerDialog;
+import android.app.Dialog;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -56,11 +57,13 @@ import android.widget.NumberPicker;
import android.widget.Spinner;
import android.widget.TableRow;
import android.widget.TextView;
+import android.widget.TimePicker;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.ParseException;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
@@ -168,6 +171,9 @@ public class TaskFormActivity extends BaseActivity implements AdapterView.OnItem
private TaskAlarmManager taskAlarmManager;
private List selectedTags;
+ //Used for reminders @TODO: Move this to reminders manager
+ DateFormat dateFormater = new SimpleDateFormat("dd MMMM yyyy HH:mm:ss");
+
@Override
protected int getLayoutResId() {
return R.layout.activity_task_form;
@@ -429,6 +435,7 @@ public class TaskFormActivity extends BaseActivity implements AdapterView.OnItem
if (task != null && task.getReminders() != null) {
reminders = task.getReminders();
}
+
remindersAdapter = new RemindersAdapter(reminders);
LinearLayoutManager llm = new LinearLayoutManager(this);
@@ -446,37 +453,64 @@ public class TaskFormActivity extends BaseActivity implements AdapterView.OnItem
@OnClick(R.id.add_reminder_button)
public void addReminder() {
- Date startDate = new Date(startDateListener.getCalendar().getTimeInMillis());
+ try {
+ Date date = dateFormater.parse(newRemindersEditText.getText().toString());
+ RemindersItem item = new RemindersItem();
+ UUID randomUUID = UUID.randomUUID();
+ item.setId(randomUUID.toString());
+ item.setStartDate(date);
+ item.setTime(date);
+ item.setType(taskType);
+ remindersAdapter.addItem(item);
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
- Date time = startDate;
- String reminderTimeString = newRemindersEditText.getText().toString();
- if (reminderTimeString.isEmpty()) return;
- String[] reminderTimeSplit = reminderTimeString.split(":");
- time.setHours(Integer.parseInt(reminderTimeSplit[0]));
- time.setMinutes(Integer.parseInt(reminderTimeSplit[1]));
- time.setSeconds(0);
-
- RemindersItem item = new RemindersItem();
- UUID randomUUID = UUID.randomUUID();
- item.setId(randomUUID.toString());
- item.setStartDate(startDate);
- item.setTime(time);
-
- remindersAdapter.addItem(item);
newRemindersEditText.setText("");
}
@OnClick(R.id.new_reminder_edittext)
public void changeNewReminderTime() {
- Calendar mcurrentTime = Calendar.getInstance();
- int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY);
- int minute = mcurrentTime.get(Calendar.MINUTE);
- TimePickerDialog mTimePicker;
- mTimePicker = new TimePickerDialog(TaskFormActivity.this, (timePicker, selectedHour, selectedMinute) -> {
- newRemindersEditText.setText(String.format("%d:%02d", selectedHour, selectedMinute));
- }, hour, minute, true);
- mTimePicker.setTitle("Select Time");
- mTimePicker.show();
+ Calendar currentTime = Calendar.getInstance();
+ int hour = currentTime.get(Calendar.HOUR_OF_DAY);
+ int minute = currentTime.get(Calendar.MINUTE);
+
+ if (taskType.equals("todo")) {
+ Dialog dialog = new Dialog(this);
+ dialog.setContentView(R.layout.custom_date_time_dialogue);
+ dialog.setTitle("Select Date and Time");
+
+ Button dialogConfirmButton = (Button) dialog.findViewById(R.id.customDialogConfirmButton);
+ TimePicker dialogTimePicker = (TimePicker) dialog.findViewById(R.id.timePicker);
+ DatePicker dialogDatePicker = (DatePicker) dialog.findViewById(R.id.datePicker);
+
+ dialogConfirmButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ int day = dialogDatePicker.getDayOfMonth();
+ int month = dialogDatePicker.getMonth();
+ int year = dialogDatePicker.getYear();
+ int hour = dialogTimePicker.getCurrentHour();
+ int minute = dialogTimePicker.getCurrentMinute();
+
+ Calendar calendar = Calendar.getInstance();
+ calendar.set(year, month, day, hour, minute, 0);
+
+ newRemindersEditText.setText(dateFormater.format(calendar.getTime()));
+ dialog.hide();
+ }
+ });
+ dialog.show();
+ } else {
+ TimePickerDialog timePickerDialog;
+ timePickerDialog = new TimePickerDialog(TaskFormActivity.this, (timePicker, selectedHour, selectedMinute) -> {
+ Calendar calendar = Calendar.getInstance();
+ calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DATE), selectedHour, selectedMinute, 0);
+ newRemindersEditText.setText(dateFormater.format(calendar.getTime()));
+ }, hour, minute, true);
+ timePickerDialog.setTitle("Select Time");
+ timePickerDialog.show();
+ }
}
private void createTagsCheckBoxes() {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/RemindersAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/RemindersAdapter.java
index beb84d615..db2ca37fa 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/RemindersAdapter.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/RemindersAdapter.java
@@ -5,16 +5,23 @@ import com.habitrpg.android.habitica.ui.helpers.ItemTouchHelperAdapter;
import com.habitrpg.android.habitica.ui.helpers.ItemTouchHelperViewHolder;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.RemindersItem;
+import android.app.Dialog;
import android.app.TimePickerDialog;
import android.graphics.Color;
import android.support.v7.widget.RecyclerView;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
+import android.widget.DatePicker;
import android.widget.EditText;
+import android.widget.TimePicker;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.List;
@@ -27,10 +34,13 @@ import butterknife.ButterKnife;
*/
public class RemindersAdapter extends RecyclerView.Adapter
implements ItemTouchHelperAdapter {
+
private final List reminders = new ArrayList<>();
+ private DateFormat dateFormater;
public RemindersAdapter(List remindersInc) {
reminders.addAll(remindersInc);
+ dateFormater = new SimpleDateFormat("dd MMMM yyyy HH:mm:ss");
}
@Override
@@ -42,7 +52,7 @@ public class RemindersAdapter extends RecyclerView.Adapter {
- TimePickerDialog timePicker;
- timePicker = new TimePickerDialog(v.getContext(), (timePicker1, selectedHour, selectedMinute) -> {
- reminderItemTextView.setText(String.format("%d:%02d", selectedHour, selectedMinute));
+ RemindersItem reminder = reminders.get(getAdapterPosition());
- RemindersItem reminder = reminders.get(getAdapterPosition());
- Date time = reminder.getTime();
- time.setHours(selectedHour);
- time.setMinutes(selectedMinute);
- time.setSeconds(0);
- reminder.setTime(time);
- }, hour, minute, true);
- timePicker.setTitle("Select Time");
- timePicker.show();
+ String taskType;
+
+ if (reminder.getTask() == null) {
+ taskType = reminder.getType();
+ } else {
+ taskType = reminder.getTask().getType();
+ }
+
+ if (taskType.equals("todo")) {
+ Dialog dialog = new Dialog(v.getContext());
+ dialog.setContentView(R.layout.custom_date_time_dialogue);
+ dialog.setTitle("Select Date and Time");
+
+ Button dialogConfirmButton = (Button) dialog.findViewById(R.id.customDialogConfirmButton);
+ TimePicker dialogTimePicker = (TimePicker) dialog.findViewById(R.id.timePicker);
+ DatePicker dialogDatePicker = (DatePicker) dialog.findViewById(R.id.datePicker);
+
+ dialogConfirmButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ int day = dialogDatePicker.getDayOfMonth();
+ int month = dialogDatePicker.getMonth();
+ int year = dialogDatePicker.getYear();
+ int hour = dialogTimePicker.getCurrentHour();
+ int minute = dialogTimePicker.getCurrentMinute();
+
+ Calendar calendar = Calendar.getInstance();
+ calendar.set(year, month, day, hour, minute, 0);
+
+ reminder.setTime(calendar.getTime());
+
+ reminderItemTextView.setText(dateFormater.format(calendar.getTime()));
+ dialog.hide();
+ }
+ });
+ dialog.show();
+ } else {
+ TimePickerDialog timePicker;
+ timePicker = new TimePickerDialog(v.getContext(), (timePicker1, selectedHour, selectedMinute) -> {
+
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(reminder.getTime());
+ calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DATE), selectedHour, selectedMinute, 0);
+
+ reminder.setTime(calendar.getTime());
+
+ reminderItemTextView.setText(dateFormater.format(calendar.getTime()));
+ }, hour, minute, true);
+ timePicker.setTitle("Select Time");
+ timePicker.show();
+ }
});
}
diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/tasks/RemindersItem.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/tasks/RemindersItem.java
index 14d8598c4..ad6abd01d 100644
--- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/tasks/RemindersItem.java
+++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/tasks/RemindersItem.java
@@ -7,10 +7,13 @@ import com.raizlabs.android.dbflow.annotation.ForeignKey;
import com.raizlabs.android.dbflow.annotation.ForeignKeyReference;
import com.raizlabs.android.dbflow.annotation.PrimaryKey;
import com.raizlabs.android.dbflow.annotation.Table;
+import com.raizlabs.android.dbflow.sql.builder.Condition;
+import com.raizlabs.android.dbflow.sql.language.Select;
import com.raizlabs.android.dbflow.structure.BaseModel;
import com.raizlabs.android.dbflow.structure.container.ForeignKeyContainer;
import java.util.Date;
+import java.util.List;
/**
* Created by keithholliday on 5/31/16.
@@ -35,6 +38,9 @@ public class RemindersItem extends BaseModel {
@Column
private Integer alarmId;
+ //Use to store task type before a task is created
+ private String type;
+
public String getId() {
return id;
}
@@ -69,7 +75,13 @@ public class RemindersItem extends BaseModel {
public Task getTask() {
if (task != null) {
- return task.toModel();
+ //This will get all the task info
+ Task taskModel = task.toModel();
+ List task = new Select()
+ .from(Task.class)
+ .where(Condition.column("id").eq(taskModel.getId()))
+ .queryList();
+ return task.get(0);
} else {
return null;
}
@@ -81,6 +93,14 @@ public class RemindersItem extends BaseModel {
this.task.put("id", task.getId());
}
+ public String getType() {
+ return this.type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
@Override
public void save() {
if (this.getId() == null) {