rebuild apk
This commit is contained in:
@@ -8,15 +8,17 @@
|
||||
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"/>
|
||||
|
||||
<application
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:name=".App"
|
||||
android:allowBackup="true"
|
||||
android:icon="@drawable/ic_android_eat_js"
|
||||
android:label="@string/app_name"
|
||||
android:label="@string/_app_name"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/AppTheme">
|
||||
android:theme="@style/AppTheme"
|
||||
tools:replace="android:label">
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:label="@string/app_name"
|
||||
android:label="@string/_app_name"
|
||||
android:theme="@style/AppTheme.NoActionBar">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
@@ -39,7 +41,7 @@
|
||||
android:name=".droid.runtime.action.ActionPerformService"
|
||||
android:enabled="true"
|
||||
android:exported="true"
|
||||
android:label="@string/app_name"
|
||||
android:label="@string/_app_name"
|
||||
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
|
||||
<intent-filter>
|
||||
<action android:name="android.accessibilityservice.AccessibilityService"/>
|
||||
@@ -77,6 +79,9 @@
|
||||
<activity android:name=".SettingsActivity"/>
|
||||
<activity android:name=".droid.ConsoleActivity"/>
|
||||
<activity android:name=".ErrorReportActivity"/>
|
||||
<activity
|
||||
android:name=".IssueReportActivity"
|
||||
android:theme="@style/IssueReportTheme"/>
|
||||
<activity android:name=".droid.script.ScriptExecuteActivity"/>
|
||||
|
||||
<service android:name=".AssistModeSwitchService"/>
|
||||
|
||||
@@ -115,4 +115,9 @@ var openConsole = function(){
|
||||
|
||||
var clearConsole = function(){
|
||||
droid.clearConsole();
|
||||
}
|
||||
|
||||
var shell = function(cmd, root){
|
||||
root = root ? 1 : 0;
|
||||
droid.shell(cmd, root);
|
||||
}
|
||||
@@ -1,3 +1,2 @@
|
||||
launchApp("微信");
|
||||
while(!click("发现"));
|
||||
while(!click("朋友圈"));
|
||||
launchApp("支付宝");
|
||||
while(!click("扫一扫"));
|
||||
@@ -0,0 +1,3 @@
|
||||
launch("com.tencent.mm");
|
||||
while(!click("发现"));
|
||||
while(!click("扫一扫"));
|
||||
@@ -1,8 +1,35 @@
|
||||
package android.bug;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/2/13.
|
||||
* http://stackoverflow.com/questions/31759171/recyclerview-and-java-lang-indexoutofboundsexception-inconsistency-detected-in
|
||||
*/
|
||||
|
||||
public class WrapContentLinearLayoutManager {
|
||||
public class WrapContentLinearLayoutManager extends LinearLayoutManager {
|
||||
public WrapContentLinearLayoutManager(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
public WrapContentLinearLayoutManager(Context context, int orientation, boolean reverseLayout) {
|
||||
super(context, orientation, reverseLayout);
|
||||
}
|
||||
|
||||
public WrapContentLinearLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||
super(context, attrs, defStyleAttr, defStyleRes);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
|
||||
try {
|
||||
super.onLayoutChildren(recycler, state);
|
||||
} catch (IndexOutOfBoundsException e) {
|
||||
Log.e("LinearLayoutManager", "Android bug ", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
package com.stardust.scriptdroid;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.ClipData;
|
||||
import android.content.ClipboardManager;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.afollestad.materialdialogs.MaterialDialog;
|
||||
@@ -29,10 +31,17 @@ public class AboutActivity extends BaseActivity {
|
||||
|
||||
private void setUpUI() {
|
||||
setContentView(R.layout.activity_about);
|
||||
setVersionName();
|
||||
setUpToolbar();
|
||||
ViewBinder.bind(this);
|
||||
}
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
private void setVersionName() {
|
||||
TextView version = $(R.id.version);
|
||||
version.setText("Version " + BuildConfig.VERSION_NAME);
|
||||
}
|
||||
|
||||
private void setUpToolbar() {
|
||||
Toolbar toolbar = $(R.id.toolbar);
|
||||
setSupportActionBar(toolbar);
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.stardust.scriptdroid;
|
||||
|
||||
import android.content.ClipData;
|
||||
import android.content.ClipboardManager;
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
@@ -31,14 +32,16 @@ public class ErrorReportActivity extends BaseActivity {
|
||||
handleIntent();
|
||||
} catch (Throwable throwable) {
|
||||
Log.e(TAG, "", throwable);
|
||||
exit();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void handleIntent() {
|
||||
String message = getIntent().getStringExtra("message");
|
||||
final String errorDetail = getIntent().getStringExtra("error");
|
||||
//showErrorMessage(message, errorDetail);
|
||||
showErrorMessageByDialog(message, errorDetail);
|
||||
//showErrorMessage(message, errorDetail);
|
||||
}
|
||||
|
||||
private void showErrorMessageByDialog(String message, final String errorDetail) {
|
||||
@@ -46,24 +49,39 @@ public class ErrorReportActivity extends BaseActivity {
|
||||
.title(R.string.text_crash)
|
||||
.content(R.string.crash_feedback)
|
||||
.positiveText(R.string.text_exit)
|
||||
.negativeText(R.string.text_copy_debug_info)
|
||||
.neutralText(R.string.text_copy_debug_info)
|
||||
.negativeText(R.string.text_report_bug)
|
||||
.onPositive(new MaterialDialog.SingleButtonCallback() {
|
||||
@Override
|
||||
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
|
||||
exit();
|
||||
}
|
||||
})
|
||||
.onNegative(new MaterialDialog.SingleButtonCallback() {
|
||||
.onNeutral(new MaterialDialog.SingleButtonCallback() {
|
||||
@Override
|
||||
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
|
||||
copyToClip(getDeviceMessage() + errorDetail);
|
||||
exitAfter(1000);
|
||||
}
|
||||
})
|
||||
.onNegative(new MaterialDialog.SingleButtonCallback() {
|
||||
@Override
|
||||
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
|
||||
startIssueReportActivity();
|
||||
finish();
|
||||
}
|
||||
})
|
||||
.cancelable(false)
|
||||
.show();
|
||||
}
|
||||
|
||||
private void startIssueReportActivity() {
|
||||
Intent intent = new Intent(this, IssueReportActivity.class);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
|
||||
intent.putExtras(getIntent());
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
private void showErrorMessage(String message, String errorDetail) {
|
||||
((TextView) findViewById(R.id.error)).setText(message + "\n" + errorDetail);
|
||||
}
|
||||
@@ -93,7 +111,8 @@ public class ErrorReportActivity extends BaseActivity {
|
||||
}
|
||||
|
||||
private void setUpToolbar() {
|
||||
Toolbar toolbar = $(R.id.toolbar);
|
||||
Toolbar toolbar;
|
||||
toolbar = (Toolbar) findViewById(R.id.toolbar);
|
||||
toolbar.setTitle(getString(R.string.text_error_report));
|
||||
setSupportActionBar(toolbar);
|
||||
getSupportActionBar().setHomeButtonEnabled(false);
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
package com.stardust.scriptdroid;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.support.design.widget.FloatingActionButton;
|
||||
import android.view.View;
|
||||
import android.widget.EditText;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.heinrichreimersoftware.androidissuereporter.IssueReporterActivity;
|
||||
import com.heinrichreimersoftware.androidissuereporter.model.github.GithubTarget;
|
||||
import com.stardust.scriptdroid.R;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/2/13.
|
||||
@@ -20,8 +24,29 @@ public class IssueReportActivity extends IssueReporterActivity {
|
||||
handleIntent();
|
||||
findViewById(com.heinrichreimersoftware.androidissuereporter.R.id.air_optionAnonymous).performClick();
|
||||
((EditText) findViewById(R.id.air_inputTitle)).setText(R.string.text_bug_report);
|
||||
Toolbar toolbar = (Toolbar) this.findViewById(com.heinrichreimersoftware.androidissuereporter.R.id.air_toolbar);
|
||||
toolbar.setTitle(R.string.text_report_bug);
|
||||
getSupportActionBar().setTitle(R.string.text_report_bug);
|
||||
FloatingActionButton send = (FloatingActionButton) this.findViewById(com.heinrichreimersoftware.androidissuereporter.R.id.air_buttonSend);
|
||||
try {
|
||||
final Method reportIssue = IssueReporterActivity.class.getDeclaredMethod("reportIssue");
|
||||
reportIssue.setAccessible(true);
|
||||
send.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
try {
|
||||
reportIssue.invoke(IssueReportActivity.this);
|
||||
Toast.makeText(IssueReportActivity.this, R.string.text_report_succeed, Toast.LENGTH_SHORT).show();
|
||||
} catch (IllegalAccessException | InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
Toast.makeText(IssueReportActivity.this, R.string.text_report_fail, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
exit();
|
||||
}
|
||||
});
|
||||
} catch (NoSuchMethodException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void handleIntent() {
|
||||
@@ -29,6 +54,10 @@ public class IssueReportActivity extends IssueReporterActivity {
|
||||
((EditText) findViewById(R.id.air_inputDescription)).setText(errorDetail);
|
||||
}
|
||||
|
||||
private void exit() {
|
||||
finishAffinity();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected GithubTarget getTarget() {
|
||||
return new GithubTarget("hyb1996", "NoRootScriptDroid");
|
||||
@@ -36,7 +65,7 @@ public class IssueReportActivity extends IssueReporterActivity {
|
||||
|
||||
@Override
|
||||
protected String getGuestToken() {
|
||||
return "7860bbb3897c8b2bb29a49a0820dd626bd638b1c";
|
||||
return "cd403d68a9f3a3590a14408d055c55180e7af7d3";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
package com.stardust.scriptdroid;
|
||||
|
||||
import android.Manifest;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
@@ -11,6 +15,7 @@ import android.support.v7.app.ActionBarDrawerToggle;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.text.InputType;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.afollestad.materialdialogs.DialogAction;
|
||||
import com.afollestad.materialdialogs.MaterialDialog;
|
||||
@@ -21,6 +26,7 @@ import com.stardust.scriptdroid.droid.script.file.ScriptFile;
|
||||
import com.stardust.scriptdroid.droid.script.file.ScriptFileList;
|
||||
import com.stardust.scriptdroid.droid.script.file.SharedPrefScriptFileList;
|
||||
import com.stardust.scriptdroid.file.FileUtils;
|
||||
import com.stardust.scriptdroid.file.SampleFileTool;
|
||||
import com.stardust.scriptdroid.tool.BackPressedHandler;
|
||||
import com.stardust.scriptdroid.ui.ScriptFileOperation;
|
||||
import com.stardust.scriptdroid.ui.ScriptListRecyclerView;
|
||||
@@ -35,16 +41,25 @@ import java.io.File;
|
||||
|
||||
public class MainActivity extends BaseActivity implements FileChooserDialog.FileCallback {
|
||||
|
||||
public static final String ACTION_NOTIFY_SCRIPT_LIST_CHANGE = "ACTION_NOTIFY_SCRIPT_LIST_CHANGE";
|
||||
|
||||
private SlidingUpPanel mAddFilePanel;
|
||||
private ScriptListRecyclerView mScriptListRecyclerView;
|
||||
private ScriptFileList mScriptFileList;
|
||||
private DrawerLayout mDrawerLayout;
|
||||
private Receiver mReceiver;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setUpUI();
|
||||
checkPermissions();
|
||||
registerReceivers();
|
||||
}
|
||||
|
||||
private void registerReceivers() {
|
||||
mReceiver = new Receiver();
|
||||
registerReceiver(mReceiver, new IntentFilter(ACTION_NOTIFY_SCRIPT_LIST_CHANGE));
|
||||
}
|
||||
|
||||
private void checkPermissions() {
|
||||
@@ -84,7 +99,6 @@ public class MainActivity extends BaseActivity implements FileChooserDialog.File
|
||||
mScriptListRecyclerView.getAdapter().notifyItemInserted(mScriptFileList.size() - 1);
|
||||
}
|
||||
|
||||
|
||||
private void setUpUI() {
|
||||
mDrawerLayout = (DrawerLayout) View.inflate(this, R.layout.activity_main, null);
|
||||
setContentView(mDrawerLayout);
|
||||
@@ -92,15 +106,22 @@ public class MainActivity extends BaseActivity implements FileChooserDialog.File
|
||||
mAddFilePanel = $(R.id.bottom_menu);
|
||||
|
||||
setUpToolbar();
|
||||
setVersionName();
|
||||
setUpScriptList();
|
||||
ViewBinder.bind(this);
|
||||
|
||||
}
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
private void setVersionName() {
|
||||
TextView version = $(R.id.version);
|
||||
version.setText("Version " + BuildConfig.VERSION_NAME);
|
||||
}
|
||||
|
||||
private void setUpToolbar() {
|
||||
Toolbar toolbar = $(R.id.toolbar);
|
||||
setSupportActionBar(toolbar);
|
||||
toolbar.setTitle(R.string.app_name);
|
||||
toolbar.setTitle(R.string._app_name);
|
||||
|
||||
ActionBarDrawerToggle drawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.text_drawer_open,
|
||||
R.string.text_drawer_close);
|
||||
@@ -114,7 +135,7 @@ public class MainActivity extends BaseActivity implements FileChooserDialog.File
|
||||
mScriptListRecyclerView.setScriptFileList(mScriptFileList);
|
||||
}
|
||||
|
||||
@ViewBinding.Click(R.id.fab)
|
||||
@ViewBinding.Click(R.id.add)
|
||||
private void showAddFilePanel() {
|
||||
mAddFilePanel.show();
|
||||
}
|
||||
@@ -144,6 +165,7 @@ public class MainActivity extends BaseActivity implements FileChooserDialog.File
|
||||
@ViewBinding.Click(R.id.import_from_file)
|
||||
private void showFileChooser() {
|
||||
new FileChooserDialog.Builder(this)
|
||||
.initialPath(ScriptFile.DEFAULT_FOLDER)
|
||||
.extensionsFilter(".js", ".txt")
|
||||
.show();
|
||||
}
|
||||
@@ -162,7 +184,7 @@ public class MainActivity extends BaseActivity implements FileChooserDialog.File
|
||||
public void onRequestPermissionsResult(int requestCode,
|
||||
@NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||
if (requestCode == PERMISSION_REQUEST_CODE && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||
NonUiInitializer.getInstance().copySampleScriptFileIfNeeded();
|
||||
SampleFileTool.getInstance().copySampleScriptFileIfNeeded();
|
||||
mScriptListRecyclerView.getAdapter().notifyDataSetChanged();
|
||||
}
|
||||
}
|
||||
@@ -174,8 +196,31 @@ public class MainActivity extends BaseActivity implements FileChooserDialog.File
|
||||
|
||||
|
||||
private BackPressedHandler mBackPressedHandler = new BackPressedHandler.DoublePressExit(this);
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
mBackPressedHandler.onBackPressed();
|
||||
if (mScriptListRecyclerView.getScriptFileOperationPopupMenu().isShowing()) {
|
||||
mScriptListRecyclerView.getScriptFileOperationPopupMenu().dismiss();
|
||||
} else if (mAddFilePanel.isShowing()) {
|
||||
mAddFilePanel.dismiss();
|
||||
} else {
|
||||
mBackPressedHandler.onBackPressed();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
unregisterReceiver(mReceiver);
|
||||
}
|
||||
|
||||
private class Receiver extends BroadcastReceiver {
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
if (intent.getAction().equals(ACTION_NOTIFY_SCRIPT_LIST_CHANGE)) {
|
||||
mScriptListRecyclerView.getAdapter().notifyDataSetChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,10 +10,8 @@ import android.preference.PreferenceManager;
|
||||
public class Pref {
|
||||
|
||||
private static final SharedPreferences DISPOSABLE_BOOLEAN = App.getApp().getSharedPreferences("DISPOSABLE_BOOLEAN", Context.MODE_PRIVATE);
|
||||
|
||||
public static final String SAMPLE_SCRIPTS_COPIED = "SAMPLE_SCRIPTS_COPIED";
|
||||
|
||||
|
||||
public static SharedPreferences def() {
|
||||
return PreferenceManager.getDefaultSharedPreferences(App.getApp());
|
||||
}
|
||||
@@ -33,4 +31,8 @@ public class Pref {
|
||||
public static boolean isFirstGoToAccessibilitySetting() {
|
||||
return getDisposableBoolean("isFirstGoToAccessibilitySetting", true);
|
||||
}
|
||||
|
||||
public static int oldVersion(){
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import android.support.v7.widget.Toolbar;
|
||||
import android.view.View;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.stardust.scriptdroid.file.SampleFileTool;
|
||||
import com.stardust.util.MapEntries;
|
||||
|
||||
import java.util.Map;
|
||||
@@ -65,9 +66,10 @@ public class SettingsActivity extends BaseActivity {
|
||||
.entry(getString(R.string.text_re_import_samples), new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
int failCount = NonUiInitializer.getInstance().copySampleScriptFile();
|
||||
int failCount = SampleFileTool.getInstance().copySampleScriptFile();
|
||||
if (failCount <= 0) {
|
||||
Toast.makeText(getActivity(), R.string.text_re_import_succeed, Toast.LENGTH_SHORT).show();
|
||||
notifyScriptListChanged();
|
||||
} else
|
||||
Toast.makeText(getActivity(), R.string.text_fail, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
@@ -87,6 +89,10 @@ public class SettingsActivity extends BaseActivity {
|
||||
.map();
|
||||
}
|
||||
|
||||
private void notifyScriptListChanged() {
|
||||
getActivity().sendBroadcast(new Intent(MainActivity.ACTION_NOTIFY_SCRIPT_LIST_CHANGE));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
|
||||
Runnable action = ACTION_MAP.get(preference.getTitle().toString());
|
||||
|
||||
@@ -41,7 +41,7 @@ public class Droid {
|
||||
public void onRunFinished(Object result, Exception e) {
|
||||
if (e != null) {
|
||||
RUNTIME.toast(App.getApp().getString(R.string.text_error) + ": " + e.getMessage());
|
||||
Timber.e(App.getApp().getString(R.string.text_error), e);
|
||||
Timber.e(e, App.getApp().getString(R.string.text_error));
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -55,12 +55,18 @@ public class Droid {
|
||||
}
|
||||
|
||||
public void runScriptFile(File file) {
|
||||
checkFile(file);
|
||||
runScript(FileUtils.readString(file));
|
||||
runScriptFile(file, null);
|
||||
}
|
||||
|
||||
public void runScriptFile(File file, OnRunFinishedListener listener) {
|
||||
checkFile(file);
|
||||
Timber.v("开始运行脚本文件: " + file);
|
||||
listener = listener == null ? DEFAULT_LISTENER : listener;
|
||||
try {
|
||||
checkFile(file);
|
||||
} catch (Exception e) {
|
||||
listener.onRunFinished(null, e);
|
||||
return;
|
||||
}
|
||||
runScript(FileUtils.readString(file), listener, RunningConfig.getDefault());
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ import com.stardust.scriptdroid.droid.runtime.action.ActionFactory;
|
||||
import com.stardust.scriptdroid.droid.runtime.action.ActionPerformService;
|
||||
import com.stardust.scriptdroid.droid.runtime.action.ActionTarget;
|
||||
import com.stardust.scriptdroid.droid.runtime.api.IDroidRuntime;
|
||||
import com.stardust.scriptdroid.tool.Shell;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -160,7 +161,7 @@ public class DroidRuntime implements IDroidRuntime {
|
||||
App.getApp().startActivity(new Intent(App.getApp(), ConsoleActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
|
||||
}
|
||||
|
||||
public void clearConsole(){
|
||||
public void clearConsole() {
|
||||
Console.clear();
|
||||
}
|
||||
|
||||
@@ -200,6 +201,10 @@ public class DroidRuntime implements IDroidRuntime {
|
||||
}
|
||||
}
|
||||
|
||||
public void shell(String cmd, int root) {
|
||||
Shell.execCommand(cmd, root != 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isStopped() {
|
||||
return Thread.currentThread().isInterrupted();
|
||||
|
||||
@@ -10,6 +10,7 @@ import com.stardust.scriptdroid.droid.script.file.ScriptFileList;
|
||||
import com.stardust.scriptdroid.droid.script.file.SharedPrefScriptFileList;
|
||||
import com.stardust.util.MapEntries;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@@ -17,13 +18,13 @@ import java.util.Map;
|
||||
*/
|
||||
public class SampleFileTool {
|
||||
|
||||
private static final Map<String, Integer> SAMPLES = new MapEntries<String, Integer>()
|
||||
.entry("sample_alipay_scan.js", R.string.text_sample_alipay_scan)
|
||||
.entry("sample_wechat_scan.js", R.string.text_sample_wechat_scan)
|
||||
private static final Map<String, Integer> SAMPLES = new MapEntries<>(new LinkedHashMap<String, Integer>())
|
||||
.entry("sample_open_running_services.js", R.string.text_sample_open_running_services)
|
||||
.entry("sample_qq_hongbao.js", R.string.text_sample_qq_hongbao)
|
||||
.entry("sample_simple_calculator.js", R.string.text_sample_simple_calculator)
|
||||
.entry("sample_force_qq_chat.js", R.string.text_sample_for_qq_chat)
|
||||
.entry("sample_wechat_scan.js", R.string.text_sample_wechat_scan)
|
||||
.entry("sample_alipay_scan.js", R.string.text_sample_alipay_scan)
|
||||
.map();
|
||||
|
||||
private static SampleFileTool instance = new SampleFileTool();
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.stardust.scriptdroid.ui;
|
||||
|
||||
import android.bug.WrapContentLinearLayoutManager;
|
||||
import android.content.Context;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.LayoutInflater;
|
||||
@@ -44,7 +44,7 @@ public class AssistClipListRecyclerView extends ExpandableRecyclerView {
|
||||
}
|
||||
|
||||
private void init() {
|
||||
setLayoutManager(new LinearLayoutManager(getContext()));
|
||||
setLayoutManager(new WrapContentLinearLayoutManager(getContext()));
|
||||
setAdapter(new Adapter());
|
||||
setOnChildClickListener(new OnChildClickListener() {
|
||||
@Override
|
||||
@@ -58,12 +58,14 @@ public class AssistClipListRecyclerView extends ExpandableRecyclerView {
|
||||
mBoundsAssistClipList.setOnClipChangedListener(new BoundsAssistClipList.OnClipChangedListener() {
|
||||
@Override
|
||||
public void onClipRemove(int position) {
|
||||
getAdapter().notifyItemRemoved(position);
|
||||
if (isExpanded())
|
||||
getAdapter().notifyItemRemoved(position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClipInsert(int position) {
|
||||
getAdapter().notifyItemInserted(position);
|
||||
if (isExpanded())
|
||||
getAdapter().notifyItemInserted(position);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.stardust.scriptdroid.ui;
|
||||
|
||||
import android.bug.WrapContentLinearLayoutManager;
|
||||
import android.content.Context;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.LayoutInflater;
|
||||
@@ -68,7 +68,7 @@ public class FunctionListRecyclerView extends ExpandableRecyclerView {
|
||||
}
|
||||
|
||||
private void init() {
|
||||
setLayoutManager(new LinearLayoutManager(getContext()));
|
||||
setLayoutManager(new WrapContentLinearLayoutManager(getContext()));
|
||||
setAdapter(new Adapter());
|
||||
setFunctionList(FUNCTION_LIST);
|
||||
setOnChildClickListener(new OnChildClickListener() {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.stardust.scriptdroid.ui;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
@@ -60,7 +60,7 @@ public class ScriptFileOperationPopupMenu extends PopupWindow {
|
||||
private void init() {
|
||||
setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
|
||||
setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
|
||||
setBackgroundDrawable(new BitmapDrawable());
|
||||
setBackgroundDrawable(new ColorDrawable());
|
||||
setOutsideTouchable(true);
|
||||
setAnimationStyle(-1);
|
||||
initContentView();
|
||||
|
||||
@@ -77,6 +77,10 @@ public class ScriptListRecyclerView extends RecyclerView {
|
||||
init();
|
||||
}
|
||||
|
||||
public ScriptFileOperationPopupMenu getScriptFileOperationPopupMenu() {
|
||||
return mScriptFileOperationPopupMenu;
|
||||
}
|
||||
|
||||
private void init() {
|
||||
setAdapter(new Adapter());
|
||||
setLayoutManager(new LinearLayoutManager(getContext()));
|
||||
|
||||
@@ -54,6 +54,7 @@ public class SlideMenuFragment extends Fragment {
|
||||
syncSwitchState();
|
||||
}
|
||||
|
||||
|
||||
private void syncSwitchState() {
|
||||
mAutoOperateServiceSwitch.postDelayed(new Runnable() {
|
||||
@Override
|
||||
|
||||
@@ -18,7 +18,7 @@ public class AccessibilityServiceUtils {
|
||||
|
||||
public static void goToAccessibilitySetting(Context context) {
|
||||
if (Pref.isFirstGoToAccessibilitySetting()) {
|
||||
Toast.makeText(context, context.getString(R.string.text_please_choose) + context.getString(R.string.app_name), Toast.LENGTH_LONG).show();
|
||||
Toast.makeText(context, context.getString(R.string.text_please_choose) + context.getString(R.string._app_name), Toast.LENGTH_LONG).show();
|
||||
}
|
||||
context.startActivity(new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
|
||||
}
|
||||
|
||||
@@ -50,13 +50,13 @@
|
||||
android:src="@drawable/ic_android_eat_js"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/version"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/icon"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_marginTop="16dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/version"
|
||||
android:textColor="#777777"
|
||||
android:textSize="14sp"/>
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?attr/actionBarSize"
|
||||
android:background="?attr/colorPrimary"
|
||||
android:title="@string/app_name"
|
||||
android:title="@string/_app_name"
|
||||
app:popupTheme="@style/AppTheme.PopupOverlay">
|
||||
|
||||
<LinearLayout
|
||||
|
||||
@@ -23,8 +23,19 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?attr/actionBarSize"
|
||||
android:background="?attr/colorPrimary"
|
||||
android:title="@string/app_name"
|
||||
app:popupTheme="@style/AppTheme.PopupOverlay"/>
|
||||
android:title="@string/_app_name"
|
||||
app:popupTheme="@style/AppTheme.PopupOverlay">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/add"
|
||||
android:layout_width="?android:attr/actionBarSize"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="right"
|
||||
android:foreground="?selectableItemBackgroundBorderless"
|
||||
android:padding="12dp"
|
||||
android:src="@drawable/ic_add_white_48dp"/>
|
||||
|
||||
</android.support.v7.widget.Toolbar>
|
||||
|
||||
</android.support.design.widget.AppBarLayout>
|
||||
|
||||
|
||||
@@ -16,14 +16,4 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
<android.support.design.widget.FloatingActionButton
|
||||
android:id="@+id/fab"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_margin="@dimen/fab_margin"
|
||||
app:srcCompat="@drawable/ic_add_white_48dp"/>
|
||||
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
android:layout_marginBottom="8dp"
|
||||
android:layout_marginLeft="8dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/version"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="14sp"/>
|
||||
|
||||
@@ -40,7 +39,7 @@
|
||||
android:layout_above="@id/version"
|
||||
android:layout_marginLeft="8dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/app_name"
|
||||
android:text="@string/_app_name"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="28sp"/>
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
android:layout_height="20dp"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:contentDescription="@string/app_name"/>
|
||||
android:contentDescription="@string/_app_name"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/name"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
android:layout_height="40dp"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:contentDescription="@string/app_name"
|
||||
android:contentDescription="@string/_app_name"
|
||||
android:scaleType="fitCenter"
|
||||
android:src="@drawable/ic_robot_green"/>
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
android:layout_width="20dp"
|
||||
android:layout_height="20dp"
|
||||
android:layout_gravity="center"
|
||||
android:contentDescription="@string/app_name"
|
||||
android:contentDescription="@string/_app_name"
|
||||
android:src="@drawable/ic_edit_gray_48dp"/>
|
||||
|
||||
</FrameLayout>
|
||||
@@ -80,7 +80,7 @@
|
||||
android:layout_width="20dp"
|
||||
android:layout_height="20dp"
|
||||
android:layout_gravity="center"
|
||||
android:contentDescription="@string/app_name"
|
||||
android:contentDescription="@string/_app_name"
|
||||
android:src="@drawable/ic_navigation_show_more_vertical_512"/>
|
||||
</FrameLayout>
|
||||
|
||||
|
||||
@@ -2,27 +2,5 @@
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
tools:context="com.stardust.scriptdroid.MainActivity">
|
||||
<item
|
||||
android:id="@+id/action_settings"
|
||||
android:orderInCategory="100"
|
||||
android:title="@string/action_settings"
|
||||
app:showAsAction="never"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/action_disable_service"
|
||||
android:orderInCategory="200"
|
||||
android:title="@string/action_disable_service"
|
||||
app:showAsAction="never"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/action_test"
|
||||
android:orderInCategory="300"
|
||||
android:title="@string/action_test"
|
||||
app:showAsAction="never"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/action_exit"
|
||||
android:orderInCategory="400"
|
||||
android:title="@string/action_exit"
|
||||
app:showAsAction="never"/>
|
||||
</menu>
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
* `launchApp(appName)` 运存应用名称为appName的应用。例如launchApp("QQ")。不同应用名称可能相同,这时只运行其中某一个应用。
|
||||
* `notStopped` 若当前脚本处于运行状态时返回`true`, 否则返回`false`。对于某些循环, 例如`while(true)`,请用`while(notStopped())`代替,以免死循环造成的脚本无法正常停止。
|
||||
* `isStoppd` 若当前脚本处于停止状态时返回`true`, 否则返回`false`。
|
||||
* `shell(cmd, root=false)` 执行shell命令cmd, 其中参数root表示是否以root权限执行,默认为false。例如`shell("input keyevent 26", true); //锁屏`。
|
||||
###四、全局变量
|
||||
* `context` ApplicationContext,参见安卓[android.content.Context](https://developer.android.com/reference/android/content/Context.html)
|
||||
> 这里的context由于是ApplicationContext,是不可见的,不能用于dialog和其他UI相关。如果要显示弹窗或者视图,请启动UI模式(代码的第一行为`"ui";`既可)并使用activity代替。
|
||||
|
||||
@@ -36,5 +36,16 @@
|
||||
<url>https://github.com/fython/AlipayZeroSdk</url>
|
||||
<license>Apache Software License 2.0</license>
|
||||
</notice>
|
||||
|
||||
<notice>
|
||||
<name>Console</name>
|
||||
<copyright>Copyright 2015 Josef Raska</copyright>
|
||||
<url>https://github.com/jraska/Console</url>
|
||||
<license>Apache Software License 2.0</license>
|
||||
</notice>
|
||||
<notice>
|
||||
<name>android-issue-reporter</name>
|
||||
<copyright/>
|
||||
<url>https://github.com/HeinrichReimer/android-issue-reporter</url>
|
||||
<license>Apache Software License 2.0</license>
|
||||
</notice>
|
||||
</notices>
|
||||
@@ -1,3 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
</resources>
|
||||
@@ -1,6 +1,5 @@
|
||||
<resources>
|
||||
<string name="app_name">免Root脚本精灵</string>
|
||||
<string name="version">Version 1.17.0212</string>
|
||||
<string name="_app_name">免Root脚本精灵</string>
|
||||
<string name="action_settings">设置</string>
|
||||
<string name="action_disable_service">关闭服务</string>
|
||||
<string name="text_accessibility_service_description">使脚本自动操作(点击、长按、滑动等)所需,若关闭则只能执行不涉及自动操作的脚本。</string>
|
||||
@@ -38,7 +37,7 @@
|
||||
<string name="text_about">关于</string>
|
||||
<string name="text_licenses">开放源代码许可</string>
|
||||
<string name="text_do_not_remind_again">不再提示</string>
|
||||
<string name="text_sample_open_what_moment">示例:打开朋友圈</string>
|
||||
<string name="text_sample_alipay_scan">支付宝扫一扫</string>
|
||||
<string name="text_sample_open_running_services">示例:打开正在运行的服务(安卓6.0+)</string>
|
||||
<string name="text_sample_simple_calculator">示例:简单计算器</string>
|
||||
<string name="copyright">Copyright©2016 All right reserves.</string>
|
||||
@@ -87,12 +86,17 @@
|
||||
<string name="assist_mode_notice">\"点击区域辅助服务\"是在要点击的区域不是文本时使用的,参见\"语法与API\"。\"点击区域辅助服务\"只有在\"自动操作服务\"开启时才有效。</string>
|
||||
<string name="text_please_choose">请选择</string>
|
||||
<string name="text_crash">崩溃了o(≧口≦)o</string>
|
||||
<string name="crash_feedback">点击\"退出\"退出程序(ಥ _ ಥ)或者复制调试信息反馈给开发者(≧∇≦)ノ</string>
|
||||
<string name="crash_feedback">点击\"退出\"退出程序(ಥ _ ಥ)或者提交错误报告或者复制调试信息反馈给开发者(≧∇≦)ノ</string>
|
||||
<string name="text_cannot_create_dialog_when_app_invisible">无法在后台显示弹框,脚本已停止运行</string>
|
||||
<string name="text_sample_for_qq_chat">示例:QQ强制聊天</string>
|
||||
<string name="text_re_import_samples">重新导入示例脚本文件</string>
|
||||
<string name="text_re_import_succeed">导入成功,重新打开应用生效</string>
|
||||
<string name="text_re_import_succeed">导入成功</string>
|
||||
<string name="text_fail">失败</string>
|
||||
<string name="text_clear">清空</string>
|
||||
<string name="text_console">控制台</string>
|
||||
<string name="text_sample_wechat_scan">微信扫一扫</string>
|
||||
<string name="text_report_bug">提交错误报告</string>
|
||||
<string name="text_bug_report">Bug Report</string>
|
||||
<string name="text_report_fail">提交失败</string>
|
||||
<string name="text_report_succeed">提交成功</string>
|
||||
</resources>
|
||||
|
||||
@@ -8,6 +8,15 @@
|
||||
<item name="colorAccent">@color/colorAccent</item>
|
||||
</style>
|
||||
|
||||
<style name="IssueReportTheme" parent="Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="cardBackgroundColor">#FFFFFF</item>
|
||||
<item name="colorButtonNormal">?colorAccent</item>
|
||||
<!-- Customize your theme here. -->
|
||||
<item name="colorPrimary">@color/colorPrimary</item>
|
||||
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
||||
<item name="colorAccent">@color/colorAccent</item>
|
||||
</style>
|
||||
|
||||
<style name="AppTheme.NoActionBar">
|
||||
<item name="windowActionBar">false</item>
|
||||
<item name="windowNoTitle">true</item>
|
||||
|
||||
103
app/src/main/strings.xml
Normal file
103
app/src/main/strings.xml
Normal file
@@ -0,0 +1,103 @@
|
||||
<resources>
|
||||
<string name="_app_name">NoRootScriptDroid</string>
|
||||
<string name="action_settings">Settings</string>
|
||||
<string name="action_disable_service">Disable Service</string>
|
||||
<string name="text_accessibility_service_description">使脚本自动操作(点击、长按、滑动等)所需,若关闭则只能执行不涉及自动操作的脚本。</string>
|
||||
<string name="text_new_file">New file</string>
|
||||
<string name="text_import_from_file">Import from file</string>
|
||||
<string name="action_exit">Exit</string>
|
||||
<string name="text_service_disabled">Service disabled</string>
|
||||
<string name="text_file_manager_not_found">Cannot find file explorerT.T</string>
|
||||
<string name="text_file_create_fail">File create fail</string>
|
||||
<string name="text_please_input_name">Please input name</string>
|
||||
<string name="text_name">Name</string>
|
||||
<string name="text_go_to_setting">Go to setting</string>
|
||||
<string name="explain_accessibility_permission">软件需要打开\"自动操作服务\"才能运行,请在随后的设置中选择\"免Root脚本精灵\"并开启服务。\n您也可以稍后在侧拉菜单中设置。</string>
|
||||
<string name="text_cancel">取消</string>
|
||||
<string name="text_path_is_empty">Path is empty</string>
|
||||
<string name="text_file_not_exists">File not exists</string>
|
||||
<string name="text_no_file_rw_permission">Permission denied</string>
|
||||
<string name="action_test">Inner 920 Test</string>
|
||||
<string name="text_no_accessibility_permission">自动操作服务未启动,脚本已停止运行</string>
|
||||
<string name="text_drawer_close">关闭侧拉菜单</string>
|
||||
<string name="text_drawer_open">打开侧拉菜单</string>
|
||||
<string name="text_undo">Undo</string>
|
||||
<string name="text_redo">Redo</string>
|
||||
<string name="text_save">Save</string>
|
||||
<string name="text_run">Run</string>
|
||||
<string name="text_alert">提示</string>
|
||||
<string name="edit_exit_without_save_warn">内容尚未保存,您确定要退出吗?</string>
|
||||
<string name="text_save_and_exit">Save&Exit</string>
|
||||
<string name="text_exit_directly">Exit</string>
|
||||
<string name="text_setting">Settings</string>
|
||||
<string name="text_exit">Exit</string>
|
||||
<string name="text_auto_operate_service">自动操作服务</string>
|
||||
<string name="text_syntax_and_api">Syntax and API</string>
|
||||
<string name="text_close_all_running_scripts">关闭所有正在运行的脚本</string>
|
||||
<string name="text_about">About</string>
|
||||
<string name="text_licenses">License</string>
|
||||
<string name="text_do_not_remind_again">不再提示</string>
|
||||
<string name="text_sample_alipay_scan">Alipay QR Scan</string>
|
||||
<string name="text_sample_open_running_services">Sample: Show runnings services (Android 6.0+)</string>
|
||||
<string name="text_sample_simple_calculator">Sample: Simple Calculator</string>
|
||||
<string name="copyright">Copyright©2016 All right reserves.</string>
|
||||
<string name="developer">Aring (星尘幻影)</string>
|
||||
<string name="qq">946994919</string>
|
||||
<string name="email">hybbbb1996@gmail.com</string>
|
||||
<string name="github">Srouce Codes</string>
|
||||
<string name="text_already_copy_to_clip">已复制到剪贴板</string>
|
||||
<string name="donate_developer">Donate</string>
|
||||
<string name="text_email">邮箱</string>
|
||||
<string name="my_github">https://github.com/hyb1996/NoRootScriptDroid</string>
|
||||
<string name="share_app">[免Root脚本精灵]下载地址:https://github.com/hyb1996/NoRootScriptDroid/releases</string>
|
||||
<string name="text_assist_service">点击区域辅助服务</string>
|
||||
<string name="text_assist_service_notification">通知栏点击区域辅助开关</string>
|
||||
<string name="text_others">Others</string>
|
||||
<string name="text_assist_mode_enabled">点击区域辅助服务已开启(点击关闭)</string>
|
||||
<string name="text_assist_mode_disabled">点击区域辅助服务已关闭(点击开启)</string>
|
||||
<string name="text_error_report">Bug Report</string>
|
||||
<string name="text_sample_qq_hongbao">Sample: QQ Auto 抢红包</string>
|
||||
<string name="text_press_again_to_exit">Press again to exit</string>
|
||||
<string name="text_common_function">常用函数</string>
|
||||
<string name="sorry_for_crash">很抱歉(ಥ _ ಥ)程序遇到未知错误,即将停止运行\n错误代码:</string>
|
||||
<string name="text_no_running_script">No running script</string>
|
||||
<string name="text_already_stop_n_scripts">已停止%d个正在运行的脚本</string>
|
||||
<string name="text_start_running">Running</string>
|
||||
<string name="text_open_by_other_apps">Open by other apps</string>
|
||||
<string name="text_rename">Rename</string>
|
||||
<string name="text_rename_file_meanwhile">Rename file</string>
|
||||
<string name="text_please_input_new_name">Please input new name</string>
|
||||
<string name="text_send_shortcut">Send to shortcut</string>
|
||||
<string name="text_already_create">已创建</string>
|
||||
<string name="text_delete">删除</string>
|
||||
<string name="text_delete_absolutly">彻底删除</string>
|
||||
<string name="text_already_delete">已删除</string>
|
||||
<string name="text_delete_failed">文件删除失败</string>
|
||||
<string name="text_choose_file">选择一个文件</string>
|
||||
<string name="folder_name">/Scripts/</string>
|
||||
<string name="text_error">错误</string>
|
||||
<string name="text_load_failed">Documentation load fail/(ㄒoㄒ)/~~</string>
|
||||
<string name="text_copy_debug_info">复制调试信息</string>
|
||||
<string name="text_it_is_the_developer_of_app">It\'s developer(。・・)ノ</string>
|
||||
<string name="text_lll">lol</string>
|
||||
<string name="text_choose_email_app">请选择邮件应用</string>
|
||||
<string name="text_assist_clip">点击定位剪贴板</string>
|
||||
<string name="text_script_stopped">Script stopped</string>
|
||||
<string name="assist_mode_notice">(不会翻译)\"点击区域辅助服务\"是在要点击的区域不是文本时使用的,参见\"语法与API\"。\"点击区域辅助服务\"只有在\"自动操作服务\"开启时才有效。</string>
|
||||
<string name="text_please_choose">Please choose</string>
|
||||
<string name="text_crash">崩溃了o(≧口≦)o</string>
|
||||
<string name="crash_feedback">(不会翻译)点击\"退出\"退出程序(ಥ _ ಥ)或者提交错误报告或者复制调试信息反馈给开发者(≧∇≦)ノ</string>
|
||||
<string name="text_cannot_create_dialog_when_app_invisible">无法在后台显示弹框,脚本已停止运行</string>
|
||||
<string name="text_sample_for_qq_chat">Sample: QQ forcing chat</string>
|
||||
<string name="text_re_import_samples">Re-import samples</string>
|
||||
<string name="text_re_import_succeed">Import succeed</string>
|
||||
<string name="text_fail">Fail</string>
|
||||
<string name="text_clear">清空</string>
|
||||
<string name="text_console">控制台</string>
|
||||
<string name="text_sample_wechat_scan">Wechat QR Scan</string>
|
||||
<string name="text_report_bug">Bug report</string>
|
||||
<string name="text_bug_report">Bug Report</string>
|
||||
<string name="text_report_fail">Report fail</string>
|
||||
<string name="text_report_succeed">Report succeed</string>
|
||||
<string name="define_roundedimageview"></string>
|
||||
</resources>
|
||||
Reference in New Issue
Block a user