diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.kt index cb2f84532..7741698b2 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.kt +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.kt @@ -36,7 +36,7 @@ class PendingIntentFactory private val intentFactory: IntentFactory) { fun addCheckmark(habit: Habit, timestamp: Timestamp?): PendingIntent = - PendingIntent.getBroadcast( + getBroadcast( context, 1, Intent(context, WidgetReceiver::class.java).apply { data = Uri.parse(habit.uriString) @@ -46,7 +46,7 @@ class PendingIntentFactory FLAG_UPDATE_CURRENT) fun dismissNotification(habit: Habit): PendingIntent = - PendingIntent.getBroadcast( + getBroadcast( context, 0, Intent(context, ReminderReceiver::class.java).apply { action = WidgetReceiver.ACTION_DISMISS_REMINDER @@ -55,7 +55,7 @@ class PendingIntentFactory FLAG_UPDATE_CURRENT) fun removeRepetition(habit: Habit): PendingIntent = - PendingIntent.getBroadcast( + getBroadcast( context, 3, Intent(context, WidgetReceiver::class.java).apply { action = WidgetReceiver.ACTION_REMOVE_REPETITION @@ -71,10 +71,8 @@ class PendingIntentFactory context, habit)) .getPendingIntent(0, FLAG_UPDATE_CURRENT)!! - fun showReminder(habit: Habit, - reminderTime: Long?, - timestamp: Long): PendingIntent = - PendingIntent.getBroadcast( + fun showReminder(habit: Habit, reminderTime: Long?, timestamp: Long): PendingIntent = + getBroadcast( context, (habit.getId()!! % Integer.MAX_VALUE).toInt() + 1, Intent(context, ReminderReceiver::class.java).apply { @@ -86,7 +84,7 @@ class PendingIntentFactory FLAG_UPDATE_CURRENT) fun snoozeNotification(habit: Habit): PendingIntent = - PendingIntent.getBroadcast( + getBroadcast( context, 0, Intent(context, ReminderReceiver::class.java).apply { data = Uri.parse(habit.uriString) @@ -95,7 +93,7 @@ class PendingIntentFactory FLAG_UPDATE_CURRENT) fun toggleCheckmark(habit: Habit, timestamp: Long?): PendingIntent = - PendingIntent.getBroadcast( + getBroadcast( context, 2, Intent(context, WidgetReceiver::class.java).apply { data = Uri.parse(habit.uriString) diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt index 1f6ab6ad0..f0a3e8d2b 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt @@ -69,11 +69,11 @@ class AndroidNotificationTray } catch (e: RuntimeException) { // Some Xiaomi phones produce a RuntimeException if custom notification sounds are used. Log.i("AndroidNotificationTray", - "Failed to show notification. Retrying without sound.") + "Failed to show notification. Retrying without sound.") val n = buildNotification(habit, - reminderTime, - timestamp, - disableSound = true) + reminderTime, + timestamp, + disableSound = true) notificationManager.notify(notificationId, n) } @@ -95,30 +95,41 @@ class AndroidNotificationTray context.getString(R.string.no), pendingIntents.removeRepetition(habit)) + val enterAction = Action(R.drawable.ic_action_check, + context.getString(R.string.enter), + pendingIntents.setNumericalValue(context, habit, 0, null)) + val wearableBg = decodeResource(context.resources, R.drawable.stripe) // Even though the set of actions is the same on the phone and // on the watch, Pebble requires us to add them to the // WearableExtender. - val wearableExtender = WearableExtender() - .setBackground(wearableBg) - .addAction(addRepetitionAction) - .addAction(removeRepetitionAction) + val wearableExtender = WearableExtender().setBackground(wearableBg) val defaultText = context.getString(R.string.default_reminder_question) val builder = Builder(context, REMINDERS_CHANNEL_ID) .setSmallIcon(R.drawable.ic_notification) .setContentTitle(habit.name) - .setContentText(if(habit.question.isBlank()) defaultText else habit.question) + .setContentText(if (habit.question.isBlank()) defaultText else habit.question) .setContentIntent(pendingIntents.showHabit(habit)) .setDeleteIntent(pendingIntents.dismissNotification(habit)) - .addAction(addRepetitionAction) - .addAction(removeRepetitionAction) .setSound(null) .setWhen(reminderTime) .setShowWhen(true) .setOngoing(preferences.shouldMakeNotificationsSticky()) + if (habit.isNumerical) { + wearableExtender.addAction(enterAction) + builder.addAction(enterAction) + } else { + wearableExtender + .addAction(addRepetitionAction) + .addAction(removeRepetitionAction) + builder + .addAction(addRepetitionAction) + .addAction(removeRepetitionAction) + } + if (!disableSound) builder.setSound(ringtoneManager.getURI()) @@ -126,8 +137,8 @@ class AndroidNotificationTray builder.setLights(Color.RED, 1000, 1000) val snoozeAction = Action(R.drawable.ic_action_snooze, - context.getString(R.string.snooze), - pendingIntents.snoozeNotification(habit)) + context.getString(R.string.snooze), + pendingIntents.snoozeNotification(habit)) wearableExtender.addAction(snoozeAction) builder.addAction(snoozeAction) @@ -142,8 +153,8 @@ class AndroidNotificationTray as NotificationManager if (SDK_INT >= Build.VERSION_CODES.O) { val channel = NotificationChannel(REMINDERS_CHANNEL_ID, - context.resources.getString(R.string.reminder), - NotificationManager.IMPORTANCE_DEFAULT) + context.resources.getString(R.string.reminder), + NotificationManager.IMPORTANCE_DEFAULT) notificationManager.createNotificationChannel(channel) } } diff --git a/android/uhabits-android/src/main/res/values/strings.xml b/android/uhabits-android/src/main/res/values/strings.xml index 5cd4e7300..d6151882c 100644 --- a/android/uhabits-android/src/main/res/values/strings.xml +++ b/android/uhabits-android/src/main/res/values/strings.xml @@ -194,4 +194,5 @@ Every month Cannot be blank Today + Enter \ No newline at end of file