diff --git a/app/src/main/java/org/autojs/autojs/autojs/build/AutoJsApkBuilder.java b/app/src/main/java/org/autojs/autojs/autojs/build/AutoJsApkBuilder.java index 419ce82c..174e609d 100644 --- a/app/src/main/java/org/autojs/autojs/autojs/build/AutoJsApkBuilder.java +++ b/app/src/main/java/org/autojs/autojs/autojs/build/AutoJsApkBuilder.java @@ -48,14 +48,18 @@ public class AutoJsApkBuilder extends ApkBuilder { Callable icon; public static AppConfig fromProjectConfig(String projectDir, ProjectConfig projectConfig) { - return new AppConfig() + String icon = projectConfig.getIcon(); + AppConfig appConfig = new AppConfig() .setAppName(projectConfig.getName()) .setPackageName(projectConfig.getPackageName()) .ignoreDir(new File(projectDir, projectConfig.getBuildDir())) .setVersionCode(projectConfig.getVersionCode()) .setVersionName(projectConfig.getVersionName()) - .setIcon(projectConfig.getIcon()) .setSourcePath(projectDir); + if (icon != null) { + appConfig.setIcon(new File(projectDir, icon).getPath()); + } + return appConfig; } diff --git a/app/src/main/java/org/autojs/autojs/ui/project/BuildActivity.java b/app/src/main/java/org/autojs/autojs/ui/project/BuildActivity.java index 06e130cf..e413073c 100644 --- a/app/src/main/java/org/autojs/autojs/ui/project/BuildActivity.java +++ b/app/src/main/java/org/autojs/autojs/ui/project/BuildActivity.java @@ -25,10 +25,12 @@ import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.Click; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.ViewById; +import org.autojs.autojs.App; import org.autojs.autojs.Pref; import org.autojs.autojs.R; import org.autojs.autojs.autojs.build.AutoJsApkBuilder; import org.autojs.autojs.build.ApkBuilderPluginHelper; +import org.autojs.autojs.external.fileprovider.AppFileProvider; import org.autojs.autojs.model.script.ScriptFile; import org.autojs.autojs.theme.dialog.ThemeColorMaterialDialogBuilder; import org.autojs.autojs.tool.BitmapTool; @@ -301,7 +303,7 @@ public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.Prog .positiveText(R.string.text_install) .negativeText(R.string.cancel) .onPositive((dialog, which) -> - IntentUtil.installApk(BuildActivity.this, outApk.getPath()) + IntentUtil.installApk(BuildActivity.this, outApk.getPath(), AppFileProvider.AUTHORITY) ) .show(); diff --git a/app/src/main/java/org/autojs/autojs/ui/update/UpdateInfoDialogBuilder.java b/app/src/main/java/org/autojs/autojs/ui/update/UpdateInfoDialogBuilder.java index 95b7e819..f0837477 100644 --- a/app/src/main/java/org/autojs/autojs/ui/update/UpdateInfoDialogBuilder.java +++ b/app/src/main/java/org/autojs/autojs/ui/update/UpdateInfoDialogBuilder.java @@ -20,6 +20,7 @@ import com.stardust.util.IntentUtil; import org.autojs.autojs.BuildConfig; import org.autojs.autojs.Pref; import org.autojs.autojs.R; +import org.autojs.autojs.external.fileprovider.AppFileProvider; import org.autojs.autojs.network.download.DownloadManager; import org.autojs.autojs.network.entity.VersionInfo; import org.autojs.autojs.tool.IntentTool; @@ -118,7 +119,7 @@ public class UpdateInfoDialogBuilder extends MaterialDialog.Builder { final String path = new File(Pref.getScriptDirPath(), "AutoJs.apk").getPath(); DownloadManager.getInstance().downloadWithProgress(getContext(), downloadUrl, path) .subscribeOn(AndroidSchedulers.mainThread()) - .subscribe(file -> IntentUtil.installApk(getContext(), file.getPath()), + .subscribe(file -> IntentUtil.installApk(getContext(), file.getPath(), AppFileProvider.AUTHORITY), error -> { error.printStackTrace(); Toast.makeText(getContext(), R.string.text_download_failed, Toast.LENGTH_SHORT).show(); diff --git a/common/src/main/java/com/stardust/util/IntentUtil.java b/common/src/main/java/com/stardust/util/IntentUtil.java index 52eb7f92..a1d0f138 100644 --- a/common/src/main/java/com/stardust/util/IntentUtil.java +++ b/common/src/main/java/com/stardust/util/IntentUtil.java @@ -85,12 +85,13 @@ public class IntentUtil { return goToAppDetailSettings(context, context.getPackageName()); } - // FIXME: 2018/7/11 Permission denial - public static void installApk(Context context, String path) { + public static void installApk(Context context, String path, String fileProviderAuthority) { + Uri uri = getUriOfFile(context, path, fileProviderAuthority); Intent intent = new Intent(Intent.ACTION_VIEW); - - intent.setDataAndType(Uri.fromFile(new File(path)), "application/vnd.android.package-archive"); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.setDataAndType(uri, "application/vnd.android.package-archive"); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) + .addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); context.startActivity(intent); } @@ -99,13 +100,18 @@ public class IntentUtil { viewFile(context, path, mimeType, fileProviderAuthority); } - public static void viewFile(Context context, String path, String mimeType, String fileProviderAuthority) { + public static Uri getUriOfFile(Context context, String path, String fileProviderAuthority) { Uri uri; if (fileProviderAuthority == null) { uri = Uri.parse("file://" + path); } else { uri = FileProvider.getUriForFile(context, fileProviderAuthority, new File(path)); } + return uri; + } + + public static void viewFile(Context context, String path, String mimeType, String fileProviderAuthority) { + Uri uri = getUriOfFile(context, path, fileProviderAuthority); context.startActivity(new Intent(Intent.ACTION_VIEW) .setDataAndType(uri, mimeType) .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) @@ -115,12 +121,7 @@ public class IntentUtil { 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)); - } + Uri uri = getUriOfFile(context, path, fileProviderAuthority); context.startActivity(new Intent(Intent.ACTION_EDIT) .setDataAndType(uri, mimeType) .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)