Make reminder negative button set explicit fail state

pull/610/head
KristianTashkov 5 years ago
parent 2de0c0be47
commit 545bb8209b

@ -33,12 +33,13 @@ class IntentParser
fun parseCheckmarkIntent(intent: Intent): CheckmarkIntentData {
val uri = intent.data ?: throw IllegalArgumentException("uri is null")
return CheckmarkIntentData(parseHabit(uri), parseTimestamp(intent))
return CheckmarkIntentData(parseHabit(uri), parseTimestamp(intent), parseValue(intent))
}
fun copyIntentData(source: Intent, destination: Intent) {
destination.data = source.data;
destination.putExtra("timestamp", source.getLongExtra("timestamp", DateUtils.getToday().unixTime))
destination.putExtra("value", source.getIntExtra("value", 0))
}
private fun parseHabit(uri: Uri): Habit {
@ -58,5 +59,9 @@ class IntentParser
return Timestamp(timestamp)
}
class CheckmarkIntentData(var habit: Habit, var timestamp: Timestamp)
private fun parseValue(intent: Intent): Int {
return intent.getIntExtra("value", 0)
}
class CheckmarkIntentData(var habit: Habit, var timestamp: Timestamp, var value: Int)
}

@ -118,4 +118,15 @@ class PendingIntentFactory
if (timestamp != null) putExtra("timestamp", timestamp)
},
FLAG_UPDATE_CURRENT)
fun setYesNoValue(habit: Habit, timestamp: Timestamp?, value: Int): PendingIntent =
PendingIntent.getBroadcast(
context, value,
Intent(context, WidgetReceiver::class.java).apply {
data = Uri.parse(habit.uriString)
action = WidgetReceiver.ACTION_SET_YESNO_VALUE
putExtra("value", value)
if (timestamp != null) putExtra("timestamp", timestamp.unixTime)
},
FLAG_UPDATE_CURRENT)
}

@ -84,16 +84,32 @@ class AndroidNotificationTray
reminderTime: Long,
timestamp: Timestamp,
disableSound: Boolean = false): Notification {
val addRepetitionAction = if (!preferences.isAdvancedCheckmarksEnabled) {
Action(
R.drawable.ic_action_check,
context.getString(R.string.yes),
pendingIntents.addCheckmark(habit, timestamp))
}
else {
Action(
R.drawable.ic_action_check,
context.getString(R.string.yes),
pendingIntents.setYesNoValue(habit, timestamp, Checkmark.CHECKED_EXPLICITLY))
}
val addRepetitionAction = Action(
R.drawable.ic_action_check,
context.getString(R.string.yes),
pendingIntents.addCheckmark(habit, timestamp))
val removeRepetitionAction = Action(
R.drawable.ic_action_cancel,
context.getString(R.string.no),
pendingIntents.removeRepetition(habit))
val removeRepetitionAction = if (!preferences.isAdvancedCheckmarksEnabled) {
Action(
R.drawable.ic_action_cancel,
context.getString(R.string.no),
pendingIntents.removeRepetition(habit))
}
else {
Action(
R.drawable.ic_action_cancel,
context.getString(R.string.no),
pendingIntents.setYesNoValue(
habit, timestamp, Checkmark.FAILED_EXPLICITLY_NECESSARY))
}
val wearableBg = decodeResource(context.resources, R.drawable.stripe)

@ -52,6 +52,9 @@ public class WidgetReceiver extends BroadcastReceiver
public static final String ACTION_SET_NUMERICAL_VALUE =
"org.isoron.uhabits.ACTION_SET_NUMERICAL_VALUE";
public static final String ACTION_SET_YESNO_VALUE =
"org.isoron.uhabits.ACTION_SET_YESNO_VALUE";
private static final String TAG = "WidgetReceiver";
@Override
@ -112,6 +115,15 @@ public class WidgetReceiver extends BroadcastReceiver
parser.copyIntentData(intent,numberSelectorIntent);
context.startActivity(numberSelectorIntent);
break;
case ACTION_SET_YESNO_VALUE:
Log.d(TAG, String.format(
"onSetYesNoValue habit=%d timestamp=%d value=%d",
data.getHabit().getId(),
data.getTimestamp().getUnixTime(),
data.getValue()));
controller.setYesNoValue(
data.getHabit(), data.getTimestamp(), data.getValue());
break;
}
}
catch (RuntimeException e)

@ -80,4 +80,11 @@ public class WidgetBehavior
habit.getId());
}
public void setYesNoValue(@NonNull Habit habit, Timestamp timestamp, int newValue) {
notificationTray.cancel(habit);
commandRunner.execute(
new CreateRepetitionCommand(habitList, habit, timestamp, newValue),
habit.getId());
}
}

Loading…
Cancel
Save