Toggle checkmarks from widget

pull/30/head
Alinson S. Xavier 10 years ago
parent d748f5d6de
commit 7f1553a4a1

@ -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;

Loading…
Cancel
Save