diff --git a/.idea/dictionaries/Stardust.xml b/.idea/dictionaries/Stardust.xml index b9b63051..49fb13b7 100644 --- a/.idea/dictionaries/Stardust.xml +++ b/.idea/dictionaries/Stardust.xml @@ -4,6 +4,7 @@ autojs capturer dismissable + fileprovider flowable imgproc interruptible diff --git a/autojs/src/main/assets/modules/__app__.js b/autojs/src/main/assets/modules/__app__.js index a1efcdd4..1543d77f 100644 --- a/autojs/src/main/assets/modules/__app__.js +++ b/autojs/src/main/assets/modules/__app__.js @@ -1,117 +1,132 @@ -module.exports = function(runtime, global){ +module.exports = function (runtime, global) { importClass(android.content.Intent); var app = Object.create(runtime.app); var context = global.context; - app.intent = function(i) { - var intent = new android.content.Intent(); - if (i.className && i.packageName) { - intent.setClassName(i.packageName, i.className); - } - if (i.extras) { - for (var key in i.extras) { - intent.putExtra(key, i.extras[key]); - } - } - if (i.category) { - if(i.category instanceof Array){ - for(var j = 0; i < i.category.length; j++){ - intent.addCategory(i.category[j]); - } - }else{ - intent.addCategory(i.category); - } - } - if (i.action) { - if(i.action.indexOf(".") == -1){ - i.action = "android.intent.action." + i.action; - } - intent.setAction(i.action); - } - if (i.type) { - if(i.data){ - intent.setDataAndType(android.net.Uri.parse(i.data), i.type); - }else{ - intent.setType(i.type); - } - }else if (i.data) { - intent.setData(android.net.Uri.parse(i.data)); - } - return intent; + app.intent = function (i) { + var intent = new android.content.Intent(); + if (i.className && i.packageName) { + intent.setClassName(i.packageName, i.className); + } + if (i.extras) { + for (var key in i.extras) { + intent.putExtra(key, i.extras[key]); + } + } + if (i.category) { + if (i.category instanceof Array) { + for (var j = 0; i < i.category.length; j++) { + intent.addCategory(i.category[j]); + } + } else { + intent.addCategory(i.category); + } + } + if (i.action) { + if (i.action.indexOf(".") == -1) { + i.action = "android.intent.action." + i.action; + } + intent.setAction(i.action); + } + if (i.flags) { + let flags = 0; + if (Array.isArray(i.flags)) { + for (let j = 0; j < i.flags.length; j++) { + flags |= parseIntentFlag(i.flags[j]); + } + } else { + flags = parseIntentFlag(i.flags); + } + intent.setFlags(flags); + } + if (i.type) { + if (i.data) { + intent.setDataAndType(android.net.Uri.parse(i.data), i.type); + } else { + intent.setType(i.type); + } + } else if (i.data) { + intent.setData(android.net.Uri.parse(i.data)); + } + return intent; } - app.startActivity = function(i){ - if(typeof(i) == "string"){ - if(runtime.getProperty("class." + i)){ + app.startActivity = function (i) { + if (typeof (i) == "string") { + if (runtime.getProperty("class." + i)) { context.startActivity(new Intent(context, runtime.getProperty("class." + i)) - .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); + .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); return; - }else{ + } else { throw new Error("class " + i + " not found"); } } context.startActivity(app.intent(i).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); } - app.sendBroadcast = function(i){ - if(typeof(i) == "string"){ - if(runtime.getProperty("broadcast." + i)){ - app.sendLocalBroadcastSync(app.intent({action: runtime.getProperty("broadcast." + i)})); + app.sendBroadcast = function (i) { + if (typeof (i) == "string") { + if (runtime.getProperty("broadcast." + i)) { + app.sendLocalBroadcastSync(app.intent({ action: runtime.getProperty("broadcast." + i) })); } } context.sendBroadcast(app.intent(i)); } - app.sendEmail = function(options){ + app.sendEmail = function (options) { options = options || {}; var i = new Intent(Intent.ACTION_SEND); - if(options.email){ + if (options.email) { i.putExtra(Intent.EXTRA_EMAIL, toArray(options.email)); } - if(options.cc){ + if (options.cc) { i.putExtra(Intent.EXTRA_CC, toArray(options.cc)); } - if(options.bcc){ + if (options.bcc) { i.putExtra(Intent.EXTRA_BCC, toArray(options.bcc)); } - if(options.subject){ + if (options.subject) { i.putExtra(Intent.EXTRA_SUBJECT, options.subject); } - if(options.text){ + if (options.text) { i.putExtra(Intent.EXTRA_TEXT, options.text); } - if(options.attachment){ + if (options.attachment) { i.putExtra(Intent.EXTRA_STREAM, app.parseUri(options.attachment)); } i.setType("message/rfc822"); context.startActivity(Intent.createChooser(i, "发送邮件").addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); } - function toArray(arg){ - if(typeof(arg) == 'string'){ + function toArray(arg) { + if (typeof (arg) == 'string') { arg = [arg]; } let arr = util.java.array("string", arg.length); - for(let i = 0; i < arg.length; i++){ + for (let i = 0; i < arg.length; i++) { arr[i] = arg; } return arr; } - app.parseUri = function(uri){ - if(uri.startsWith("file://")){ + app.parseUri = function (uri) { + if (uri.startsWith("file://")) { return app.getUriForFile(uri); } return android.net.Uri.parse(uri); } - app.getUriForFile = function(path){ - if(path.startsWith("file://")){ + app.getUriForFile = function (path) { + if (path.startsWith("file://")) { path = path.substring(7); } + let file = new java.io.File(files.path(path)); + if (app.fileProviderAuthority == null) { + return android.net.Uri.fromFile(file); + } return android.support.v4.content.FileProvider.getUriForFile(context, - "org.autojs.autojs.fileprovider", new java.io.File(files.path(path))); + app.fileProviderAuthority, file); }; app.launch = app.launchPackage; @@ -126,6 +141,13 @@ module.exports = function(runtime, global){ global.__asGlobal__(app, ['launchPackage', 'launch', 'launchApp', 'getPackageName', 'getAppName', 'openAppSetting']); + function parseIntentFlag(flag) { + if (typeof (flag) == 'string') { + return android.content.Intent["FLAG_" + flag.toUpperCase()]; + } + return flag; + } + return app; } diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/AppUtils.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/AppUtils.java index 2a5d3a75..d63c0d82 100644 --- a/autojs/src/main/java/com/stardust/autojs/runtime/api/AppUtils.java +++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/AppUtils.java @@ -7,6 +7,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.net.Uri; import android.support.annotation.Nullable; +import android.support.v4.content.FileProvider; import android.support.v4.content.LocalBroadcastManager; import android.util.Log; @@ -14,6 +15,7 @@ import com.stardust.autojs.annotation.ScriptInterface; import com.stardust.util.IntentUtil; import com.stardust.util.MimeTypes; +import java.io.File; import java.lang.ref.WeakReference; import java.util.List; @@ -51,7 +53,7 @@ public class AppUtils { } @ScriptInterface - public void sendLocalBroadcastSync(Intent intent){ + public void sendLocalBroadcastSync(Intent intent) { LocalBroadcastManager.getInstance(mContext).sendBroadcastSync(intent); } @@ -92,6 +94,10 @@ public class AppUtils { return IntentUtil.goToAppDetailSettings(mContext, packageName); } + public String getFileProviderAuthority() { + return mFileProviderAuthority; + } + @Nullable public Activity getCurrentActivity() { Log.d("App", "getCurrentActivity: " + mCurrentActivity.get()); diff --git a/common/src/main/java/com/stardust/util/IntentUtil.java b/common/src/main/java/com/stardust/util/IntentUtil.java index 8636f4b6..8b50def8 100644 --- a/common/src/main/java/com/stardust/util/IntentUtil.java +++ b/common/src/main/java/com/stardust/util/IntentUtil.java @@ -150,7 +150,6 @@ public class IntentUtil { return false; } } - } public static boolean viewFile(Context context, String path, String mimeType, String fileProviderAuthority) {