diff --git a/app/release/output.json b/app/release/output.json index 3126ad05..788e9f63 100644 --- a/app/release/output.json +++ b/app/release/output.json @@ -1 +1 @@ -[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":231},"path":"release-3.0.0 Alpha31.apk","properties":{"packageId":"com.stardust.scriptdroid","split":"","minSdkVersion":"17"}}] \ No newline at end of file +[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":1},"path":"inrt-release.apk","properties":{"packageId":"com.stardust.auojs.inrt","split":"","minSdkVersion":"17"}}] \ No newline at end of file diff --git a/app/src/main/java/com/stardust/scriptdroid/autojs/build/AutoJsApkBuilder.java b/app/src/main/java/com/stardust/scriptdroid/autojs/build/AutoJsApkBuilder.java index e7093a82..470bd398 100644 --- a/app/src/main/java/com/stardust/scriptdroid/autojs/build/AutoJsApkBuilder.java +++ b/app/src/main/java/com/stardust/scriptdroid/autojs/build/AutoJsApkBuilder.java @@ -1,10 +1,14 @@ package com.stardust.scriptdroid.autojs.build; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + import com.stardust.autojs.apkbuilder.ApkBuilder; import com.stardust.autojs.apkbuilder.ManifestEditor; import com.stardust.autojs.apkbuilder.util.StreamUtils; import com.stardust.scriptdroid.App; -import com.stardust.scriptdroid.ui.build.BuildActivity; + +import org.androidannotations.annotations.Click; import java.io.File; import java.io.FileInputStream; @@ -12,6 +16,7 @@ import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.util.concurrent.Callable; /** * Created by Stardust on 2017/10/24. @@ -37,19 +42,44 @@ public class AutoJsApkBuilder extends ApkBuilder { int versionCode; String jsPath; String packageName; + Callable icon; - public AppConfig(String packageName, String appName, String versionName, int versionCode, String jsPath) { - this.packageName = packageName; + public AppConfig setAppName(String appName) { this.appName = appName; + return this; + } + + public AppConfig setVersionName(String versionName) { this.versionName = versionName; + return this; + } + + public AppConfig setVersionCode(int versionCode) { this.versionCode = versionCode; + return this; + } + + public AppConfig setJsPath(String jsPath) { this.jsPath = jsPath; + return this; + } + + public AppConfig setPackageName(String packageName) { + this.packageName = packageName; + return this; + } + + + public AppConfig setIcon(Callable icon) { + this.icon = icon; + return this; } } private ProgressCallback mProgressCallback; private ManifestEditor mManifestEditor; private String mWorkspacePath; + private AppConfig mAppConfig; public AutoJsApkBuilder(InputStream apkInputStream, File outApkFile, String workspacePath) { super(apkInputStream, outApkFile, workspacePath); @@ -86,7 +116,9 @@ public class AutoJsApkBuilder extends ApkBuilder { } public AutoJsApkBuilder withConfig(AppConfig config) throws IOException { - mManifestEditor = editManifest().setAppName(config.appName) + mAppConfig = config; + mManifestEditor = editManifest() + .setAppName(config.appName) .setVersionName(config.versionName) .setVersionCode(config.versionCode) .setPackageName(config.packageName); @@ -101,7 +133,14 @@ public class AutoJsApkBuilder extends ApkBuilder { App.getApp().getUiHandler().post(() -> mProgressCallback.onBuild(AutoJsApkBuilder.this)); } mManifestEditor.commit(); - mManifestEditor = null; + if (mAppConfig.icon != null) { + try { + mAppConfig.icon.call().compress(Bitmap.CompressFormat.PNG, 100, + new FileOutputStream(new File(mWorkspacePath, "res/mipmap/ic_launcher.png"))); + } catch (Exception e) { + throw new RuntimeException(e); + } + } return (AutoJsApkBuilder) super.build(); } diff --git a/app/src/main/java/com/stardust/scriptdroid/build/ApkBuilderPluginHelper.java b/app/src/main/java/com/stardust/scriptdroid/build/ApkBuilderPluginHelper.java index 94eeea86..4cdc4197 100644 --- a/app/src/main/java/com/stardust/scriptdroid/build/ApkBuilderPluginHelper.java +++ b/app/src/main/java/com/stardust/scriptdroid/build/ApkBuilderPluginHelper.java @@ -4,6 +4,7 @@ import android.content.Context; import android.content.pm.PackageManager; import android.os.Build; +import com.stardust.BuildConfig; import com.stardust.pio.UncheckedIOException; import com.stardust.util.DeveloperUtils; @@ -25,6 +26,9 @@ public class ApkBuilderPluginHelper { public static InputStream openTemplateApk(Context context) { try { + if (BuildConfig.DEBUG) { + return context.getAssets().open(TEMPLATE_APK_PATH); + } return context.getPackageManager().getResourcesForApplication(PLUGIN_PACKAGE_NAME) .getAssets().open(TEMPLATE_APK_PATH); } catch (IOException e) { diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/build/BuildActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/build/BuildActivity.java index 9c1fee5c..4eb251bc 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/build/BuildActivity.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/build/BuildActivity.java @@ -1,11 +1,15 @@ package com.stardust.scriptdroid.ui.build; import android.content.Intent; +import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.support.design.widget.TextInputEditText; import android.support.design.widget.TextInputLayout; import android.text.TextUtils; import android.util.Log; import android.widget.EditText; +import android.widget.ImageView; import android.widget.Toast; import com.afollestad.materialdialogs.MaterialDialog; @@ -14,8 +18,11 @@ import com.stardust.scriptdroid.autojs.build.AutoJsApkBuilder; import com.stardust.scriptdroid.build.ApkBuilderPluginHelper; import com.stardust.scriptdroid.storage.file.StorageFileProvider; import com.stardust.scriptdroid.model.script.ScriptFile; +import com.stardust.scriptdroid.tool.BitmapTool; import com.stardust.scriptdroid.ui.BaseActivity; import com.stardust.scriptdroid.ui.filechooser.FileChooserDialogBuilder; +import com.stardust.scriptdroid.ui.shortcut.ShortcutIconSelectActivity; +import com.stardust.scriptdroid.ui.shortcut.ShortcutIconSelectActivity_; import com.stardust.theme.dialog.ThemeColorMaterialDialogBuilder; import com.stardust.util.IntentUtil; @@ -26,6 +33,7 @@ import org.androidannotations.annotations.ViewById; import java.io.File; import java.io.InputStream; +import java.util.concurrent.Callable; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -58,7 +66,12 @@ public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.Prog @ViewById(R.id.version_code) TextInputEditText mVersionCode; + + @ViewById(R.id.icon) + ImageView mIcon; + private MaterialDialog mProgressDialog; + private boolean mIsDefaultIcon = true; @AfterViews void setupViews() { @@ -125,6 +138,12 @@ public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.Prog .show(); } + @Click(R.id.icon) + void selectIcon() { + ShortcutIconSelectActivity_.intent(this) + .startForResult(31209); + } + @Click(R.id.fab) void buildApk() { if (!ApkBuilderPluginHelper.checkPlugin(this)) { @@ -173,7 +192,16 @@ public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.Prog return new AutoJsApkBuilder(templateApk, outApk, tmpDir.getPath()) .setProgressCallback(BuildActivity.this) .prepare() - .withConfig(new AutoJsApkBuilder.AppConfig(packageName, appName, versionName, versionCode, jsPath)) + .withConfig(new AutoJsApkBuilder.AppConfig() + .setAppName(appName) + .setJsPath(jsPath) + .setPackageName(packageName) + .setVersionCode(versionCode) + .setVersionName(versionName) + .setIcon(mIsDefaultIcon ? null : (Callable) () -> + BitmapTool.drawableToBitmap(mIcon.getDrawable()) + ) + ) .build() .sign() .cleanWorkspace(); @@ -235,4 +263,33 @@ public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.Prog public void onClean(AutoJsApkBuilder builder) { mProgressDialog.setContent(R.string.apk_builder_clean); } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (resultCode != RESULT_OK) { + return; + } + String packageName = data.getStringExtra(ShortcutIconSelectActivity.EXTRA_PACKAGE_NAME); + if (packageName != null) { + try { + mIcon.setImageDrawable(getPackageManager().getApplicationIcon(packageName)); + mIsDefaultIcon = false; + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + return; + } + if (data.getData() == null) + return; + Observable.fromCallable(() -> BitmapFactory.decodeStream(getContentResolver().openInputStream(data.getData()))) + .subscribeOn(Schedulers.computation()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe((bitmap -> { + mIcon.setImageBitmap(bitmap); + mIsDefaultIcon = false; + }), error -> { + Log.e(LOG_TAG, "decode stream", error); + }); + + } } diff --git a/app/src/main/res/layout/activity_build.xml b/app/src/main/res/layout/activity_build.xml index f9a549d1..672b19f1 100644 --- a/app/src/main/res/layout/activity_build.xml +++ b/app/src/main/res/layout/activity_build.xml @@ -162,32 +162,74 @@ android:hint="@string/text_package_name"/> - + android:orientation="horizontal"> - - + android:layout_weight="1" + android:orientation="vertical"> + + + + + + + + + + + + + + + + + + + + - - - diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d7de4d51..a00fe317 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -261,7 +261,7 @@ 搜索 悬浮编辑 选择图标 - 添加到图标快捷方式 + 添加到安卓7.0 Shortcut 登录成功 登录失败 重置密码 @@ -330,4 +330,5 @@ 复制 com.example.script%d 不能为空 + 图标 diff --git a/inrt/src/main/AndroidManifest.xml b/inrt/src/main/AndroidManifest.xml index 80cf6dbc..2dc4ba8f 100644 --- a/inrt/src/main/AndroidManifest.xml +++ b/inrt/src/main/AndroidManifest.xml @@ -10,13 +10,12 @@ + tools:replace="android:label, android:allowBackup"> diff --git a/inrt/src/main/res/mipmap-hdpi/ic_launcher.png b/inrt/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index cde69bcc..00000000 Binary files a/inrt/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/inrt/src/main/res/mipmap-hdpi/ic_launcher_round.png b/inrt/src/main/res/mipmap-hdpi/ic_launcher_round.png deleted file mode 100644 index 9a078e3e..00000000 Binary files a/inrt/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ diff --git a/inrt/src/main/res/mipmap-mdpi/ic_launcher.png b/inrt/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index c133a0cb..00000000 Binary files a/inrt/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/inrt/src/main/res/mipmap-mdpi/ic_launcher_round.png b/inrt/src/main/res/mipmap-mdpi/ic_launcher_round.png deleted file mode 100644 index efc028a6..00000000 Binary files a/inrt/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ diff --git a/inrt/src/main/res/mipmap-xhdpi/ic_launcher.png b/inrt/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index bfa42f0e..00000000 Binary files a/inrt/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/inrt/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/inrt/src/main/res/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index 3af2608a..00000000 Binary files a/inrt/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ diff --git a/inrt/src/main/res/mipmap-xxhdpi/ic_launcher.png b/inrt/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 324e72cd..00000000 Binary files a/inrt/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/inrt/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/inrt/src/main/res/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index 9bec2e62..00000000 Binary files a/inrt/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/inrt/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/inrt/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index 34947cd6..00000000 Binary files a/inrt/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/inrt/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/inrt/src/main/res/mipmap/ic_launcher.png similarity index 100% rename from inrt/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to inrt/src/main/res/mipmap/ic_launcher.png