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 minSdkVersion 17
targetSdkVersion 23 targetSdkVersion 23
versionCode 224 versionCode 224
versionName "3.0.0 Alpha24" versionName "3.0.0 Alpha2"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true multiDexEnabled true
ndk { ndk {

View File

@@ -49,6 +49,11 @@ public class TimedTaskManager {
@Override @Override
public void onModelChanged(@NonNull TimedTask model, @NonNull BaseModel.Action action) { public void onModelChanged(@NonNull TimedTask model, @NonNull BaseModel.Action action) {
mTimedTaskChanges.onNext(new ModelChange<>(model, 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 @Override
@@ -132,4 +137,8 @@ public class TimedTaskManager {
TimedTaskScheduler.cancel(mContext, task); TimedTaskScheduler.cancel(mContext, task);
TimedTaskScheduler.scheduleTaskIfNeeded(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) { public static void checkTasks(Context context) {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
TimedTaskManager.getInstance().getAllTasks() TimedTaskManager.getInstance().getAllTasks()
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .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(); long millis = timedTask.getNextTime();
if (timedTask.isScheduled() || millis - System.currentTimeMillis() > ONE_HOUR) { if (timedTask.isScheduled() || millis - System.currentTimeMillis() > ONE_HOUR) {
return; return;
} }
scheduleTask(context, alarmManager, timedTask, millis); scheduleTask(context, timedTask, millis);
TimedTaskManager.getInstance() TimedTaskManager.getInstance()
.notifyTaskScheduled(timedTask); .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()) { if (millis <= System.currentTimeMillis()) {
context.sendBroadcast(timedTask.createIntent()); context.sendBroadcast(timedTask.createIntent());
return; return;
@@ -70,14 +67,34 @@ public class TimedTaskScheduler extends BroadcastReceiver {
} }
public static void setupRepeating(Context context) { 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 alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 5000, alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 5000,
INTERVAL, PendingIntent.getBroadcast(context, REQUEST_CODE, INTERVAL, createTaskCheckPendingIntent(context));
new Intent(TimedTaskScheduler.ACTION_CHECK_TASK), PendingIntent.FLAG_UPDATE_CURRENT));
} }
public static void cancel(Context context, TimedTask timedTask) { public static void cancel(Context context, TimedTask timedTask) {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(timedTask.createPendingIntent(context)); 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; 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.JavaScriptEngine;
import com.stardust.autojs.engine.ScriptEngine; import com.stardust.autojs.engine.ScriptEngine;
import com.stardust.autojs.engine.ScriptEngineFactory; import com.stardust.autojs.engine.ScriptEngineFactory;
@@ -19,7 +22,7 @@ import org.joda.time.format.DateTimeFormat;
* Created by Stardust on 2017/11/28. * Created by Stardust on 2017/11/28.
*/ */
public abstract class Task { public abstract class Task implements Parcelable {
public abstract String getName(); public abstract String getName();
@@ -29,6 +32,16 @@ public abstract class Task {
public abstract String getEngineName(); public abstract String getEngineName();
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
}
public static class PendingTask extends Task { public static class PendingTask extends Task {
private TimedTask mTimedTask; private TimedTask mTimedTask;

View File

@@ -108,8 +108,8 @@ public class TaskListRecyclerView extends ThemeColorRecyclerView implements Scri
for (TaskGroup group : mTaskGroups) { for (TaskGroup group : mTaskGroups) {
group.refresh(); group.refresh();
} }
mAdapter.notifyParentChanged(0); mAdapter = new Adapter(mTaskGroups);
mAdapter.notifyParentChanged(1); setAdapter(mAdapter);
//notifyDataSetChanged not working... //notifyDataSetChanged not working...
} }