api(app): app.startActivity() for string param

This commit is contained in:
hyb1996 2018-02-27 16:16:32 +08:00
parent 66c436cd99
commit 235115edf3
9 changed files with 114 additions and 58 deletions

View File

@ -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;
}
}

View File

@ -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){

View File

@ -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() {

View File

@ -17,7 +17,7 @@
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:replace="android:label, android:allowBackup">
<activity android:name=".MainActivity">
<activity android:name=".LogActivity">
</activity>

View File

@ -1 +1 @@
console.error("打包出错啦~ 使用文件夹打包请把主脚本改名为main.js");
console.error("打包出错啦~ 使用文件夹打包请把主脚本改名为main.js");

View File

@ -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<String> 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));

View File

@ -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<String> list = new ArrayList<>();
for (String permission : permissions) {
if (checkSelfPermission(permission) == PERMISSION_DENIED) {
list.add(permission);
}
}
return list.toArray(new String[list.size()]);
}
}

View File

@ -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;
}
}

View File

@ -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);