mirror of
https://github.com/TonyJiangWJ/Auto.js.git
synced 2026-06-21 21:01:43 +08:00
feat(app): add intent task
This commit is contained in:
parent
57960bd30b
commit
9a5f6f014c
@ -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 {
|
||||
|
||||
@ -13,8 +13,7 @@
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
|
||||
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
|
||||
<uses-permission android:name="android.permission.SET_ALARM"/>
|
||||
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
|
||||
|
||||
<!-- 非Auto.js运行必需,不会主动申请,某些脚本可以自行申请-->
|
||||
@ -132,6 +131,13 @@
|
||||
</intent-filter>
|
||||
</activity-alias>
|
||||
|
||||
<receiver android:name="org.autojs.autojs.external.boot.BootCompleteReceiver" >
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.BOOT_COMPLETED" />
|
||||
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<receiver
|
||||
android:name=".external.tasker.FireSettingReceiver"
|
||||
android:exported="true"
|
||||
|
||||
@ -18,13 +18,16 @@ import com.raizlabs.android.dbflow.runtime.DirectModelNotifier;
|
||||
import com.stardust.app.GlobalAppContext;
|
||||
import com.stardust.autojs.core.ui.inflater.ImageLoader;
|
||||
import com.stardust.autojs.core.ui.inflater.util.Drawables;
|
||||
|
||||
import org.autojs.autojs.autojs.AutoJs;
|
||||
import org.autojs.autojs.autojs.key.GlobalKeyObserver;
|
||||
import org.autojs.autojs.network.GlideApp;
|
||||
import org.autojs.autojs.storage.database.IntentTaskDatabase;
|
||||
import org.autojs.autojs.storage.database.TimedTaskDatabase;
|
||||
import org.autojs.autojs.timing.TimedTaskScheduler;
|
||||
import org.autojs.autojs.tool.CrashHandler;
|
||||
import org.autojs.autojs.ui.error.ErrorReportActivity;
|
||||
|
||||
import com.stardust.theme.ThemeColor;
|
||||
import com.stardust.theme.ThemeColorManager;
|
||||
import com.tencent.bugly.Bugly;
|
||||
@ -83,6 +86,9 @@ public class App extends MultiDexApplication {
|
||||
.addDatabaseConfig(DatabaseConfig.builder(TimedTaskDatabase.class)
|
||||
.modelNotifier(DirectModelNotifier.get())
|
||||
.build())
|
||||
.addDatabaseConfig(DatabaseConfig.builder(IntentTaskDatabase.class)
|
||||
.modelNotifier(DirectModelNotifier.get())
|
||||
.build())
|
||||
.build());
|
||||
ThemeColorManager.setDefaultThemeColor(new ThemeColor(getResources().getColor(R.color.colorPrimary), getResources().getColor(R.color.colorPrimaryDark), getResources().getColor(R.color.colorAccent)));
|
||||
ThemeColorManager.init(this);
|
||||
|
||||
42
app/src/main/java/org/autojs/autojs/external/boot/BootCompleteReceiver.java
vendored
Normal file
42
app/src/main/java/org/autojs/autojs/external/boot/BootCompleteReceiver.java
vendored
Normal file
@ -0,0 +1,42 @@
|
||||
package org.autojs.autojs.external.boot;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.util.Log;
|
||||
|
||||
import com.stardust.autojs.execution.ExecutionConfig;
|
||||
|
||||
import org.autojs.autojs.autojs.AutoJs;
|
||||
import org.autojs.autojs.model.script.ScriptFile;
|
||||
import org.autojs.autojs.timing.IntentTask;
|
||||
import org.autojs.autojs.timing.TimedTaskManager;
|
||||
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
|
||||
public class BootCompleteReceiver extends BroadcastReceiver {
|
||||
|
||||
private static final String LOG_TAG = "BootCompleteReceiver";
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
|
||||
Log.i(LOG_TAG, "on boot complete");
|
||||
TimedTaskManager.getInstance().getIntentTaskOfAction(intent.getAction())
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(intentTask -> 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);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,7 @@
|
||||
package org.autojs.autojs.storage.database;
|
||||
|
||||
import com.raizlabs.android.dbflow.annotation.Database;
|
||||
|
||||
@Database(version = 1)
|
||||
public class IntentTaskDatabase {
|
||||
}
|
||||
90
app/src/main/java/org/autojs/autojs/timing/IntentTask.java
Normal file
90
app/src/main/java/org/autojs/autojs/timing/IntentTask.java
Normal file
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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<TimedTask> mTimedTaskModelAdapter;
|
||||
private ModelAdapter<IntentTask> mIntentTaskModelAdapter;
|
||||
private Context mContext;
|
||||
private PublishSubject<ModelChange<TimedTask>> 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<TimedTask>() {
|
||||
@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<TimedTask> getAllTasks() {
|
||||
return RXSQLite.rx(SQLite.select().from(TimedTask.class))
|
||||
.queryStreamResults()
|
||||
.subscribeOn(Schedulers.io());
|
||||
|
||||
}
|
||||
|
||||
public Flowable<IntentTask> 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<ModelChange<TimedTask>> getTimeTaskChanges() {
|
||||
return mTimedTaskChanges;
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -252,6 +252,13 @@
|
||||
|
||||
</com.github.aakira.expandablelayout.ExpandableRelativeLayout>
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/run_on_boot_radio"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:paddingLeft="16dp"
|
||||
android:text="@string/text_run_on_boot"/>
|
||||
</RadioGroup>
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
@ -382,4 +382,5 @@
|
||||
<string name="text_use_alarm_clock">使用系统闹钟唤醒Auto.js</string>
|
||||
<string name="error_connect_to_remote">连接失败: %s</string>
|
||||
<string name="text_are_you_sure_to_delete">确定要删除%s吗</string>
|
||||
<string name="text_run_on_boot">开机时运行</string>
|
||||
</resources>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user