diff --git a/app/src/main/java/com/stardust/scriptdroid/autojs/AutoJs.java b/app/src/main/java/com/stardust/scriptdroid/autojs/AutoJs.java index 39d2f2fc..946bae89 100644 --- a/app/src/main/java/com/stardust/scriptdroid/autojs/AutoJs.java +++ b/app/src/main/java/com/stardust/scriptdroid/autojs/AutoJs.java @@ -4,6 +4,7 @@ import android.app.Application; import android.content.Context; import com.stardust.autojs.core.console.GlobalStardustConsole; +import com.stardust.autojs.runtime.ScriptRuntime; import com.stardust.autojs.runtime.accessibility.AccessibilityConfig; import com.stardust.autojs.runtime.exception.ScriptException; import com.stardust.autojs.runtime.api.Console; @@ -12,6 +13,9 @@ import com.stardust.scriptdroid.BuildConfig; import com.stardust.scriptdroid.Pref; import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.pluginclient.DevPluginService; +import com.stardust.scriptdroid.ui.log.LogActivity_; +import com.stardust.scriptdroid.ui.settings.SettingsActivity; +import com.stardust.scriptdroid.ui.settings.SettingsActivity_; import com.stardust.view.accessibility.AccessibilityService; import com.stardust.scriptdroid.tool.AccessibilityServiceTool; @@ -86,4 +90,12 @@ public class AutoJs extends com.stardust.autojs.AutoJs { return App.getApp(); } + @Override + protected ScriptRuntime createRuntime() { + ScriptRuntime runtime = super.createRuntime(); + runtime.putProperty("class.settings", SettingsActivity_.class); + runtime.putProperty("class.console", LogActivity_.class); + return runtime; + } + } diff --git a/autojs/src/main/assets/modules/__app__.js b/autojs/src/main/assets/modules/__app__.js index 3eafcc33..ba82ac87 100644 --- a/autojs/src/main/assets/modules/__app__.js +++ b/autojs/src/main/assets/modules/__app__.js @@ -42,7 +42,16 @@ module.exports = function(__runtime__, scope){ } app.startActivity = function(i){ - context.startActivity(app.intent(i).addFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK)); + if(typeof(i) == "string"){ + if(__runtime__.getProperty("class." + i)){ + context.startActivity(new Intent(context, __runtime__.getProperty("class." + i)) + .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); + return; + }else{ + throw new Error("class " + i + " not found"); + } + } + context.startActivity(app.intent(i).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); } app.sendBroadcast = function(i){ diff --git a/autojs/src/main/java/com/stardust/autojs/AutoJs.java b/autojs/src/main/java/com/stardust/autojs/AutoJs.java index 09ac9366..0c021c1d 100644 --- a/autojs/src/main/java/com/stardust/autojs/AutoJs.java +++ b/autojs/src/main/java/com/stardust/autojs/AutoJs.java @@ -99,20 +99,24 @@ public abstract class AutoJs { mScriptEngineManager = new ScriptEngineManager(mContext); mScriptEngineManager.registerEngine(JavaScriptSource.ENGINE, () -> { LoopBasedJavaScriptEngine engine = new LoopBasedJavaScriptEngine(mContext); - engine.setRuntime(new ScriptRuntime.Builder() - .setConsole(new StardustConsole(mUiHandler, mGlobalConsole)) - .setScreenCaptureRequester(mScreenCaptureRequester) - .setAccessibilityBridge(new AccessibilityBridgeImpl()) - .setUiHandler(mUiHandler) - .setAppUtils(mAppUtils) - .setEngineService(mScriptEngineService) - .setShellSupplier(() -> new Shell(mContext, true)).build()); + engine.setRuntime(createRuntime()); return engine; }); mScriptEngineManager.registerEngine(AutoFileSource.ENGINE, () -> new RootAutomatorEngine(mContext)); } + protected ScriptRuntime createRuntime() { + return new ScriptRuntime.Builder() + .setConsole(new StardustConsole(mUiHandler, mGlobalConsole)) + .setScreenCaptureRequester(mScreenCaptureRequester) + .setAccessibilityBridge(new AccessibilityBridgeImpl()) + .setUiHandler(mUiHandler) + .setAppUtils(mAppUtils) + .setEngineService(mScriptEngineService) + .setShellSupplier(() -> new Shell(mContext, true)).build(); + } + protected void registerActivityLifecycleCallbacks() { getApplication().registerActivityLifecycleCallbacks(new SimpleActivityLifecycleCallbacks() { diff --git a/inrt/src/main/AndroidManifest.xml b/inrt/src/main/AndroidManifest.xml index 943aeebd..e6065346 100644 --- a/inrt/src/main/AndroidManifest.xml +++ b/inrt/src/main/AndroidManifest.xml @@ -17,7 +17,7 @@ android:supportsRtl="true" android:theme="@style/AppTheme" tools:replace="android:label, android:allowBackup"> - + diff --git a/inrt/src/main/assets/project/main.js b/inrt/src/main/assets/project/main.js index a0ef982a..9d1ce76c 100644 --- a/inrt/src/main/assets/project/main.js +++ b/inrt/src/main/assets/project/main.js @@ -1 +1 @@ -console.error("打包出错啦~ 使用文件夹打包请把主脚本改名为main.js"); \ No newline at end of file +console.error("打包出错啦~ 使用文件夹打包请把主脚本改名为main.js"); diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/MainActivity.java b/inrt/src/main/java/com/stardust/auojs/inrt/LogActivity.java similarity index 51% rename from inrt/src/main/java/com/stardust/auojs/inrt/MainActivity.java rename to inrt/src/main/java/com/stardust/auojs/inrt/LogActivity.java index 2aa1ab85..c3bca7e4 100644 --- a/inrt/src/main/java/com/stardust/auojs/inrt/MainActivity.java +++ b/inrt/src/main/java/com/stardust/auojs/inrt/LogActivity.java @@ -23,15 +23,13 @@ import java.util.List; import static android.content.pm.PackageManager.PERMISSION_DENIED; import static android.content.pm.PackageManager.PERMISSION_GRANTED; -public class MainActivity extends AppCompatActivity { +public class LogActivity extends AppCompatActivity { - private static final int PERMISSION_REQUEST_CODE = 11186; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setupView(); - checkPermission(Manifest.permission.READ_EXTERNAL_STORAGE); } private void setupView() { @@ -43,43 +41,6 @@ public class MainActivity extends AppCompatActivity { } - - private void runScript() { - new Thread(() -> new AssetsProjectLauncher("project", this).launch()).start(); - } - - @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { - runScript(); - } - - protected void checkPermission(String... permissions) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - String[] requestPermissions = getRequestPermissions(permissions); - if (requestPermissions.length > 0) { - requestPermissions(requestPermissions, PERMISSION_REQUEST_CODE); - } else { - runScript(); - } - } else { - int[] grantResults = new int[permissions.length]; - Arrays.fill(grantResults, PERMISSION_GRANTED); - onRequestPermissionsResult(PERMISSION_REQUEST_CODE, permissions, grantResults); - } - } - - - @RequiresApi(api = Build.VERSION_CODES.M) - private String[] getRequestPermissions(String[] permissions) { - List list = new ArrayList<>(); - for (String permission : permissions) { - if (checkSelfPermission(permission) == PERMISSION_DENIED) { - list.add(permission); - } - } - return list.toArray(new String[list.size()]); - } - @Override public boolean onOptionsItemSelected(MenuItem item) { startActivity(new Intent(this, SettingsActivity.class)); diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/SplashActivity.java b/inrt/src/main/java/com/stardust/auojs/inrt/SplashActivity.java index 8f57fdcb..116743cb 100644 --- a/inrt/src/main/java/com/stardust/auojs/inrt/SplashActivity.java +++ b/inrt/src/main/java/com/stardust/auojs/inrt/SplashActivity.java @@ -1,19 +1,33 @@ package com.stardust.auojs.inrt; +import android.Manifest; import android.content.Intent; import android.graphics.Typeface; +import android.os.Build; import android.os.Bundle; import android.os.Handler; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.annotation.RequiresApi; import android.support.v7.app.AppCompatActivity; import android.widget.TextView; +import com.stardust.auojs.inrt.launch.AssetsProjectLauncher; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static android.content.pm.PackageManager.PERMISSION_DENIED; +import static android.content.pm.PackageManager.PERMISSION_GRANTED; + /** * Created by Stardust on 2018/2/2. */ public class SplashActivity extends AppCompatActivity { + private static final int PERMISSION_REQUEST_CODE = 11186; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -29,8 +43,45 @@ public class SplashActivity extends AppCompatActivity { } private void main() { - startActivity(new Intent(this, MainActivity.class)); - finish(); + checkPermission(Manifest.permission.READ_EXTERNAL_STORAGE); } + + + private void runScript() { + new Thread(() -> new AssetsProjectLauncher("project", this).launch()).start(); + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + runScript(); + } + + protected void checkPermission(String... permissions) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + String[] requestPermissions = getRequestPermissions(permissions); + if (requestPermissions.length > 0) { + requestPermissions(requestPermissions, PERMISSION_REQUEST_CODE); + } else { + runScript(); + } + } else { + int[] grantResults = new int[permissions.length]; + Arrays.fill(grantResults, PERMISSION_GRANTED); + onRequestPermissionsResult(PERMISSION_REQUEST_CODE, permissions, grantResults); + } + } + + + @RequiresApi(api = Build.VERSION_CODES.M) + private String[] getRequestPermissions(String[] permissions) { + List list = new ArrayList<>(); + for (String permission : permissions) { + if (checkSelfPermission(permission) == PERMISSION_DENIED) { + list.add(permission); + } + } + return list.toArray(new String[list.size()]); + } + } diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/autojs/AutoJs.java b/inrt/src/main/java/com/stardust/auojs/inrt/autojs/AutoJs.java index 3c647fb5..314dbb65 100644 --- a/inrt/src/main/java/com/stardust/auojs/inrt/autojs/AutoJs.java +++ b/inrt/src/main/java/com/stardust/auojs/inrt/autojs/AutoJs.java @@ -4,8 +4,11 @@ import android.app.Application; import android.content.Context; import com.stardust.auojs.inrt.App; +import com.stardust.auojs.inrt.LogActivity; import com.stardust.auojs.inrt.Pref; import com.stardust.auojs.inrt.R; +import com.stardust.auojs.inrt.SettingsActivity; +import com.stardust.autojs.runtime.ScriptRuntime; import com.stardust.autojs.runtime.exception.ScriptException; import com.stardust.view.accessibility.AccessibilityService; import com.stardust.view.accessibility.AccessibilityServiceUtils; @@ -59,4 +62,12 @@ public class AutoJs extends com.stardust.autojs.AutoJs { protected Application getApplication() { return App.getApp(); } + + @Override + protected ScriptRuntime createRuntime() { + ScriptRuntime runtime = super.createRuntime(); + runtime.putProperty("class.settings", SettingsActivity.class); + runtime.putProperty("class.console", LogActivity.class); + return runtime; + } } diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/launch/AssetsProjectLauncher.java b/inrt/src/main/java/com/stardust/auojs/inrt/launch/AssetsProjectLauncher.java index 66ce027d..caf2530a 100644 --- a/inrt/src/main/java/com/stardust/auojs/inrt/launch/AssetsProjectLauncher.java +++ b/inrt/src/main/java/com/stardust/auojs/inrt/launch/AssetsProjectLauncher.java @@ -1,7 +1,10 @@ package com.stardust.auojs.inrt.launch; import android.app.Activity; +import android.content.Intent; +import com.stardust.auojs.inrt.BuildConfig; +import com.stardust.auojs.inrt.LogActivity; import com.stardust.auojs.inrt.Pref; import com.stardust.auojs.inrt.autojs.AutoJs; import com.stardust.autojs.execution.ExecutionConfig; @@ -33,12 +36,17 @@ public class AssetsProjectLauncher { public void launch() { prepare(); - if (mProjectConfig.getLaunchConfig().shouldHideLogs() || Pref.shouldHideLogs()) { - mActivity.runOnUiThread(mActivity::finish); + if (!(mProjectConfig.getLaunchConfig().shouldHideLogs() || Pref.shouldHideLogs())) { + mActivity.runOnUiThread(() -> { + mActivity.startActivity(new Intent(mActivity, LogActivity.class)); + mActivity.finish(); + mActivity = null; + }); + } else { + mActivity.finish(); + mActivity = null; } - mActivity = null; runScript(); - } private void runScript() { @@ -54,7 +62,7 @@ public class AssetsProjectLauncher { private void prepare() { String projectConfigPath = PFiles.join(mProjectDir, ProjectConfig.CONFIG_FILE_NAME); ProjectConfig projectConfig = ProjectConfig.fromFile(projectConfigPath); - if (projectConfig != null && projectConfig.getVersionCode() == mProjectConfig.getVersionCode()) { + if (!BuildConfig.DEBUG && projectConfig != null && projectConfig.getVersionCode() == mProjectConfig.getVersionCode()) { return; } PFiles.copyAsset(mActivity, PFiles.join(mAssetsProjectDir, ProjectConfig.CONFIG_FILE_NAME), projectConfigPath);