diff --git a/app/build.gradle b/app/build.gradle
index 78d0f82b..1077afe5 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,8 +8,8 @@ android {
applicationId "org.autojs.autojs"
minSdkVersion 17
targetSdkVersion 23
- versionCode 412
- versionName "4.0.2 Alpha7"
+ versionCode 413
+ versionName "4.0.2 Alpha8"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
ndk {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 68ed7ccb..8d953578 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -13,8 +13,7 @@
-
-
+
@@ -132,6 +131,13 @@
+
+
+
+
+
+
+
runTask(context, intent, intentTask), Throwable::printStackTrace);
+ }
+ }
+
+ private void runTask(Context context, Intent intent, IntentTask task) {
+ ScriptFile file = new ScriptFile(task.getScriptPath());
+ ExecutionConfig config = new ExecutionConfig();
+ config.setArgument("intent", intent.clone());
+ config.executePath(file.getParent());
+ AutoJs.getInstance().getScriptEngineService().execute(file.toSource(), config);
+ }
+}
diff --git a/app/src/main/java/org/autojs/autojs/storage/database/IntentTaskDatabase.java b/app/src/main/java/org/autojs/autojs/storage/database/IntentTaskDatabase.java
new file mode 100644
index 00000000..9ecc720d
--- /dev/null
+++ b/app/src/main/java/org/autojs/autojs/storage/database/IntentTaskDatabase.java
@@ -0,0 +1,7 @@
+package org.autojs.autojs.storage.database;
+
+import com.raizlabs.android.dbflow.annotation.Database;
+
+@Database(version = 1)
+public class IntentTaskDatabase {
+}
diff --git a/app/src/main/java/org/autojs/autojs/timing/IntentTask.java b/app/src/main/java/org/autojs/autojs/timing/IntentTask.java
new file mode 100644
index 00000000..937e47fa
--- /dev/null
+++ b/app/src/main/java/org/autojs/autojs/timing/IntentTask.java
@@ -0,0 +1,90 @@
+package org.autojs.autojs.timing;
+
+import android.content.IntentFilter;
+
+import com.raizlabs.android.dbflow.annotation.Column;
+import com.raizlabs.android.dbflow.annotation.NotNull;
+import com.raizlabs.android.dbflow.annotation.PrimaryKey;
+import com.raizlabs.android.dbflow.annotation.Table;
+
+import org.autojs.autojs.storage.database.IntentTaskDatabase;
+import org.autojs.autojs.storage.database.TimedTaskDatabase;
+
+@Table(database = IntentTaskDatabase.class)
+public class IntentTask {
+
+ @PrimaryKey(autoincrement = true, quickCheckAutoIncrement = true)
+ @Column(name = "id")
+ int mId = -1;
+
+ @NotNull
+ @Column(name = "script_path")
+ String mScriptPath;
+
+ @Column(name = "action")
+ String mAction;
+
+ @Column(name = "category")
+ String mCategory;
+
+ @Column(name = "data_type")
+ String mDataType;
+
+ public IntentFilter getIntentFilter() {
+ IntentFilter filter = new IntentFilter();
+ if (mAction != null) {
+ filter.addAction(mAction);
+ }
+ if (mCategory != null) {
+ filter.addCategory(mCategory);
+ }
+ if (mDataType != null) {
+ try {
+ filter.addDataType(mDataType);
+ } catch (IntentFilter.MalformedMimeTypeException e) {
+ e.printStackTrace();
+ }
+ }
+ return filter;
+ }
+
+ public int getId() {
+ return mId;
+ }
+
+ public void setId(int id) {
+ mId = id;
+ }
+
+ public String getScriptPath() {
+ return mScriptPath;
+ }
+
+ public void setScriptPath(String scriptPath) {
+ mScriptPath = scriptPath;
+ }
+
+ public String getAction() {
+ return mAction;
+ }
+
+ public void setAction(String action) {
+ mAction = action;
+ }
+
+ public String getCategory() {
+ return mCategory;
+ }
+
+ public void setCategory(String category) {
+ mCategory = category;
+ }
+
+ public String getDataType() {
+ return mDataType;
+ }
+
+ public void setDataType(String dataType) {
+ mDataType = dataType;
+ }
+}
diff --git a/app/src/main/java/org/autojs/autojs/timing/TimedTaskManager.java b/app/src/main/java/org/autojs/autojs/timing/TimedTaskManager.java
index a93345ee..021488e9 100644
--- a/app/src/main/java/org/autojs/autojs/timing/TimedTaskManager.java
+++ b/app/src/main/java/org/autojs/autojs/timing/TimedTaskManager.java
@@ -2,6 +2,7 @@ package org.autojs.autojs.timing;
import android.content.Context;
+import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
@@ -14,7 +15,9 @@ import com.raizlabs.android.dbflow.structure.ModelAdapter;
import com.stardust.app.GlobalAppContext;
import org.autojs.autojs.storage.database.ModelChange;
+import org.autojs.autojs.storage.file.StorageFileProvider;
+import java.io.File;
import java.util.List;
import io.reactivex.Flowable;
@@ -31,6 +34,7 @@ public class TimedTaskManager {
private static TimedTaskManager sInstance;
private ModelAdapter mTimedTaskModelAdapter;
+ private ModelAdapter mIntentTaskModelAdapter;
private Context mContext;
private PublishSubject> mTimedTaskChanges = PublishSubject.create();
@@ -44,6 +48,7 @@ public class TimedTaskManager {
public TimedTaskManager(Context context) {
mContext = context;
mTimedTaskModelAdapter = FlowManager.getModelAdapter(TimedTask.class);
+ mIntentTaskModelAdapter = FlowManager.getModelAdapter(IntentTask.class);
DirectModelNotifier.get().registerForModelChanges(TimedTask.class, new DirectModelNotifier.ModelChangedListener() {
@Override
public void onModelChanged(@NonNull TimedTask model, @NonNull BaseModel.Action action) {
@@ -74,7 +79,7 @@ public class TimedTaskManager {
}
}
- public void cancelTask(TimedTask timedTask) {
+ public void removeTask(TimedTask timedTask) {
TimedTaskScheduler.cancel(mContext, timedTask);
mTimedTaskModelAdapter.delete(timedTask);
}
@@ -84,14 +89,31 @@ public class TimedTaskManager {
TimedTaskScheduler.scheduleTaskIfNeeded(mContext, timedTask);
}
+ public void addTask(IntentTask intentTask) {
+ mIntentTaskModelAdapter.insert(intentTask);
+ }
+
+ public void removeTask(IntentTask intentTask) {
+ mIntentTaskModelAdapter.delete(intentTask);
+ }
public Flowable getAllTasks() {
return RXSQLite.rx(SQLite.select().from(TimedTask.class))
.queryStreamResults()
.subscribeOn(Schedulers.io());
-
}
+ public Flowable getIntentTaskOfAction(String action) {
+ IntentTask intentTask = new IntentTask();
+ intentTask.setAction(Intent.ACTION_BOOT_COMPLETED);
+ intentTask.setScriptPath(new File(StorageFileProvider.getDefaultDirectory(), "boot.js").getPath());
+ return Flowable.just(intentTask);
+// return RXSQLite.rx(SQLite.select().from(IntentTask.class))
+// .queryStreamResults()
+// .subscribeOn(Schedulers.io());
+ }
+
+
public Observable> getTimeTaskChanges() {
return mTimedTaskChanges;
}
diff --git a/app/src/main/java/org/autojs/autojs/ui/main/task/Task.java b/app/src/main/java/org/autojs/autojs/ui/main/task/Task.java
index f1ae6097..a6ed37aa 100644
--- a/app/src/main/java/org/autojs/autojs/ui/main/task/Task.java
+++ b/app/src/main/java/org/autojs/autojs/ui/main/task/Task.java
@@ -5,7 +5,6 @@ import com.stardust.autojs.engine.ScriptEngine;
import com.stardust.autojs.execution.ScriptExecution;
import com.stardust.autojs.script.AutoFileSource;
import com.stardust.autojs.script.JavaScriptSource;
-import com.stardust.autojs.script.ScriptSource;
import com.stardust.pio.PFiles;
import org.autojs.autojs.R;
@@ -55,7 +54,7 @@ public abstract class Task {
@Override
public void cancel() {
- TimedTaskManager.getInstance().cancelTask(mTimedTask);
+ TimedTaskManager.getInstance().removeTask(mTimedTask);
}
@Override
diff --git a/app/src/main/java/org/autojs/autojs/ui/timing/TimedTaskSettingActivity.java b/app/src/main/java/org/autojs/autojs/ui/timing/TimedTaskSettingActivity.java
index 995c2ced..b62898b4 100644
--- a/app/src/main/java/org/autojs/autojs/ui/timing/TimedTaskSettingActivity.java
+++ b/app/src/main/java/org/autojs/autojs/ui/timing/TimedTaskSettingActivity.java
@@ -36,6 +36,7 @@ import org.androidannotations.annotations.ViewById;
import org.autojs.autojs.R;
import org.autojs.autojs.external.ScriptIntents;
import org.autojs.autojs.model.script.ScriptFile;
+import org.autojs.autojs.timing.IntentTask;
import org.autojs.autojs.timing.TaskReceiver;
import org.autojs.autojs.timing.TimedTask;
import org.autojs.autojs.timing.TimedTaskManager;
@@ -76,6 +77,10 @@ public class TimedTaskSettingActivity extends BaseActivity {
@ViewById(R.id.weekly_task_radio)
RadioButton mWeeklyTaskRadio;
+ @ViewById(R.id.run_on_boot_radio)
+ RadioButton mRunOnBootRadio;
+
+
@ViewById(R.id.disposable_task_time)
TextView mDisposableTaskTime;
@@ -283,6 +288,14 @@ public class TimedTaskSettingActivity extends BaseActivity {
}
private void createOrUpdateTimedTask() {
+ if (mRunOnBootRadio.isChecked()) {
+ IntentTask task = new IntentTask();
+ task.setAction(Intent.ACTION_BOOT_COMPLETED);
+ task.setScriptPath(mScriptFile.getPath());
+ TimedTaskManager.getInstance().addTask(task);
+ finish();
+ return;
+ }
TimedTask task = createTimedTask();
if (task == null)
return;
diff --git a/app/src/main/res/layout/activity_timed_task_setting.xml b/app/src/main/res/layout/activity_timed_task_setting.xml
index 85861ca2..b72f9cca 100644
--- a/app/src/main/res/layout/activity_timed_task_setting.xml
+++ b/app/src/main/res/layout/activity_timed_task_setting.xml
@@ -252,6 +252,13 @@
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index b00558ee..1865cfb1 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -382,4 +382,5 @@
使用系统闹钟唤醒Auto.js
连接失败: %s
确定要删除%s吗
+ 开机时运行