mirror of
https://github.com/iSoron/uhabits.git
synced 2025-12-09 18:48:51 -06:00
Add timestamp to notifications
This commit is contained in:
@@ -35,6 +35,13 @@ public class DateHelper
|
|||||||
return now + tz.getOffset(now);
|
return now + tz.getOffset(now);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static long toLocalTime(long timestamp)
|
||||||
|
{
|
||||||
|
TimeZone tz = TimeZone.getDefault();
|
||||||
|
long now = new Date(timestamp).getTime();
|
||||||
|
return now + tz.getOffset(now);
|
||||||
|
}
|
||||||
|
|
||||||
public static long getStartOfDay(long timestamp)
|
public static long getStartOfDay(long timestamp)
|
||||||
{
|
{
|
||||||
return (timestamp / millisecondsInOneDay) * millisecondsInOneDay;
|
return (timestamp / millisecondsInOneDay) * millisecondsInOneDay;
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import android.net.Uri;
|
|||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import android.support.v4.app.NotificationCompat;
|
import android.support.v4.app.NotificationCompat;
|
||||||
|
|
||||||
|
import org.isoron.helpers.DateHelper;
|
||||||
import org.isoron.uhabits.helpers.ReminderHelper;
|
import org.isoron.uhabits.helpers.ReminderHelper;
|
||||||
import org.isoron.uhabits.models.Habit;
|
import org.isoron.uhabits.models.Habit;
|
||||||
|
|
||||||
@@ -38,25 +39,36 @@ import java.util.Date;
|
|||||||
|
|
||||||
public class ReminderAlarmReceiver extends BroadcastReceiver
|
public class ReminderAlarmReceiver extends BroadcastReceiver
|
||||||
{
|
{
|
||||||
|
public static final String ACTION_CHECK = "org.isoron.uhabits.ACTION_CHECK";
|
||||||
public static String ACTION_CHECK = "org.isoron.uhabits.ACTION_CHECK";
|
public static final String ACTION_DISMISS = "org.isoron.uhabits.ACTION_DISMISS";
|
||||||
public static String ACTION_DISMISS = "org.isoron.uhabits.ACTION_DISMISS";
|
public static final String ACTION_REMIND = "org.isoron.uhabits.ACTION_REMIND";
|
||||||
public static String ACTION_REMIND = "org.isoron.uhabits.ACTION_REMIND";
|
public static final String ACTION_REMOVE_REMINDER = "org.isoron.uhabits.ACTION_REMOVE_REMINDER";
|
||||||
public static String ACTION_REMOVE_REMINDER = "org.isoron.uhabits.ACTION_REMOVE_REMINDER";
|
public static final String ACTION_SNOOZE = "org.isoron.uhabits.ACTION_SNOOZE";
|
||||||
public static String ACTION_SNOOZE = "org.isoron.uhabits.ACTION_SNOOZE";
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onReceive(Context context, Intent intent)
|
public void onReceive(Context context, Intent intent)
|
||||||
{
|
{
|
||||||
String action = intent.getAction();
|
switch (intent.getAction())
|
||||||
|
{
|
||||||
|
case ACTION_REMIND:
|
||||||
|
createNotification(context, intent.getData());
|
||||||
|
break;
|
||||||
|
|
||||||
if (action.equals(ACTION_REMIND)) createNotification(context, intent.getData());
|
case ACTION_DISMISS:
|
||||||
|
dismissAllHabits();
|
||||||
|
ReminderHelper.createReminderAlarms(context);
|
||||||
|
break;
|
||||||
|
|
||||||
else if (action.equals(ACTION_DISMISS)) dismissAllHabits();
|
case ACTION_CHECK:
|
||||||
|
checkHabit(context, intent.getData());
|
||||||
|
ReminderHelper.createReminderAlarms(context);
|
||||||
|
break;
|
||||||
|
|
||||||
else if (action.equals(ACTION_CHECK)) checkHabit(context, intent.getData());
|
case ACTION_SNOOZE:
|
||||||
|
snoozeHabit(context, intent.getData());
|
||||||
else if (action.equals(ACTION_SNOOZE)) snoozeHabit(context, intent.getData());
|
ReminderHelper.createReminderAlarms(context);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void snoozeHabit(Context context, Uri data)
|
private void snoozeHabit(Context context, Uri data)
|
||||||
@@ -73,8 +85,13 @@ public class ReminderAlarmReceiver extends BroadcastReceiver
|
|||||||
|
|
||||||
private void checkHabit(Context context, Uri data)
|
private void checkHabit(Context context, Uri data)
|
||||||
{
|
{
|
||||||
|
Long timestamp = DateHelper.getStartOfToday();
|
||||||
|
String paramTimestamp = data.getQueryParameter("timestamp");
|
||||||
|
|
||||||
|
if(paramTimestamp != null) timestamp = Long.parseLong(paramTimestamp);
|
||||||
|
|
||||||
Habit habit = Habit.get(ContentUris.parseId(data));
|
Habit habit = Habit.get(ContentUris.parseId(data));
|
||||||
habit.toggleRepetitionToday();
|
habit.toggleRepetition(timestamp);
|
||||||
habit.save();
|
habit.save();
|
||||||
dismissNotification(context, habit);
|
dismissNotification(context, habit);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import android.net.Uri;
|
|||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import org.isoron.helpers.DateHelper;
|
||||||
import org.isoron.uhabits.ReminderAlarmReceiver;
|
import org.isoron.uhabits.ReminderAlarmReceiver;
|
||||||
import org.isoron.uhabits.models.Habit;
|
import org.isoron.uhabits.models.Habit;
|
||||||
|
|
||||||
@@ -41,8 +42,6 @@ public class ReminderHelper
|
|||||||
|
|
||||||
public static void createReminderAlarm(Context context, Habit habit, Long reminderTime)
|
public static void createReminderAlarm(Context context, Habit habit, Long reminderTime)
|
||||||
{
|
{
|
||||||
Uri uri = Uri.parse("content://org.isoron.uhabits/habit/" + habit.getId());
|
|
||||||
|
|
||||||
if (reminderTime == null)
|
if (reminderTime == null)
|
||||||
{
|
{
|
||||||
Calendar calendar = Calendar.getInstance();
|
Calendar calendar = Calendar.getInstance();
|
||||||
@@ -54,10 +53,15 @@ public class ReminderHelper
|
|||||||
reminderTime = calendar.getTimeInMillis();
|
reminderTime = calendar.getTimeInMillis();
|
||||||
|
|
||||||
if (System.currentTimeMillis() > reminderTime)
|
if (System.currentTimeMillis() > reminderTime)
|
||||||
{
|
|
||||||
reminderTime += AlarmManager.INTERVAL_DAY;
|
reminderTime += AlarmManager.INTERVAL_DAY;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
long timestamp = DateHelper.getStartOfDay(DateHelper.toLocalTime(reminderTime));
|
||||||
|
|
||||||
|
Uri uri = Uri.parse(String.format("content://org.isoron.uhabits/habit/%d?timestamp=%d",
|
||||||
|
habit.getId(), timestamp));
|
||||||
|
|
||||||
|
Log.d("Alarm", uri.toString());
|
||||||
|
|
||||||
Intent alarmIntent = new Intent(context, ReminderAlarmReceiver.class);
|
Intent alarmIntent = new Intent(context, ReminderAlarmReceiver.class);
|
||||||
alarmIntent.setAction(ReminderAlarmReceiver.ACTION_REMIND);
|
alarmIntent.setAction(ReminderAlarmReceiver.ACTION_REMIND);
|
||||||
@@ -69,13 +73,9 @@ public class ReminderHelper
|
|||||||
|
|
||||||
AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
|
AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
|
||||||
if (Build.VERSION.SDK_INT >= 19)
|
if (Build.VERSION.SDK_INT >= 19)
|
||||||
{
|
|
||||||
manager.setExact(AlarmManager.RTC_WAKEUP, reminderTime, pendingIntent);
|
manager.setExact(AlarmManager.RTC_WAKEUP, reminderTime, pendingIntent);
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
manager.set(AlarmManager.RTC_WAKEUP, reminderTime, pendingIntent);
|
manager.set(AlarmManager.RTC_WAKEUP, reminderTime, pendingIntent);
|
||||||
}
|
|
||||||
|
|
||||||
Log.d("Alarm", String.format("Setting alarm (%s): %s",
|
Log.d("Alarm", String.format("Setting alarm (%s): %s",
|
||||||
DateFormat.getDateTimeInstance().format(new Date(reminderTime)), habit.name));
|
DateFormat.getDateTimeInstance().format(new Date(reminderTime)), habit.name));
|
||||||
|
|||||||
Reference in New Issue
Block a user