mirror of
https://github.com/TonyJiangWJ/Auto.js.git
synced 2026-06-21 21:01:43 +08:00
feat: intent task
This commit is contained in:
parent
025e594a01
commit
02b1587f6b
@ -164,6 +164,14 @@
|
||||
<action android:name="android.intent.action.USER_PRESENT"/>
|
||||
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.PACKAGE_ADDED"/>
|
||||
<action android:name="android.intent.action.PACKAGE_CHANGED"/>
|
||||
<action android:name="android.intent.action.PACKAGE_DATA_CLEARED"/>
|
||||
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
|
||||
<action android:name="android.intent.action.PACKAGE_RESTARTED"/>
|
||||
<data android:scheme="package"/>
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<receiver
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package org.autojs.autojs;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.drawable.Drawable;
|
||||
@ -21,15 +22,16 @@ import com.tencent.bugly.crashreport.CrashReport;
|
||||
|
||||
import org.autojs.autojs.autojs.AutoJs;
|
||||
import org.autojs.autojs.autojs.key.GlobalKeyObserver;
|
||||
import org.autojs.autojs.external.receiver.DynamicBroadcastReceiver;
|
||||
import org.autojs.autojs.external.receiver.DynamicBroadcastReceivers;
|
||||
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.IntentTask;
|
||||
import org.autojs.autojs.timing.TimedTaskManager;
|
||||
import org.autojs.autojs.timing.TimedTaskScheduler;
|
||||
import org.autojs.autojs.tool.CrashHandler;
|
||||
import org.autojs.autojs.ui.error.ErrorReportActivity;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/1/27.
|
||||
@ -41,7 +43,7 @@ public class App extends MultiDexApplication {
|
||||
private static final String BUGLY_APP_ID = "19b3607b53";
|
||||
|
||||
private static WeakReference<App> instance;
|
||||
private DynamicBroadcastReceiver mDynamicBroadcastReceiver;
|
||||
private DynamicBroadcastReceivers mDynamicBroadcastReceivers;
|
||||
|
||||
public static App getApp() {
|
||||
return instance.get();
|
||||
@ -56,6 +58,10 @@ public class App extends MultiDexApplication {
|
||||
init();
|
||||
}
|
||||
|
||||
public DynamicBroadcastReceivers getDynamicBroadcastReceivers() {
|
||||
return mDynamicBroadcastReceivers;
|
||||
}
|
||||
|
||||
private void setUpStaticsTool() {
|
||||
if (BuildConfig.DEBUG)
|
||||
return;
|
||||
@ -98,7 +104,18 @@ public class App extends MultiDexApplication {
|
||||
}
|
||||
setupDrawableImageLoader();
|
||||
TimedTaskScheduler.checkTasksRepeatedlyIfNeeded(this);
|
||||
mDynamicBroadcastReceiver = new DynamicBroadcastReceiver(this);
|
||||
initDynamicBroadcastReceivers();
|
||||
}
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
private void initDynamicBroadcastReceivers() {
|
||||
mDynamicBroadcastReceivers = new DynamicBroadcastReceivers(this);
|
||||
TimedTaskManager.getInstance().getAllIntentTasks()
|
||||
.filter(task -> task.getAction() != null)
|
||||
.map(IntentTask::getAction)
|
||||
.collectInto(new ArrayList<String>(), ArrayList::add)
|
||||
.subscribe(list -> mDynamicBroadcastReceivers.register(list),
|
||||
Throwable::printStackTrace);
|
||||
}
|
||||
|
||||
private void setupDrawableImageLoader() {
|
||||
|
||||
@ -4,6 +4,7 @@ import android.annotation.SuppressLint;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
|
||||
@ -24,7 +25,7 @@ public class BaseBroadcastReceiver extends BroadcastReceiver {
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
Log.d(LOG_TAG, "onReceive: action = " + intent.getAction() + ", intent = " + intent);
|
||||
Log.d(LOG_TAG, "onReceive: intent = " + intent + ", this = " + this);
|
||||
try {
|
||||
TimedTaskManager.getInstance().getIntentTaskOfAction(intent.getAction())
|
||||
.subscribeOn(Schedulers.io())
|
||||
|
||||
@ -1,41 +1,31 @@
|
||||
package org.autojs.autojs.external.receiver;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.media.AudioManager;
|
||||
import android.os.Build;
|
||||
|
||||
import org.autojs.autojs.BuildConfig;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static android.content.Intent.ACTION_BATTERY_CHANGED;
|
||||
import static android.content.Intent.ACTION_CONFIGURATION_CHANGED;
|
||||
import static android.content.Intent.ACTION_DATE_CHANGED;
|
||||
import static android.content.Intent.ACTION_PACKAGES_SUSPENDED;
|
||||
import static android.content.Intent.ACTION_PACKAGES_UNSUSPENDED;
|
||||
import static android.content.Intent.ACTION_PACKAGE_ADDED;
|
||||
import static android.content.Intent.ACTION_PACKAGE_CHANGED;
|
||||
import static android.content.Intent.ACTION_PACKAGE_DATA_CLEARED;
|
||||
import static android.content.Intent.ACTION_PACKAGE_REMOVED;
|
||||
import static android.content.Intent.ACTION_PACKAGE_RESTARTED;
|
||||
import static android.content.Intent.ACTION_POWER_CONNECTED;
|
||||
import static android.content.Intent.ACTION_POWER_DISCONNECTED;
|
||||
import static android.content.Intent.ACTION_SHUTDOWN;
|
||||
import static android.content.Intent.ACTION_TIMEZONE_CHANGED;
|
||||
import static android.content.Intent.ACTION_TIME_CHANGED;
|
||||
import static android.content.Intent.ACTION_SCREEN_OFF;
|
||||
import static android.content.Intent.ACTION_SCREEN_ON;
|
||||
import static android.content.Intent.ACTION_TIME_TICK;
|
||||
import static android.content.Intent.ACTION_UID_REMOVED;
|
||||
|
||||
public class DynamicBroadcastReceiver extends BaseBroadcastReceiver {
|
||||
public class DynamicBroadcastReceivers {
|
||||
|
||||
private static final List<String> DEFAULT_ACTIONS = new ArrayList<>(Arrays.asList(
|
||||
ACTION_TIME_TICK,
|
||||
ACTION_SCREEN_OFF,
|
||||
ACTION_SCREEN_ON,
|
||||
ACTION_BATTERY_CHANGED,
|
||||
ACTION_CONFIGURATION_CHANGED
|
||||
));
|
||||
@ -49,31 +39,40 @@ public class DynamicBroadcastReceiver extends BaseBroadcastReceiver {
|
||||
}
|
||||
}
|
||||
|
||||
private boolean mRegistered = false;
|
||||
private final Set<String> mActions = new LinkedHashSet<>();
|
||||
private final List<BroadcastReceiver> mReceivers = new ArrayList<>();
|
||||
private final Context mContext;
|
||||
|
||||
|
||||
public DynamicBroadcastReceiver(Context context) {
|
||||
public DynamicBroadcastReceivers(Context context) {
|
||||
mContext = context;
|
||||
register(DEFAULT_ACTIONS);
|
||||
}
|
||||
|
||||
public void register(List<String> actions) {
|
||||
int oldSize = mActions.size();
|
||||
mActions.addAll(actions);
|
||||
if (oldSize == mActions.size()) {
|
||||
return;
|
||||
}
|
||||
IntentFilter filter = new IntentFilter();
|
||||
for (String action : mActions) {
|
||||
filter.addAction(action);
|
||||
}
|
||||
if(mRegistered){
|
||||
mContext.unregisterReceiver(this);
|
||||
}
|
||||
mContext.registerReceiver(this, filter);
|
||||
mRegistered = true;
|
||||
public void register(String action) {
|
||||
register(Collections.singletonList(action));
|
||||
}
|
||||
|
||||
public void register(List<String> actions) {
|
||||
IntentFilter filter = new IntentFilter();
|
||||
for (String action : actions) {
|
||||
if (!StaticBroadcastReceiver.ACTIONS.contains(action)
|
||||
&& !mActions.contains(action)) {
|
||||
mActions.add(action);
|
||||
filter.addAction(action);
|
||||
}
|
||||
}
|
||||
if (filter.countActions() == 0) {
|
||||
return;
|
||||
}
|
||||
BaseBroadcastReceiver receiver = new BaseBroadcastReceiver();
|
||||
mContext.registerReceiver(receiver, filter);
|
||||
}
|
||||
|
||||
public void unregisterAll() {
|
||||
for (BroadcastReceiver receiver : mReceivers) {
|
||||
mContext.unregisterReceiver(receiver);
|
||||
}
|
||||
mReceivers.clear();
|
||||
}
|
||||
}
|
||||
@ -31,7 +31,6 @@ import static org.autojs.autojs.ui.edit.EditorView.EXTRA_SAVE_ENABLED;
|
||||
public class TaskerScriptEditActivity extends BaseActivity {
|
||||
|
||||
public static final int REQUEST_CODE = 10016;
|
||||
public static final String EXTRA_INTENT_TASK_ID = "intent_task_id";
|
||||
public static final String EXTRA_TASK_ID = TaskReceiver.EXTRA_TASK_ID;
|
||||
|
||||
public static void edit(Activity activity, String title, String summary, String content) {
|
||||
|
||||
@ -12,10 +12,9 @@ import android.util.Pair;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.stardust.util.MapEntries;
|
||||
import com.stardust.util.MapBuilder;
|
||||
|
||||
import org.autojs.autojs.BuildConfig;
|
||||
import org.autojs.autojs.tool.EmptyObservers;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.SocketTimeoutException;
|
||||
@ -24,7 +23,6 @@ import java.util.concurrent.TimeUnit;
|
||||
|
||||
import io.reactivex.Observable;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
import io.reactivex.subjects.PublishSubject;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.Request;
|
||||
@ -171,12 +169,12 @@ public class DevPluginService {
|
||||
|
||||
@WorkerThread
|
||||
private void sayHelloToServer(JsonWebSocket socket) throws IOException {
|
||||
writeMap(socket, TYPE_HELLO, new MapEntries<String, Object>()
|
||||
.entry("device_name", Build.BRAND + " " + Build.MODEL)
|
||||
.entry("client_version", CLIENT_VERSION)
|
||||
.entry("app_version", BuildConfig.VERSION_NAME)
|
||||
.entry("app_version_code", BuildConfig.VERSION_CODE)
|
||||
.map());
|
||||
writeMap(socket, TYPE_HELLO, new MapBuilder<String, Object>()
|
||||
.put("device_name", Build.BRAND + " " + Build.MODEL)
|
||||
.put("client_version", CLIENT_VERSION)
|
||||
.put("app_version", BuildConfig.VERSION_NAME)
|
||||
.put("app_version_code", BuildConfig.VERSION_CODE)
|
||||
.build());
|
||||
mHandshakeTimeoutHandler.postDelayed(() -> {
|
||||
if (mSocket != socket && !socket.isClosed()) {
|
||||
onHandshakeTimeout(socket);
|
||||
|
||||
@ -3,9 +3,11 @@ package org.autojs.autojs.timing;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.stardust.app.GlobalAppContext;
|
||||
|
||||
import org.autojs.autojs.App;
|
||||
import org.autojs.autojs.storage.database.IntentTaskDatabase;
|
||||
import org.autojs.autojs.storage.database.ModelChange;
|
||||
import org.autojs.autojs.storage.database.TimedTaskDatabase;
|
||||
@ -15,7 +17,6 @@ import java.util.List;
|
||||
|
||||
import io.reactivex.Flowable;
|
||||
import io.reactivex.Observable;
|
||||
import io.reactivex.subjects.PublishSubject;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/11/27.
|
||||
@ -82,7 +83,12 @@ public class TimedTaskManager {
|
||||
@SuppressLint("CheckResult")
|
||||
public void addTask(IntentTask intentTask) {
|
||||
mIntentTaskDatabase.insert(intentTask)
|
||||
.subscribe(EmptyObservers.consumer(), Throwable::printStackTrace);
|
||||
.subscribe(i -> {
|
||||
if(!TextUtils.isEmpty(intentTask.getAction())){
|
||||
App.getApp().getDynamicBroadcastReceivers()
|
||||
.register(intentTask.getAction());
|
||||
}
|
||||
}, Throwable::printStackTrace);
|
||||
}
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
@ -128,6 +134,17 @@ public class TimedTaskManager {
|
||||
TimedTaskScheduler.scheduleTaskIfNeeded(mContext, task);
|
||||
}
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
public void updateTask(IntentTask task) {
|
||||
mIntentTaskDatabase.update(task)
|
||||
.subscribe(i -> {
|
||||
if(i > 0 && !TextUtils.isEmpty(task.getAction())){
|
||||
App.getApp().getDynamicBroadcastReceivers()
|
||||
.register(task.getAction());
|
||||
}
|
||||
}, Throwable::printStackTrace);
|
||||
}
|
||||
|
||||
public long countTasks() {
|
||||
return mTimedTaskDatabase.count();
|
||||
}
|
||||
@ -139,4 +156,12 @@ public class TimedTaskManager {
|
||||
public Observable<ModelChange<IntentTask>> getIntentTaskChanges() {
|
||||
return mIntentTaskDatabase.getModelChange();
|
||||
}
|
||||
|
||||
public IntentTask getIntentTask(long intentTaskId) {
|
||||
return mIntentTaskDatabase.queryById(intentTaskId);
|
||||
}
|
||||
|
||||
public Flowable<IntentTask> getAllIntentTasks() {
|
||||
return mIntentTaskDatabase.queryAllAsFlowable();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,11 +1,14 @@
|
||||
package org.autojs.autojs.ui.main.task;
|
||||
|
||||
import android.content.Intent;
|
||||
|
||||
import com.stardust.app.GlobalAppContext;
|
||||
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.pio.PFiles;
|
||||
import com.stardust.util.MapBuilder;
|
||||
|
||||
import org.autojs.autojs.R;
|
||||
import org.autojs.autojs.timing.IntentTask;
|
||||
@ -14,12 +17,17 @@ import org.autojs.autojs.timing.TimedTaskManager;
|
||||
|
||||
import org.joda.time.format.DateTimeFormat;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import static org.autojs.autojs.ui.timing.TimedTaskSettingActivity.ACTION_DESC_MAP;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/11/28.
|
||||
*/
|
||||
|
||||
public abstract class Task {
|
||||
|
||||
|
||||
public abstract String getName();
|
||||
|
||||
public abstract String getDesc();
|
||||
@ -30,6 +38,7 @@ public abstract class Task {
|
||||
|
||||
public static class PendingTask extends Task {
|
||||
|
||||
|
||||
private TimedTask mTimedTask;
|
||||
private IntentTask mIntentTask;
|
||||
|
||||
@ -44,8 +53,8 @@ public abstract class Task {
|
||||
mTimedTask = null;
|
||||
}
|
||||
|
||||
public boolean taskEquals(Object task){
|
||||
if(mTimedTask != null){
|
||||
public boolean taskEquals(Object task) {
|
||||
if (mTimedTask != null) {
|
||||
return mTimedTask.equals(task);
|
||||
}
|
||||
return mIntentTask.equals(task);
|
||||
@ -68,6 +77,10 @@ public abstract class Task {
|
||||
DateTimeFormat.shortDateTime().print(nextTime);
|
||||
} else {
|
||||
assert mIntentTask != null;
|
||||
Integer desc = ACTION_DESC_MAP.get(mIntentTask.getAction());
|
||||
if(desc != null){
|
||||
return GlobalAppContext.getString(desc);
|
||||
}
|
||||
return mIntentTask.getAction();
|
||||
}
|
||||
|
||||
@ -75,7 +88,11 @@ public abstract class Task {
|
||||
|
||||
@Override
|
||||
public void cancel() {
|
||||
TimedTaskManager.getInstance().removeTask(mTimedTask);
|
||||
if (mTimedTask != null) {
|
||||
TimedTaskManager.getInstance().removeTask(mTimedTask);
|
||||
} else {
|
||||
TimedTaskManager.getInstance().removeTask(mIntentTask);
|
||||
}
|
||||
}
|
||||
|
||||
private String getScriptPath() {
|
||||
@ -103,6 +120,12 @@ public abstract class Task {
|
||||
public void setIntentTask(IntentTask intentTask) {
|
||||
mIntentTask = intentTask;
|
||||
}
|
||||
|
||||
public long getId() {
|
||||
if(mTimedTask != null)
|
||||
return mTimedTask.getId();
|
||||
return mIntentTask.getId();
|
||||
}
|
||||
}
|
||||
|
||||
public static class RunningTask extends Task {
|
||||
|
||||
@ -56,6 +56,7 @@ public abstract class TaskGroup implements Parent<Task> {
|
||||
|
||||
@Override
|
||||
public void refresh() {
|
||||
mTasks.clear();
|
||||
for (TimedTask timedTask : TimedTaskManager.getInstance().getAllTasksAsList()) {
|
||||
mTasks.add(new Task.PendingTask(timedTask));
|
||||
}
|
||||
|
||||
@ -32,6 +32,7 @@ import org.autojs.autojs.timing.IntentTask;
|
||||
import org.autojs.autojs.timing.TaskReceiver;
|
||||
import org.autojs.autojs.timing.TimedTask;
|
||||
import org.autojs.autojs.timing.TimedTaskManager;
|
||||
import org.autojs.autojs.ui.timing.TimedTaskSettingActivity;
|
||||
import org.autojs.autojs.ui.timing.TimedTaskSettingActivity_;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@ -248,8 +249,11 @@ public class TaskListRecyclerView extends ThemeColorRecyclerView {
|
||||
|
||||
void onItemClick(View view) {
|
||||
if (mTask instanceof Task.PendingTask) {
|
||||
Task.PendingTask task = (Task.PendingTask) mTask;
|
||||
String extra = task.getTimedTask() == null ? TimedTaskSettingActivity.EXTRA_INTENT_TASK_ID
|
||||
: TimedTaskSettingActivity.EXTRA_TASK_ID;
|
||||
TimedTaskSettingActivity_.intent(getContext())
|
||||
.extra(TaskerScriptEditActivity.EXTRA_TASK_ID, ((Task.PendingTask) mTask).getTimedTask().getId())
|
||||
.extra(extra, task.getId())
|
||||
.start();
|
||||
}
|
||||
}
|
||||
|
||||
@ -12,7 +12,7 @@ import android.view.View;
|
||||
import com.stardust.theme.app.ColorSelectActivity;
|
||||
import com.stardust.theme.preference.ThemeColorPreferenceFragment;
|
||||
import com.stardust.theme.util.ListBuilder;
|
||||
import com.stardust.util.MapEntries;
|
||||
import com.stardust.util.MapBuilder;
|
||||
|
||||
import org.androidannotations.annotations.AfterViews;
|
||||
import org.androidannotations.annotations.EActivity;
|
||||
@ -100,14 +100,14 @@ public class SettingsActivity extends BaseActivity {
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
ACTION_MAP = new MapEntries<String, Runnable>()
|
||||
.entry(getString(R.string.text_theme_color), () -> selectThemeColor(getActivity()))
|
||||
.entry(getString(R.string.text_check_for_updates), () -> new UpdateCheckDialog(getActivity())
|
||||
ACTION_MAP = new MapBuilder<String, Runnable>()
|
||||
.put(getString(R.string.text_theme_color), () -> selectThemeColor(getActivity()))
|
||||
.put(getString(R.string.text_check_for_updates), () -> new UpdateCheckDialog(getActivity())
|
||||
.show())
|
||||
.entry(getString(R.string.text_issue_report), () -> startActivity(new Intent(getActivity(), IssueReporterActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)))
|
||||
.entry(getString(R.string.text_about_me_and_repo), () -> startActivity(new Intent(getActivity(), AboutActivity_.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)))
|
||||
.entry(getString(R.string.text_licenses), () -> showLicenseDialog())
|
||||
.map();
|
||||
.put(getString(R.string.text_issue_report), () -> startActivity(new Intent(getActivity(), IssueReporterActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)))
|
||||
.put(getString(R.string.text_about_me_and_repo), () -> startActivity(new Intent(getActivity(), AboutActivity_.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)))
|
||||
.put(getString(R.string.text_licenses), () -> showLicenseDialog())
|
||||
.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -3,6 +3,8 @@ package org.autojs.autojs.ui.timing;
|
||||
import android.app.DatePickerDialog;
|
||||
import android.app.TimePickerDialog;
|
||||
import android.content.Intent;
|
||||
import android.graphics.ColorFilter;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
@ -30,7 +32,7 @@ import com.github.aakira.expandablelayout.ExpandableRelativeLayout;
|
||||
import com.stardust.autojs.execution.ExecutionConfig;
|
||||
import com.stardust.util.BiMap;
|
||||
import com.stardust.util.BiMaps;
|
||||
import com.stardust.util.MapEntries;
|
||||
import com.stardust.util.MapBuilder;
|
||||
|
||||
import org.androidannotations.annotations.AfterViews;
|
||||
import org.androidannotations.annotations.CheckedChange;
|
||||
@ -61,16 +63,44 @@ import java.util.Map;
|
||||
@EActivity(R.layout.activity_timed_task_setting)
|
||||
public class TimedTaskSettingActivity extends BaseActivity {
|
||||
|
||||
public static final String EXTRA_INTENT_TASK_ID = "intent_task_id";
|
||||
public static final String EXTRA_TASK_ID = TaskReceiver.EXTRA_TASK_ID;
|
||||
|
||||
private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormat.forPattern("HH:mm");
|
||||
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormat.forPattern("yy-MM-dd");
|
||||
private static final int REQUEST_CODE_IGNORE_BATTERY = 27101;
|
||||
|
||||
private static final String LOG_TAG = "TimedTaskSettings";
|
||||
|
||||
|
||||
public static final Map<String, Integer> ACTION_DESC_MAP = new MapBuilder<String, Integer>()
|
||||
.put(Intent.ACTION_BOOT_COMPLETED, R.string.text_run_on_boot)
|
||||
.put(Intent.ACTION_SCREEN_OFF, R.string.text_run_on_screen_off)
|
||||
.put(Intent.ACTION_SCREEN_ON, R.string.text_run_on_screen_on)
|
||||
.put(Intent.ACTION_USER_PRESENT, R.string.text_run_on_screen_unlock)
|
||||
.put(Intent.ACTION_BATTERY_CHANGED, R.string.text_run_on_battery_change)
|
||||
.put(Intent.ACTION_POWER_CONNECTED, R.string.text_run_on_power_connect)
|
||||
.put(Intent.ACTION_POWER_DISCONNECTED, R.string.text_run_on_power_disconnect)
|
||||
.put(ConnectivityManager.CONNECTIVITY_ACTION, R.string.text_run_on_conn_change)
|
||||
.put(Intent.ACTION_PACKAGE_ADDED, R.string.text_run_on_package_install)
|
||||
.put(Intent.ACTION_PACKAGE_REMOVED, R.string.text_run_on_package_uninstall)
|
||||
.put(Intent.ACTION_PACKAGE_REPLACED, R.string.text_run_on_package_update)
|
||||
.put(Intent.ACTION_HEADSET_PLUG, R.string.text_run_on_headset_plug)
|
||||
.build();
|
||||
|
||||
private static final BiMap<Integer, String> ACTIONS = BiMaps.<Integer, String>newBuilder()
|
||||
.put(R.id.run_on_boot, Intent.ACTION_BOOT_COMPLETED)
|
||||
.put(R.id.run_on_screen_off, Intent.ACTION_SCREEN_OFF)
|
||||
.put(R.id.run_on_screen_on, Intent.ACTION_SCREEN_ON)
|
||||
.put(R.id.run_on_screen_unlock, Intent.ACTION_USER_PRESENT)
|
||||
.put(R.id.run_on_battery_change, Intent.ACTION_BATTERY_CHANGED)
|
||||
.put(R.id.run_on_power_connect, Intent.ACTION_POWER_CONNECTED)
|
||||
.put(R.id.run_on_power_disconnect, Intent.ACTION_POWER_DISCONNECTED)
|
||||
.put(R.id.run_on_conn_change, ConnectivityManager.CONNECTIVITY_ACTION)
|
||||
.put(R.id.run_on_package_install, Intent.ACTION_PACKAGE_ADDED)
|
||||
.put(R.id.run_on_package_uninstall, Intent.ACTION_PACKAGE_REMOVED)
|
||||
.put(R.id.run_on_package_update, Intent.ACTION_PACKAGE_REPLACED)
|
||||
.put(R.id.run_on_headset_plug, Intent.ACTION_HEADSET_PLUG)
|
||||
.build();
|
||||
|
||||
|
||||
@ -90,7 +120,10 @@ public class TimedTaskSettingActivity extends BaseActivity {
|
||||
RadioButton mWeeklyTaskRadio;
|
||||
|
||||
@ViewById(R.id.run_on_broadcast)
|
||||
RadioButton mRunOnBroadcast;
|
||||
RadioButton mRunOnBroadcastRadio;
|
||||
|
||||
@ViewById(R.id.run_on_other_broadcast)
|
||||
RadioButton mRunOnOtherBroadcast;
|
||||
|
||||
@ViewById(R.id.action)
|
||||
EditText mOtherBroadcastAction;
|
||||
@ -117,22 +150,31 @@ public class TimedTaskSettingActivity extends BaseActivity {
|
||||
|
||||
private ScriptFile mScriptFile;
|
||||
private TimedTask mTimedTask;
|
||||
private IntentTask mIntentTask;
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
long taskId = getIntent().getLongExtra(TaskReceiver.EXTRA_TASK_ID, -1);
|
||||
long taskId = getIntent().getLongExtra(EXTRA_TASK_ID, -1);
|
||||
if (taskId != -1) {
|
||||
mTimedTask = TimedTaskManager.getInstance().getTimedTask(taskId);
|
||||
if (mTimedTask != null) {
|
||||
mScriptFile = new ScriptFile(mTimedTask.getScriptPath());
|
||||
}
|
||||
} else {
|
||||
String path = getIntent().getStringExtra(ScriptIntents.EXTRA_KEY_PATH);
|
||||
if (TextUtils.isEmpty(path)) {
|
||||
finish();
|
||||
long intentTaskId = getIntent().getLongExtra(EXTRA_INTENT_TASK_ID, -1);
|
||||
if (intentTaskId != -1) {
|
||||
mIntentTask = TimedTaskManager.getInstance().getIntentTask(intentTaskId);
|
||||
if (mIntentTask != null) {
|
||||
mScriptFile = new ScriptFile(mIntentTask.getScriptPath());
|
||||
}
|
||||
} else {
|
||||
String path = getIntent().getStringExtra(ScriptIntents.EXTRA_KEY_PATH);
|
||||
if (TextUtils.isEmpty(path)) {
|
||||
finish();
|
||||
}
|
||||
mScriptFile = new ScriptFile(path);
|
||||
}
|
||||
mScriptFile = new ScriptFile(path);
|
||||
}
|
||||
|
||||
}
|
||||
@ -144,7 +186,7 @@ public class TimedTaskSettingActivity extends BaseActivity {
|
||||
mToolbar.setSubtitle(mScriptFile.getName());
|
||||
}
|
||||
findDayOfWeekCheckBoxes(mWeeklyTaskContainer);
|
||||
setUpTime();
|
||||
setUpTaskSettings();
|
||||
}
|
||||
|
||||
private void findDayOfWeekCheckBoxes(ViewGroup parent) {
|
||||
@ -161,13 +203,32 @@ public class TimedTaskSettingActivity extends BaseActivity {
|
||||
|
||||
}
|
||||
|
||||
private void setUpTime() {
|
||||
private void setUpTaskSettings() {
|
||||
mDisposableTaskDate.setText(DATE_FORMATTER.print(LocalDate.now()));
|
||||
mDisposableTaskTime.setText(TIME_FORMATTER.print(LocalTime.now()));
|
||||
if (mTimedTask == null) {
|
||||
mDailyTaskRadio.setChecked(true);
|
||||
if (mTimedTask != null) {
|
||||
setupTime();
|
||||
return;
|
||||
}
|
||||
if (mIntentTask != null) {
|
||||
setupAction();
|
||||
return;
|
||||
}
|
||||
mDailyTaskRadio.setChecked(true);
|
||||
}
|
||||
|
||||
private void setupAction() {
|
||||
mRunOnBroadcastRadio.setChecked(true);
|
||||
Integer buttonId = ACTIONS.getKey(mIntentTask.getAction());
|
||||
if (buttonId == null) {
|
||||
mRunOnOtherBroadcast.setChecked(true);
|
||||
mOtherBroadcastAction.setText(mIntentTask.getAction());
|
||||
} else {
|
||||
((RadioButton) findViewById(buttonId)).setChecked(true);
|
||||
}
|
||||
}
|
||||
|
||||
private void setupTime() {
|
||||
if (mTimedTask.isDisposable()) {
|
||||
mDisposableTaskRadio.setChecked(true);
|
||||
mDisposableTaskTime.setText(TIME_FORMATTER.print(mTimedTask.getMillis()));
|
||||
@ -187,7 +248,6 @@ public class TimedTaskSettingActivity extends BaseActivity {
|
||||
mDayOfWeekCheckBoxes.get(i).setChecked(mTimedTask.hasDayOfWeek(i + 1));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -285,7 +345,7 @@ public class TimedTaskSettingActivity extends BaseActivity {
|
||||
startActivityForResult(new Intent().setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)
|
||||
.setData(Uri.parse("package:" + getPackageName())), REQUEST_CODE_IGNORE_BATTERY);
|
||||
} else {
|
||||
createOrUpdateTimedTask();
|
||||
createOrUpdateTask();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@ -296,14 +356,14 @@ public class TimedTaskSettingActivity extends BaseActivity {
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
if (requestCode == REQUEST_CODE_IGNORE_BATTERY) {
|
||||
Log.d(LOG_TAG, "result code = " + requestCode);
|
||||
createOrUpdateTimedTask();
|
||||
createOrUpdateTask();
|
||||
}
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
}
|
||||
|
||||
private void createOrUpdateTimedTask() {
|
||||
if (mRunOnBroadcast.isChecked()) {
|
||||
createIntentTask();
|
||||
private void createOrUpdateTask() {
|
||||
if (mRunOnBroadcastRadio.isChecked()) {
|
||||
createOrUpdateIntentTask();
|
||||
return;
|
||||
}
|
||||
TimedTask task = createTimedTask();
|
||||
@ -311,6 +371,9 @@ public class TimedTaskSettingActivity extends BaseActivity {
|
||||
return;
|
||||
if (mTimedTask == null) {
|
||||
TimedTaskManager.getInstance().addTask(task);
|
||||
if (mIntentTask != null) {
|
||||
TimedTaskManager.getInstance().removeTask(mIntentTask);
|
||||
}
|
||||
Toast.makeText(this, R.string.text_already_create, Toast.LENGTH_SHORT).show();
|
||||
} else {
|
||||
task.setId(mTimedTask.getId());
|
||||
@ -320,22 +383,36 @@ public class TimedTaskSettingActivity extends BaseActivity {
|
||||
}
|
||||
|
||||
|
||||
private void createIntentTask() {
|
||||
private void createOrUpdateIntentTask() {
|
||||
int buttonId = mBroadcastGroup.getCheckedRadioButtonId();
|
||||
if (buttonId == -1) {
|
||||
Toast.makeText(this, R.string.error_empty_selection, Toast.LENGTH_SHORT).show();
|
||||
return;
|
||||
}
|
||||
String action;
|
||||
if(buttonId == R.id.run_on_other_broadcast){
|
||||
if (buttonId == R.id.run_on_other_broadcast) {
|
||||
action = mOtherBroadcastAction.getText().toString();
|
||||
if(action.isEmpty()){
|
||||
if (action.isEmpty()) {
|
||||
mOtherBroadcastAction.setError(getString(R.string.text_should_not_be_empty));
|
||||
return;
|
||||
}
|
||||
}else {
|
||||
} else {
|
||||
action = ACTIONS.get(buttonId);
|
||||
}
|
||||
IntentTask task = new IntentTask();
|
||||
task.setAction(action);
|
||||
task.setScriptPath(mScriptFile.getPath());
|
||||
TimedTaskManager.getInstance().addTask(task);
|
||||
if (mIntentTask != null) {
|
||||
task.setId(mIntentTask.getId());
|
||||
TimedTaskManager.getInstance().updateTask(task);
|
||||
Toast.makeText(this, R.string.text_already_create, Toast.LENGTH_SHORT).show();
|
||||
} else {
|
||||
TimedTaskManager.getInstance().addTask(task);
|
||||
if (mTimedTask != null) {
|
||||
TimedTaskManager.getInstance().removeTask(mTimedTask);
|
||||
}
|
||||
}
|
||||
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
@ -303,6 +303,78 @@
|
||||
android:paddingLeft="8dp"
|
||||
android:text="@string/text_run_on_screen_off"/>
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/run_on_screen_unlock"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:paddingLeft="8dp"
|
||||
android:text="@string/text_run_on_screen_unlock"/>
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/run_on_battery_change"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:paddingLeft="8dp"
|
||||
android:text="@string/text_run_on_battery_change"/>
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/run_on_power_connect"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:paddingLeft="8dp"
|
||||
android:text="@string/text_run_on_power_connect"/>
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/run_on_power_disconnect"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:paddingLeft="8dp"
|
||||
android:text="@string/text_run_on_power_disconnect"/>
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/run_on_conn_change"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:paddingLeft="8dp"
|
||||
android:text="@string/text_run_on_conn_change"/>
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/run_on_package_install"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:paddingLeft="8dp"
|
||||
android:text="@string/text_run_on_package_install"/>
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/run_on_package_uninstall"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:paddingLeft="8dp"
|
||||
android:text="@string/text_run_on_package_uninstall"/>
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/run_on_package_update"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:paddingLeft="8dp"
|
||||
android:text="@string/text_run_on_package_update"/>
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/run_on_headset_plug"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:paddingLeft="8dp"
|
||||
android:text="@string/text_run_on_headset_plug"/>
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/run_on_other_broadcast"
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@ -403,10 +403,20 @@
|
||||
<string name="foreground_notification_channel_name">前台服务通知</string>
|
||||
<string name="foreground_notification_title">Auto.js保持运行中</string>
|
||||
<string name="foreground_notification_text">点击进入主界面</string>
|
||||
<string name="text_run_on_boot">开机时运行</string>
|
||||
<string name="text_run_on_screen_on">亮屏时运行</string>
|
||||
<string name="text_run_on_screen_off">息屏时运行</string>
|
||||
<string name="text_run_on_other_broadcast">其他事件(广播)</string>
|
||||
<string name="text_broadcast_action">广播Action</string>
|
||||
<string name="text_broadcast_action_prefix">android.intent.action.</string>
|
||||
<string name="text_run_on_boot">开机时</string>
|
||||
<string name="text_run_on_screen_on">亮屏时</string>
|
||||
<string name="text_run_on_screen_off">息屏时</string>
|
||||
<string name="error_empty_selection">请选择一个广播事件选项</string>
|
||||
<string name="text_run_on_battery_change">电量变化时</string>
|
||||
<string name="text_run_on_screen_unlock">屏幕解锁时</string>
|
||||
<string name="text_run_on_power_connect">电源连接时</string>
|
||||
<string name="text_run_on_power_disconnect">电源断开时</string>
|
||||
<string name="text_run_on_conn_change">网络连接变化时</string>
|
||||
<string name="text_run_on_package_install">新应用安装时</string>
|
||||
<string name="text_run_on_package_uninstall">应用卸载时</string>
|
||||
<string name="text_run_on_package_update">应用更新时</string>
|
||||
<string name="text_run_on_headset_plug">耳机插拔时</string>
|
||||
</resources>
|
||||
|
||||
@ -11,7 +11,7 @@ import com.stardust.autojs.core.eventloop.EventEmitter;
|
||||
import com.stardust.autojs.core.looper.Loopers;
|
||||
import com.stardust.autojs.runtime.ScriptBridges;
|
||||
import com.stardust.autojs.runtime.ScriptRuntime;
|
||||
import com.stardust.util.MapEntries;
|
||||
import com.stardust.util.MapBuilder;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.HashSet;
|
||||
@ -59,21 +59,21 @@ public class Sensors extends EventEmitter implements Loopers.LooperQuitHandler {
|
||||
}
|
||||
|
||||
|
||||
private static final Map<String, Integer> SENSORS = new MapEntries<String, Integer>()
|
||||
.entry("ACCELEROMETER", Sensor.TYPE_ACCELEROMETER)
|
||||
.entry("MAGNETIC_FIELD", Sensor.TYPE_MAGNETIC_FIELD)
|
||||
.entry("ORIENTATION", Sensor.TYPE_ORIENTATION)
|
||||
.entry("GYROSCOPE", Sensor.TYPE_GYROSCOPE)
|
||||
.entry("LIGHT", Sensor.TYPE_LIGHT)
|
||||
.entry("TEMPERATURE", Sensor.TYPE_TEMPERATURE)
|
||||
.entry("PRESSURE", Sensor.TYPE_PRESSURE)
|
||||
.entry("AMBIENT_TEMPERATURE", Sensor.TYPE_AMBIENT_TEMPERATURE)
|
||||
.entry("PROXIMITY", Sensor.TYPE_PROXIMITY)
|
||||
.entry("GRAVITY", Sensor.TYPE_GRAVITY)
|
||||
.entry("LINEAR_ACCELERATION", Sensor.TYPE_LINEAR_ACCELERATION)
|
||||
.entry("RELATIVE_HUMIDITY", Sensor.TYPE_RELATIVE_HUMIDITY)
|
||||
.entry("AMBIENT_TEMPERATURE", Sensor.TYPE_AMBIENT_TEMPERATURE)
|
||||
.map();
|
||||
private static final Map<String, Integer> SENSORS = new MapBuilder<String, Integer>()
|
||||
.put("ACCELEROMETER", Sensor.TYPE_ACCELEROMETER)
|
||||
.put("MAGNETIC_FIELD", Sensor.TYPE_MAGNETIC_FIELD)
|
||||
.put("ORIENTATION", Sensor.TYPE_ORIENTATION)
|
||||
.put("GYROSCOPE", Sensor.TYPE_GYROSCOPE)
|
||||
.put("LIGHT", Sensor.TYPE_LIGHT)
|
||||
.put("TEMPERATURE", Sensor.TYPE_TEMPERATURE)
|
||||
.put("PRESSURE", Sensor.TYPE_PRESSURE)
|
||||
.put("AMBIENT_TEMPERATURE", Sensor.TYPE_AMBIENT_TEMPERATURE)
|
||||
.put("PROXIMITY", Sensor.TYPE_PROXIMITY)
|
||||
.put("GRAVITY", Sensor.TYPE_GRAVITY)
|
||||
.put("LINEAR_ACCELERATION", Sensor.TYPE_LINEAR_ACCELERATION)
|
||||
.put("RELATIVE_HUMIDITY", Sensor.TYPE_RELATIVE_HUMIDITY)
|
||||
.put("AMBIENT_TEMPERATURE", Sensor.TYPE_AMBIENT_TEMPERATURE)
|
||||
.build();
|
||||
|
||||
public boolean ignoresUnsupportedSensor = false;
|
||||
public final Delay delay = new Delay();
|
||||
|
||||
@ -3,7 +3,7 @@ package com.stardust.autojs.script;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import com.stardust.util.MapEntries;
|
||||
import com.stardust.util.MapBuilder;
|
||||
|
||||
import java.io.Reader;
|
||||
import java.io.StringReader;
|
||||
@ -23,10 +23,10 @@ public abstract class JavaScriptSource extends ScriptSource {
|
||||
public static final int EXECUTION_MODE_UI = 0x00000001;
|
||||
public static final int EXECUTION_MODE_AUTO = 0x00000002;
|
||||
|
||||
private static final Map<String, Integer> EXECUTION_MODES = new MapEntries<String, Integer>()
|
||||
.entry("ui", EXECUTION_MODE_UI)
|
||||
.entry("auto", EXECUTION_MODE_AUTO)
|
||||
.map();
|
||||
private static final Map<String, Integer> EXECUTION_MODES = new MapBuilder<String, Integer>()
|
||||
.put("ui", EXECUTION_MODE_UI)
|
||||
.put("auto", EXECUTION_MODE_AUTO)
|
||||
.build();
|
||||
private static final int EXECUTION_MODE_STRING_MAX_LENGTH = 7;
|
||||
|
||||
private int mExecutionMode = -1;
|
||||
|
||||
@ -1,17 +1,6 @@
|
||||
package com.stardust.autojs.script;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.view.View;
|
||||
|
||||
import com.stardust.util.MapEntries;
|
||||
|
||||
import java.io.Reader;
|
||||
import java.io.Serializable;
|
||||
import java.io.StringReader;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/4/2.
|
||||
|
||||
@ -7,7 +7,7 @@ import android.support.annotation.RequiresApi;
|
||||
import android.view.accessibility.AccessibilityNodeInfo;
|
||||
|
||||
import com.stardust.automator.UiObject;
|
||||
import com.stardust.util.MapEntries;
|
||||
import com.stardust.util.MapBuilder;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@ -17,15 +17,15 @@ import java.util.Map;
|
||||
|
||||
public class ActionFactory {
|
||||
|
||||
private static Map<Integer, Object> searchUpAction = new MapEntries<Integer, Object>()
|
||||
.entry(AccessibilityNodeInfo.ACTION_CLICK, null)
|
||||
.entry(AccessibilityNodeInfo.ACTION_LONG_CLICK, null)
|
||||
.entry(AccessibilityNodeInfo.ACTION_SELECT, null)
|
||||
.entry(AccessibilityNodeInfo.ACTION_FOCUS, null)
|
||||
.entry(AccessibilityNodeInfo.ACTION_SELECT, null)
|
||||
.entry(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD, null)
|
||||
.entry(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD, null)
|
||||
.map();
|
||||
private static Map<Integer, Object> searchUpAction = new MapBuilder<Integer, Object>()
|
||||
.put(AccessibilityNodeInfo.ACTION_CLICK, null)
|
||||
.put(AccessibilityNodeInfo.ACTION_LONG_CLICK, null)
|
||||
.put(AccessibilityNodeInfo.ACTION_SELECT, null)
|
||||
.put(AccessibilityNodeInfo.ACTION_FOCUS, null)
|
||||
.put(AccessibilityNodeInfo.ACTION_SELECT, null)
|
||||
.put(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD, null)
|
||||
.put(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD, null)
|
||||
.build();
|
||||
|
||||
public static SimpleAction createActionWithTextFilter(int action, String text, int index) {
|
||||
if (searchUpAction.containsKey(action))
|
||||
|
||||
@ -2,30 +2,29 @@ package com.stardust.util;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/1/26.
|
||||
*/
|
||||
|
||||
public class MapEntries<K, V> {
|
||||
public class MapBuilder<K, V> {
|
||||
|
||||
private Map<K, V> mMap;
|
||||
|
||||
public MapEntries() {
|
||||
public MapBuilder() {
|
||||
this(new HashMap<K, V>());
|
||||
}
|
||||
|
||||
public MapEntries(Map<K, V> map) {
|
||||
public MapBuilder(Map<K, V> map) {
|
||||
mMap = map;
|
||||
}
|
||||
|
||||
public MapEntries<K, V> entry(K key, V value) {
|
||||
public MapBuilder<K, V> put(K key, V value) {
|
||||
mMap.put(key, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Map<K, V> map() {
|
||||
public Map<K, V> build() {
|
||||
return mMap;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user