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
|
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 {
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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...
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -286,4 +286,4 @@ public class TaskListRecyclerView extends ThemeColorRecyclerView implements Scri
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user