6.0.1 - Alpha - 增加全局Polyfill及扩展对象
This commit is contained in:
@@ -115,6 +115,13 @@ android {
|
||||
buildConfigField "String", "APP_SINCE_DATE", "\"${versions.appSinceDate}\""
|
||||
}
|
||||
}
|
||||
applicationVariants.all { variant ->
|
||||
variant.mergeAssetsProvider.configure {
|
||||
doLast {
|
||||
delete(fileTree(dir: outputDir, includes: ['declarations/**']))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
repositories {
|
||||
@@ -138,7 +145,7 @@ dependencies {
|
||||
// Android supports
|
||||
implementation "androidx.appcompat:appcompat:1.4.0"
|
||||
implementation "androidx.cardview:cardview:1.0.0"
|
||||
implementation "com.google.android.material:material:1.5.0-beta01"
|
||||
implementation "com.google.android.material:material:1.6.0-alpha01"
|
||||
implementation "androidx.multidex:multidex:2.0.1"
|
||||
|
||||
// Material Dialogs
|
||||
|
||||
@@ -4,6 +4,18 @@
|
||||
|
||||
******
|
||||
|
||||
# v6.0.1 Alpha
|
||||
|
||||
###### 2021/12/05
|
||||
|
||||
* `新增` polyfill (Object.getOwnPropertyDescriptors)
|
||||
* `新增` polyfill (Array.prototype.flat)
|
||||
* `新增` isInteger/isNullish/isPlainObject/isPrimitive/isReference
|
||||
* `优化` 扩展global.sleep支持随机范围/负数兼容
|
||||
* `优化` 扩展global.toast支持时长控制/强制覆盖控制/dismiss方法
|
||||
* `优化` 包名对象全局化 (okhttp3/androidx/de)
|
||||
* `优化` 升级 Android Material 版本 1.5.0-beta01 -> 1.6.0-alpha01
|
||||
|
||||
# v6.0.0
|
||||
|
||||
###### 2021/12/01
|
||||
|
||||
@@ -49,7 +49,7 @@ public abstract class LayoutInspectTileService extends TileService implements La
|
||||
public void onClick() {
|
||||
super.onClick();
|
||||
Log.d(getClass().getName(), "onClick");
|
||||
sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
|
||||
// sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
|
||||
if (AccessibilityService.Companion.getInstance() == null) {
|
||||
Toast.makeText(this, R.string.text_no_accessibility_permission_to_capture, Toast.LENGTH_SHORT).show();
|
||||
AccessibilityServiceTool.goToAccessibilitySetting();
|
||||
@@ -83,7 +83,6 @@ public abstract class LayoutInspectTileService extends TileService implements La
|
||||
inactive();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
protected abstract FullScreenFloatyWindow onCreateWindow(NodeInfo capture);
|
||||
|
||||
@@ -5,6 +5,7 @@ import android.content.Context;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.stardust.app.GlobalAppContext;
|
||||
|
||||
import org.autojs.autojs.Pref;
|
||||
import org.autojs.autojs.R;
|
||||
|
||||
@@ -35,7 +36,7 @@ public class AccessibilityServiceTool {
|
||||
public static void goToAccessibilitySetting() {
|
||||
Context context = GlobalAppContext.get();
|
||||
if (Pref.isFirstGoToAccessibilitySetting()) {
|
||||
GlobalAppContext.toast(context.getString(R.string.text_please_choose) + context.getString(R.string.app_name));
|
||||
GlobalAppContext.toast(context.getString(R.string.text_please_choose) + " " + context.getString(R.string.app_name));
|
||||
}
|
||||
try {
|
||||
AccessibilityServiceUtils.INSTANCE.goToAccessibilitySetting(context);
|
||||
@@ -44,16 +45,18 @@ public class AccessibilityServiceTool {
|
||||
}
|
||||
}
|
||||
|
||||
private static final String cmd = "enabled=$(settings get secure enabled_accessibility_services)\n" +
|
||||
"pkg=%s\n" +
|
||||
"if [[ $enabled == *$pkg* ]]\n" +
|
||||
"then\n" +
|
||||
"echo already_enabled\n" +
|
||||
"else\n" +
|
||||
"enabled=$pkg:$enabled\n" +
|
||||
"settings put secure enabled_accessibility_services $enabled\n" +
|
||||
"fi\n" +
|
||||
"settings put secure accessibility_enabled 1";
|
||||
private static final String cmd = """
|
||||
enabled=$(settings get secure enabled_accessibility_services)
|
||||
pkg=%s
|
||||
if [[ $enabled == *$pkg* ]]
|
||||
then
|
||||
echo already_enabled
|
||||
else
|
||||
enabled=$pkg:$enabled
|
||||
settings put secure enabled_accessibility_services $enabled
|
||||
fi
|
||||
settings put secure accessibility_enabled 1
|
||||
""";
|
||||
|
||||
public static boolean enableAccessibilityServiceByRoot(Class<? extends android.accessibilityservice.AccessibilityService> accessibilityService) {
|
||||
String serviceName = GlobalAppContext.get().getPackageName() + "/" + accessibilityService.getName();
|
||||
|
||||
@@ -18,13 +18,15 @@ public class RootTool {
|
||||
}
|
||||
}
|
||||
|
||||
private static final String cmd = "enabled=$(settings get system pointer_location)\n" +
|
||||
"if [[ $enabled == 1 ]]\n" +
|
||||
"then\n" +
|
||||
"settings put system pointer_location 0\n" +
|
||||
"else\n" +
|
||||
"settings put system pointer_location 1\n" +
|
||||
"fi\n";
|
||||
private static final String cmd = """
|
||||
enabled=$(settings get system pointer_location)
|
||||
if [[ $enabled == 1 ]]
|
||||
then
|
||||
settings put system pointer_location 0
|
||||
else
|
||||
settings put system pointer_location 1
|
||||
fi
|
||||
""";
|
||||
|
||||
public static void togglePointerLocation() {
|
||||
try {
|
||||
|
||||
@@ -1,136 +0,0 @@
|
||||
package org.autojs.autojs.tool;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonNull;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonPrimitive;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigInteger;
|
||||
|
||||
public class SafeJsonElement extends JsonElement {
|
||||
private final JsonElement mJsonElement;
|
||||
|
||||
public SafeJsonElement(JsonElement jsonElement) {
|
||||
mJsonElement = jsonElement;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public JsonElement deepCopy() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isJsonArray() {
|
||||
return mJsonElement.isJsonArray();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isJsonObject() {
|
||||
return mJsonElement.isJsonObject();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isJsonPrimitive() {
|
||||
return mJsonElement.isJsonPrimitive();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isJsonNull() {
|
||||
return mJsonElement.isJsonNull();
|
||||
}
|
||||
|
||||
public JsonObject getAsJsonObject() {
|
||||
return mJsonElement.getAsJsonObject();
|
||||
}
|
||||
|
||||
public SafeJsonObject getAsSafeJsonObject() {
|
||||
try {
|
||||
return new SafeJsonObject(mJsonElement.getAsJsonObject());
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonArray getAsJsonArray() {
|
||||
return mJsonElement.getAsJsonArray();
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonPrimitive getAsJsonPrimitive() {
|
||||
return mJsonElement.getAsJsonPrimitive();
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonNull getAsJsonNull() {
|
||||
return mJsonElement.getAsJsonNull();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getAsBoolean() {
|
||||
return mJsonElement.getAsBoolean();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Number getAsNumber() {
|
||||
return mJsonElement.getAsNumber();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAsString() {
|
||||
return mJsonElement.getAsString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getAsDouble() {
|
||||
return mJsonElement.getAsDouble();
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getAsFloat() {
|
||||
return mJsonElement.getAsFloat();
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getAsLong() {
|
||||
return mJsonElement.getAsLong();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAsInt() {
|
||||
return mJsonElement.getAsInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte getAsByte() {
|
||||
return mJsonElement.getAsByte();
|
||||
}
|
||||
|
||||
@Override
|
||||
public char getAsCharacter() {
|
||||
return mJsonElement.getAsCharacter();
|
||||
}
|
||||
|
||||
@Override
|
||||
public BigDecimal getAsBigDecimal() {
|
||||
return mJsonElement.getAsBigDecimal();
|
||||
}
|
||||
|
||||
@Override
|
||||
public BigInteger getAsBigInteger() {
|
||||
return mJsonElement.getAsBigInteger();
|
||||
}
|
||||
|
||||
@Override
|
||||
public short getAsShort() {
|
||||
return mJsonElement.getAsShort();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return mJsonElement.toString();
|
||||
}
|
||||
}
|
||||
@@ -1,161 +0,0 @@
|
||||
package org.autojs.autojs.tool;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonNull;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonPrimitive;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigInteger;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
public class SafeJsonObject extends JsonElement {
|
||||
|
||||
private final JsonObject mJsonObject;
|
||||
|
||||
public SafeJsonObject(JsonObject jsonObject) {
|
||||
mJsonObject = jsonObject;
|
||||
}
|
||||
|
||||
public JsonObject deepCopy() {
|
||||
return mJsonObject.deepCopy();
|
||||
}
|
||||
|
||||
public void add(String property, JsonElement value) {
|
||||
mJsonObject.add(property, value);
|
||||
}
|
||||
|
||||
public JsonElement remove(String property) {
|
||||
return mJsonObject.remove(property);
|
||||
}
|
||||
|
||||
public void addProperty(String property, String value) {
|
||||
mJsonObject.addProperty(property, value);
|
||||
}
|
||||
|
||||
public void addProperty(String property, Number value) {
|
||||
mJsonObject.addProperty(property, value);
|
||||
}
|
||||
|
||||
public void addProperty(String property, Boolean value) {
|
||||
mJsonObject.addProperty(property, value);
|
||||
}
|
||||
|
||||
public void addProperty(String property, Character value) {
|
||||
mJsonObject.addProperty(property, value);
|
||||
}
|
||||
|
||||
public Set<Map.Entry<String, JsonElement>> entrySet() {
|
||||
return mJsonObject.entrySet();
|
||||
}
|
||||
|
||||
public Set<String> keySet() {
|
||||
return mJsonObject.keySet();
|
||||
}
|
||||
|
||||
public int size() {
|
||||
return mJsonObject.size();
|
||||
}
|
||||
|
||||
public boolean has(String memberName) {
|
||||
return mJsonObject.has(memberName);
|
||||
}
|
||||
|
||||
public JsonElement get(String memberName) {
|
||||
return mJsonObject.get(memberName);
|
||||
}
|
||||
|
||||
public JsonPrimitive getAsJsonPrimitive(String memberName) {
|
||||
return mJsonObject.getAsJsonPrimitive(memberName);
|
||||
}
|
||||
|
||||
public JsonArray getAsJsonArray(String memberName) {
|
||||
return mJsonObject.getAsJsonArray(memberName);
|
||||
}
|
||||
|
||||
public JsonObject getAsJsonObject(String memberName) {
|
||||
return mJsonObject.getAsJsonObject(memberName);
|
||||
}
|
||||
|
||||
public boolean isJsonArray() {
|
||||
return mJsonObject.isJsonArray();
|
||||
}
|
||||
|
||||
public boolean isJsonObject() {
|
||||
return mJsonObject.isJsonObject();
|
||||
}
|
||||
|
||||
public boolean isJsonPrimitive() {
|
||||
return mJsonObject.isJsonPrimitive();
|
||||
}
|
||||
|
||||
public boolean isJsonNull() {
|
||||
return mJsonObject.isJsonNull();
|
||||
}
|
||||
|
||||
public JsonObject getAsJsonObject() {
|
||||
return mJsonObject.getAsJsonObject();
|
||||
}
|
||||
|
||||
public JsonArray getAsJsonArray() {
|
||||
return mJsonObject.getAsJsonArray();
|
||||
}
|
||||
|
||||
public JsonPrimitive getAsJsonPrimitive() {
|
||||
return mJsonObject.getAsJsonPrimitive();
|
||||
}
|
||||
|
||||
public JsonNull getAsJsonNull() {
|
||||
return mJsonObject.getAsJsonNull();
|
||||
}
|
||||
|
||||
public boolean getAsBoolean() {
|
||||
return mJsonObject.getAsBoolean();
|
||||
}
|
||||
|
||||
public Number getAsNumber() {
|
||||
return mJsonObject.getAsNumber();
|
||||
}
|
||||
|
||||
public String getAsString() {
|
||||
return mJsonObject.getAsString();
|
||||
}
|
||||
|
||||
public double getAsDouble() {
|
||||
return mJsonObject.getAsDouble();
|
||||
}
|
||||
|
||||
public float getAsFloat() {
|
||||
return mJsonObject.getAsFloat();
|
||||
}
|
||||
|
||||
public long getAsLong() {
|
||||
return mJsonObject.getAsLong();
|
||||
}
|
||||
|
||||
public int getAsInt() {
|
||||
return mJsonObject.getAsInt();
|
||||
}
|
||||
|
||||
public byte getAsByte() {
|
||||
return mJsonObject.getAsByte();
|
||||
}
|
||||
|
||||
public char getAsCharacter() {
|
||||
return mJsonObject.getAsCharacter();
|
||||
}
|
||||
|
||||
public BigDecimal getAsBigDecimal() {
|
||||
return mJsonObject.getAsBigDecimal();
|
||||
}
|
||||
|
||||
public BigInteger getAsBigInteger() {
|
||||
return mJsonObject.getAsBigInteger();
|
||||
}
|
||||
|
||||
public short getAsShort() {
|
||||
return mJsonObject.getAsShort();
|
||||
}
|
||||
}
|
||||
@@ -2,36 +2,36 @@ package org.autojs.autojs.tool;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.DhcpInfo;
|
||||
import android.net.wifi.WifiInfo;
|
||||
import android.net.wifi.WifiManager;
|
||||
import android.text.format.Formatter;
|
||||
import android.util.Log;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.net.InetAddress;
|
||||
|
||||
import static android.content.Context.WIFI_SERVICE;
|
||||
import java.net.UnknownHostException;
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/5/11.
|
||||
*/
|
||||
|
||||
public class WifiTool {
|
||||
|
||||
public static String getWifiAddress(Context context) {
|
||||
WifiManager wifiMgr = (WifiManager) context.getApplicationContext().getSystemService(WIFI_SERVICE);
|
||||
if(wifiMgr == null){
|
||||
return null;
|
||||
public static String getRouterIp(Context context) {
|
||||
byte[] ipAddressByte = getIpAddressByte(context);
|
||||
try {
|
||||
return InetAddress.getByAddress(ipAddressByte).getHostAddress();
|
||||
} catch (UnknownHostException e) {
|
||||
Log.e(WifiTool.class.getSimpleName(), "Error getting Hotspot IP address ", e);
|
||||
return "0.0.0.0";
|
||||
}
|
||||
WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
|
||||
int ip = wifiInfo.getIpAddress();
|
||||
return Formatter.formatIpAddress(ip);
|
||||
}
|
||||
|
||||
public static String getRouterIp(Context context){
|
||||
WifiManager wifiService = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
|
||||
if(wifiService == null){
|
||||
return null;
|
||||
private static byte[] getIpAddressByte(Context context) {
|
||||
WifiManager manager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
|
||||
DhcpInfo dhcp = manager.getDhcpInfo();
|
||||
int ipAddress = dhcp.gateway;
|
||||
if (ByteOrder.nativeOrder().equals(ByteOrder.LITTLE_ENDIAN)) {
|
||||
ipAddress = Integer.reverseBytes(ipAddress);
|
||||
}
|
||||
DhcpInfo dhcpInfo = wifiService.getDhcpInfo();
|
||||
return Formatter.formatIpAddress(dhcpInfo.gateway);
|
||||
return BigInteger.valueOf(ipAddress).toByteArray();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -155,15 +155,14 @@ public class CircularMenu implements Recorder.OnStateChangedListener, LayoutInsp
|
||||
mWindow.collapse();
|
||||
if (!RootTool.isRootAvailable()) {
|
||||
DialogUtils.showDialog(new NotAskAgainDialog.Builder(mContext, "CircularMenu.root")
|
||||
.title(R.string.text_device_not_rooted)
|
||||
.content(R.string.prompt_device_not_rooted)
|
||||
.neutralText(R.string.text_device_rooted)
|
||||
.positiveText(R.string.ok)
|
||||
.onNeutral(((dialog, which) -> mRecorder.start()))
|
||||
.title(R.string.text_no_root_access)
|
||||
.content(R.string.no_root_access_for_record)
|
||||
.negativeText(R.string.text_quit)
|
||||
.positiveText(R.string.text_insist_on_record)
|
||||
.onPositive(((dialog, which) -> mRecorder.start()))
|
||||
.build());
|
||||
} else {
|
||||
mRecorder.start();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -155,9 +155,7 @@ public class DrawerFragment extends androidx.fragment.app.Fragment {
|
||||
if (checked && !isAccessibilityServiceEnabled) {
|
||||
enableAccessibilityService();
|
||||
} else if (!checked && isAccessibilityServiceEnabled) {
|
||||
if (!AccessibilityService.Companion.disable()) {
|
||||
AccessibilityServiceTool.goToAccessibilitySetting();
|
||||
}
|
||||
disableAccessibilityService();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -177,26 +175,27 @@ public class DrawerFragment extends androidx.fragment.app.Fragment {
|
||||
}
|
||||
boolean checked = holder.getSwitchCompat().isChecked();
|
||||
if (checked && !enabled) {
|
||||
if (new NotAskAgainDialog.Builder(context, "DrawerFragment.usage_stats")
|
||||
.title(R.string.text_usage_stats_permission)
|
||||
.content(R.string.description_usage_stats_permission)
|
||||
.positiveText(R.string.ok)
|
||||
.dismissListener(dialog -> {
|
||||
if (context != null) {
|
||||
IntentUtil.requestAppUsagePermission(context);
|
||||
}
|
||||
})
|
||||
.show() == null) {
|
||||
if (context != null) {
|
||||
IntentUtil.requestAppUsagePermission(context);
|
||||
}
|
||||
if (getUsageStatsDialog(context) == null) {
|
||||
syncSwitchState();
|
||||
}
|
||||
}
|
||||
if (!checked && enabled) {
|
||||
} else if (!checked && enabled) {
|
||||
IntentUtil.requestAppUsagePermission(context);
|
||||
}
|
||||
}
|
||||
|
||||
private MaterialDialog getUsageStatsDialog(Context context) {
|
||||
return new NotAskAgainDialog.Builder(context, "DrawerFragment.usage_stats")
|
||||
.title(R.string.text_usage_stats_permission)
|
||||
.content(R.string.description_usage_stats_permission)
|
||||
.positiveText(R.string.ok)
|
||||
.dismissListener(dialog -> {
|
||||
if (context != null) {
|
||||
IntentUtil.requestAppUsagePermission(context);
|
||||
}
|
||||
})
|
||||
.show();
|
||||
}
|
||||
|
||||
void showOrDismissFloatingWindow(DrawerMenuItemViewHolder holder) {
|
||||
boolean isFloatingWindowShowing = FloatyWindowManger.isCircularMenuShowing();
|
||||
boolean checked = holder.getSwitchCompat().isChecked();
|
||||
@@ -273,6 +272,7 @@ public class DrawerFragment extends androidx.fragment.app.Fragment {
|
||||
private boolean hasWriteSecureSettingsAccess() {
|
||||
Context context = getContext();
|
||||
if (context != null) {
|
||||
@SuppressLint("WrongConstant")
|
||||
int checkVal = context.checkCallingOrSelfPermission(WRITE_SECURE_SETTINGS_PERMISSION);
|
||||
return checkVal == PackageManager.PERMISSION_GRANTED;
|
||||
}
|
||||
@@ -373,7 +373,7 @@ public class DrawerFragment extends androidx.fragment.app.Fragment {
|
||||
Observable.fromCallable(() -> Pref.shouldEnableAccessibilityServiceByRoot() && !isAccessibilityServiceEnabled())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(needed -> {
|
||||
if (needed) {
|
||||
if (needed && RootTool.isRootAvailable()) {
|
||||
enableAccessibilityServiceByRoot();
|
||||
}
|
||||
});
|
||||
@@ -457,11 +457,17 @@ public class DrawerFragment extends androidx.fragment.app.Fragment {
|
||||
}
|
||||
|
||||
private void enableAccessibilityService() {
|
||||
if (!Pref.shouldEnableAccessibilityServiceByRoot()) {
|
||||
if (Pref.shouldEnableAccessibilityServiceByRoot() && RootTool.isRootAvailable()) {
|
||||
enableAccessibilityServiceByRoot();
|
||||
} else {
|
||||
AccessibilityServiceTool.goToAccessibilitySetting();
|
||||
}
|
||||
}
|
||||
|
||||
private void disableAccessibilityService() {
|
||||
if (!AccessibilityService.Companion.disable()) {
|
||||
AccessibilityServiceTool.goToAccessibilitySetting();
|
||||
return;
|
||||
}
|
||||
enableAccessibilityServiceByRoot();
|
||||
}
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
<string name="text_error">Error</string>
|
||||
<string name="text_copy_debug_info">Copy debugging log</string>
|
||||
<string name="text_it_is_the_developer_of_app">This is a software developer(。・・)ノ</string>
|
||||
<string name="text_please_choose">Please choose </string>
|
||||
<string name="text_please_choose">Please choose</string>
|
||||
<string name="text_crash">Crash~ o(≧□≦)o</string>
|
||||
<string name="crash_feedback">(ಥ _ ಥ)Exit or submit a bug report or copy debugging log to the developer(≧∇≦)ノ</string>
|
||||
<string name="text_clear">Clear</string>
|
||||
@@ -182,6 +182,7 @@
|
||||
<string name="text_stable_mode">Stable mode</string>
|
||||
<string name="text_foreground_service">Foreground service</string>
|
||||
<string name="text_usage_stats_permission">Usage stats access</string>
|
||||
<string name="description_usage_stats_permission">Provides access to device usage history and statistics which results in currentPackage() a more accurate result</string>
|
||||
<string name="text_volume_down_control">Volume down control</string>
|
||||
<string name="text_task">Task</string>
|
||||
<string name="text_next_run_time">Next</string>
|
||||
@@ -238,6 +239,7 @@
|
||||
<string name="text_time">Time</string>
|
||||
<string name="text_size">Size</string>
|
||||
<string name="text_type">Type</string>
|
||||
<string name="text_icon">Icon</string>
|
||||
<string name="text_js_file">*.js file</string>
|
||||
<string name="text_notification_permission">Notification access</string>
|
||||
<string name="text_permission">Permission</string>
|
||||
@@ -253,4 +255,8 @@
|
||||
<string name="text_failed">Failed</string>
|
||||
<string name="mt_color_picker_title">Color picker</string>
|
||||
<string name="mt_custom">Custom</string>
|
||||
<string name="text_no_root_access">No root access</string>
|
||||
<string name="no_root_access_for_record">Auto.js has no root access to record a script. Continue?</string>
|
||||
<string name="text_insist_on_record">Record</string>
|
||||
<string name="text_quit">Quit</string>
|
||||
</resources>
|
||||
|
||||
@@ -311,9 +311,9 @@
|
||||
<string name="format_default_package_name" formatted="true">com.example.script%d</string>
|
||||
<string name="text_should_not_be_empty">不能为空</string>
|
||||
<string name="text_icon">图标</string>
|
||||
<string name="text_device_not_rooted">设备没有root</string>
|
||||
<string name="prompt_device_not_rooted">监测到您的设备没有root, 录制脚本需要root权限, 是否继续?</string>
|
||||
<string name="text_device_rooted">仍要录制</string>
|
||||
<string name="text_no_root_access">无root权限</string>
|
||||
<string name="no_root_access_for_record">Auto.js无root权限, 录制脚本需root权限, 是否继续录制</string>
|
||||
<string name="text_insist_on_record">录制</string>
|
||||
<string name="nodebb_error_invalid_login_credentials">无效的登录凭证</string>
|
||||
<string name="nodebb_error_change_password_error_length">密码太短</string>
|
||||
<string name="nodebb_error_email_taken">邮箱已被占用</string>
|
||||
@@ -393,7 +393,7 @@
|
||||
<string name="text_run_on_package_update">应用更新时</string>
|
||||
<string name="text_run_on_headset_plug">耳机插拔时</string>
|
||||
<string name="text_run_on_time_tick">每分钟一次</string>
|
||||
<string name="text_run_on_config_change">某些设置(屏幕方向,地区等)更改时</string>
|
||||
<string name="text_run_on_config_change">某些设置 (屏幕方向, 地区等) 更改时</string>
|
||||
<string name="error_pattern_syntax">正则表达式错误</string>
|
||||
<string name="text_invalid_package_name">非法包名</string>
|
||||
<string name="error_cannot_rename">重命名失败</string>
|
||||
@@ -403,7 +403,7 @@
|
||||
<string name="key_night_mode">key_night_mode</string>
|
||||
<string name="text_run_on_startup">Auto.js启动时</string>
|
||||
<string name="text_usage_stats_permission">查看使用情况权限</string>
|
||||
<string name="description_usage_stats_permission">通过\"查看使用情况\"权限可以获取本设备过去使用应用的情况,从而使获取当前应用(currentPackage)时更准确。</string>
|
||||
<string name="description_usage_stats_permission">通过\"查看使用情况\"权限可获取本设备过去使用应用的情况, 从而使\"获取当前应用\" (currentPackage) 结果更准确</string>
|
||||
<string name="text_open_with">打开方式</string>
|
||||
<string name="text_root">Root</string>
|
||||
<string name="text_no_root">免Root</string>
|
||||
@@ -421,4 +421,5 @@
|
||||
<string name="text_failed">失败</string>
|
||||
<string name="mt_color_picker_title">选择颜色</string>
|
||||
<string name="mt_custom">自定义</string>
|
||||
<string name="text_quit">放弃</string>
|
||||
</resources>
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
<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_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>
|
||||
|
||||
Reference in New Issue
Block a user