fix: exposed uri error

This commit is contained in:
hyb1996
2018-10-10 14:49:59 +08:00
parent 6cebca179c
commit cce09209a3
17 changed files with 125 additions and 47 deletions

Binary file not shown.

View File

@@ -70,6 +70,7 @@ android {
repositories {
flatDir {
dirs 'libs'

View File

@@ -69,7 +69,7 @@
</activity>
<provider
android:name="android.support.v4.content.FileProvider"
android:name=".external.fileprovider.AppFileProvider"
android:authorities="org.autojs.autojs.fileprovider"
android:exported="false"
android:grantUriPermissions="true">

View File

@@ -0,0 +1,16 @@
package org.autojs.autojs.external.fileprovider;
import android.content.Context;
import android.net.Uri;
import android.support.v4.content.FileProvider;
import java.io.File;
public class AppFileProvider extends FileProvider {
public static final String AUTHORITY = "org.autojs.autojs.fileprovider";
public static Uri getUriForFile(Context context, File file){
return FileProvider.getUriForFile(context, AUTHORITY, file);
}
}

View File

@@ -12,11 +12,13 @@ import com.stardust.autojs.execution.ScriptExecutionListener;
import com.stardust.autojs.execution.SimpleScriptExecutionListener;
import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
import com.stardust.autojs.script.ScriptSource;
import com.stardust.util.IntentUtil;
import org.autojs.autojs.Pref;
import org.autojs.autojs.R;
import org.autojs.autojs.autojs.AutoJs;
import org.autojs.autojs.external.ScriptIntents;
import org.autojs.autojs.external.fileprovider.AppFileProvider;
import org.autojs.autojs.external.shortcut.Shortcut;
import org.autojs.autojs.external.shortcut.ShortcutActivity;
import org.autojs.autojs.ui.edit.EditActivity;
@@ -71,8 +73,7 @@ public class Scripts {
public static void openByOtherApps(String path) {
Uri uri = Uri.parse("file://" + path);
GlobalAppContext.get().startActivity(new Intent(Intent.ACTION_VIEW).setDataAndType(uri, "text/plain").addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
IntentUtil.viewFile(GlobalAppContext.get(), path, "text/plain", AppFileProvider.AUTHORITY);
}
public static void openByOtherApps(File file) {
@@ -111,8 +112,8 @@ public class Scripts {
public static ScriptExecution run(ScriptSource source) {
try {
return AutoJs.getInstance().getScriptEngineService().execute(source, new ExecutionConfig()
.executePath(Pref.getScriptDirPath())
.requirePath(Pref.getScriptDirPath()));
.executePath(Pref.getScriptDirPath())
.requirePath(Pref.getScriptDirPath()));
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(GlobalAppContext.get(), e.getMessage(), Toast.LENGTH_LONG).show();

View File

@@ -5,10 +5,8 @@ import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.widget.RecyclerView;
import com.stardust.app.GlobalAppContext;
import com.stardust.util.BackPressedHandler;
import com.stardust.util.IntentUtil;
import org.androidannotations.annotations.AfterViews;
@@ -16,6 +14,7 @@ import org.androidannotations.annotations.EFragment;
import org.androidannotations.annotations.ViewById;
import org.autojs.autojs.Pref;
import org.autojs.autojs.R;
import org.autojs.autojs.external.fileprovider.AppFileProvider;
import org.autojs.autojs.model.explorer.ExplorerDirPage;
import org.autojs.autojs.model.explorer.Explorers;
import org.autojs.autojs.model.script.Scripts;
@@ -28,7 +27,6 @@ import org.autojs.autojs.ui.main.ViewPagerFragment;
import org.autojs.autojs.ui.project.ProjectConfigActivity;
import org.autojs.autojs.ui.project.ProjectConfigActivity_;
import org.autojs.autojs.ui.viewmodel.ExplorerItemList;
import org.autojs.autojs.ui.widget.ExpandableRecyclerView;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
@@ -66,7 +64,7 @@ public class MyScriptListFragment extends ViewPagerFragment implements FloatingA
if (item.isEditable()) {
Scripts.edit(item.toScriptFile());
} else {
IntentUtil.viewFile(GlobalAppContext.get(), item.getPath());
IntentUtil.viewFile(GlobalAppContext.get(), item.getPath(), AppFileProvider.AUTHORITY);
}
});
}

View File

@@ -1,4 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
<files-path name="sample" path="sample"/>
<root-path name="root_files" path="." />
</paths>

View File

@@ -7,6 +7,7 @@
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<application

View File

@@ -31,7 +31,7 @@ public class OpenCVHelper {
}
public static void initIfNeeded(Activity activity, InitializeCallback callback) {
if(mInitialized){
if (mInitialized) {
callback.onInitFinish();
return;
}
@@ -55,17 +55,18 @@ public class OpenCVHelper {
public void onManagerConnected(int status) {
switch (status) {
case 0:
finish();
break;
case 1:
default:
Log.e(LOG_TAG, "OpenCV loading failed!");
new MaterialDialog.Builder(mActivity)
.title("OpenCV error")
.content("OpenCV was not initialised correctly. Application will be shut down")
.cancelable(false)
.positiveText("OK")
.onPositive((dialog, which) -> finish())
.show();
.title("OpenCV error")
.content("OpenCV was not initialised correctly. Application will be shut down")
.cancelable(false)
.positiveText("OK")
.onPositive((dialog, which) -> finish())
.show();
break;
case 2:
Log.e(LOG_TAG, "Package installation failed!");
@@ -117,6 +118,8 @@ public class OpenCVHelper {
.negativeText("Exit")
.onNegative(((dialog, which) -> callback.cancel()))
.show();
default:
finish();
}
}

View File

@@ -7,9 +7,7 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.util.Log;
import android.webkit.MimeTypeMap;
import com.stardust.autojs.annotation.ScriptInterface;
import com.stardust.util.IntentUtil;
@@ -18,8 +16,6 @@ import com.stardust.util.MimeTypes;
import java.lang.ref.WeakReference;
import java.util.List;
import static com.stardust.pio.PFiles.getExtension;
/**
* Created by Stardust on 2017/4/2.
*/
@@ -28,9 +24,16 @@ public class AppUtils {
private Context mContext;
private volatile WeakReference<Activity> mCurrentActivity = new WeakReference<>(null);
private final String mFileProviderAuthority;
public AppUtils(Context context) {
mContext = context;
mFileProviderAuthority = null;
}
public AppUtils(Context context, String fileProviderAuthority) {
mContext = context;
mFileProviderAuthority = fileProviderAuthority;
}
@ScriptInterface
@@ -99,22 +102,14 @@ public class AppUtils {
public void viewFile(String path) {
if (path == null)
throw new NullPointerException("path == null");
path = "file://" + path;
String mimeType = MimeTypes.fromFileOr(path, "*/*");
mContext.startActivity(new Intent(Intent.ACTION_VIEW)
.setDataAndType(Uri.parse(path), mimeType)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
IntentUtil.viewFile(mContext, path, mFileProviderAuthority);
}
@ScriptInterface
public void editFile(String path) {
if (path == null)
throw new NullPointerException("path == null");
path = "file://" + path;
String mimeType = MimeTypes.fromFileOr(path, "*/*");
mContext.startActivity(new Intent(Intent.ACTION_EDIT)
.setDataAndType(Uri.parse(path), mimeType)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
IntentUtil.editFile(mContext, path, mFileProviderAuthority);
}
@ScriptInterface

View File

@@ -1,3 +1,5 @@
import groovy.json.JsonSlurper
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
@@ -27,12 +29,5 @@ task clean(type: Delete) {
}
ext {
versions = [
appVersionCode: 423,
appVersionName: '4.0.3 Alpha4',
target : 28,
mini : 17,
compile : 28,
buildTool : '28.0.3'
]
versions = new JsonSlurper().parse(file('./project-versions.json'))
}

View File

@@ -1 +1 @@
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":423},"path":"commonRelease-4.0.3 Alpha4.apk","properties":{"packageId":"org.autojs.autojs","split":"","minSdkVersion":"17"}}]
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":424,"versionName":"4.0.3 Alpha5","enabled":true,"outputFile":"commonRelease-4.0.3 Alpha5.apk","fullName":"commonRelease","baseName":"common-release"},"path":"commonRelease-4.0.3 Alpha5.apk","properties":{}}]

View File

@@ -5,6 +5,7 @@ import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.support.annotation.Nullable;
import android.support.v4.content.FileProvider;
import java.io.File;
@@ -93,11 +94,37 @@ public class IntentUtil {
context.startActivity(intent);
}
public static void viewFile(Context context, String path) {
path = "file://" + path;
public static void viewFile(Context context, String path, String fileProviderAuthority) {
String mimeType = MimeTypes.fromFileOr(path, "*/*");
viewFile(context, path, mimeType, fileProviderAuthority);
}
public static void viewFile(Context context, String path, String mimeType, String fileProviderAuthority) {
Uri uri;
if (fileProviderAuthority == null) {
uri = Uri.parse("file://" + path);
} else {
uri = FileProvider.getUriForFile(context, fileProviderAuthority, new File(path));
}
context.startActivity(new Intent(Intent.ACTION_VIEW)
.setDataAndType(Uri.parse(path), mimeType)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
.setDataAndType(uri, mimeType)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION));
}
public static void editFile(Context context, String path, String fileProviderAuthority) {
String mimeType = MimeTypes.fromFileOr(path, "*/*");
Uri uri;
if (fileProviderAuthority == null) {
uri = Uri.parse("file://" + path);
} else {
uri = FileProvider.getUriForFile(context, fileProviderAuthority, new File(path));
}
context.startActivity(new Intent(Intent.ACTION_EDIT)
.setDataAndType(uri, mimeType)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION));
}
}

View File

@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip

View File

@@ -36,6 +36,39 @@ android {
}
}
task buildApkPlugin {
doLast {
def pluginProjectDirPath = '..\\..\\AutoJsApkBuilderPlugin'
def pluginProjectDir = file(pluginProjectDirPath)
if(!pluginProjectDir.exists() || !pluginProjectDir.isDirectory()){
println 'pluginProjectDir not exists'
return
}
copy {
from file('build\\outputs\\apk\\release\\')
into new File(pluginProjectDir, 'app\\src\\main\\assets')
include "inrt-release-unsigned.apk"
rename "inrt-release-unsigned.apk", 'template.apk'
}
exec {
workingDir pluginProjectDir
commandLine 'gradlew.bat', 'assembleRelease'
}
copy {
from new File(pluginProjectDir, 'app\\build\\outputs\\apk\\release')
into file('..\\common\\release')
include '*-release.apk'
}
}
}
tasks.whenTaskAdded { task ->
if (task.name == 'assembleRelease') {
task.finalizedBy 'buildApkPlugin'
}
}
repositories {
flatDir {
dirs 'libs'

View File

@@ -75,9 +75,7 @@ public class SplashActivity extends AppCompatActivity {
runScript();
}
} else {
int[] grantResults = new int[permissions.length];
Arrays.fill(grantResults, PERMISSION_GRANTED);
onRequestPermissionsResult(PERMISSION_REQUEST_CODE, permissions, grantResults);
runScript();
}
}

8
project-versions.json Normal file
View File

@@ -0,0 +1,8 @@
{
"appVersionCode": 424,
"appVersionName": "4.0.3 Alpha5",
"target": 28,
"mini": 17,
"compile": 28,
"buildTool": "28.0.3"
}