add: start and stop rtc repeating; fix: task list view refresh not working
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user