1
0
Fork 0
mirror of https://github.com/MatomoCamp/matomocamp-companion-android.git synced 2024-09-19 16:13:46 +02:00

Set alarms at the exact time instead of having them batched and delayed on Kitkat and above.

This commit is contained in:
Christophe Beyls 2015-12-25 16:21:08 +01:00
parent 29d923a1cd
commit 54f6a6945e

View file

@ -10,6 +10,7 @@ import android.content.SharedPreferences;
import android.database.Cursor;
import android.graphics.Typeface;
import android.net.Uri;
import android.os.Build;
import android.preference.PreferenceManager;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.NotificationManagerCompat;
@ -17,6 +18,7 @@ import android.support.v4.app.TaskStackBuilder;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextUtils;
import android.text.format.DateUtils;
import android.text.style.StyleSpan;
import be.digitalia.fosdem.R;
@ -57,8 +59,9 @@ public class AlarmIntentService extends IntentService {
}
private PendingIntent getAlarmPendingIntent(long eventId) {
Intent intent = new Intent(this, AlarmReceiver.class).setAction(AlarmReceiver.ACTION_NOTIFY_EVENT).setData(
Uri.parse(String.valueOf(eventId)));
Intent intent = new Intent(this, AlarmReceiver.class)
.setAction(AlarmReceiver.ACTION_NOTIFY_EVENT)
.setData(Uri.parse(String.valueOf(eventId)));
return PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
}
@ -81,7 +84,7 @@ public class AlarmIntentService extends IntentService {
// Cancel pending alarms that where scheduled between now and delay, if any
alarmManager.cancel(pi);
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP, notificationTime, pi);
setExactAlarm(alarmManager, AlarmManager.RTC_WAKEUP, notificationTime, pi);
}
}
} finally {
@ -117,9 +120,9 @@ public class AlarmIntentService extends IntentService {
long startTime = intent.getLongExtra(DatabaseManager.EXTRA_EVENT_START_TIME, -1L);
// Only schedule future events. If they start before the delay, the alarm will go off immediately
if ((startTime == -1L) || (startTime < System.currentTimeMillis())) {
return;
break;
}
alarmManager.set(AlarmManager.RTC_WAKEUP, startTime - delay, getAlarmPendingIntent(eventId));
setExactAlarm(alarmManager, AlarmManager.RTC_WAKEUP, startTime - delay, getAlarmPendingIntent(eventId));
break;
}
@ -229,10 +232,18 @@ public class AlarmIntentService extends IntentService {
}
}
private static void setExactAlarm(AlarmManager manager, int type, long triggerAtMillis, PendingIntent operation) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
manager.setExact(type, triggerAtMillis, operation);
} else {
manager.set(type, triggerAtMillis, operation);
}
}
private long getDelay() {
String delayString = PreferenceManager.getDefaultSharedPreferences(this).getString(
SettingsFragment.KEY_PREF_NOTIFICATIONS_DELAY, "0");
// Convert from minutes to milliseconds
return Long.parseLong(delayString) * 1000L * 60L;
return Long.parseLong(delayString) * DateUtils.MINUTE_IN_MILLIS;
}
}