From 9a5f6f014c521ed7f5d77c40e9b42bcfe3de1ff7 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Thu, 13 Sep 2018 22:27:03 +0800 Subject: [PATCH] feat(app): add intent task --- app/build.gradle | 4 +- app/src/main/AndroidManifest.xml | 10 ++- app/src/main/java/org/autojs/autojs/App.java | 6 ++ .../external/boot/BootCompleteReceiver.java | 42 +++++++++ .../storage/database/IntentTaskDatabase.java | 7 ++ .../org/autojs/autojs/timing/IntentTask.java | 90 +++++++++++++++++++ .../autojs/timing/TimedTaskManager.java | 26 +++++- .../org/autojs/autojs/ui/main/task/Task.java | 3 +- .../ui/timing/TimedTaskSettingActivity.java | 13 +++ .../layout/activity_timed_task_setting.xml | 7 ++ app/src/main/res/values/strings.xml | 1 + 11 files changed, 201 insertions(+), 8 deletions(-) create mode 100644 app/src/main/java/org/autojs/autojs/external/boot/BootCompleteReceiver.java create mode 100644 app/src/main/java/org/autojs/autojs/storage/database/IntentTaskDatabase.java create mode 100644 app/src/main/java/org/autojs/autojs/timing/IntentTask.java 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吗 + 开机时运行