From 6bf35ba80152b9c1f23027fc2c116a0a94cff7f8 Mon Sep 17 00:00:00 2001 From: Gray Mackall Date: Thu, 2 May 2024 11:59:18 -0700 Subject: [PATCH 1/4] do the conversion --- .../plugins/quickactions/QuickActions.java | 31 ++++++++----------- .../quickactions/QuickActionsPlugin.java | 7 ++--- 2 files changed, 16 insertions(+), 22 deletions(-) diff --git a/packages/quick_actions/quick_actions_android/android/src/main/java/io/flutter/plugins/quickactions/QuickActions.java b/packages/quick_actions/quick_actions_android/android/src/main/java/io/flutter/plugins/quickactions/QuickActions.java index 1549cf143b0..e6b673f7ed0 100644 --- a/packages/quick_actions/quick_actions_android/android/src/main/java/io/flutter/plugins/quickactions/QuickActions.java +++ b/packages/quick_actions/quick_actions_android/android/src/main/java/io/flutter/plugins/quickactions/QuickActions.java @@ -8,16 +8,17 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; -import android.content.pm.ShortcutInfo; -import android.content.pm.ShortcutManager; import android.content.res.Resources; -import android.graphics.drawable.Icon; import android.os.Build; import android.os.Handler; import android.os.Looper; import androidx.annotation.ChecksSdkIntAtLeast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.core.content.pm.ShortcutInfoCompat; +import androidx.core.content.pm.ShortcutManagerCompat; +import androidx.core.graphics.drawable.IconCompat; + import io.flutter.plugins.quickactions.Messages.AndroidQuickActionsApi; import io.flutter.plugins.quickactions.Messages.FlutterError; import io.flutter.plugins.quickactions.Messages.Result; @@ -61,9 +62,7 @@ public void setShortcutItems( result.success(null); return; } - ShortcutManager shortcutManager = - (ShortcutManager) context.getSystemService(Context.SHORTCUT_SERVICE); - List shortcuts = shortcutItemMessageToShortcutInfo(itemsList); + List shortcuts = shortcutItemMessageToShortcutInfo(itemsList); Executor uiThreadExecutor = new UiThreadExecutor(); ThreadPoolExecutor executor = new ThreadPoolExecutor(0, 1, 1, TimeUnit.SECONDS, new LinkedBlockingQueue<>()); @@ -72,7 +71,7 @@ public void setShortcutItems( () -> { boolean dynamicShortcutsSet = false; try { - shortcutManager.setDynamicShortcuts(shortcuts); + ShortcutManagerCompat.setDynamicShortcuts(context, shortcuts); dynamicShortcutsSet = true; } catch (Exception e) { // Leave dynamicShortcutsSet as false @@ -101,9 +100,7 @@ public void clearShortcutItems() { if (!isVersionAllowed()) { return; } - ShortcutManager shortcutManager = - (ShortcutManager) context.getSystemService(Context.SHORTCUT_SERVICE); - shortcutManager.removeAllDynamicShortcuts(); + ShortcutManagerCompat.removeAllDynamicShortcuts(context); } @Override @@ -111,8 +108,6 @@ public void clearShortcutItems() { if (!isVersionAllowed()) { return null; } - ShortcutManager shortcutManager = - (ShortcutManager) context.getSystemService(Context.SHORTCUT_SERVICE); if (activity == null) { throw new FlutterError( "quick_action_getlaunchaction_no_activity", @@ -122,31 +117,31 @@ public void clearShortcutItems() { final Intent intent = activity.getIntent(); final String launchAction = intent.getStringExtra(EXTRA_ACTION); if (launchAction != null && !launchAction.isEmpty()) { - shortcutManager.reportShortcutUsed(launchAction); + ShortcutManagerCompat.reportShortcutUsed(context, launchAction); intent.removeExtra(EXTRA_ACTION); } return launchAction; } @TargetApi(Build.VERSION_CODES.N_MR1) - private List shortcutItemMessageToShortcutInfo( + private List shortcutItemMessageToShortcutInfo( @NonNull List shortcuts) { - final List shortcutInfos = new ArrayList<>(); + final List shortcutInfos = new ArrayList<>(); for (ShortcutItemMessage shortcut : shortcuts) { final String icon = shortcut.getIcon(); final String type = shortcut.getType(); final String title = shortcut.getLocalizedTitle(); - final ShortcutInfo.Builder shortcutBuilder = new ShortcutInfo.Builder(context, type); + final ShortcutInfoCompat.Builder shortcutBuilder = new ShortcutInfoCompat.Builder(context, type); final int resourceId = loadResourceId(context, icon); final Intent intent = getIntentToOpenMainActivity(type); if (resourceId > 0) { - shortcutBuilder.setIcon(Icon.createWithResource(context, resourceId)); + shortcutBuilder.setIcon(IconCompat.createWithResource(context, resourceId)); } - final ShortcutInfo shortcutInfo = + final ShortcutInfoCompat shortcutInfo = shortcutBuilder.setLongLabel(title).setShortLabel(title).setIntent(intent).build(); shortcutInfos.add(shortcutInfo); } diff --git a/packages/quick_actions/quick_actions_android/android/src/main/java/io/flutter/plugins/quickactions/QuickActionsPlugin.java b/packages/quick_actions/quick_actions_android/android/src/main/java/io/flutter/plugins/quickactions/QuickActionsPlugin.java index fd0184302ab..9fcb1a8730a 100644 --- a/packages/quick_actions/quick_actions_android/android/src/main/java/io/flutter/plugins/quickactions/QuickActionsPlugin.java +++ b/packages/quick_actions/quick_actions_android/android/src/main/java/io/flutter/plugins/quickactions/QuickActionsPlugin.java @@ -7,12 +7,13 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; -import android.content.pm.ShortcutManager; import android.os.Build; import android.util.Log; import androidx.annotation.ChecksSdkIntAtLeast; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; +import androidx.core.content.pm.ShortcutManagerCompat; + import io.flutter.embedding.engine.plugins.FlutterPlugin; import io.flutter.embedding.engine.plugins.activity.ActivityAware; import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding; @@ -108,15 +109,13 @@ public boolean onNewIntent(@NonNull Intent intent) { // Notify the Dart side if the launch intent has the intent extra relevant to quick actions. if (intent.hasExtra(QuickActions.EXTRA_ACTION) && activity != null) { Context context = activity.getApplicationContext(); - ShortcutManager shortcutManager = - (ShortcutManager) context.getSystemService(Context.SHORTCUT_SERVICE); String shortcutId = intent.getStringExtra(QuickActions.EXTRA_ACTION); quickActionsFlutterApi.launchAction( shortcutId, value -> { // noop }); - shortcutManager.reportShortcutUsed(shortcutId); + ShortcutManagerCompat.reportShortcutUsed(context, shortcutId); } return false; } From b8c9c7d528a5b97d10e7ba22d97388459ffeecb9 Mon Sep 17 00:00:00 2001 From: Gray Mackall Date: Tue, 7 May 2024 10:24:36 -0700 Subject: [PATCH 2/4] just delete the shortcutmanager mocking in tests? it works? --- .../io/flutter/plugins/quickactions/QuickActionsTest.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/packages/quick_actions/quick_actions_android/android/src/test/java/io/flutter/plugins/quickactions/QuickActionsTest.java b/packages/quick_actions/quick_actions_android/android/src/test/java/io/flutter/plugins/quickactions/QuickActionsTest.java index 6c2e963a80c..7d060d81c14 100644 --- a/packages/quick_actions/quick_actions_android/android/src/test/java/io/flutter/plugins/quickactions/QuickActionsTest.java +++ b/packages/quick_actions/quick_actions_android/android/src/test/java/io/flutter/plugins/quickactions/QuickActionsTest.java @@ -13,7 +13,6 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; -import android.content.pm.ShortcutManager; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import io.flutter.embedding.engine.plugins.FlutterPlugin.FlutterPluginBinding; @@ -76,8 +75,6 @@ public void onAttachedToActivity_buildVersionSupported_invokesLaunchMethod() when(mockActivityPluginBinding.getActivity()).thenReturn(mockMainActivity); final Context mockContext = mock(Context.class); when(mockMainActivity.getApplicationContext()).thenReturn(mockContext); - final ShortcutManager mockShortcutManager = mock(ShortcutManager.class); - when(mockContext.getSystemService(Context.SHORTCUT_SERVICE)).thenReturn(mockShortcutManager); plugin.onAttachedToActivity(mockActivityPluginBinding); // Act @@ -118,8 +115,6 @@ public void onNewIntent_buildVersionSupported_invokesLaunchMethod() { when(mockActivityPluginBinding.getActivity()).thenReturn(mockMainActivity); final Context mockContext = mock(Context.class); when(mockMainActivity.getApplicationContext()).thenReturn(mockContext); - final ShortcutManager mockShortcutManager = mock(ShortcutManager.class); - when(mockContext.getSystemService(Context.SHORTCUT_SERVICE)).thenReturn(mockShortcutManager); plugin.onAttachedToActivity(mockActivityPluginBinding); // Act From 2fe74204cc322d079ec2649769dde9344169189c Mon Sep 17 00:00:00 2001 From: Gray Mackall Date: Tue, 7 May 2024 10:28:42 -0700 Subject: [PATCH 3/4] pubspec+changelog --- packages/quick_actions/quick_actions_android/CHANGELOG.md | 4 ++++ packages/quick_actions/quick_actions_android/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/quick_actions/quick_actions_android/CHANGELOG.md b/packages/quick_actions/quick_actions_android/CHANGELOG.md index e8d488aa3a7..a6987298f76 100644 --- a/packages/quick_actions/quick_actions_android/CHANGELOG.md +++ b/packages/quick_actions/quick_actions_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.12 + +* Switches from using `ShortcutManager` to `ShortcutManagerCompat`. + ## 1.0.11 * Updates minSdkVersion to 19. diff --git a/packages/quick_actions/quick_actions_android/pubspec.yaml b/packages/quick_actions/quick_actions_android/pubspec.yaml index 0fc6f1fe27b..83065658ba1 100644 --- a/packages/quick_actions/quick_actions_android/pubspec.yaml +++ b/packages/quick_actions/quick_actions_android/pubspec.yaml @@ -2,7 +2,7 @@ name: quick_actions_android description: An implementation for the Android platform of the Flutter `quick_actions` plugin. repository: https://github.com/flutter/packages/tree/main/packages/quick_actions/quick_actions_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22 -version: 1.0.11 +version: 1.0.12 environment: sdk: ^3.2.0 From ff8c78a062c5d65e8cef566d52da766579ea4ea4 Mon Sep 17 00:00:00 2001 From: Gray Mackall Date: Tue, 7 May 2024 10:54:45 -0700 Subject: [PATCH 4/4] format --- .../java/io/flutter/plugins/quickactions/QuickActions.java | 4 ++-- .../io/flutter/plugins/quickactions/QuickActionsPlugin.java | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/quick_actions/quick_actions_android/android/src/main/java/io/flutter/plugins/quickactions/QuickActions.java b/packages/quick_actions/quick_actions_android/android/src/main/java/io/flutter/plugins/quickactions/QuickActions.java index e6b673f7ed0..1c124ae3515 100644 --- a/packages/quick_actions/quick_actions_android/android/src/main/java/io/flutter/plugins/quickactions/QuickActions.java +++ b/packages/quick_actions/quick_actions_android/android/src/main/java/io/flutter/plugins/quickactions/QuickActions.java @@ -18,7 +18,6 @@ import androidx.core.content.pm.ShortcutInfoCompat; import androidx.core.content.pm.ShortcutManagerCompat; import androidx.core.graphics.drawable.IconCompat; - import io.flutter.plugins.quickactions.Messages.AndroidQuickActionsApi; import io.flutter.plugins.quickactions.Messages.FlutterError; import io.flutter.plugins.quickactions.Messages.Result; @@ -132,7 +131,8 @@ private List shortcutItemMessageToShortcutInfo( final String icon = shortcut.getIcon(); final String type = shortcut.getType(); final String title = shortcut.getLocalizedTitle(); - final ShortcutInfoCompat.Builder shortcutBuilder = new ShortcutInfoCompat.Builder(context, type); + final ShortcutInfoCompat.Builder shortcutBuilder = + new ShortcutInfoCompat.Builder(context, type); final int resourceId = loadResourceId(context, icon); final Intent intent = getIntentToOpenMainActivity(type); diff --git a/packages/quick_actions/quick_actions_android/android/src/main/java/io/flutter/plugins/quickactions/QuickActionsPlugin.java b/packages/quick_actions/quick_actions_android/android/src/main/java/io/flutter/plugins/quickactions/QuickActionsPlugin.java index 9fcb1a8730a..eed613347d7 100644 --- a/packages/quick_actions/quick_actions_android/android/src/main/java/io/flutter/plugins/quickactions/QuickActionsPlugin.java +++ b/packages/quick_actions/quick_actions_android/android/src/main/java/io/flutter/plugins/quickactions/QuickActionsPlugin.java @@ -13,7 +13,6 @@ import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import androidx.core.content.pm.ShortcutManagerCompat; - import io.flutter.embedding.engine.plugins.FlutterPlugin; import io.flutter.embedding.engine.plugins.activity.ActivityAware; import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;