From f29cc65dc0ecdaeac7b6075a7660a97fb3c3c949 Mon Sep 17 00:00:00 2001 From: Javinator9889 Date: Tue, 30 Jun 2020 14:21:36 +0200 Subject: [PATCH] Implemented logic of ActivityNotifications --- .../gms/activity/ActivityReceiver.kt | 32 ++++++++++++++++++- .../utils/calendar/Calendar.kt | 12 +++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/gms/activity/ActivityReceiver.kt b/app/src/main/java/com/javinator9889/handwashingreminder/gms/activity/ActivityReceiver.kt index 745a03e..8c449ec 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/gms/activity/ActivityReceiver.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/gms/activity/ActivityReceiver.kt @@ -23,6 +23,7 @@ import android.content.Context import android.content.Intent import androidx.annotation.StringRes import androidx.emoji.text.EmojiCompat +import androidx.preference.PreferenceManager import com.google.android.gms.location.ActivityTransition import com.google.android.gms.location.ActivityTransitionResult import com.google.android.gms.location.DetectedActivity @@ -30,11 +31,16 @@ import com.javinator9889.handwashingreminder.R import com.javinator9889.handwashingreminder.emoji.EmojiLoader import com.javinator9889.handwashingreminder.notifications.NotificationsHandler import com.javinator9889.handwashingreminder.utils.ACTIVITY_CHANNEL_ID +import com.javinator9889.handwashingreminder.utils.Preferences +import com.javinator9889.handwashingreminder.utils.calendar.CalendarUtils import com.javinator9889.handwashingreminder.utils.goAsync import kotlinx.coroutines.Deferred import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import timber.log.Timber +import java.io.* +import java.util.* +import java.util.concurrent.TimeUnit class ActivityReceiver : BroadcastReceiver() { /** @@ -82,6 +88,24 @@ class ActivityReceiver : BroadcastReceiver() { detectedActivity: Int, context: Context ) { + val preferences = PreferenceManager.getDefaultSharedPreferences(context) + val timeInBetweenNotifications = + preferences.getInt(Preferences.ACTIVITY_MINIMUM_TIME, 15) + val timeFile = File(context.cacheDir, "activity.time") + var latestNotificationTime = 0L + withContext(Dispatchers.IO) { + if (timeFile.exists()) { + DataInputStream(FileInputStream(timeFile)).use { + latestNotificationTime = it.readLong() + } + } + } + val timeDifference = CalendarUtils.timeBetweenIn( + TimeUnit.MINUTES, + latestNotificationTime + ) + if (timeDifference <= timeInBetweenNotifications) + return val notificationContent = when (detectedActivity) { DetectedActivity.WALKING -> NotificationContent( @@ -113,7 +137,8 @@ class ActivityReceiver : BroadcastReceiver() { val emojiCompat = emojiLoader.await() title = emojiCompat.process(title) content = emojiCompat.process(content) - } catch (_: IllegalStateException) { } + } catch (_: IllegalStateException) { + } withContext(Dispatchers.Main) { notificationsHandler.createNotification( iconDrawable = R.drawable.ic_stat_handwashing, @@ -123,6 +148,11 @@ class ActivityReceiver : BroadcastReceiver() { longContent = content ) } + withContext(Dispatchers.IO) { + DataOutputStream(FileOutputStream(timeFile)).use { + it.writeLong(Calendar.getInstance().timeInMillis) + } + } } } diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/utils/calendar/Calendar.kt b/app/src/main/java/com/javinator9889/handwashingreminder/utils/calendar/Calendar.kt index 28118a4..a58c7c4 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/utils/calendar/Calendar.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/utils/calendar/Calendar.kt @@ -19,6 +19,7 @@ package com.javinator9889.handwashingreminder.utils.calendar import java.util.* +import java.util.concurrent.TimeUnit object CalendarUtils { val today: Calendar @@ -41,4 +42,15 @@ object CalendarUtils { today.add(Calendar.MONTH, -1) today } + + fun timeBetweenIn( + unit: TimeUnit, + to: Long, + from: Long = Calendar.getInstance().timeInMillis + ): Long = unit.convert(timeBetween(from, to), TimeUnit.MILLISECONDS) + + fun timeBetween( + to: Long, + from: Long = Calendar.getInstance().timeInMillis + ): Long = from - to } \ No newline at end of file