diff --git a/app/build.gradle b/app/build.gradle index 72d82d38..b3f150a5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,7 +9,7 @@ android { minSdkVersion 17 targetSdkVersion 23 versionCode 224 - versionName "3.0.0 Alpha24" + versionName "3.0.0 Alpha2" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" multiDexEnabled true ndk { diff --git a/app/src/main/java/com/stardust/scriptdroid/timing/TimedTaskManager.java b/app/src/main/java/com/stardust/scriptdroid/timing/TimedTaskManager.java index dfc660db..e7309433 100644 --- a/app/src/main/java/com/stardust/scriptdroid/timing/TimedTaskManager.java +++ b/app/src/main/java/com/stardust/scriptdroid/timing/TimedTaskManager.java @@ -49,6 +49,11 @@ public class TimedTaskManager { @Override public void onModelChanged(@NonNull TimedTask model, @NonNull BaseModel.Action action) { mTimedTaskChanges.onNext(new ModelChange<>(model, action)); + if (action == BaseModel.Action.DELETE && countTasks() == 0) { + TimedTaskScheduler.stopRtcRepeating(mContext); + } else if (action == BaseModel.Action.INSERT) { + TimedTaskScheduler.startRtcRepeatingIfNeeded(mContext); + } } @Override @@ -132,4 +137,8 @@ public class TimedTaskManager { TimedTaskScheduler.cancel(mContext, task); TimedTaskScheduler.scheduleTaskIfNeeded(mContext, task); } + + public long countTasks() { + return SQLite.select().from(TimedTask.class).count(); + } } diff --git a/app/src/main/java/com/stardust/scriptdroid/timing/TimedTaskScheduler.java b/app/src/main/java/com/stardust/scriptdroid/timing/TimedTaskScheduler.java index b607e01c..3454bc46 100644 --- a/app/src/main/java/com/stardust/scriptdroid/timing/TimedTaskScheduler.java +++ b/app/src/main/java/com/stardust/scriptdroid/timing/TimedTaskScheduler.java @@ -33,29 +33,26 @@ public class TimedTaskScheduler extends BroadcastReceiver { } public static void checkTasks(Context context) { - AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); TimedTaskManager.getInstance().getAllTasks() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(timedTask -> scheduleTaskIfNeeded(context, alarmManager, timedTask)); + .subscribe(timedTask -> scheduleTaskIfNeeded(context, timedTask)); } - public static void scheduleTaskIfNeeded(Context context, AlarmManager alarmManager, TimedTask timedTask) { + public static void scheduleTaskIfNeeded(Context context, TimedTask timedTask) { long millis = timedTask.getNextTime(); if (timedTask.isScheduled() || millis - System.currentTimeMillis() > ONE_HOUR) { return; } - scheduleTask(context, alarmManager, timedTask, millis); + scheduleTask(context, timedTask, millis); TimedTaskManager.getInstance() .notifyTaskScheduled(timedTask); } - public static void scheduleTaskIfNeeded(Context context, TimedTask timedTask) { - scheduleTaskIfNeeded(context, (AlarmManager) context.getSystemService(Context.ALARM_SERVICE), timedTask); - } - private static void scheduleTask(Context context, AlarmManager alarmManager, TimedTask timedTask, long millis) { + private static void scheduleTask(Context context, TimedTask timedTask, long millis) { + AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); if (millis <= System.currentTimeMillis()) { context.sendBroadcast(timedTask.createIntent()); return; @@ -70,14 +67,34 @@ public class TimedTaskScheduler extends BroadcastReceiver { } public static void setupRepeating(Context context) { + if (TimedTaskManager.getInstance().countTasks() > 0) { + startRtcRepeatingIfNeeded(context); + } + } + + + public static void startRtcRepeatingIfNeeded(Context context) { + Log.v(LOG_TAG, "startRtcRepeating"); AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 5000, - INTERVAL, PendingIntent.getBroadcast(context, REQUEST_CODE, - new Intent(TimedTaskScheduler.ACTION_CHECK_TASK), PendingIntent.FLAG_UPDATE_CURRENT)); + INTERVAL, createTaskCheckPendingIntent(context)); } + public static void cancel(Context context, TimedTask timedTask) { AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); alarmManager.cancel(timedTask.createPendingIntent(context)); } + + public static void stopRtcRepeating(Context context) { + Log.v(LOG_TAG, "stopRtcRepeating"); + AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); + alarmManager.cancel(createTaskCheckPendingIntent(context)); + + } + + private static PendingIntent createTaskCheckPendingIntent(Context context) { + return PendingIntent.getBroadcast(context, REQUEST_CODE, + new Intent(TimedTaskScheduler.ACTION_CHECK_TASK), PendingIntent.FLAG_UPDATE_CURRENT); + } } diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/task/Task.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/task/Task.java index c1b8ecfd..8526962f 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/task/Task.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/task/Task.java @@ -1,5 +1,8 @@ package com.stardust.scriptdroid.ui.main.task; +import android.os.Parcel; +import android.os.Parcelable; + import com.stardust.autojs.engine.JavaScriptEngine; import com.stardust.autojs.engine.ScriptEngine; import com.stardust.autojs.engine.ScriptEngineFactory; @@ -19,7 +22,7 @@ import org.joda.time.format.DateTimeFormat; * Created by Stardust on 2017/11/28. */ -public abstract class Task { +public abstract class Task implements Parcelable { public abstract String getName(); @@ -29,6 +32,16 @@ public abstract class Task { public abstract String getEngineName(); + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + + } + public static class PendingTask extends Task { private TimedTask mTimedTask; diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/task/TaskListRecyclerView.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/task/TaskListRecyclerView.java index 934a538d..3a63d4fd 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/task/TaskListRecyclerView.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/task/TaskListRecyclerView.java @@ -108,8 +108,8 @@ public class TaskListRecyclerView extends ThemeColorRecyclerView implements Scri for (TaskGroup group : mTaskGroups) { group.refresh(); } - mAdapter.notifyParentChanged(0); - mAdapter.notifyParentChanged(1); + mAdapter = new Adapter(mTaskGroups); + setAdapter(mAdapter); //notifyDataSetChanged not working... } @@ -286,4 +286,4 @@ public class TaskListRecyclerView extends ThemeColorRecyclerView implements Scri } } -} +} \ No newline at end of file