mirror of
https://github.com/iSoron/uhabits.git
synced 2025-12-06 09:08:52 -06:00
Toggle checkmarks from widget
This commit is contained in:
@@ -39,7 +39,7 @@
|
|||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<receiver
|
<receiver
|
||||||
android:name=".ReminderAlarmReceiver" />
|
android:name=".HabitBroadcastReceiver" />
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".ShowHabitActivity"
|
android:name=".ShowHabitActivity"
|
||||||
|
|||||||
@@ -38,12 +38,11 @@ import org.isoron.uhabits.models.Habit;
|
|||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
public class ReminderAlarmReceiver extends BroadcastReceiver
|
public class HabitBroadcastReceiver extends BroadcastReceiver
|
||||||
{
|
{
|
||||||
public static final String ACTION_CHECK = "org.isoron.uhabits.ACTION_CHECK";
|
public static final String ACTION_CHECK = "org.isoron.uhabits.ACTION_CHECK";
|
||||||
public static final String ACTION_DISMISS = "org.isoron.uhabits.ACTION_DISMISS";
|
public static final String ACTION_DISMISS = "org.isoron.uhabits.ACTION_DISMISS";
|
||||||
public static final String ACTION_REMIND = "org.isoron.uhabits.ACTION_REMIND";
|
public static final String ACTION_SHOW_REMINDER = "org.isoron.uhabits.ACTION_SHOW_REMINDER";
|
||||||
public static final String ACTION_REMOVE_REMINDER = "org.isoron.uhabits.ACTION_REMOVE_REMINDER";
|
|
||||||
public static final String ACTION_SNOOZE = "org.isoron.uhabits.ACTION_SNOOZE";
|
public static final String ACTION_SNOOZE = "org.isoron.uhabits.ACTION_SNOOZE";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -51,7 +50,7 @@ public class ReminderAlarmReceiver extends BroadcastReceiver
|
|||||||
{
|
{
|
||||||
switch (intent.getAction())
|
switch (intent.getAction())
|
||||||
{
|
{
|
||||||
case ACTION_REMIND:
|
case ACTION_SHOW_REMINDER:
|
||||||
createNotification(context, intent);
|
createNotification(context, intent);
|
||||||
createReminderAlarms(context);
|
createReminderAlarms(context);
|
||||||
break;
|
break;
|
||||||
@@ -148,21 +147,9 @@ public class ReminderAlarmReceiver extends BroadcastReceiver
|
|||||||
PendingIntent contentPendingIntent =
|
PendingIntent contentPendingIntent =
|
||||||
PendingIntent.getActivity(context, 0, contentIntent, 0);
|
PendingIntent.getActivity(context, 0, contentIntent, 0);
|
||||||
|
|
||||||
Intent deleteIntent = new Intent(context, ReminderAlarmReceiver.class);
|
PendingIntent dismissPendingIntent = buildDismissIntent(context);
|
||||||
deleteIntent.setAction(ACTION_DISMISS);
|
PendingIntent checkIntentPending = buildCheckIntent(context, habit, timestamp);
|
||||||
PendingIntent deletePendingIntent = PendingIntent.getBroadcast(context, 0, deleteIntent, 0);
|
PendingIntent snoozeIntentPending = buildSnoozeIntent(context, habit);
|
||||||
|
|
||||||
Intent checkIntent = new Intent(context, ReminderAlarmReceiver.class);
|
|
||||||
checkIntent.setData(data);
|
|
||||||
checkIntent.setAction(ACTION_CHECK);
|
|
||||||
checkIntent.putExtra("timestamp", timestamp);
|
|
||||||
PendingIntent checkIntentPending =
|
|
||||||
PendingIntent.getBroadcast(context, 0, checkIntent, PendingIntent.FLAG_ONE_SHOT);
|
|
||||||
|
|
||||||
Intent snoozeIntent = new Intent(context, ReminderAlarmReceiver.class);
|
|
||||||
snoozeIntent.setData(data);
|
|
||||||
snoozeIntent.setAction(ACTION_SNOOZE);
|
|
||||||
PendingIntent snoozeIntentPending = PendingIntent.getBroadcast(context, 0, snoozeIntent, 0);
|
|
||||||
|
|
||||||
Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
|
Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
|
||||||
|
|
||||||
@@ -175,7 +162,7 @@ public class ReminderAlarmReceiver extends BroadcastReceiver
|
|||||||
.setContentTitle(habit.name)
|
.setContentTitle(habit.name)
|
||||||
.setContentText(habit.description)
|
.setContentText(habit.description)
|
||||||
.setContentIntent(contentPendingIntent)
|
.setContentIntent(contentPendingIntent)
|
||||||
.setDeleteIntent(deletePendingIntent)
|
.setDeleteIntent(dismissPendingIntent)
|
||||||
.addAction(R.drawable.ic_action_check,
|
.addAction(R.drawable.ic_action_check,
|
||||||
context.getString(R.string.check), checkIntentPending)
|
context.getString(R.string.check), checkIntentPending)
|
||||||
.addAction(R.drawable.ic_action_snooze,
|
.addAction(R.drawable.ic_action_snooze,
|
||||||
@@ -195,6 +182,32 @@ public class ReminderAlarmReceiver extends BroadcastReceiver
|
|||||||
notificationManager.notify(notificationId, notification);
|
notificationManager.notify(notificationId, notification);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static PendingIntent buildSnoozeIntent(Context context, Habit habit)
|
||||||
|
{
|
||||||
|
Uri data = habit.getUri();
|
||||||
|
Intent snoozeIntent = new Intent(context, HabitBroadcastReceiver.class);
|
||||||
|
snoozeIntent.setData(data);
|
||||||
|
snoozeIntent.setAction(ACTION_SNOOZE);
|
||||||
|
return PendingIntent.getBroadcast(context, 0, snoozeIntent, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static PendingIntent buildCheckIntent(Context context, Habit habit, Long timestamp)
|
||||||
|
{
|
||||||
|
Uri data = habit.getUri();
|
||||||
|
Intent checkIntent = new Intent(context, HabitBroadcastReceiver.class);
|
||||||
|
checkIntent.setData(data);
|
||||||
|
checkIntent.setAction(ACTION_CHECK);
|
||||||
|
if(timestamp != null) checkIntent.putExtra("timestamp", timestamp);
|
||||||
|
return PendingIntent.getBroadcast(context, 0, checkIntent, PendingIntent.FLAG_ONE_SHOT);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static PendingIntent buildDismissIntent(Context context)
|
||||||
|
{
|
||||||
|
Intent deleteIntent = new Intent(context, HabitBroadcastReceiver.class);
|
||||||
|
deleteIntent.setAction(ACTION_DISMISS);
|
||||||
|
return PendingIntent.getBroadcast(context, 0, deleteIntent, 0);
|
||||||
|
}
|
||||||
|
|
||||||
private boolean checkWeekday(Intent intent, Habit habit)
|
private boolean checkWeekday(Intent intent, Habit habit)
|
||||||
{
|
{
|
||||||
Long timestamp = intent.getLongExtra("timestamp", DateHelper.getStartOfToday());
|
Long timestamp = intent.getLongExtra("timestamp", DateHelper.getStartOfToday());
|
||||||
@@ -64,6 +64,9 @@ public class SmallWidgetProvider extends AppWidgetProvider
|
|||||||
;
|
;
|
||||||
remoteViews.setTextViewText(R.id.tvName, habit.name);
|
remoteViews.setTextViewText(R.id.tvName, habit.name);
|
||||||
remoteViews.setImageViewBitmap(R.id.imageView, drawingCache);
|
remoteViews.setImageViewBitmap(R.id.imageView, drawingCache);
|
||||||
|
remoteViews.setOnClickPendingIntent(R.id.imageView,
|
||||||
|
HabitBroadcastReceiver.buildCheckIntent(context, habit, null));
|
||||||
manager.updateAppWidget(widgetId, remoteViews);
|
manager.updateAppWidget(widgetId, remoteViews);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ import android.os.Build;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import org.isoron.helpers.DateHelper;
|
import org.isoron.helpers.DateHelper;
|
||||||
import org.isoron.uhabits.ReminderAlarmReceiver;
|
import org.isoron.uhabits.HabitBroadcastReceiver;
|
||||||
import org.isoron.uhabits.models.Habit;
|
import org.isoron.uhabits.models.Habit;
|
||||||
|
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
@@ -58,10 +58,10 @@ public class ReminderHelper
|
|||||||
|
|
||||||
long timestamp = DateHelper.getStartOfDay(DateHelper.toLocalTime(reminderTime));
|
long timestamp = DateHelper.getStartOfDay(DateHelper.toLocalTime(reminderTime));
|
||||||
|
|
||||||
Uri uri = Uri.parse(String.format("content://org.isoron.uhabits/habit/%d", habit.getId()));
|
Uri uri = habit.getUri();
|
||||||
|
|
||||||
Intent alarmIntent = new Intent(context, ReminderAlarmReceiver.class);
|
Intent alarmIntent = new Intent(context, HabitBroadcastReceiver.class);
|
||||||
alarmIntent.setAction(ReminderAlarmReceiver.ACTION_REMIND);
|
alarmIntent.setAction(HabitBroadcastReceiver.ACTION_SHOW_REMINDER);
|
||||||
alarmIntent.setData(uri);
|
alarmIntent.setData(uri);
|
||||||
alarmIntent.putExtra("timestamp", timestamp);
|
alarmIntent.putExtra("timestamp", timestamp);
|
||||||
alarmIntent.putExtra("reminderTime", reminderTime);
|
alarmIntent.putExtra("reminderTime", reminderTime);
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ package org.isoron.uhabits.models;
|
|||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.database.sqlite.SQLiteDatabase;
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
|
import android.net.Uri;
|
||||||
|
|
||||||
import com.activeandroid.ActiveAndroid;
|
import com.activeandroid.ActiveAndroid;
|
||||||
import com.activeandroid.Cache;
|
import com.activeandroid.Cache;
|
||||||
@@ -442,6 +443,11 @@ public class Habit extends Model
|
|||||||
deleteStreaksNewerThan(timestamp);
|
deleteStreaksNewerThan(timestamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Uri getUri()
|
||||||
|
{
|
||||||
|
return Uri.parse(String.format("content://org.isoron.uhabits/habit/%d", getId()));
|
||||||
|
}
|
||||||
|
|
||||||
public void archive()
|
public void archive()
|
||||||
{
|
{
|
||||||
archived = 1;
|
archived = 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user