add: start and stop rtc repeating; fix: task list view refresh not working

This commit is contained in:
hyb1996
2017-11-28 23:07:04 +08:00
parent 0d8f96eff7
commit ec8f6a3092
5 changed files with 54 additions and 15 deletions

View File

@@ -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 {

View File

@@ -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();
}
}

View File

@@ -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);
}
}

View File

@@ -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;

View File

@@ -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
}
}
}
}