From d5c38ae537d14e20c2ebba3f098cbc459638f1f9 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Wed, 11 Jul 2018 16:57:41 +0800 Subject: [PATCH 1/6] fix: java.lang.IllegalStateException: Calling View methods on another thread than the UI thread. at com.android.webview.chromium.WebViewChromium.createThreadException(WebViewChromium.java:248) at com.android.webview.chromium.WebViewChromium.checkThread(WebViewChromium.java:263) at com.android.webview.chromium.WebViewChromium.init(WebViewChromium.java:163) at android.webkit.WebView.(WebView.java:548) at android.webkit.WebView.(WebView.java:483) at android.webkit.WebView.(WebView.java:466) at android.webkit.WebView.(WebView.java:453) at org.autojs.autojs.ui.widget.CommonMarkdownView.(CommonMarkdownView.java:49) at java.lang.reflect.Constructor.newInstance(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:288) at android.view.LayoutInflater.createView(LayoutInflater.java:611) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:747) at android.view.LayoutInflater.rInflate(LayoutInflater.java:810) at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) at android.view.LayoutInflater.inflate(LayoutInflater.java:508) at android.view.LayoutInflater.inflate(LayoutInflater.java:418) at android.view.LayoutInflater.inflate(LayoutInflater.java:365) at android.view.View.inflate(View.java:18461) at org.autojs.autojs.ui.update.UpdateInfoDialogBuilder.updateInfo(UpdateInfoDialogBuilder.java:45) at org.autojs.autojs.ui.update.UpdateInfoDialogBuilder.(UpdateInfoDialogBuilder.java:40) at org.autojs.autojs.ui.update.VersionGuard.showUpdateInfoIfNeeded(VersionGuard.java:58) at org.autojs.autojs.ui.update.VersionGuard.access$200(VersionGuard.java:21) at org.autojs.autojs.ui.update.VersionGuard$1.onNext(VersionGuard.java:49) at org.autojs.autojs.ui.update.VersionGuard$1.onNext(VersionGuard.java:42) at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeOnObserver.onNext(ObservableSubscribeOn.java:58) at com.jakewharton.retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51) at com.jakewharton.retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37) at com.jakewharton.retrofit2.adapter.rxjava2.CallObservable.subscribeActual(CallObservable.java:43) at io.reactivex.Observable.subscribe(Observable.java:10901) at com.jakewharton.retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34) at io.reactivex.Observable.subscribe(Observable.java:10901) at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96) at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452) at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61) at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818) --- .../autojs/autojs/ui/update/VersionGuard.java | 24 +++++++------------ 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/org/autojs/autojs/ui/update/VersionGuard.java b/app/src/main/java/org/autojs/autojs/ui/update/VersionGuard.java index ac5529c0..588ed99c 100644 --- a/app/src/main/java/org/autojs/autojs/ui/update/VersionGuard.java +++ b/app/src/main/java/org/autojs/autojs/ui/update/VersionGuard.java @@ -12,6 +12,7 @@ import org.autojs.autojs.network.VersionService; import org.autojs.autojs.network.entity.VersionInfo; import org.autojs.autojs.tool.SimpleObserver; +import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.functions.Consumer; /** @@ -39,6 +40,7 @@ public class VersionGuard { private void checkForUpdatesIfNeeded() { mVersionService.checkForUpdatesIfNeededAndUsingWifi(mActivity) + .observeOn(AndroidSchedulers.mainThread()) .subscribe(new SimpleObserver() { @Override @@ -76,23 +78,15 @@ public class VersionGuard { .negativeText(R.string.text_exit) .cancelable(false) .autoDismiss(false) - .onAny(new MaterialDialog.SingleButtonCallback() { - @Override - public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { - if (which == DialogAction.POSITIVE) { - new UpdateCheckDialog(mActivity) - .show(); - } else { - mActivity.finish(); - } - } - }) - .dismissListener(new DialogInterface.OnDismissListener() { - @Override - public void onDismiss(DialogInterface dialog) { - mDeprecatedDialog = null; + .onAny((dialog, which) -> { + if (which == DialogAction.POSITIVE) { + new UpdateCheckDialog(mActivity) + .show(); + } else { + mActivity.finish(); } }) + .dismissListener(dialog -> mDeprecatedDialog = null) .show(); } } From 01beaf7b37dadfa5df001579c6c719c291b511ff Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Wed, 11 Jul 2018 17:09:21 +0800 Subject: [PATCH 2/6] fix: Version: 404 Android: 19 java.lang.NoClassDefFoundError: android/os/PersistableBundle at java.lang.Class.getDeclaredMethods(Native Method) at java.lang.Class.getPublicMethodsRecursive(Class.java:894) at java.lang.Class.getMethods(Class.java:877) at org.mozilla.javascript.JavaMembers.discoverAccessibleMethods(JavaMembers.java:346) at org.mozilla.javascript.JavaMembers.discoverAccessibleMethods(JavaMembers.java:302) at org.mozilla.javascript.JavaMembers.reflect(JavaMembers.java:419) at org.mozilla.javascript.JavaMembers.(JavaMembers.java:43) at org.mozilla.javascript.JavaMembers.lookupClass(JavaMembers.java:807) at org.mozilla.javascript.NativeJavaObject.initMembers(NativeJavaObject.java:54) at org.mozilla.javascript.NativeJavaObject.(NativeJavaObject.java:44) at org.mozilla.javascript.NativeJavaObject.(NativeJavaObject.java:34) at org.mozilla.javascript.WrapFactory.wrapAsJavaObject(WrapFactory.java:115) at org.mozilla.javascript.WrapFactory.wrap(WrapFactory.java:72) at com.stardust.autojs.engine.RhinoJavaScriptEngine$WrapFactory.wrap(RhinoJavaScriptEngine.java:178) at org.mozilla.javascript.Context.javaToJS(Context.java:1838) at com.stardust.autojs.engine.RhinoJavaScriptEngine.put(RhinoJavaScriptEngine.java:64) at com.stardust.autojs.execution.ScriptExecuteActivity.prepare(ScriptExecuteActivity.java:126) at com.stardust.autojs.execution.ScriptExecuteActivity.runScript(ScriptExecuteActivity.java:96) at com.stardust.autojs.execution.ScriptExecuteActivity.onCreate(ScriptExecuteActivity.java:75) at android.app.Activity.performCreate(Activity.java:5397) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1113) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) at android.app.ActivityThread.access$800(ActivityThread.java:135) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5021) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:827) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.ClassNotFoundException: Didn't find class "android.os.PersistableBundle" on path: DexPathList[[zip file "/data/app/org.autojs.autojs-1.apk", zip file "/data/data/org.autojs.autojs/code_cache/secondary-dexes/org.autojs.autojs-1.apk.classes2.zip"],nativeLibraryDirectories=[/data/app-lib/org.autojs.autojs-1, /system/lib, /system/lib/arm, /data/downloads]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:497) at java.lang.ClassLoader.loadClass(ClassLoader.java:457) ... 33 more --- .../stardust/autojs/execution/ScriptExecuteActivity.java | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/autojs/src/main/java/com/stardust/autojs/execution/ScriptExecuteActivity.java b/autojs/src/main/java/com/stardust/autojs/execution/ScriptExecuteActivity.java index b431c153..3d742ae4 100644 --- a/autojs/src/main/java/com/stardust/autojs/execution/ScriptExecuteActivity.java +++ b/autojs/src/main/java/com/stardust/autojs/execution/ScriptExecuteActivity.java @@ -4,7 +4,6 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.os.PersistableBundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; @@ -15,7 +14,6 @@ import android.view.MotionEvent; import com.stardust.autojs.core.eventloop.EventEmitter; import com.stardust.autojs.core.eventloop.SimpleEvent; -import com.stardust.autojs.core.ui.inflater.inflaters.Exceptions; import com.stardust.autojs.engine.JavaScriptEngine; import com.stardust.autojs.engine.LoopBasedJavaScriptEngine; import com.stardust.autojs.engine.ScriptEngine; @@ -157,6 +155,7 @@ public class ScriptExecuteActivity extends AppCompatActivity { return; IntentExtras extras = IntentExtras.newExtras().putAll(mIntentExtras); outState.putInt(IntentExtras.EXTRA_ID, extras.getId()); + emit("save_instance_state", outState); } @Override @@ -191,12 +190,6 @@ public class ScriptExecuteActivity extends AppCompatActivity { emit("restore_instance_state", savedInstanceState); } - @Override - public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { - super.onSaveInstanceState(outState, outPersistentState); - emit("save_instance_state", outState, outPersistentState); - } - @Override public boolean onKeyDown(int keyCode, KeyEvent event) { SimpleEvent e = new SimpleEvent(); From f78f5694616c5d204228057fd811b3d9e290550a Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Wed, 11 Jul 2018 17:30:06 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E4=BA=86=E4=B8=BB?= =?UTF-8?q?=E5=8A=A8=E8=AF=B7=E6=B1=82READ=5FPHONE=5FSTATE=E6=9D=83?= =?UTF-8?q?=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/autojs/autojs/ui/main/MainActivity.java | 14 +------------- .../com/stardust/autojs/runtime/api/Device.java | 14 ++++++++++++++ autojs/src/main/res/values/strings.xml | 1 + 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/org/autojs/autojs/ui/main/MainActivity.java b/app/src/main/java/org/autojs/autojs/ui/main/MainActivity.java index 5c6e9ecf..5fd38696 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/MainActivity.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/MainActivity.java @@ -141,7 +141,7 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega } private void checkPermissions() { - checkPermission(Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_EXTERNAL_STORAGE); + checkPermission(Manifest.permission.READ_EXTERNAL_STORAGE); } private void showAccessibilitySettingPromptIfDisabled() { @@ -245,18 +245,6 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega if (getGrantResult(Manifest.permission.READ_EXTERNAL_STORAGE, permissions, grantResults) == PackageManager.PERMISSION_GRANTED) { StorageFileProvider.getDefault().notifyStoragePermissionGranted(); } - - if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_DENIED) { - new ThemeColorMaterialDialogBuilder(this) - .title(R.string.text_no_phone_state_permission) - .content(R.string.info_no_phone_state_permission) - .positiveText(R.string.text_request_permission) - .negativeText(R.string.text_exit) - .cancelable(false) - .onPositive(((dialog, which) -> checkPermissions())) - .onNegative((dialog, which) -> finish()) - .show(); - } } private int getGrantResult(String permission, String[] permissions, int[] grantResults) { diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/Device.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/Device.java index 9c5599d5..5d9e58d9 100644 --- a/autojs/src/main/java/com/stardust/autojs/runtime/api/Device.java +++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/Device.java @@ -1,10 +1,12 @@ package com.stardust.autojs.runtime.api; +import android.Manifest; import android.annotation.SuppressLint; import android.app.ActivityManager; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.content.pm.PackageManager; import android.media.AudioManager; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; @@ -98,6 +100,7 @@ public class Device { @SuppressLint("HardwareIds") @Nullable public String getIMEI() { + checkReadPhoneStatePermission(); try { return ((TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId(); } catch (SecurityException e) { @@ -105,6 +108,7 @@ public class Device { } } + @SuppressLint("HardwareIds") public String getAndroidId() { return Settings.Secure.getString(mContext.getContentResolver(), Settings.Secure.ANDROID_ID); @@ -287,6 +291,16 @@ public class Device { } + private void checkReadPhoneStatePermission() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (mContext.checkSelfPermission(Manifest.permission.READ_PHONE_STATE) + != PackageManager.PERMISSION_GRANTED) { + throw new SecurityException(mContext.getString(R.string.no_read_phone_state_permissin)); + } + } + } + + // just to avoid warning of null pointer to make android studio happy.. @NonNull @SuppressWarnings("unchecked") diff --git a/autojs/src/main/res/values/strings.xml b/autojs/src/main/res/values/strings.xml index d8c72379..a2ce0e93 100644 --- a/autojs/src/main/res/values/strings.xml +++ b/autojs/src/main/res/values/strings.xml @@ -20,6 +20,7 @@ 本脚本需要Auto.js版本号%d以上才能运行 打开侧拉菜单 关闭侧拉菜单 + 没有读取设备信息权限 From 5251028b0b286f18ceed7406235cd75d89beaaea Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Wed, 11 Jul 2018 17:59:04 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E7=9B=B4=E6=8E=A5=E4=B8=8B=E8=BD=BD=E6=9C=80=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/caches/build_file_checksums.ser | Bin 733 -> 733 bytes app/build.gradle | 4 +- app/src/main/AndroidManifest.xml | 8 -- .../autojs/network/api/UpdateCheckApi.java | 2 + .../network/download/DownloadManager.java | 49 ++++++++ .../autojs/ui/common/ScriptOperations.java | 42 +------ .../ui/main/community/CommunityWebView.java | 21 +++- .../ui/update/UpdateInfoDialogBuilder.java | 48 +++----- .../java/com/stardust/util/DownloadTask.java | 107 ------------------ .../java/com/stardust/util/IntentUtil.java | 1 + 10 files changed, 91 insertions(+), 191 deletions(-) delete mode 100644 common/src/main/java/com/stardust/util/DownloadTask.java diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 68a878987e87e9233af7a4037ad4c7a9cd4ea52f..5ad99a9c681db5117321269bb19c25a2f942a5b2 100644 GIT binary patch delta 36 ucmV+<0NelF1>FUZm;{KtQrVH5cMyS1$t?d4ZQ%ruEe!O*RU@+_0lEP;1`oXe delta 36 ucmV+<0NelF1>FUZm;`5(l8`kT>Sf#Tg0lEP+?hyI_ diff --git a/app/build.gradle b/app/build.gradle index e18b7f19..9ae3d14d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,8 +8,8 @@ android { applicationId "org.autojs.autojs" minSdkVersion 17 targetSdkVersion 23 - versionCode 404 - versionName "4.0.1 Beta" + versionCode 403 + versionName "4.0.2 Alpha" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" multiDexEnabled true ndk { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 620f916c..81cdb5c1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -236,14 +236,6 @@ - - - - \ No newline at end of file diff --git a/app/src/main/java/org/autojs/autojs/network/api/UpdateCheckApi.java b/app/src/main/java/org/autojs/autojs/network/api/UpdateCheckApi.java index 1b41c199..8b40352c 100644 --- a/app/src/main/java/org/autojs/autojs/network/api/UpdateCheckApi.java +++ b/app/src/main/java/org/autojs/autojs/network/api/UpdateCheckApi.java @@ -4,6 +4,7 @@ import org.autojs.autojs.network.entity.VersionInfo; import io.reactivex.Observable; import retrofit2.http.GET; +import retrofit2.http.Headers; /** * Created by Stardust on 2017/9/20. @@ -12,6 +13,7 @@ import retrofit2.http.GET; public interface UpdateCheckApi { @GET("/assets/autojs/version.json") + @Headers("Cache-Control: no-cache") Observable checkForUpdates(); } diff --git a/app/src/main/java/org/autojs/autojs/network/download/DownloadManager.java b/app/src/main/java/org/autojs/autojs/network/download/DownloadManager.java index f3d00c24..88b28c57 100644 --- a/app/src/main/java/org/autojs/autojs/network/download/DownloadManager.java +++ b/app/src/main/java/org/autojs/autojs/network/download/DownloadManager.java @@ -1,11 +1,20 @@ package org.autojs.autojs.network.download; +import android.content.Context; +import android.util.Log; + +import com.afollestad.materialdialogs.MaterialDialog; import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import com.stardust.concurrent.VolatileBox; import com.stardust.pio.PFiles; + +import org.autojs.autojs.R; +import org.autojs.autojs.model.script.ScriptFile; import org.autojs.autojs.network.NodeBB; import org.autojs.autojs.network.api.DownloadApi; +import org.autojs.autojs.tool.SimpleObserver; +import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; @@ -14,6 +23,7 @@ import java.net.URLDecoder; import java.util.concurrent.ConcurrentHashMap; import io.reactivex.Observable; +import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; import io.reactivex.subjects.PublishSubject; import okhttp3.OkHttpClient; @@ -28,6 +38,7 @@ import retrofit2.Retrofit; public class DownloadManager { + private static final String LOG_TAG = "DownloadManager"; private static DownloadManager sInstance; private static final int RETRY_COUNT = 3; @@ -81,6 +92,44 @@ public class DownloadManager { return task.progress(); } + public Observable downloadWithProgress(Context context, String url, String path) { + String fileName = DownloadManager.parseFileNameLocally(url); + return download(url, path, createDownloadProgressDialog(context, url, fileName)); + } + + private MaterialDialog createDownloadProgressDialog(Context context, String url, String fileName) { + return new MaterialDialog.Builder(context) + .progress(false, 100) + .title(fileName) + .cancelable(false) + .positiveText(R.string.text_cancel_download) + .onPositive((dialog, which) -> DownloadManager.getInstance().cancelDownload(url)) + .show(); + } + + private Observable download(String url, String path, MaterialDialog progressDialog) { + PublishSubject subject = PublishSubject.create(); + DownloadManager.getInstance().download(url, path) + .observeOn(AndroidSchedulers.mainThread()) + .doOnNext(progressDialog::setProgress) + .subscribe(new SimpleObserver() { + @Override + public void onComplete() { + progressDialog.dismiss(); + subject.onNext(new File(path)); + subject.onComplete(); + } + + @Override + public void onError(Throwable error) { + Log.e(LOG_TAG, "Download failed", error); + progressDialog.dismiss(); + subject.onError(error); + } + }); + return subject; + } + public void cancelDownload(String url) { VolatileBox status = mDownloadStatuses.get(url); if (status != null) { diff --git a/app/src/main/java/org/autojs/autojs/ui/common/ScriptOperations.java b/app/src/main/java/org/autojs/autojs/ui/common/ScriptOperations.java index 3b16abd8..79d9b31b 100644 --- a/app/src/main/java/org/autojs/autojs/ui/common/ScriptOperations.java +++ b/app/src/main/java/org/autojs/autojs/ui/common/ScriptOperations.java @@ -21,6 +21,7 @@ import com.stardust.app.GlobalAppContext; import com.stardust.pio.PFile; import com.stardust.pio.PFiles; import com.stardust.pio.UncheckedIOException; + import org.autojs.autojs.R; import org.autojs.autojs.external.ScriptIntents; import org.autojs.autojs.storage.file.TmpScriptFiles; @@ -260,48 +261,15 @@ public class ScriptOperations { } }); }) - .flatMap(savePath -> download(url, savePath, createDownloadProgressDialog(url, fileName))); - } - - private MaterialDialog createDownloadProgressDialog(String url, String fileName) { - return new MaterialDialog.Builder(mContext) - .progress(false, 100) - .title(fileName) - .cancelable(false) - .positiveText(R.string.text_cancel_download) - .onPositive((dialog, which) -> DownloadManager.getInstance().cancelDownload(url)) - .show(); - } - - public Observable download(String url, String path, MaterialDialog progressDialog) { - PublishSubject subject = PublishSubject.create(); - DownloadManager.getInstance().download(url, path) - .observeOn(AndroidSchedulers.mainThread()) - .doOnNext(progressDialog::setProgress) - .subscribe(new SimpleObserver() { - @Override - public void onComplete() { - progressDialog.dismiss(); - subject.onNext(new ScriptFile(path)); - subject.onComplete(); - } - - @Override - public void onError(Throwable error) { - Log.e(LOG_TAG, "Download failed", error); - progressDialog.dismiss(); - showMessage(R.string.text_download_failed); - subject.onError(error); - } - }); - return subject; + .flatMap(savePath -> DownloadManager.getInstance().downloadWithProgress(mContext, url, savePath)) + .map(ScriptFile::new); } public Observable temporarilyDownload(String url) { - String fileName = DownloadManager.parseFileNameLocally(url); return Observable.fromCallable(() -> TmpScriptFiles.create(mContext)) .flatMap(tmpFile -> - download(url, tmpFile.getPath(), createDownloadProgressDialog(url, fileName))); + DownloadManager.getInstance().downloadWithProgress(mContext, url, tmpFile.getPath())) + .map(ScriptFile::new); } public void importFile() { diff --git a/app/src/main/java/org/autojs/autojs/ui/main/community/CommunityWebView.java b/app/src/main/java/org/autojs/autojs/ui/main/community/CommunityWebView.java index 7cddb40c..63eefadf 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/community/CommunityWebView.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/community/CommunityWebView.java @@ -1,5 +1,6 @@ package org.autojs.autojs.ui.main.community; +import android.annotation.SuppressLint; import android.content.Context; import android.net.Uri; import android.support.design.widget.BottomSheetDialog; @@ -7,6 +8,7 @@ import android.support.design.widget.Snackbar; import android.util.AttributeSet; import android.webkit.ValueCallback; import android.webkit.WebView; +import android.widget.Toast; import org.autojs.autojs.R; import org.autojs.autojs.network.NodeBB; @@ -62,6 +64,7 @@ public class CommunityWebView extends EWebView { mBottomSheetDialog.show(); } + @SuppressLint("CheckResult") @Optional @OnClick(R.id.save) void save() { @@ -69,14 +72,18 @@ public class CommunityWebView extends EWebView { new ScriptOperations(getContext(), CommunityWebView.this) .download(mUrl) .observeOn(AndroidSchedulers.mainThread()) - .onErrorResumeNext(Observable.empty()) .subscribe(file -> - Snackbar.make(CommunityWebView.this, getResources().getString(R.string.format_file_downloaded, file.getPath()) - , Snackbar.LENGTH_LONG) - .setAction(R.string.text_open, v -> Scripts.edit(file)) - .show()); + Snackbar.make(CommunityWebView.this, getResources().getString(R.string.format_file_downloaded, file.getPath()) + , Snackbar.LENGTH_LONG) + .setAction(R.string.text_open, v -> Scripts.edit(file)) + .show(), + error -> { + error.printStackTrace(); + Snackbar.make(CommunityWebView.this, R.string.text_download_failed, Toast.LENGTH_SHORT).show(); + }); } + @SuppressLint("CheckResult") @Optional @OnClick(R.id.run) void run() { @@ -84,10 +91,12 @@ public class CommunityWebView extends EWebView { new ScriptOperations(getContext(), CommunityWebView.this) .temporarilyDownload(mUrl) .observeOn(AndroidSchedulers.mainThread()) - .onErrorResumeNext(Observable.empty()) .subscribe(file -> { Snackbar.make(CommunityWebView.this, R.string.text_start_running, Snackbar.LENGTH_SHORT).show(); Scripts.run(file); + }, error -> { + error.printStackTrace(); + Snackbar.make(CommunityWebView.this, R.string.text_download_failed, Toast.LENGTH_SHORT).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 79ed8ca7..7ad360b6 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 @@ -1,5 +1,6 @@ package org.autojs.autojs.ui.update; +import android.annotation.SuppressLint; import android.content.Context; import android.content.SharedPreferences; import android.preference.PreferenceManager; @@ -14,15 +15,18 @@ import android.widget.TextView; import android.widget.Toast; import com.afollestad.materialdialogs.MaterialDialog; +import com.stardust.util.IntentUtil; + import org.autojs.autojs.BuildConfig; import org.autojs.autojs.R; +import org.autojs.autojs.network.download.DownloadManager; import org.autojs.autojs.network.entity.VersionInfo; import org.autojs.autojs.storage.file.StorageFileProvider; import org.autojs.autojs.tool.IntentTool; -import com.stardust.util.DownloadTask; -import com.stardust.util.IntentUtil; import org.autojs.autojs.ui.widget.CommonMarkdownView; +import io.reactivex.android.schedulers.AndroidSchedulers; + /** * Created by Stardust on 2017/4/9. */ @@ -103,44 +107,26 @@ public class UpdateInfoDialogBuilder extends MaterialDialog.Builder { } Button button = (Button) View.inflate(getContext(), R.layout.dialog_update_info_btn, null); button.setText(R.string.text_directly_download); - button.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - directlyDownload(info.downloadUrl); - } - }); + button.setOnClickListener(v -> directlyDownload(info.downloadUrl)); container.addView(button); } + @SuppressLint("CheckResult") private void directlyDownload(String downloadUrl) { - final MaterialDialog dialog = new MaterialDialog.Builder(getContext()) - .title(R.string.text_downloading) - .progress(false, 100) - .show(); final String path = StorageFileProvider.getDefaultDirectoryPath() + "AutoJs.apk"; - final DownloadTask task = new DownloadTask() { - @Override - protected void onProgressUpdate(Integer... values) { - super.onProgressUpdate(values); - dialog.setProgress(values[0]); - } + DownloadManager.getInstance().downloadWithProgress(getContext(), downloadUrl, path) + .subscribeOn(AndroidSchedulers.mainThread()) + .subscribe(file -> IntentUtil.installApk(getContext(), file.getPath()), + error -> { + error.printStackTrace(); + Toast.makeText(getContext(), R.string.text_download_failed, Toast.LENGTH_SHORT).show(); + }); - @Override - protected void onPostExecute(Boolean result) { - super.onPostExecute(result); - dialog.dismiss(); - if (!result) { - Toast.makeText(getContext(), R.string.text_download_failed, Toast.LENGTH_SHORT).show(); - } else { - IntentUtil.installApk(getContext(), path); - } - } - }; - task.execute(downloadUrl, path); } + private void setReleaseNotes(View view, VersionInfo info) { - CommonMarkdownView markdownView = (CommonMarkdownView) view.findViewById(R.id.release_notes); + CommonMarkdownView markdownView = view.findViewById(R.id.release_notes); markdownView.loadMarkdown(info.releaseNotes); } } diff --git a/common/src/main/java/com/stardust/util/DownloadTask.java b/common/src/main/java/com/stardust/util/DownloadTask.java deleted file mode 100644 index 67747b93..00000000 --- a/common/src/main/java/com/stardust/util/DownloadTask.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.stardust.util; - -import android.os.AsyncTask; - -import com.stardust.net.AutoHttpURLConnection; - -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.concurrent.Callable; - -/** - * Created by Stardust on 2017/4/10. - */ - -public class DownloadTask extends AsyncTask { - - public interface ProgressListener { - void publishProgress(int i); - } - - public static class Download implements Callable { - - private String mUrl; - private String mPath; - private ProgressListener mListener; - private volatile boolean mCanceled = false; - - public Download(String url, String path, ProgressListener listener) { - mUrl = url; - mPath = path; - mListener = listener; - } - - @Override - public Boolean call() throws IOException { - try (AutoHttpURLConnection connection = new AutoHttpURLConnection(mUrl)) { - if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) { - return false; - } - int total = connection.getContentLength(); - InputStream input = connection.getInputStream(); - FileOutputStream output = new FileOutputStream(mPath); - return download(input, output, total); - } catch (Exception e) { - throw e; - } - } - - public void cancel() { - mCanceled = true; - } - - private boolean download(InputStream input, FileOutputStream output, int total) throws IOException { - byte buffer[] = new byte[8192]; - long downloaded = 0; - int read; - while ((read = input.read(buffer)) != -1) { - if (mCanceled) { - input.close(); - return false; - } - downloaded += read; - if (total > 0) - publishProgress((int) (downloaded * 100 / total)); - output.write(buffer, 0, read); - } - return true; - } - - private void publishProgress(int i) { - if (mListener != null) { - mListener.publishProgress(i); - } - } - } - - private Download mDownload; - - @Override - protected Boolean doInBackground(String... params) { - mDownload = new Download(params[0], params[1], new ProgressListener() { - @Override - public void publishProgress(int i) { - DownloadTask.this.publishProgress(i); - } - }); - try { - return mDownload.call(); - } catch (Exception e) { - e.printStackTrace(); - return false; - } finally { - mDownload = null; - } - } - - @Override - protected void onCancelled() { - super.onCancelled(); - if (mDownload != null) - mDownload.cancel(); - } -} diff --git a/common/src/main/java/com/stardust/util/IntentUtil.java b/common/src/main/java/com/stardust/util/IntentUtil.java index 1f77aecb..3b595b84 100644 --- a/common/src/main/java/com/stardust/util/IntentUtil.java +++ b/common/src/main/java/com/stardust/util/IntentUtil.java @@ -86,6 +86,7 @@ public class IntentUtil { public static void installApk(Context context, String path) { 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); context.startActivity(intent); From 6e481a3841cf15e4d1e29b8a642577e36f5509db Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Fri, 13 Jul 2018 14:29:41 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=AF=8F=E6=AC=A1?= =?UTF-8?q?=E6=89=93=E5=8C=85=E9=83=BD=E4=BC=9A=E5=A2=9E=E5=8A=A0project.j?= =?UTF-8?q?son=E7=9A=84assets=E6=9D=A1=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/caches/build_file_checksums.ser | Bin 733 -> 733 bytes .../autojs/autojs/build/AutoJsApkBuilder.java | 10 +++++++--- .../stardust/autojs/project/ProjectConfig.java | 17 +++++++++++++++-- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 5ad99a9c681db5117321269bb19c25a2f942a5b2..398f8f7d493c9f7899554f9b90567160385a11d1 100644 GIT binary patch delta 98 zcmV-o0GFUZm;{dy7`>64cMu3RBo_L zjPfRp6JofN#{qc|(?GG}j>(=SBE90{q%m=$lTZR45NDaJIHs0(Xvl&C!s|r4GLwD+ EUl#Q*4*&oF delta 98 zcmV-o0GFUZm;{KtQrVH5cMyS1$t?d4ZQ%ruEe!O*RU?xl0hADGR$^Rwntfn5 zjHH&5+;#|)#{qc|z*m9*T8^o%-Pn(JPkk`7lTZR45M(|1;UfcioIbOn8x{I#^^<-A EUu!rkTL1t6 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 4e2ce061..d541f1f5 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 @@ -1,6 +1,7 @@ package org.autojs.autojs.autojs.build; import android.graphics.Bitmap; +import android.text.TextUtils; import com.stardust.app.GlobalAppContext; import com.stardust.autojs.apkbuilder.ApkBuilder; @@ -8,6 +9,7 @@ import com.stardust.autojs.apkbuilder.ManifestEditor; import com.stardust.autojs.apkbuilder.util.StreamUtils; import com.stardust.autojs.project.ProjectConfig; import com.stardust.pio.PFiles; + import org.autojs.autojs.App; import java.io.File; @@ -156,8 +158,10 @@ public class AutoJsApkBuilder extends ApkBuilder { projectConfig.setName(config.appName) .setPackageName(config.packageName) .setVersionCode(config.versionCode) - .setVersionName(config.versionName) - .setMainScriptFile("main.js"); + .setVersionName(config.versionName); + if (TextUtils.isEmpty(projectConfig.getMainScriptFile())) { + projectConfig.setMainScriptFile("main.js"); + } updateProjectConfigAssets(projectConfig, config.jsPath, config.jsPath); PFiles.write(ProjectConfig.configFileOfDir(config.jsPath), projectConfig.toJson()); } @@ -173,7 +177,7 @@ public class AutoJsApkBuilder extends ApkBuilder { continue; } String relative = new File(projectDir).toURI().relativize(file.toURI()).getPath(); - config.getAssets().add(relative); + config.addAsset(relative); } } diff --git a/autojs/src/main/java/com/stardust/autojs/project/ProjectConfig.java b/autojs/src/main/java/com/stardust/autojs/project/ProjectConfig.java index 28e06833..c5731e30 100644 --- a/autojs/src/main/java/com/stardust/autojs/project/ProjectConfig.java +++ b/autojs/src/main/java/com/stardust/autojs/project/ProjectConfig.java @@ -8,6 +8,7 @@ import com.google.gson.annotations.SerializedName; import com.stardust.pio.PFiles; import com.stardust.pio.UncheckedIOException; +import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; @@ -80,7 +81,6 @@ public class ProjectConfig { } - public String getName() { return mName; } @@ -128,11 +128,24 @@ public class ProjectConfig { public List getAssets() { if (mAssets == null) { - mAssets = new ArrayList<>(); + mAssets = Collections.emptyList(); } return mAssets; } + public boolean addAsset(String assetRelativePath) { + if (mAssets == null) { + mAssets = new ArrayList<>(); + } + for (String asset : mAssets) { + if (new File(asset).equals(new File(assetRelativePath))) { + return false; + } + } + mAssets.add(assetRelativePath); + return true; + } + public void setAssets(List assets) { mAssets = assets; } From 31922af8f2dcd2cc5c53f5c27d1a51e03d502605 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Fri, 13 Jul 2018 14:40:31 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E5=9B=9E=E9=80=80version.json=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E6=97=A7=E7=89=88=E6=9C=AC=E5=B4=A9=E6=BA=83=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- version.json | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/version.json b/version.json index 82c6fc7c..16f5d970 100644 --- a/version.json +++ b/version.json @@ -1,12 +1,15 @@ { - "versionCode": 404, - "versionName": "4.0.1 Beta", - "releaseNotes": "* 全新的文档、界面\n* 更丰富的功能\n期待您的体验~", - "downloadUrl": "http://i.autojs.org/autojs/release-4.0.1Beta.apk", + "versionCode": 163, + "versionName": "2.0.16 Beta2", + "releaseNotes": "* 优化root录制,录制脚本接近完美,可自行录制游戏脚本\n* 提高部分脚本的运行速度\n* 新增 按键事件、通知事件监听\n*修复 一些问题", "downloads" : [ { - "name": "酷安", - "url": "https://www.coolapk.com/apk/188448" + "name": "应用宝", + "url": "http://a.app.qq.com/o/simple.jsp?pkgname=org.autojs.autojs" + }, + { + "name": "百度手机助手", + "url": "http://shouji.baidu.com/software/22060055.html" } ], "oldVersions": [