diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser
index 68a87898..398f8f7d 100644
Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ
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/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/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/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/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/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();
}
}
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();
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;
}
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以上才能运行
打开侧拉菜单
关闭侧拉菜单
+ 没有读取设备信息权限
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);
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": [