Change the way of action pefrom(no longer wait for event), add loading jar file support, fix simple action memory leak
This commit is contained in:
@@ -75,12 +75,12 @@
|
||||
<activity android:name=".ui.console.ConsoleActivity"/>
|
||||
<activity android:name=".ui.error.ErrorReportActivity"/>
|
||||
<activity android:name=".ui.help.LocalWebViewActivity"/>
|
||||
<activity android:name=".external.tasker.TaskerScriptEditActivity"/>
|
||||
|
||||
<activity
|
||||
android:name=".ui.error.IssueReporterActivity"
|
||||
android:theme="@style/IssueReporterTheme"/>
|
||||
|
||||
<service android:name=".service.VolumeChangeObverseService"/>
|
||||
<service android:name="com.stardust.view.Floaty$FloatHeadService"/>
|
||||
<service android:name="com.stardust.view.ResizableFloaty$FloatingWindowService"/>
|
||||
<service android:name="com.stardust.scriptdroid.external.floating_window.HoverMenuService"/>
|
||||
|
||||
46
app/src/main/java/com/stardust/app/VolumeChangeObserver.java
Normal file
46
app/src/main/java/com/stardust/app/VolumeChangeObserver.java
Normal file
@@ -0,0 +1,46 @@
|
||||
package com.stardust.app;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/4/4.
|
||||
*/
|
||||
|
||||
public class VolumeChangeObserver extends BroadcastReceiver {
|
||||
|
||||
public interface OnVolumeChangeListener {
|
||||
|
||||
void onVolumeChange();
|
||||
}
|
||||
|
||||
public static final String ACTION_VOLUME_CHANGE = "android.media.VOLUME_CHANGED_ACTION";
|
||||
|
||||
private long mLastChangeMillis;
|
||||
private List<OnVolumeChangeListener> mOnVolumeChangeListenerList = new ArrayList<>();
|
||||
|
||||
public void addOnVolumeChangeListener(OnVolumeChangeListener listener) {
|
||||
mOnVolumeChangeListenerList.add(listener);
|
||||
}
|
||||
|
||||
public void removeOnVolumeChangeListener(OnVolumeChangeListener listener) {
|
||||
mOnVolumeChangeListenerList.remove(listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
if (intent.getAction().equals(ACTION_VOLUME_CHANGE)) {
|
||||
if (System.currentTimeMillis() - mLastChangeMillis < 400) {
|
||||
return;
|
||||
}
|
||||
mLastChangeMillis = System.currentTimeMillis();
|
||||
for (OnVolumeChangeListener listener : mOnVolumeChangeListenerList) {
|
||||
listener.onVolumeChange();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,12 +3,15 @@ package com.stardust.scriptdroid;
|
||||
import android.app.Activity;
|
||||
import android.app.Application;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Keep;
|
||||
|
||||
import com.squareup.leakcanary.LeakCanary;
|
||||
import com.stardust.app.SimpleActivityLifecycleCallbacks;
|
||||
import com.stardust.app.VolumeChangeObserver;
|
||||
import com.stardust.scriptdroid.autojs.AutoJs;
|
||||
import com.stardust.scriptdroid.service.VolumeChangeObverseService;
|
||||
import com.stardust.scriptdroid.service.AccessibilityWatchDogService;
|
||||
import com.stardust.scriptdroid.tool.CrashHandler;
|
||||
import com.stardust.scriptdroid.ui.error.ErrorReportActivity;
|
||||
import com.stardust.theme.ThemeColor;
|
||||
@@ -29,6 +32,8 @@ public class App extends Application {
|
||||
return instance;
|
||||
}
|
||||
|
||||
private VolumeChangeObserver mVolumeChangeObserver = new VolumeChangeObserver();
|
||||
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
instance = this;
|
||||
@@ -50,7 +55,13 @@ public class App extends Application {
|
||||
ThemeColorManager.setDefaultThemeColor(new ThemeColor(getResources().getColor(R.color.colorPrimary), getResources().getColor(R.color.colorPrimaryDark), getResources().getColor(R.color.colorAccent)));
|
||||
ThemeColorManager.init(this);
|
||||
AutoJs.initInstance(this);
|
||||
VolumeChangeObverseService.addOnVolumeChangeListener(new VolumeChangeObverseService.OnVolumeChangeListener() {
|
||||
initVolumeChangeObserver();
|
||||
startService(new Intent(this, AccessibilityWatchDogService.class));
|
||||
}
|
||||
|
||||
private void initVolumeChangeObserver() {
|
||||
registerReceiver(mVolumeChangeObserver, new IntentFilter(VolumeChangeObserver.ACTION_VOLUME_CHANGE));
|
||||
mVolumeChangeObserver.addOnVolumeChangeListener(new VolumeChangeObserver.OnVolumeChangeListener() {
|
||||
@Override
|
||||
public void onVolumeChange() {
|
||||
if (Pref.isRunningVolumeControlEnabled()) {
|
||||
@@ -58,7 +69,6 @@ public class App extends Application {
|
||||
}
|
||||
}
|
||||
});
|
||||
startService(new Intent(this, VolumeChangeObverseService.class));
|
||||
}
|
||||
|
||||
private void registerActivityLifecycleCallback() {
|
||||
@@ -86,6 +96,7 @@ public class App extends Application {
|
||||
});
|
||||
}
|
||||
|
||||
@Keep
|
||||
public static Activity currentActivity() {
|
||||
return currentActivity;
|
||||
}
|
||||
@@ -94,4 +105,7 @@ public class App extends Application {
|
||||
return getApp().getString(id);
|
||||
}
|
||||
|
||||
public VolumeChangeObserver getVolumeChangeObserver() {
|
||||
return mVolumeChangeObserver;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
package com.stardust.scriptdroid.autojs;
|
||||
|
||||
import android.accessibilityservice.AccessibilityService;
|
||||
import android.content.Context;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import com.stardust.autojs.ScriptEngineService;
|
||||
import com.stardust.autojs.ScriptEngineServiceBuilder;
|
||||
import com.stardust.autojs.engine.NodeJsJavaScriptEngine;
|
||||
import com.stardust.autojs.engine.NodeJsJavaScriptEngineManager;
|
||||
import com.stardust.autojs.runtime.*;
|
||||
import com.stardust.autojs.runtime.action.ActionPerformAccessibilityDelegate;
|
||||
import com.stardust.autojs.runtime.api.Console;
|
||||
import com.stardust.automator.AccessibilityEventCommandHost;
|
||||
import com.stardust.automator.simple_action.SimpleActionPerformHost;
|
||||
import com.stardust.scriptdroid.App;
|
||||
import com.stardust.scriptdroid.Pref;
|
||||
import com.stardust.scriptdroid.R;
|
||||
@@ -40,7 +41,7 @@ public class AutoJs implements AccessibilityBridge {
|
||||
}
|
||||
|
||||
private final AccessibilityEventCommandHost mAccessibilityEventCommandHost = new AccessibilityEventCommandHost();
|
||||
private final ActionPerformAccessibilityDelegate mActionPerformAccessibilityDelegate = new ActionPerformAccessibilityDelegate();
|
||||
private final SimpleActionPerformHost mSimpleActionPerformHost = new SimpleActionPerformHost();
|
||||
private final AccessibilityActionRecorder mAccessibilityActionRecorder = new AccessibilityActionRecorder();
|
||||
private final LayoutInspector mLayoutInspector = new LayoutInspector();
|
||||
private final ScriptEngineService mScriptEngineService;
|
||||
@@ -62,14 +63,24 @@ public class AutoJs implements AccessibilityBridge {
|
||||
.build();
|
||||
ScriptEngineService.setInstance(mScriptEngineService);
|
||||
addAccessibilityServiceDelegates();
|
||||
getGlobalFunctions();
|
||||
}
|
||||
|
||||
private void getGlobalFunctions() {
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
mScriptEngineService.getGlobalFunctions();
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
|
||||
private void addAccessibilityServiceDelegates() {
|
||||
AccessibilityWatchDogService.addDelegateIfNeeded(100, mActionPerformAccessibilityDelegate);
|
||||
AccessibilityWatchDogService.addDelegateIfNeeded(200, mAccessibilityActionRecorder);
|
||||
AccessibilityWatchDogService.addDelegateIfNeeded(300, mAccessibilityEventCommandHost);
|
||||
AccessibilityWatchDogService.addDelegateIfNeeded(400, mAccessibilityInfoProvider);
|
||||
AccessibilityWatchDogService.addDelegateIfNeeded(500, mLayoutInspector);
|
||||
AccessibilityWatchDogService.addDelegate(100, mAccessibilityInfoProvider);
|
||||
// AccessibilityWatchDogService.addDelegate(200, mLayoutInspector);
|
||||
AccessibilityWatchDogService.addDelegate(300, mAccessibilityActionRecorder);
|
||||
// AccessibilityWatchDogService.addDelegate(400, mSimpleActionPerformHost);
|
||||
//AccessibilityWatchDogService.addDelegate(500, mAccessibilityEventCommandHost);
|
||||
}
|
||||
|
||||
public AccessibilityActionRecorder getAccessibilityActionRecorder() {
|
||||
@@ -86,8 +97,14 @@ public class AutoJs implements AccessibilityBridge {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActionPerformAccessibilityDelegate getActionPerformHost() {
|
||||
return mActionPerformAccessibilityDelegate;
|
||||
public SimpleActionPerformHost getActionPerformHost() {
|
||||
return mSimpleActionPerformHost;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public AccessibilityService getService() {
|
||||
return AccessibilityWatchDogService.getInstance();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -10,10 +10,10 @@ public class CommonUtils {
|
||||
|
||||
public static final String EXTRA_KEY_PATH = "path";
|
||||
|
||||
public static final String EXTRA_KEY_PREPARE_SCRIPT = "script";
|
||||
public static final String EXTRA_KEY_PRE_EXECUTE_SCRIPT = "script";
|
||||
|
||||
public static boolean isTaskerBundleValid(Bundle bundle) {
|
||||
return bundle.containsKey(CommonUtils.EXTRA_KEY_PATH);
|
||||
return bundle.containsKey(CommonUtils.EXTRA_KEY_PATH) || bundle.containsKey(EXTRA_KEY_PRE_EXECUTE_SCRIPT);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -68,7 +68,7 @@ public class HoverMenuService extends Service {
|
||||
|
||||
private static void setIsRunning(boolean isRunning) {
|
||||
sIsRunning = isRunning;
|
||||
EventBus.getDefault().post(new ServiceStateChangedEvent(sIsRunning));
|
||||
eventBus.post(new ServiceStateChangedEvent(sIsRunning));
|
||||
}
|
||||
|
||||
public static void postEvent(MessageEvent event) {
|
||||
@@ -96,7 +96,7 @@ public class HoverMenuService extends Service {
|
||||
private HoverMenu.OnExitListener mWindowHoverMenuMenuExitListener = new HoverMenu.OnExitListener() {
|
||||
@Override
|
||||
public void onExitByUserRequest() {
|
||||
EventBus.getDefault().post(new MessageEvent(MESSAGE_MENU_EXIT));
|
||||
eventBus.post(new MessageEvent(MESSAGE_MENU_EXIT));
|
||||
savePreferredLocation();
|
||||
mWindowHoverMenu.hide();
|
||||
stopSelf();
|
||||
@@ -106,7 +106,7 @@ public class HoverMenuService extends Service {
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
EventBus.getDefault().register(this);
|
||||
eventBus.register(this);
|
||||
mPrefs = getSharedPreferences(PREF_FILE, Context.MODE_PRIVATE);
|
||||
tryInitViews();
|
||||
}
|
||||
@@ -141,14 +141,14 @@ public class HoverMenuService extends Service {
|
||||
mWindowHoverMenu.setHoverMenuTransitionListener(new SimpleHoverMenuTransitionListener() {
|
||||
@Override
|
||||
public void onExpanding() {
|
||||
EventBus.getDefault().post(new MessageEvent(MESSAGE_MENU_EXPANDING));
|
||||
eventBus.post(new MessageEvent(MESSAGE_MENU_EXPANDING));
|
||||
captureCurrentWindow();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCollapsing() {
|
||||
AutoJs.getInstance().getLayoutInspector().clearCapture();
|
||||
EventBus.getDefault().post(new MessageEvent(MESSAGE_MENU_COLLAPSING));
|
||||
eventBus.post(new MessageEvent(MESSAGE_MENU_COLLAPSING));
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -182,8 +182,8 @@ public class HoverMenuService extends Service {
|
||||
public void onDestroy() {
|
||||
if (mWindowHoverMenu != null)
|
||||
mWindowHoverMenu.hide();
|
||||
if (EventBus.getDefault().isRegistered(this))
|
||||
EventBus.getDefault().unregister(this);
|
||||
if (eventBus.isRegistered(this))
|
||||
eventBus.unregister(this);
|
||||
setIsRunning(false);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.stardust.scriptdroid.external.floating_window.content;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v7.widget.SwitchCompat;
|
||||
import android.view.View;
|
||||
@@ -9,6 +8,7 @@ import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.stardust.app.VolumeChangeObserver;
|
||||
import com.stardust.scriptdroid.App;
|
||||
import com.stardust.scriptdroid.Pref;
|
||||
import com.stardust.scriptdroid.R;
|
||||
@@ -19,7 +19,6 @@ import com.stardust.scriptdroid.record.Recorder;
|
||||
import com.stardust.scriptdroid.record.accessibility.AccessibilityActionRecorder;
|
||||
import com.stardust.scriptdroid.record.inputevent.InputEventConverter;
|
||||
import com.stardust.scriptdroid.record.inputevent.TouchRecorder;
|
||||
import com.stardust.scriptdroid.service.VolumeChangeObverseService;
|
||||
import com.stardust.scriptdroid.ui.main.MainActivity;
|
||||
import com.stardust.util.MessageEvent;
|
||||
import com.stardust.view.ViewBinder;
|
||||
@@ -58,7 +57,7 @@ public class RecordNavigatorContent implements NavigatorContent, Recorder.OnStat
|
||||
private Recorder mRecorder;
|
||||
private Context mContext;
|
||||
|
||||
private VolumeChangeObverseService.OnVolumeChangeListener mOnVolumeChangeListener = new VolumeChangeObverseService.OnVolumeChangeListener() {
|
||||
private VolumeChangeObserver.OnVolumeChangeListener mOnVolumeChangeListener = new VolumeChangeObserver.OnVolumeChangeListener() {
|
||||
@Override
|
||||
public void onVolumeChange() {
|
||||
if (Pref.isRecordVolumeControlEnable()) {
|
||||
@@ -76,8 +75,7 @@ public class RecordNavigatorContent implements NavigatorContent, Recorder.OnStat
|
||||
mView = View.inflate(context, R.layout.floating_window_record, null);
|
||||
ViewBinder.bind(this);
|
||||
EventBus.getDefault().register(this);
|
||||
App.getApp().startService(new Intent(App.getApp(), VolumeChangeObverseService.class));
|
||||
VolumeChangeObverseService.addOnVolumeChangeListener(mOnVolumeChangeListener);
|
||||
App.getApp().getVolumeChangeObserver().addOnVolumeChangeListener(mOnVolumeChangeListener);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@@ -163,7 +161,7 @@ public class RecordNavigatorContent implements NavigatorContent, Recorder.OnStat
|
||||
pauseRecord();
|
||||
} else if (event.message.equals(HoverMenuService.MESSAGE_MENU_EXIT)) {
|
||||
EventBus.getDefault().unregister(this);
|
||||
VolumeChangeObverseService.removeOnVolumeChangeListener(mOnVolumeChangeListener);
|
||||
App.getApp().getVolumeChangeObserver().removeOnVolumeChangeListener(mOnVolumeChangeListener);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@ import com.stardust.autojs.script.FileScriptSource;
|
||||
import com.stardust.autojs.script.MultiScriptSource;
|
||||
import com.stardust.autojs.script.ScriptSource;
|
||||
import com.stardust.autojs.script.StringScriptSource;
|
||||
import com.stardust.scriptdroid.App;
|
||||
import com.stardust.scriptdroid.external.CommonUtils;
|
||||
import com.stardust.scriptdroid.R;
|
||||
|
||||
@@ -36,7 +35,7 @@ public class RunIntentActivity extends Activity {
|
||||
|
||||
private void handleIntent(Intent intent) {
|
||||
String path = getPath(intent);
|
||||
String script = intent.getStringExtra(CommonUtils.EXTRA_KEY_PREPARE_SCRIPT);
|
||||
String script = intent.getStringExtra(CommonUtils.EXTRA_KEY_PRE_EXECUTE_SCRIPT);
|
||||
ScriptSource source = null;
|
||||
if (path == null && script != null) {
|
||||
source = new StringScriptSource(script);
|
||||
|
||||
@@ -1,16 +1,13 @@
|
||||
package com.stardust.scriptdroid.external.tasker;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.util.Log;
|
||||
|
||||
import com.stardust.scriptdroid.App;
|
||||
import com.stardust.scriptdroid.external.CommonUtils;
|
||||
import com.stardust.scriptdroid.external.open.RunIntentActivity;
|
||||
import com.stardust.scriptdroid.external.shortcut.ShortcutActivity;
|
||||
import com.twofortyfouram.locale.sdk.client.receiver.AbstractPluginSettingReceiver;
|
||||
|
||||
/**
|
||||
@@ -36,6 +33,6 @@ public class FireSettingReceiver extends AbstractPluginSettingReceiver {
|
||||
context.startActivity(new Intent(App.getApp(), RunIntentActivity.class)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
.putExtra(CommonUtils.EXTRA_KEY_PATH, bundle.getString(CommonUtils.EXTRA_KEY_PATH))
|
||||
.putExtra(CommonUtils.EXTRA_KEY_PREPARE_SCRIPT, bundle.getString(CommonUtils.EXTRA_KEY_PREPARE_SCRIPT)));
|
||||
.putExtra(CommonUtils.EXTRA_KEY_PRE_EXECUTE_SCRIPT, bundle.getString(CommonUtils.EXTRA_KEY_PRE_EXECUTE_SCRIPT)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,37 +1,50 @@
|
||||
package com.stardust.scriptdroid.external.tasker;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.util.Log;
|
||||
import android.text.TextUtils;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import com.stardust.scriptdroid.scripts.ScriptFile;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.external.CommonUtils;
|
||||
import com.stardust.scriptdroid.scripts.ScriptFile;
|
||||
import com.stardust.scriptdroid.scripts.StorageScriptProvider;
|
||||
import com.stardust.scriptdroid.ui.BaseActivity;
|
||||
import com.stardust.scriptdroid.ui.main.script_list.ScriptAndFolderListRecyclerView;
|
||||
import com.stardust.scriptdroid.ui.main.script_list.ScriptListWithProgressBarView;
|
||||
import com.twofortyfouram.locale.sdk.client.ui.activity.AbstractPluginActivity;
|
||||
import com.stardust.view.ViewBinder;
|
||||
import com.stardust.view.ViewBinding;
|
||||
import com.twofortyfouram.locale.sdk.client.ui.activity.AbstractAppCompatPluginActivity;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/3/27.
|
||||
*/
|
||||
|
||||
public class TaskPrefEditActivity extends AbstractPluginActivity {
|
||||
public class TaskPrefEditActivity extends AbstractAppCompatPluginActivity {
|
||||
|
||||
private String mSelectedScriptFilePath;
|
||||
private String mPreExecuteScript;
|
||||
private StorageScriptProvider mStorageScriptProvider;
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_tasker_edit);
|
||||
BaseActivity.setToolbarAsBack(this, R.id.toolbar, getString(R.string.text_please_choose_a_script));
|
||||
initScriptListRecyclerView();
|
||||
ViewBinder.bind(this);
|
||||
}
|
||||
|
||||
private void initScriptListRecyclerView() {
|
||||
ScriptListWithProgressBarView scriptListWithProgressBarView = (ScriptListWithProgressBarView) findViewById(R.id.script_list);
|
||||
scriptListWithProgressBarView.setScriptFileOperationEnabled(false);
|
||||
scriptListWithProgressBarView.setOnItemClickListener(new ScriptAndFolderListRecyclerView.OnScriptFileClickListener() {
|
||||
mStorageScriptProvider = StorageScriptProvider.getExternalStorageProvider();
|
||||
ScriptListWithProgressBarView scriptList = (ScriptListWithProgressBarView) findViewById(R.id.script_list);
|
||||
scriptList.setScriptFileOperationEnabled(false);
|
||||
scriptList.setStorageScriptProvider(mStorageScriptProvider);
|
||||
scriptList.setCurrentDirectory(StorageScriptProvider.DEFAULT_DIRECTORY);
|
||||
scriptList.setOnItemClickListener(new ScriptAndFolderListRecyclerView.OnScriptFileClickListener() {
|
||||
@Override
|
||||
public void onClick(ScriptFile file) {
|
||||
mSelectedScriptFilePath = file.getPath();
|
||||
@@ -41,6 +54,31 @@ public class TaskPrefEditActivity extends AbstractPluginActivity {
|
||||
}
|
||||
|
||||
|
||||
@ViewBinding.Click(R.id.edit_script)
|
||||
private void editPreExecuteScript() {
|
||||
TaskerScriptEditActivity.edit(this, getString(R.string.text_pre_execute_script), getString(R.string.summary_pre_execute_script), mPreExecuteScript == null ? "" : mPreExecuteScript);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
if (item.getItemId() == R.id.action_refresh) {
|
||||
mStorageScriptProvider.refreshAll();
|
||||
} else if (item.getItemId() == R.id.action_clear_file_selection) {
|
||||
mSelectedScriptFilePath = null;
|
||||
} else {
|
||||
mPreExecuteScript = null;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.tasker_script_edit_menu, menu);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean isBundleValid(@NonNull Bundle bundle) {
|
||||
return CommonUtils.isTaskerBundleValid(bundle);
|
||||
@@ -49,6 +87,7 @@ public class TaskPrefEditActivity extends AbstractPluginActivity {
|
||||
@Override
|
||||
public void onPostCreateWithPreviousResult(@NonNull Bundle bundle, @NonNull String s) {
|
||||
mSelectedScriptFilePath = bundle.getString(CommonUtils.EXTRA_KEY_PATH);
|
||||
mPreExecuteScript = bundle.getString(CommonUtils.EXTRA_KEY_PRE_EXECUTE_SCRIPT);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -56,12 +95,27 @@ public class TaskPrefEditActivity extends AbstractPluginActivity {
|
||||
public Bundle getResultBundle() {
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(CommonUtils.EXTRA_KEY_PATH, mSelectedScriptFilePath);
|
||||
bundle.putString(CommonUtils.EXTRA_KEY_PRE_EXECUTE_SCRIPT, mPreExecuteScript);
|
||||
return bundle;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public String getResultBlurb(@NonNull Bundle bundle) {
|
||||
return bundle.getString(CommonUtils.EXTRA_KEY_PATH, getString(R.string.text_path_is_empty));
|
||||
String blurb = bundle.getString(CommonUtils.EXTRA_KEY_PATH);
|
||||
if (TextUtils.isEmpty(blurb)) {
|
||||
blurb = bundle.getString(CommonUtils.EXTRA_KEY_PRE_EXECUTE_SCRIPT);
|
||||
}
|
||||
if (TextUtils.isEmpty(blurb)) {
|
||||
blurb = getString(R.string.text_path_is_empty);
|
||||
}
|
||||
return blurb;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
if (resultCode == RESULT_OK) {
|
||||
mPreExecuteScript = data.getStringExtra(TaskerScriptEditActivity.EXTRA_CONTENT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
107
app/src/main/java/com/stardust/scriptdroid/external/tasker/TaskerScriptEditActivity.java
vendored
Normal file
107
app/src/main/java/com/stardust/scriptdroid/external/tasker/TaskerScriptEditActivity.java
vendored
Normal file
@@ -0,0 +1,107 @@
|
||||
package com.stardust.scriptdroid.external.tasker;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.jecelyin.editor.v2.common.Command;
|
||||
import com.jecelyin.editor.v2.ui.EditorDelegate;
|
||||
import com.jecelyin.editor.v2.view.EditorView;
|
||||
import com.jecelyin.editor.v2.view.menu.MenuDef;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.ui.BaseActivity;
|
||||
import com.stardust.scriptdroid.ui.edit.EditActivity;
|
||||
import com.stardust.scriptdroid.ui.edit.completion.InputMethodEnhanceBar;
|
||||
import com.stardust.scriptdroid.ui.edit.editor920.Editor920Activity;
|
||||
import com.stardust.scriptdroid.ui.edit.editor920.Editor920Utils;
|
||||
import com.stardust.view.ViewBinder;
|
||||
import com.stardust.view.ViewBinding;
|
||||
import com.stardust.widget.ToolbarMenuItem;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/4/5.
|
||||
*/
|
||||
|
||||
public class TaskerScriptEditActivity extends Editor920Activity {
|
||||
|
||||
public static final int REQUEST_CODE = "Love you. Can we go back?".hashCode() >> 16;
|
||||
public static final String EXTRA_CONTENT = "Still Love Eating 17.4.5";
|
||||
|
||||
public static void edit(Activity activity, String title, String summary, String content) {
|
||||
activity.startActivityForResult(new Intent(activity, TaskerScriptEditActivity.class)
|
||||
.putExtra(EXTRA_CONTENT, content)
|
||||
.putExtra("summary", summary)
|
||||
.putExtra("title", title), REQUEST_CODE);
|
||||
}
|
||||
|
||||
private EditorDelegate mEditorDelegate;
|
||||
private String mTitle, mSummary;
|
||||
private ToolbarMenuItem mRedo, mUndo;
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
handleIntent(getIntent());
|
||||
setUpUI();
|
||||
BaseActivity.setToolbarAsBack(this, R.id.toolbar, mTitle);
|
||||
setUpEditor();
|
||||
ViewBinder.bind(this);
|
||||
}
|
||||
|
||||
private void setUpUI() {
|
||||
setTheme(R.style.EditorTheme);
|
||||
setContentView(R.layout.activity_tasker_script_edit);
|
||||
((TextView) findViewById(R.id.summary)).setText(mSummary);
|
||||
mRedo = (ToolbarMenuItem) findViewById(R.id.redo);
|
||||
mUndo = (ToolbarMenuItem) findViewById(R.id.undo);
|
||||
}
|
||||
|
||||
private void handleIntent(Intent intent) {
|
||||
mTitle = intent.getStringExtra("title");
|
||||
mSummary = intent.getStringExtra("summary");
|
||||
String content = intent.getStringExtra(EXTRA_CONTENT);
|
||||
mEditorDelegate = new EditorDelegate(0, mTitle, content);
|
||||
}
|
||||
|
||||
private void setUpEditor() {
|
||||
final EditorView editorView = (EditorView) findViewById(R.id.editor);
|
||||
mEditorDelegate.setEditorView(editorView);
|
||||
Editor920Utils.setLang(mEditorDelegate, "JavaScript");
|
||||
editorView.getEditText().setHorizontallyScrolling(true);
|
||||
setUpInputMethodEnhanceBar(editorView);
|
||||
}
|
||||
|
||||
private void setUpInputMethodEnhanceBar(final EditorView editorView) {
|
||||
InputMethodEnhanceBar inputMethodEnhanceBar = (InputMethodEnhanceBar) findViewById(R.id.input_method_enhance_bar);
|
||||
inputMethodEnhanceBar.setEditTextBridge(new EditActivity.InputMethodEnhanceBarBridge(this, editorView.getEditText()));
|
||||
}
|
||||
|
||||
@ViewBinding.Click(R.id.undo)
|
||||
private void undo() {
|
||||
Command command = new Command(Command.CommandEnum.UNDO);
|
||||
mEditorDelegate.doCommand(command);
|
||||
}
|
||||
|
||||
@ViewBinding.Click(R.id.redo)
|
||||
private void redo() {
|
||||
Command command = new Command(Command.CommandEnum.REDO);
|
||||
mEditorDelegate.doCommand(command);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void finish() {
|
||||
setResult(RESULT_OK, new Intent().putExtra(EXTRA_CONTENT, mEditorDelegate.getText()));
|
||||
super.finish();
|
||||
}
|
||||
|
||||
public void setMenuStatus(int menuResId, int status) {
|
||||
boolean disabled = status == MenuDef.STATUS_DISABLED;
|
||||
if (menuResId == com.jecelyin.editor.v2.R.id.m_redo) {
|
||||
mRedo.setEnabled(!disabled);
|
||||
} else if (menuResId == com.jecelyin.editor.v2.R.id.m_undo) {
|
||||
mUndo.setEnabled(!disabled);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import android.accessibilityservice.AccessibilityService;
|
||||
import android.view.accessibility.AccessibilityEvent;
|
||||
import android.view.accessibility.AccessibilityNodeInfo;
|
||||
|
||||
import com.stardust.scriptdroid.service.AccessibilityWatchDogService;
|
||||
import com.stardust.view.accessibility.AccessibilityDelegate;
|
||||
|
||||
/**
|
||||
@@ -12,31 +13,30 @@ import com.stardust.view.accessibility.AccessibilityDelegate;
|
||||
|
||||
public class LayoutInspector implements AccessibilityDelegate {
|
||||
|
||||
private AccessibilityNodeInfo mRootInActiveWindow;
|
||||
private NodeInfo mCapture;
|
||||
|
||||
@Override
|
||||
public boolean onAccessibilityEvent(AccessibilityService service, AccessibilityEvent event) {
|
||||
mRootInActiveWindow = service.getRootInActiveWindow();
|
||||
return false;
|
||||
}
|
||||
|
||||
public AccessibilityNodeInfo getRootInActiveWindow() {
|
||||
return mRootInActiveWindow;
|
||||
}
|
||||
|
||||
public NodeInfo captureCurrentWindow() {
|
||||
if (mRootInActiveWindow == null) {
|
||||
AccessibilityService service = AccessibilityWatchDogService.getInstance();
|
||||
if (service == null) {
|
||||
mCapture = null;
|
||||
} else {
|
||||
mCapture = NodeInfo.capture(mRootInActiveWindow);
|
||||
AccessibilityNodeInfo root = service.getRootInActiveWindow();
|
||||
if (root == null) {
|
||||
mCapture = null;
|
||||
} else {
|
||||
mCapture = NodeInfo.capture(root);
|
||||
}
|
||||
}
|
||||
return mCapture;
|
||||
}
|
||||
|
||||
|
||||
public void clearCapture() {
|
||||
mRootInActiveWindow = null;
|
||||
mCapture = null;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,17 +1,20 @@
|
||||
package com.stardust.scriptdroid.layout_inspector;
|
||||
|
||||
import android.graphics.Rect;
|
||||
import android.support.annotation.Keep;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
|
||||
import android.view.accessibility.AccessibilityNodeInfo;
|
||||
|
||||
import com.stardust.view.accessibility.AccessibilityNodeInfoAllocator;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/3/10.
|
||||
*/
|
||||
|
||||
@Keep
|
||||
public class NodeInfo {
|
||||
|
||||
private List<NodeInfo> children = new ArrayList<>();
|
||||
@@ -74,7 +77,7 @@ public class NodeInfo {
|
||||
public static NodeInfo capture(@NonNull AccessibilityNodeInfo root) {
|
||||
NodeInfo nodeInfo = new NodeInfo(root);
|
||||
for (int i = 0; i < root.getChildCount(); i++) {
|
||||
AccessibilityNodeInfo child = root.getChild(i);
|
||||
AccessibilityNodeInfo child = AccessibilityNodeInfoAllocator.getGlobal().getChild(root, i);
|
||||
if (child != null) {
|
||||
nodeInfo.children.add(capture(child));
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ import android.util.SparseArray;
|
||||
import android.view.accessibility.AccessibilityEvent;
|
||||
import android.view.accessibility.AccessibilityNodeInfo;
|
||||
|
||||
import com.stardust.autojs.runtime.action.FilterAction;
|
||||
import com.stardust.automator.simple_action.FilterAction;
|
||||
import com.stardust.scriptdroid.layout_inspector.NodeInfo;
|
||||
import com.stardust.util.SparseArrayEntries;
|
||||
import com.stardust.view.accessibility.AccessibilityNodeInfoHelper;
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.stardust.scriptdroid.record.accessibility;
|
||||
|
||||
import android.accessibilityservice.AccessibilityService;
|
||||
import android.view.accessibility.AccessibilityEvent;
|
||||
import android.view.accessibility.AccessibilityNodeInfo;
|
||||
|
||||
import com.stardust.scriptdroid.record.Recorder;
|
||||
import com.stardust.view.accessibility.AccessibilityDelegate;
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.stardust.scriptdroid.scripts;
|
||||
import android.os.Environment;
|
||||
|
||||
import com.stardust.pio.PFile;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileFilter;
|
||||
import java.io.FilenameFilter;
|
||||
@@ -56,7 +57,7 @@ public class ScriptFile extends File {
|
||||
return listFiles(new FileFilter() {
|
||||
@Override
|
||||
public boolean accept(File file) {
|
||||
return file.isDirectory() || (file.getName().endsWith(".js") && !file.getName().startsWith("."));
|
||||
return (file.isDirectory() || file.getName().endsWith(".js")) && !file.getName().startsWith(".");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -14,6 +14,8 @@ import java.lang.ref.WeakReference;
|
||||
import java.util.Map;
|
||||
import java.util.SortedMap;
|
||||
import java.util.TreeMap;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/2/14.
|
||||
@@ -25,45 +27,10 @@ public class AccessibilityWatchDogService extends AccessibilityService {
|
||||
|
||||
private static final SortedMap<Integer, AccessibilityDelegate> mDelegates = new TreeMap<>();
|
||||
private static WeakReference<AccessibilityWatchDogService> instance;
|
||||
private Executor mExecutor = Executors.newSingleThreadExecutor();
|
||||
|
||||
public static void addDelegate(AccessibilityDelegate delegate, int uniquePriority) {
|
||||
synchronized (mDelegates) {
|
||||
mDelegates.put(uniquePriority, delegate);
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean containsPriority(int priority) {
|
||||
synchronized (mDelegates) {
|
||||
return mDelegates.containsKey(priority);
|
||||
}
|
||||
}
|
||||
|
||||
public static AccessibilityDelegate getDelegate(int priority) {
|
||||
synchronized (mDelegates) {
|
||||
return mDelegates.get(priority);
|
||||
}
|
||||
}
|
||||
|
||||
public static void addDelegateIfNeeded(int priority, Class<? extends AccessibilityDelegate> delegateClass) {
|
||||
try {
|
||||
addDelegateIfNeeded(priority, delegateClass.newInstance());
|
||||
} catch (InstantiationException | IllegalAccessException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public static void addDelegateIfNeeded(int priority, AccessibilityDelegate delegate) {
|
||||
synchronized (mDelegates) {
|
||||
if (!mDelegates.containsKey(priority)) {
|
||||
mDelegates.put(priority, delegate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean removeDelegate(int priority) {
|
||||
synchronized (mDelegates) {
|
||||
return mDelegates.remove(priority) != null;
|
||||
}
|
||||
public static void addDelegate(int uniquePriority, AccessibilityDelegate delegate) {
|
||||
mDelegates.put(uniquePriority, delegate);
|
||||
}
|
||||
|
||||
public static boolean isEnable() {
|
||||
@@ -77,15 +44,18 @@ public class AccessibilityWatchDogService extends AccessibilityService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAccessibilityEvent(AccessibilityEvent event) {
|
||||
public void onAccessibilityEvent(final AccessibilityEvent event) {
|
||||
Log.v(TAG, "onAccessibilityEvent: " + event);
|
||||
synchronized (mDelegates) {
|
||||
for (Map.Entry<Integer, AccessibilityDelegate> entry : mDelegates.entrySet()) {
|
||||
//Log.v(TAG, "delegate: " + entry.getValue().getClass().getName());
|
||||
if (entry.getValue().onAccessibilityEvent(this, event))
|
||||
break;
|
||||
mExecutor.execute(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
for (Map.Entry<Integer, AccessibilityDelegate> entry : mDelegates.entrySet()) {
|
||||
Log.v(TAG, "delegate: " + entry.getValue().getClass().getName());
|
||||
if (entry.getValue().onAccessibilityEvent(AccessibilityWatchDogService.this, event))
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,82 +0,0 @@
|
||||
package com.stardust.scriptdroid.service;
|
||||
|
||||
import android.app.Service;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.os.IBinder;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.widget.SwitchCompat;
|
||||
|
||||
import com.stardust.scriptdroid.record.Recorder;
|
||||
import com.stardust.scriptdroid.record.accessibility.AccessibilityActionRecorder;
|
||||
import com.stardust.scriptdroid.Pref;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/2/16.
|
||||
*/
|
||||
|
||||
public class VolumeChangeObverseService extends Service {
|
||||
|
||||
public interface OnVolumeChangeListener {
|
||||
|
||||
void onVolumeChange();
|
||||
}
|
||||
|
||||
private static final String ACTION_VOLUME_CHANGE = "android.media.VOLUME_CHANGED_ACTION";
|
||||
private static List<OnVolumeChangeListener> mOnVolumeChangeListenerList = new ArrayList<>();
|
||||
|
||||
public static void addOnVolumeChangeListener(OnVolumeChangeListener listener) {
|
||||
mOnVolumeChangeListenerList.add(listener);
|
||||
}
|
||||
|
||||
public static void removeOnVolumeChangeListener(OnVolumeChangeListener listener) {
|
||||
mOnVolumeChangeListenerList.remove(listener);
|
||||
}
|
||||
|
||||
private VolumeChangeReceiver mVolumeChangeReceiver;
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
mVolumeChangeReceiver = new VolumeChangeReceiver();
|
||||
registerReceiver(mVolumeChangeReceiver, new IntentFilter(ACTION_VOLUME_CHANGE));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public IBinder onBind(Intent intent) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
unregisterReceiver(mVolumeChangeReceiver);
|
||||
}
|
||||
|
||||
private class VolumeChangeReceiver extends BroadcastReceiver {
|
||||
|
||||
private long mLastChangeMillis;
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
if (intent.getAction().equals(ACTION_VOLUME_CHANGE)) {
|
||||
if (System.currentTimeMillis() - mLastChangeMillis < 400) {
|
||||
return;
|
||||
}
|
||||
mLastChangeMillis = System.currentTimeMillis();
|
||||
for (OnVolumeChangeListener listener : mOnVolumeChangeListenerList) {
|
||||
listener.onVolumeChange();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.stardust.scriptdroid.ui;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
@@ -10,6 +11,7 @@ import android.view.View;
|
||||
|
||||
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.external.tasker.TaskPrefEditActivity;
|
||||
import com.stardust.theme.ThemeColorManager;
|
||||
import com.stardust.util.BackPressedHandler;
|
||||
|
||||
@@ -71,18 +73,7 @@ public abstract class BaseActivity extends AppCompatActivity {
|
||||
}
|
||||
|
||||
public void setToolbarAsBack(String title) {
|
||||
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
|
||||
toolbar.setTitle(title);
|
||||
setSupportActionBar(toolbar);
|
||||
if (getSupportActionBar() != null) {
|
||||
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
}
|
||||
setToolbarAsBack(this, R.id.toolbar, title);
|
||||
}
|
||||
|
||||
public void registerBackPressedHandler(BackPressedHandler handler) {
|
||||
@@ -95,4 +86,19 @@ public abstract class BaseActivity extends AppCompatActivity {
|
||||
super.onBackPressed();
|
||||
}
|
||||
}
|
||||
|
||||
public static void setToolbarAsBack(final AppCompatActivity activity, int id, String title) {
|
||||
Toolbar toolbar = (Toolbar) activity.findViewById(id);
|
||||
toolbar.setTitle(title);
|
||||
activity.setSupportActionBar(toolbar);
|
||||
if (activity.getSupportActionBar() != null) {
|
||||
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
activity.finish();
|
||||
}
|
||||
});
|
||||
activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.stardust.scriptdroid.ui.edit;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
@@ -9,9 +10,9 @@ import android.support.annotation.NonNull;
|
||||
import android.support.design.widget.Snackbar;
|
||||
import android.support.v4.view.GravityCompat;
|
||||
import android.support.v4.widget.DrawerLayout;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.util.SparseArray;
|
||||
import android.view.View;
|
||||
import android.view.inputmethod.InputMethod;
|
||||
|
||||
import com.afollestad.materialdialogs.DialogAction;
|
||||
import com.afollestad.materialdialogs.MaterialDialog;
|
||||
@@ -19,11 +20,14 @@ import com.stardust.autojs.engine.JavaScriptEngine;
|
||||
import com.stardust.autojs.ScriptExecutionListener;
|
||||
import com.stardust.autojs.script.FileScriptSource;
|
||||
import com.stardust.autojs.script.ScriptSource;
|
||||
import com.stardust.autojs.script.StringScriptSource;
|
||||
import com.stardust.pio.PFile;
|
||||
import com.stardust.scriptdroid.Pref;
|
||||
import com.stardust.scriptdroid.autojs.AutoJs;
|
||||
import com.stardust.scriptdroid.scripts.ScriptFile;
|
||||
import com.stardust.scriptdroid.ui.BaseActivity;
|
||||
import com.stardust.scriptdroid.ui.edit.editor920.Editor920Activity;
|
||||
import com.stardust.scriptdroid.ui.edit.editor920.Editor920Utils;
|
||||
import com.stardust.scriptdroid.ui.edit.sidemenu.EditSideMenuFragment;
|
||||
import com.stardust.scriptdroid.ui.edit.sidemenu.FunctionListRecyclerView;
|
||||
import com.stardust.theme.dialog.ThemeColorMaterialDialogBuilder;
|
||||
@@ -52,11 +56,40 @@ import timber.log.Timber;
|
||||
|
||||
public class EditActivity extends Editor920Activity {
|
||||
|
||||
public static class InputMethodEnhanceBarBridge implements InputMethodEnhanceBar.EditTextBridge {
|
||||
|
||||
private Editor920Activity mEditor920Activity;
|
||||
private TextView mTextView;
|
||||
|
||||
public InputMethodEnhanceBarBridge(Editor920Activity editor920Activity, TextView textView) {
|
||||
mEditor920Activity = editor920Activity;
|
||||
mTextView = textView;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void appendText(CharSequence text) {
|
||||
mEditor920Activity.insertText(text);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void backspace(int count) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextView getEditText() {
|
||||
return mTextView;
|
||||
}
|
||||
}
|
||||
|
||||
public static final String EXTRA_CONTENT = "Still Love Eating 17.4.5";
|
||||
|
||||
private static final String KEY_EDIT_ACTIVITY_FIRST_USE = "KEY_EDIT_ACTIVITY_FIRST_USE";
|
||||
|
||||
private static final String ACTION_ON_RUN_FINISHED = "ACTION_ON_RUN_FINISHED";
|
||||
private static final String EXTRA_EXCEPTION_MESSAGE = "EXTRA_EXCEPTION_MESSAGE";
|
||||
|
||||
|
||||
private static final ScriptExecutionListener SCRIPT_EXECUTION_LISTENER = new ScriptExecutionListener() {
|
||||
|
||||
@Override
|
||||
@@ -82,12 +115,11 @@ public class EditActivity extends Editor920Activity {
|
||||
editFile(context, null, path);
|
||||
}
|
||||
|
||||
|
||||
public static void editAssetFile(Context context, String name, String path) {
|
||||
public static void view(Context context, String name, String content) {
|
||||
context.startActivity(new Intent(context, EditActivity.class)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
.putExtra("fromAssets", true)
|
||||
.putExtra("path", path)
|
||||
.putExtra("readOnly", true)
|
||||
.putExtra("content", content)
|
||||
.putExtra("name", name));
|
||||
}
|
||||
|
||||
@@ -125,7 +157,10 @@ public class EditActivity extends Editor920Activity {
|
||||
|
||||
public void onCreate(Bundle b) {
|
||||
super.onCreate(b);
|
||||
handleIntent();
|
||||
setTheme(R.style.EditorTheme);
|
||||
mView = View.inflate(this, R.layout.activity_edit, null);
|
||||
setContentView(mView);
|
||||
handleIntent(getIntent());
|
||||
setUpUI();
|
||||
setUpEditor();
|
||||
registerReceiver(mOnRunFinishedReceiver, new IntentFilter(ACTION_ON_RUN_FINISHED));
|
||||
@@ -149,32 +184,29 @@ public class EditActivity extends Editor920Activity {
|
||||
}
|
||||
}
|
||||
|
||||
private void handleIntent() {
|
||||
String path = getIntent().getStringExtra("path");
|
||||
mName = getIntent().getStringExtra("name");
|
||||
if (path == null) {
|
||||
finish();
|
||||
private void handleIntent(Intent intent) {
|
||||
String path = intent.getStringExtra("path");
|
||||
mName = intent.getStringExtra("name");
|
||||
mReadOnly = intent.getBooleanExtra("readOnly", false);
|
||||
boolean saveEnabled = intent.getBooleanExtra("saveEnabled", true);
|
||||
if (mReadOnly || !saveEnabled) {
|
||||
findViewById(R.id.save).setVisibility(View.GONE);
|
||||
}
|
||||
String content = intent.getStringExtra("content");
|
||||
if (content != null) {
|
||||
mEditorDelegate = new EditorDelegate(0, mName, content);
|
||||
} else {
|
||||
if (getIntent().getBooleanExtra("fromAssets", false)) {
|
||||
mReadOnly = true;
|
||||
//TODO 优化
|
||||
mFile = PFile.copyAssetToTmpFile(this, path);
|
||||
} else {
|
||||
mFile = new File(path);
|
||||
}
|
||||
mFile = new File(path);
|
||||
if (mName == null) {
|
||||
mName = mFile.getName();
|
||||
}
|
||||
mEditorDelegate = new EditorDelegate(0, mFile, 0, "utf-8");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void setUpUI() {
|
||||
setTheme(R.style.EditorTheme);
|
||||
ThemeColorManager.addActivityStatusBar(this);
|
||||
mView = View.inflate(this, R.layout.activity_edit, null);
|
||||
mDrawerLayout = (DrawerLayout) mView.findViewById(R.id.drawer_layout);
|
||||
setContentView(mView);
|
||||
initSideMenuFragment();
|
||||
setUpToolbar();
|
||||
initMenuItem();
|
||||
@@ -194,57 +226,33 @@ public class EditActivity extends Editor920Activity {
|
||||
}
|
||||
|
||||
private void setUpEditor() {
|
||||
if (mFile != null) {
|
||||
mEditorDelegate = new EditorDelegate(0, mFile, 0, null);
|
||||
final EditorView editorView = (EditorView) findViewById(R.id.editor);
|
||||
mEditorDelegate.setEditorView(editorView);
|
||||
editorView.getEditText().setReadOnly(mReadOnly);
|
||||
editorView.getEditText().setHorizontallyScrolling(true);
|
||||
InputMethodEnhanceBar inputMethodEnhanceBar = (InputMethodEnhanceBar) findViewById(R.id.input_method_enhance_bar);
|
||||
if (mReadOnly) {
|
||||
inputMethodEnhanceBar.setVisibility(View.GONE);
|
||||
} else {
|
||||
inputMethodEnhanceBar.setEditTextBridge(new InputMethodEnhanceBar.EditTextBridge() {
|
||||
@Override
|
||||
public void appendText(CharSequence text) {
|
||||
insertText(text);
|
||||
}
|
||||
final EditorView editorView = (EditorView) findViewById(R.id.editor);
|
||||
mEditorDelegate.setEditorView(editorView);
|
||||
if (mFile == null)
|
||||
Editor920Utils.setLang(mEditorDelegate, "JavaScript");
|
||||
editorView.getEditText().setReadOnly(mReadOnly);
|
||||
editorView.getEditText().setHorizontallyScrolling(true);
|
||||
setUpInputMethodEnhanceBar(editorView);
|
||||
|
||||
@Override
|
||||
public void backspace(int count) {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextView getEditText() {
|
||||
return editorView.getEditText();
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
}
|
||||
private void setUpInputMethodEnhanceBar(final EditorView editorView) {
|
||||
InputMethodEnhanceBar inputMethodEnhanceBar = (InputMethodEnhanceBar) findViewById(R.id.input_method_enhance_bar);
|
||||
if (mReadOnly) {
|
||||
inputMethodEnhanceBar.setVisibility(View.GONE);
|
||||
} else {
|
||||
inputMethodEnhanceBar.setEditTextBridge(new InputMethodEnhanceBarBridge(this, editorView.getEditText()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void setUpToolbar() {
|
||||
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
|
||||
toolbar.setTitle(mName);
|
||||
setSupportActionBar(toolbar);
|
||||
if (getSupportActionBar() != null) {
|
||||
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
}
|
||||
BaseActivity.setToolbarAsBack(this, R.id.toolbar, mName);
|
||||
}
|
||||
|
||||
@ViewBinding.Click(R.id.run)
|
||||
private void runAndSaveFileIFNeeded() {
|
||||
if (mEditorDelegate.isChanged()) {
|
||||
if (!mReadOnly && mEditorDelegate.isChanged()) {
|
||||
saveFile(false, new SaveListener() {
|
||||
@Override
|
||||
public void onSaved() {
|
||||
@@ -267,7 +275,11 @@ public class EditActivity extends Editor920Activity {
|
||||
private void run() {
|
||||
Snackbar.make(mView, R.string.text_start_running, Snackbar.LENGTH_SHORT).show();
|
||||
setMenuStatus(R.id.run, MenuDef.STATUS_DISABLED);
|
||||
AutoJs.getInstance().getScriptEngineService().execute(new FileScriptSource(mName, mFile), SCRIPT_EXECUTION_LISTENER);
|
||||
if (mFile != null) {
|
||||
AutoJs.getInstance().getScriptEngineService().execute(new FileScriptSource(mName, mFile), SCRIPT_EXECUTION_LISTENER);
|
||||
} else {
|
||||
AutoJs.getInstance().getScriptEngineService().execute(new StringScriptSource(mName, mEditorDelegate.getText()), SCRIPT_EXECUTION_LISTENER);
|
||||
}
|
||||
}
|
||||
|
||||
@ViewBinding.Click(R.id.undo)
|
||||
@@ -314,6 +326,7 @@ public class EditActivity extends Editor920Activity {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void showExitConfirmDialog() {
|
||||
new ThemeColorMaterialDialogBuilder(this)
|
||||
.title(R.string.text_alert)
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.stardust.scriptdroid.ui.edit.editor920;
|
||||
|
||||
import com.jecelyin.editor.v2.ui.Document;
|
||||
import com.jecelyin.editor.v2.ui.EditorDelegate;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/4/5.
|
||||
*/
|
||||
|
||||
public class Editor920Utils {
|
||||
|
||||
public static Document getDocument(EditorDelegate editorDelegate) {
|
||||
try {
|
||||
Field field = EditorDelegate.class.getDeclaredField("document");
|
||||
field.setAccessible(true);
|
||||
return (Document) field.get(editorDelegate);
|
||||
} catch (NoSuchFieldException | IllegalAccessException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public static void setLang(EditorDelegate editorDelegate, String name) {
|
||||
getDocument(editorDelegate).setMode(name);
|
||||
}
|
||||
}
|
||||
@@ -15,13 +15,13 @@ public class IssueReporterActivity extends AbstractIssueReporterActivity {
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
//绕过GitHub安全检查
|
||||
String token = decode("MzA5MWJhNWI0NDM2NWYzOGRmNDA4ZWRhM2Y5MTUxN2ZlNDVlZDBhZQ==");
|
||||
String token = decode("ZGRjYWM4NTI5ZmJjZjFkMjk3NTU1NWYyODEwNmQzYjJhYWU0MjFmMA==");
|
||||
setGuestToken(token);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected GithubTarget getTarget() {
|
||||
return new GithubTarget("hyb1996", "NoRootScriptDroid");
|
||||
return new GithubTarget("hyb1996-guest", "AutoJsIssueReport");
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ public abstract class ScriptFileOperation {
|
||||
public static void createShortcut(ScriptFile scriptFile) {
|
||||
new Shortcut(App.getApp()).name(scriptFile.getSimplifiedName())
|
||||
.targetClass(ShortcutActivity.class)
|
||||
.icon(R.drawable.ic_robot_green)
|
||||
.icon(R.drawable.ic_node_js_black)
|
||||
.extras(new Intent().putExtra(CommonUtils.EXTRA_KEY_PATH, scriptFile.getPath()))
|
||||
.send();
|
||||
}
|
||||
|
||||
@@ -9,11 +9,13 @@ import android.view.ViewGroup;
|
||||
|
||||
import com.afollestad.materialdialogs.MaterialDialog;
|
||||
import com.stardust.app.Fragment;
|
||||
import com.stardust.pio.PFile;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.scripts.sample.Sample;
|
||||
import com.stardust.scriptdroid.scripts.sample.SampleFileManager;
|
||||
import com.stardust.scriptdroid.ui.edit.EditActivity;
|
||||
import com.stardust.scriptdroid.ui.main.MainActivity;
|
||||
import com.stardust.util.AssetsCache;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@@ -75,7 +77,7 @@ public class SampleScriptListFragment extends Fragment {
|
||||
}
|
||||
|
||||
private void viewSample(Sample sample) {
|
||||
EditActivity.editAssetFile(getContext(), sample.name, sample.path);
|
||||
EditActivity.view(getContext(), sample.name, AssetsCache.get(getActivity(), sample.path));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -110,8 +110,8 @@ public class ScriptAndFolderListRecyclerView extends RecyclerView {
|
||||
init();
|
||||
}
|
||||
|
||||
private void setCurrentDirectory(final ScriptFile folder, boolean canGoBack) {
|
||||
mCurrentDirectory = folder;
|
||||
private void setCurrentDirectory(final ScriptFile directory, boolean canGoBack) {
|
||||
mCurrentDirectory = directory;
|
||||
mCanGoBack = canGoBack;
|
||||
if (mFileProcessListener != null) {
|
||||
mFileProcessListener.onFilesListing();
|
||||
@@ -119,7 +119,7 @@ public class ScriptAndFolderListRecyclerView extends RecyclerView {
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
mScriptFileList = mStorageScriptProvider.getDirectoryScriptFiles(folder);
|
||||
mScriptFileList = mStorageScriptProvider.getDirectoryScriptFiles(directory);
|
||||
post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
@@ -131,6 +131,10 @@ public class ScriptAndFolderListRecyclerView extends RecyclerView {
|
||||
}).start();
|
||||
}
|
||||
|
||||
public void setCurrentDirectory(final ScriptFile directory) {
|
||||
setCurrentDirectory(directory, !directory.equals(mRootDirectory));
|
||||
}
|
||||
|
||||
private void setRootDirectory(ScriptFile folder) {
|
||||
mRootDirectory = folder;
|
||||
setCurrentDirectory(mRootDirectory, false);
|
||||
@@ -195,7 +199,7 @@ public class ScriptAndFolderListRecyclerView extends RecyclerView {
|
||||
Bundle bundle = (Bundle) state;
|
||||
mRootDirectory = (ScriptFile) bundle.getSerializable("root");
|
||||
mCurrentDirectory = (ScriptFile) bundle.getSerializable("current");
|
||||
setCurrentDirectory(mCurrentDirectory, !mCurrentDirectory.equals(mRootDirectory));
|
||||
setCurrentDirectory(mCurrentDirectory);
|
||||
super.onRestoreInstanceState(bundle.getParcelable("superData"));
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ import android.view.View;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.scripts.ScriptFile;
|
||||
import com.stardust.scriptdroid.scripts.StorageScriptProvider;
|
||||
|
||||
/**
|
||||
@@ -89,4 +90,7 @@ public class ScriptListWithProgressBarView extends FrameLayout {
|
||||
}
|
||||
|
||||
|
||||
public void setCurrentDirectory(ScriptFile directory) {
|
||||
mScriptAndFolderListRecyclerView.setCurrentDirectory(directory);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ import com.stardust.autojs.script.ScriptSource;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.yqritc.recyclerviewflexibledivider.HorizontalDividerItemDecoration;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -44,7 +45,7 @@ public class TaskListRecyclerView extends ThemeColorRecyclerView implements Java
|
||||
}
|
||||
};
|
||||
|
||||
private final List<JavaScriptEngine> mScriptEngines = new LinkedList<>();
|
||||
private final List<JavaScriptEngine> mScriptEngines = new ArrayList<>();
|
||||
private Adapter mAdapter;
|
||||
|
||||
public TaskListRecyclerView(Context context) {
|
||||
|
||||
@@ -45,9 +45,14 @@ public class TaskManagerFragment extends Fragment {
|
||||
|
||||
@Override
|
||||
public void onSomethingChanged() {
|
||||
boolean noRunningScript = mTaskListRecyclerView.getAdapter().getItemCount() == 0;
|
||||
final boolean noRunningScript = mTaskListRecyclerView.getAdapter().getItemCount() == 0;
|
||||
mNoRunningScriptNotice.setVisibility(noRunningScript ? View.VISIBLE : View.GONE);
|
||||
mCloseAllView.setVisibility(noRunningScript ? View.GONE : View.VISIBLE);
|
||||
mCloseAllView.postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
mCloseAllView.setVisibility(noRunningScript ? View.GONE : View.VISIBLE);
|
||||
}
|
||||
}, 150);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
@@ -118,10 +118,5 @@ public class AboutActivity extends BaseActivity {
|
||||
Toast.makeText(this, R.string.text_it_is_the_developer_of_app, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
|
||||
private void setClipText(CharSequence label, CharSequence text) {
|
||||
ClipboardManager clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
|
||||
clipboardManager.setPrimaryClip(ClipData.newPlainText(label, text));
|
||||
Toast.makeText(this, label + getString(R.string.text_already_copy_to_clip), Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
BIN
app/src/main/res/drawable/ic_refresh_white_24dp.png
Normal file
BIN
app/src/main/res/drawable/ic_refresh_white_24dp.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 509 B |
@@ -1,9 +1,54 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<android.support.design.widget.AppBarLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@android:color/transparent"
|
||||
android:clipToPadding="false"
|
||||
android:theme="@style/AppTheme.AppBarOverlay">
|
||||
|
||||
|
||||
<com.stardust.theme.widget.ThemeColorToolbar
|
||||
android:id="@+id/toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?attr/actionBarSize"
|
||||
app:popupTheme="@style/AppTheme.PopupOverlay"
|
||||
app:title="@string/_app_name">
|
||||
|
||||
|
||||
</com.stardust.theme.widget.ThemeColorToolbar>
|
||||
</android.support.design.widget.AppBarLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/edit_script"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="#e4e4e4"
|
||||
android:foreground="?selectableItemBackground">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="22dp"
|
||||
android:layout_height="22dp"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:layout_marginLeft="17dp"
|
||||
android:layout_marginRight="17dp"
|
||||
android:layout_marginTop="12dp"
|
||||
android:src="@drawable/ic_edit_gray_48dp"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:text="@string/text_edit_prepare_script"
|
||||
android:textColor="@android:color/primary_text_light"
|
||||
android:textSize="16sp"/>
|
||||
</LinearLayout>
|
||||
|
||||
<com.stardust.scriptdroid.ui.main.script_list.ScriptListWithProgressBarView
|
||||
android:id="@+id/script_list"
|
||||
android:layout_width="match_parent"
|
||||
|
||||
71
app/src/main/res/layout/activity_tasker_script_edit.xml
Normal file
71
app/src/main/res/layout/activity_tasker_script_edit.xml
Normal file
@@ -0,0 +1,71 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
tools:context="com.stardust.scriptdroid.ui.edit.EditActivity">
|
||||
|
||||
<android.support.design.widget.AppBarLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:theme="@style/AppTheme.AppBarOverlay">
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<com.stardust.theme.widget.ThemeColorToolbar
|
||||
android:id="@+id/toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?attr/actionBarSize"
|
||||
android:background="?attr/colorPrimary"
|
||||
app:popupTheme="@style/AppTheme.PopupOverlay"
|
||||
app:title="@string/_app_name">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="right"
|
||||
android:orientation="horizontal"
|
||||
android:paddingRight="8dp">
|
||||
|
||||
<com.stardust.widget.ToolbarMenuItem
|
||||
android:id="@+id/undo"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="match_parent"
|
||||
app:icon="@drawable/ic_undo_white_48dp"
|
||||
app:text="@string/text_undo"/>
|
||||
|
||||
<com.stardust.widget.ToolbarMenuItem
|
||||
android:id="@+id/redo"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="match_parent"
|
||||
app:icon="@drawable/ic_redo_white_48dp"
|
||||
app:text="@string/text_redo"/>
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
</com.stardust.theme.widget.ThemeColorToolbar>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/summary"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignBottom="@+id/toolbar"
|
||||
android:layout_marginLeft="72dp"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="10sp"
|
||||
tools:text="@string/summary_pre_execute_script"/>
|
||||
</RelativeLayout>
|
||||
|
||||
|
||||
</android.support.design.widget.AppBarLayout>
|
||||
|
||||
<include layout="@layout/content_edit"/>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -7,7 +7,8 @@
|
||||
android:orientation="vertical"
|
||||
android:paddingBottom="12dp"
|
||||
android:paddingLeft="16dp"
|
||||
android:paddingTop="12dp">
|
||||
android:paddingTop="12dp"
|
||||
tools:background="@color/colorPrimary">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
android:layout_height="match_parent"
|
||||
android:background="#f4f4f4">
|
||||
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
@@ -12,19 +13,26 @@
|
||||
<LinearLayout
|
||||
android:id="@+id/close_all"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="42dp"
|
||||
android:background="#e4e4e4"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="#d4d4d4"
|
||||
android:foreground="?selectableItemBackground"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal"
|
||||
android:visibility="gone">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="22dp"
|
||||
android:layout_height="22dp"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:layout_marginLeft="17dp"
|
||||
android:layout_marginRight="17dp"
|
||||
android:layout_marginTop="12dp"
|
||||
android:src="@drawable/ic_close_gray600_48dp"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:text="@string/text_close_all_running_scripts"
|
||||
android:textColor="@android:color/secondary_text_light"
|
||||
android:textColor="@android:color/primary_text_light"
|
||||
android:textSize="16sp"/>
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
24
app/src/main/res/menu/tasker_script_edit_menu.xml
Normal file
24
app/src/main/res/menu/tasker_script_edit_menu.xml
Normal file
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
|
||||
<item
|
||||
android:id="@+id/action_refresh"
|
||||
android:icon="@drawable/ic_refresh_white_24dp"
|
||||
android:orderInCategory="100"
|
||||
android:title="@string/text_refresh"
|
||||
app:showAsAction="ifRoom"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/action_clear_file_selection"
|
||||
android:orderInCategory="200"
|
||||
android:title="@string/text_clear_file_selection"
|
||||
app:showAsAction="never"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/action_clear_pre_execute_script"
|
||||
android:orderInCategory="300"
|
||||
android:title="@string/text_clear_pre_execute_script"
|
||||
app:showAsAction="never"/>
|
||||
</menu>
|
||||
@@ -188,6 +188,12 @@
|
||||
<string name="text_please_choose_file_to_import">请选择要导入的脚本</string>
|
||||
<string name="text_refresh">刷新</string>
|
||||
<string name="notice_no_running_script"><![CDATA[没有正在运行的脚本 φ(>ω<*)]]></string>
|
||||
<string name="text_please_choose_a_script">请选择脚本</string>
|
||||
<string name="text_edit_prepare_script">编辑预执行脚本</string>
|
||||
<string name="text_pre_execute_script">预执行脚本</string>
|
||||
<string name="text_clear_pre_execute_script">清空预执行脚本</string>
|
||||
<string name="text_clear_file_selection">重置脚本文件选择</string>
|
||||
<string name="summary_pre_execute_script">将在脚本文件执行前执行</string>
|
||||
|
||||
<string-array name="record_control_keys">
|
||||
<item>无</item>
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
<item name="textForeground">#000000</item>
|
||||
<item name="textBackground">#FFFFFF</item>
|
||||
<item name="caret">#000000</item>
|
||||
<item name="selection">#4D97FF54</item>
|
||||
<item name="selection">@color/colorPrimary</item>
|
||||
<item name="invisibles">#dddddd</item>
|
||||
<item name="gutterForeground">#000000</item>
|
||||
<item name="gutterBackground">#dfdfdf</item>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.stardust.scriptdroid;
|
||||
|
||||
import com.jecelyin.common.http.Base64;
|
||||
import com.stardust.util.LimitedHashMap;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
Reference in New Issue
Block a user