diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index ac14c79f..36c5760f 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 babc4e4c..70a5830c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,8 +2,8 @@ apply plugin: 'com.android.application' def AAVersion = '4.3.1' android { - compileSdkVersion 25 - buildToolsVersion '26.0.2' + compileSdkVersion 27 + buildToolsVersion '27.0.3' defaultConfig { applicationId "org.autojs.autojs" minSdkVersion 17 diff --git a/app/src/main/java/org/autojs/autojs/external/shortcut/ShortcutManager.java b/app/src/main/java/org/autojs/autojs/external/shortcut/ShortcutManager.java index d00a1031..0e7adc79 100644 --- a/app/src/main/java/org/autojs/autojs/external/shortcut/ShortcutManager.java +++ b/app/src/main/java/org/autojs/autojs/external/shortcut/ShortcutManager.java @@ -1,15 +1,23 @@ package org.autojs.autojs.external.shortcut; +import android.app.PendingIntent; +import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.content.pm.ShortcutInfo; import android.graphics.drawable.Icon; import android.os.Build; +import android.support.annotation.Nullable; import android.support.annotation.RequiresApi; import java.util.Collections; import java.util.List; +import io.reactivex.Observable; +import io.reactivex.subjects.PublishSubject; +import io.reactivex.subjects.Subject; + /** * Created by Stardust on 2017/10/25. */ @@ -17,6 +25,7 @@ import java.util.List; @RequiresApi(api = Build.VERSION_CODES.N_MR1) public class ShortcutManager { + private static ShortcutManager sInstance; private Context mContext; private android.content.pm.ShortcutManager mShortcutManager; @@ -34,14 +43,35 @@ public class ShortcutManager { return sInstance; } - @RequiresApi(api = Build.VERSION_CODES.N_MR1) - public void addDynamicShortcut(CharSequence label, String id, Icon icon, Intent intent) { - ShortcutInfo shortcut = new ShortcutInfo.Builder(mContext, id) + + @RequiresApi(api = Build.VERSION_CODES.O) + public void addPinnedShortcut(CharSequence label, String id, Icon icon, Intent intent) { + if (!mShortcutManager.isRequestPinShortcutSupported()) { + return; + } + ShortcutInfo shortcut = buildShortcutInfo(label, id, icon, intent); + int req = getRequestCode(id); + PendingIntent successCallback = PendingIntent.getBroadcast(mContext, req, + mShortcutManager.createShortcutResultIntent(shortcut), 0); + mShortcutManager.requestPinShortcut(shortcut, successCallback.getIntentSender()); + } + + private ShortcutInfo buildShortcutInfo(CharSequence label, String id, Icon icon, Intent intent) { + return new ShortcutInfo.Builder(mContext, id) .setIntent(intent) .setShortLabel(label) .setLongLabel(label) .setIcon(icon) .build(); + } + + private int getRequestCode(String id) { + return id.hashCode() >>> 16; + } + + @RequiresApi(api = Build.VERSION_CODES.N_MR1) + public void addDynamicShortcut(CharSequence label, String id, Icon icon, Intent intent) { + ShortcutInfo shortcut = buildShortcutInfo(label, id, icon, intent); try { addDynamicShortcutUnchecked(shortcut); } catch (IllegalArgumentException shortcutsExceeded) { 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 855e8bea..3b16abd8 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 @@ -1,5 +1,6 @@ package org.autojs.autojs.ui.common; +import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; import android.os.Environment; @@ -222,6 +223,7 @@ public class ScriptOperations { .putExtra(ShortcutCreateActivity.EXTRA_FILE, file)); } + @SuppressLint("CheckResult") public void delete(final ScriptFile scriptFile) { Observable.fromPublisher(new Publisher() { @Override diff --git a/app/src/main/java/org/autojs/autojs/ui/shortcut/ShortcutCreateActivity.java b/app/src/main/java/org/autojs/autojs/ui/shortcut/ShortcutCreateActivity.java index b7a3bc08..54368f49 100644 --- a/app/src/main/java/org/autojs/autojs/ui/shortcut/ShortcutCreateActivity.java +++ b/app/src/main/java/org/autojs/autojs/ui/shortcut/ShortcutCreateActivity.java @@ -1,5 +1,6 @@ package org.autojs.autojs.ui.shortcut; +import android.annotation.SuppressLint; import android.content.Intent; import android.content.pm.PackageManager; import android.graphics.Bitmap; @@ -86,9 +87,11 @@ public class ShortcutCreateActivity extends AppCompatActivity { } + @SuppressLint("NewApi") //for fool android studio private void createShortcut() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1 && mUseAndroidNShortcut.isChecked()) { - createShortcutForAndroidN(); + if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1 && mUseAndroidNShortcut.isChecked()) + || Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + createShortcutByShortcutManager(); return; } Shortcut shortcut = new Shortcut(this); @@ -105,22 +108,29 @@ public class ShortcutCreateActivity extends AppCompatActivity { } @RequiresApi(api = Build.VERSION_CODES.N_MR1) - private void createShortcutForAndroidN() { + private void createShortcutByShortcutManager() { Icon icon; if (mIsDefaultIcon) { - icon = Icon.createWithResource(this, R.drawable.ic_node_js_black); + icon = Icon.createWithResource(this, R.drawable.ic_file_type_js); } else { Bitmap bitmap = BitmapTool.drawableToBitmap(mIcon.getDrawable()); icon = Icon.createWithBitmap(bitmap); } PersistableBundle extras = new PersistableBundle(1); extras.putString(ScriptIntents.EXTRA_KEY_PATH, mScriptFile.getPath()); - ShortcutManager.getInstance(this).addDynamicShortcut(mName.getText(), mScriptFile.getPath(), icon, - new Intent(this, ShortcutActivity.class) - .putExtra(ScriptIntents.EXTRA_KEY_PATH, mScriptFile.getPath()) - .setAction(Intent.ACTION_MAIN)); + Intent intent = new Intent(this, ShortcutActivity.class) + .putExtra(ScriptIntents.EXTRA_KEY_PATH, mScriptFile.getPath()) + .setAction(Intent.ACTION_MAIN); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + ShortcutManager.getInstance(this).addPinnedShortcut(mName.getText(), mScriptFile.getPath(), icon, intent); + } else { + ShortcutManager.getInstance(this).addDynamicShortcut(mName.getText(), mScriptFile.getPath(), icon, intent); + } + } + @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode != RESULT_OK) { diff --git a/app/src/main/res/drawable/ic_node_js_black.xml b/app/src/main/res/drawable/ic_node_js_black.xml index e0e26d90..1b68b433 100644 --- a/app/src/main/res/drawable/ic_node_js_black.xml +++ b/app/src/main/res/drawable/ic_node_js_black.xml @@ -2,12 +2,12 @@ + android:viewportHeight="128" + android:viewportWidth="128"> + android:pathData="M64,14c-27.6,0-50,22.4-50,50s22.4,50,50,50s50-22.4,50-50S91.6,14,64,14z"/> +c0,1.7-0.9,3.4-2.5,4.3L66.5,95.3C65.7,95.7,64.9,95.9,64,95.9z"/> +c0,1.7,0.7,2.2,8,3.2c7.2,0.9,10.6,2.3,10.6,7.3C82.9,74.4,78.7,77.3,71.3,77.3z"/> \ No newline at end of file diff --git a/autojs/build.gradle b/autojs/build.gradle index 4c8e5713..9e221666 100644 --- a/autojs/build.gradle +++ b/autojs/build.gradle @@ -1,8 +1,8 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion '26.0.2' + compileSdkVersion 27 + buildToolsVersion '27.0.3' defaultConfig { minSdkVersion 17 diff --git a/autojs/src/main/java/com/stardust/autojs/core/graphics/ScriptCanvas.java b/autojs/src/main/java/com/stardust/autojs/core/graphics/ScriptCanvas.java index 25bcbe0b..69c1980c 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/graphics/ScriptCanvas.java +++ b/autojs/src/main/java/com/stardust/autojs/core/graphics/ScriptCanvas.java @@ -227,16 +227,6 @@ public class ScriptCanvas { return mCanvas.clipPath(path); } - @Deprecated - public boolean clipRegion(Region region, Region.Op op) { - return mCanvas.clipRegion(region, op); - } - - @Deprecated - public boolean clipRegion(Region region) { - return mCanvas.clipRegion(region); - } - public DrawFilter getDrawFilter() { return mCanvas.getDrawFilter(); } diff --git a/autojs/src/main/res/drawable-xhdpi/ic_file_type_js.png b/autojs/src/main/res/drawable-xhdpi/ic_file_type_js.png new file mode 100644 index 00000000..c56e2f08 Binary files /dev/null and b/autojs/src/main/res/drawable-xhdpi/ic_file_type_js.png differ