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 { repositories {
flatDir { flatDir {
dirs 'libs' dirs 'libs'

View File

@@ -69,7 +69,7 @@
</activity> </activity>
<provider <provider
android:name="android.support.v4.content.FileProvider" android:name=".external.fileprovider.AppFileProvider"
android:authorities="org.autojs.autojs.fileprovider" android:authorities="org.autojs.autojs.fileprovider"
android:exported="false" android:exported="false"
android:grantUriPermissions="true"> 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.execution.SimpleScriptExecutionListener;
import com.stardust.autojs.runtime.exception.ScriptInterruptedException; import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
import com.stardust.autojs.script.ScriptSource; import com.stardust.autojs.script.ScriptSource;
import com.stardust.util.IntentUtil;
import org.autojs.autojs.Pref; import org.autojs.autojs.Pref;
import org.autojs.autojs.R; import org.autojs.autojs.R;
import org.autojs.autojs.autojs.AutoJs; import org.autojs.autojs.autojs.AutoJs;
import org.autojs.autojs.external.ScriptIntents; 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.Shortcut;
import org.autojs.autojs.external.shortcut.ShortcutActivity; import org.autojs.autojs.external.shortcut.ShortcutActivity;
import org.autojs.autojs.ui.edit.EditActivity; import org.autojs.autojs.ui.edit.EditActivity;
@@ -71,8 +73,7 @@ public class Scripts {
public static void openByOtherApps(String path) { public static void openByOtherApps(String path) {
Uri uri = Uri.parse("file://" + path); IntentUtil.viewFile(GlobalAppContext.get(), path, "text/plain", AppFileProvider.AUTHORITY);
GlobalAppContext.get().startActivity(new Intent(Intent.ACTION_VIEW).setDataAndType(uri, "text/plain").addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
} }
public static void openByOtherApps(File file) { public static void openByOtherApps(File file) {

View File

@@ -5,10 +5,8 @@ import android.os.Bundle;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton; import android.support.design.widget.FloatingActionButton;
import android.support.v7.widget.RecyclerView;
import com.stardust.app.GlobalAppContext; import com.stardust.app.GlobalAppContext;
import com.stardust.util.BackPressedHandler;
import com.stardust.util.IntentUtil; import com.stardust.util.IntentUtil;
import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.AfterViews;
@@ -16,6 +14,7 @@ import org.androidannotations.annotations.EFragment;
import org.androidannotations.annotations.ViewById; import org.androidannotations.annotations.ViewById;
import org.autojs.autojs.Pref; import org.autojs.autojs.Pref;
import org.autojs.autojs.R; 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.ExplorerDirPage;
import org.autojs.autojs.model.explorer.Explorers; import org.autojs.autojs.model.explorer.Explorers;
import org.autojs.autojs.model.script.Scripts; 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.project.ProjectConfigActivity_; import org.autojs.autojs.ui.project.ProjectConfigActivity_;
import org.autojs.autojs.ui.viewmodel.ExplorerItemList; import org.autojs.autojs.ui.viewmodel.ExplorerItemList;
import org.autojs.autojs.ui.widget.ExpandableRecyclerView;
import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.Subscribe;
@@ -66,7 +64,7 @@ public class MyScriptListFragment extends ViewPagerFragment implements FloatingA
if (item.isEditable()) { if (item.isEditable()) {
Scripts.edit(item.toScriptFile()); Scripts.edit(item.toScriptFile());
} else { } 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"?> <?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android"> <paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/> <external-path name="external_files" path="."/>
<files-path name="sample" path="sample"/>
<root-path name="root_files" path="." />
</paths> </paths>

View File

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

View File

@@ -55,6 +55,7 @@ public class OpenCVHelper {
public void onManagerConnected(int status) { public void onManagerConnected(int status) {
switch (status) { switch (status) {
case 0: case 0:
finish();
break; break;
case 1: case 1:
default: default:
@@ -117,6 +118,8 @@ public class OpenCVHelper {
.negativeText("Exit") .negativeText("Exit")
.onNegative(((dialog, which) -> callback.cancel())) .onNegative(((dialog, which) -> callback.cancel()))
.show(); .show();
default:
finish();
} }
} }

View File

@@ -7,9 +7,7 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.net.Uri; import android.net.Uri;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.webkit.MimeTypeMap;
import com.stardust.autojs.annotation.ScriptInterface; import com.stardust.autojs.annotation.ScriptInterface;
import com.stardust.util.IntentUtil; import com.stardust.util.IntentUtil;
@@ -18,8 +16,6 @@ import com.stardust.util.MimeTypes;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.util.List; import java.util.List;
import static com.stardust.pio.PFiles.getExtension;
/** /**
* Created by Stardust on 2017/4/2. * Created by Stardust on 2017/4/2.
*/ */
@@ -28,9 +24,16 @@ public class AppUtils {
private Context mContext; private Context mContext;
private volatile WeakReference<Activity> mCurrentActivity = new WeakReference<>(null); private volatile WeakReference<Activity> mCurrentActivity = new WeakReference<>(null);
private final String mFileProviderAuthority;
public AppUtils(Context context) { public AppUtils(Context context) {
mContext = context; mContext = context;
mFileProviderAuthority = null;
}
public AppUtils(Context context, String fileProviderAuthority) {
mContext = context;
mFileProviderAuthority = fileProviderAuthority;
} }
@ScriptInterface @ScriptInterface
@@ -99,22 +102,14 @@ public class AppUtils {
public void viewFile(String path) { public void viewFile(String path) {
if (path == null) if (path == null)
throw new NullPointerException("path == null"); throw new NullPointerException("path == null");
path = "file://" + path; IntentUtil.viewFile(mContext, path, mFileProviderAuthority);
String mimeType = MimeTypes.fromFileOr(path, "*/*");
mContext.startActivity(new Intent(Intent.ACTION_VIEW)
.setDataAndType(Uri.parse(path), mimeType)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
} }
@ScriptInterface @ScriptInterface
public void editFile(String path) { public void editFile(String path) {
if (path == null) if (path == null)
throw new NullPointerException("path == null"); throw new NullPointerException("path == null");
path = "file://" + path; IntentUtil.editFile(mContext, path, mFileProviderAuthority);
String mimeType = MimeTypes.fromFileOr(path, "*/*");
mContext.startActivity(new Intent(Intent.ACTION_EDIT)
.setDataAndType(Uri.parse(path), mimeType)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
} }
@ScriptInterface @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. // Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript { buildscript {
@@ -27,12 +29,5 @@ task clean(type: Delete) {
} }
ext { ext {
versions = [ versions = new JsonSlurper().parse(file('./project-versions.json'))
appVersionCode: 423,
appVersionName: '4.0.3 Alpha4',
target : 28,
mini : 17,
compile : 28,
buildTool : '28.0.3'
]
} }

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.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v4.content.FileProvider;
import java.io.File; import java.io.File;
@@ -93,11 +94,37 @@ public class IntentUtil {
context.startActivity(intent); context.startActivity(intent);
} }
public static void viewFile(Context context, String path) { public static void viewFile(Context context, String path, String fileProviderAuthority) {
path = "file://" + path;
String mimeType = MimeTypes.fromFileOr(path, "*/*"); 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) context.startActivity(new Intent(Intent.ACTION_VIEW)
.setDataAndType(Uri.parse(path), mimeType) .setDataAndType(uri, mimeType)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); .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 distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists 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 { repositories {
flatDir { flatDir {
dirs 'libs' dirs 'libs'

View File

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

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"
}