From e247943035a6df451a177780bcfa31a2d72f1f35 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Sat, 7 Jul 2018 22:47:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=9C=A8Android=20O=E4=B8=8A?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=BF=AB=E6=8D=B7=E6=96=B9=E5=BC=8F=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B=E6=9B=BF=E6=8D=A2?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=BF=AB=E6=8D=B7=E6=96=B9=E5=BC=8F=E5=9B=BE?= =?UTF-8?q?=E6=A0=87?= 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 +- .../external/shortcut/ShortcutManager.java | 36 ++++++++++++++++-- .../autojs/ui/common/ScriptOperations.java | 2 + .../ui/shortcut/ShortcutCreateActivity.java | 26 +++++++++---- .../main/res/drawable/ic_node_js_black.xml | 10 ++--- autojs/build.gradle | 4 +- .../autojs/core/graphics/ScriptCanvas.java | 10 ----- .../res/drawable-xhdpi/ic_file_type_js.png | Bin 0 -> 9989 bytes 9 files changed, 62 insertions(+), 30 deletions(-) create mode 100644 autojs/src/main/res/drawable-xhdpi/ic_file_type_js.png diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index ac14c79fcc511fe9c4d42a77babe79519ff2ebe6..36c5760f635a08aa4577bcbc0fe98d573d22180c 100644 GIT binary patch delta 58 zcmV-A0LA~^1>FUZmjz^22dUqYoOclH6T41nRbPEJt5L^e7$hK(` QLV!lj=u>`!dXugKFBdc#iU0rr delta 58 zcmV-A0LA~^1>FUZmjz?RRc<$toOcj$#Nb1$Z^+Fd2bu`8(d#p_BLRB>5D^+O9;S1X QHRX=4svWm<6_c(4FY$XAl>h($ 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 0000000000000000000000000000000000000000..c56e2f08dc2dc9831e83eb8d6547fe7661af20f1 GIT binary patch literal 9989 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