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/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..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 @@ -8,16 +8,16 @@ 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 +61,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 +70,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 +99,7 @@ public void clearShortcutItems() { if (!isVersionAllowed()) { return; } - ShortcutManager shortcutManager = - (ShortcutManager) context.getSystemService(Context.SHORTCUT_SERVICE); - shortcutManager.removeAllDynamicShortcuts(); + ShortcutManagerCompat.removeAllDynamicShortcuts(context); } @Override @@ -111,8 +107,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 +116,32 @@ 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..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 @@ -7,12 +7,12 @@ 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 +108,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; } 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 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