From 93b781806c93ecc2660093aa8d03ea3fc8524595 Mon Sep 17 00:00:00 2001 From: sazid Date: Tue, 11 Sep 2018 13:40:01 +0600 Subject: [PATCH] New process for scheduling alarms --- .idea/caches/build_file_checksums.ser | Bin 534 -> 534 bytes app/src/main/AndroidManifest.xml | 42 ++++++++----- .../android/aiub/NoticeAlarmReceiver.java | 57 ++++++++++++++++++ .../aiub/NoticeCheckJobIntentService.java | 40 ++---------- 4 files changed, 91 insertions(+), 48 deletions(-) create mode 100644 app/src/main/java/com/mohammedsazid/android/aiub/NoticeAlarmReceiver.java diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 17a504d3eaa3a41222dc29729e67cc436d98bf65..689c467362ea4f6993b1fd9a080ebb694ccf239b 100644 GIT binary patch delta 14 WcmbQnGL2=zOy-HV8aK|VVgvvy=mr%4 delta 14 WcmbQnGL2=zOlI!&O&jM_F#-T5K?P+1 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6d8e7df..66b30fd 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -55,25 +55,39 @@ android:name="io.fabric.ApiKey" android:value="321384046aa77d30c21a4829f883d9aec4b23d1d" /> - - - - - - + + + + + + - - - - - + + + + + + + + + + + + - + \ No newline at end of file diff --git a/app/src/main/java/com/mohammedsazid/android/aiub/NoticeAlarmReceiver.java b/app/src/main/java/com/mohammedsazid/android/aiub/NoticeAlarmReceiver.java new file mode 100644 index 0000000..5e6c210 --- /dev/null +++ b/app/src/main/java/com/mohammedsazid/android/aiub/NoticeAlarmReceiver.java @@ -0,0 +1,57 @@ +package com.mohammedsazid.android.aiub; + +import android.app.AlarmManager; +import android.app.PendingIntent; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.os.Build; +import android.os.SystemClock; +import android.util.Log; + +import java.util.concurrent.TimeUnit; + +import static android.content.Context.ALARM_SERVICE; + +public class NoticeAlarmReceiver extends BroadcastReceiver { + + // reschedule every one hour + private static final long REPEAT_INTERVAL = 1; + public static final String CHECK_NOTICE_ACTION = "com.mohammedsazid.intent.action.CHECK_NOTICE"; + + private static PendingIntent getPendingIntent(Context context) { + Intent intent = new Intent(); + intent.setClass(context, NoticeAlarmReceiver.class); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.setAction(CHECK_NOTICE_ACTION); + + return PendingIntent.getBroadcast(context, 0, intent, 0); + } + + public static void scheduleNewCheck(Context context) { + long deferTime = TimeUnit.HOURS.toMillis(REPEAT_INTERVAL); + long when = SystemClock.elapsedRealtime() + deferTime; + AlarmManager alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE); + + PendingIntent pi = getPendingIntent(context); + + if (alarmManager != null) { + // cancel any previous alarm + alarmManager.cancel(pi); + + int SDK_INT = Build.VERSION.SDK_INT; + if (SDK_INT < Build.VERSION_CODES.KITKAT) + alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, when, pi); + else if (SDK_INT < Build.VERSION_CODES.M) + alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, when, pi); + else + alarmManager.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, when, pi); + } + } + + @Override + public void onReceive(Context context, Intent intent) { + NoticeCheckJobIntentService.startActionCheckNotice(context); + } +} diff --git a/app/src/main/java/com/mohammedsazid/android/aiub/NoticeCheckJobIntentService.java b/app/src/main/java/com/mohammedsazid/android/aiub/NoticeCheckJobIntentService.java index 261e722..52ba5ab 100755 --- a/app/src/main/java/com/mohammedsazid/android/aiub/NoticeCheckJobIntentService.java +++ b/app/src/main/java/com/mohammedsazid/android/aiub/NoticeCheckJobIntentService.java @@ -30,14 +30,13 @@ import java.util.concurrent.TimeUnit; public class NoticeCheckJobIntentService extends JobIntentService { - private static final long REPEAT_INTERVAL = TimeUnit.HOURS.toMinutes(1); private static final String PREF_NOTICES_KEY = "PREF_NOTICES_KEY"; public static void startActionCheckNotice(Context context) { Intent intent = new Intent(context, NoticeCheckJobIntentService.class); enqueueWork(context, NoticeCheckJobIntentService.class, 1, intent); - ContextCompat.startForegroundService(context, intent); +// ContextCompat.startForegroundService(context, intent); } @NonNull @@ -82,7 +81,9 @@ public void onCreate() { @Override protected void onHandleWork(@NonNull Intent intent) { + Log.d("SERVICE", "Starting work"); handleActionCheckNotice(); + Log.d("SERVICE", "Work done"); } private void parseNoticeHTML(String url) { @@ -141,40 +142,9 @@ private void parseNoticeHTML(String url) { } } - private void scheduleNewCheck(long minutes) { - long deferTime = TimeUnit.MINUTES.toMillis(minutes); - AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); - - Intent intent = new Intent(); - intent.setClass(this, NoticeCheckJobIntentService.class); - intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - - PendingIntent pi = PendingIntent.getService(this, 0, intent, 0); - - // cancel any previous alarm - if (alarmManager != null) { - alarmManager.cancel(pi); - } - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - if (alarmManager != null) { - alarmManager.setExact(AlarmManager.ELAPSED_REALTIME, - SystemClock.elapsedRealtime() + deferTime, - pi); - } - } else { - if (alarmManager != null) { - alarmManager.set(AlarmManager.ELAPSED_REALTIME, - SystemClock.elapsedRealtime() + deferTime, - pi); - } - } - } - private void handleActionCheckNotice() { parseNoticeHTML("http://www.aiub.edu/category/notices"); - scheduleNewCheck(REPEAT_INTERVAL); + NoticeAlarmReceiver.scheduleNewCheck(this); Log.d("SERVICE", "Check complete"); try { @@ -186,5 +156,7 @@ private void handleActionCheckNotice() { e.printStackTrace(); Crashlytics.logException(e); } + + stopSelf(); } }