From b2438a3e5d9621a7f493a9279b3b49ecb8cd705b Mon Sep 17 00:00:00 2001 From: Dennis Gill Date: Fri, 26 May 2017 00:02:07 +0200 Subject: [PATCH] Add the ability to add app shortcuts to open chuck --- .../com/readystatesoftware/chuck/Chuck.java | 8 +++++ .../com/readystatesoftware/chuck/Chuck.java | 34 ++++++++++++++++++- .../chuck/sample/MainActivity.java | 1 + 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/library-no-op/src/main/java/com/readystatesoftware/chuck/Chuck.java b/library-no-op/src/main/java/com/readystatesoftware/chuck/Chuck.java index 7bd1d346..9aa4902b 100644 --- a/library-no-op/src/main/java/com/readystatesoftware/chuck/Chuck.java +++ b/library-no-op/src/main/java/com/readystatesoftware/chuck/Chuck.java @@ -15,8 +15,10 @@ */ package com.readystatesoftware.chuck; +import android.annotation.TargetApi; import android.content.Context; import android.content.Intent; +import android.os.Build; /** * No-op implementation. @@ -26,4 +28,10 @@ public class Chuck { public static Intent getLaunchIntent(Context context) { return new Intent(); } + + @TargetApi(Build.VERSION_CODES.N_MR1) + @SuppressWarnings("WeakerAccess") + public static String addAppShortcut(Context context) { + return null; + } } diff --git a/library/src/main/java/com/readystatesoftware/chuck/Chuck.java b/library/src/main/java/com/readystatesoftware/chuck/Chuck.java index 73051d38..6a33bc02 100644 --- a/library/src/main/java/com/readystatesoftware/chuck/Chuck.java +++ b/library/src/main/java/com/readystatesoftware/chuck/Chuck.java @@ -15,10 +15,16 @@ */ package com.readystatesoftware.chuck; +import android.annotation.TargetApi; import android.content.Context; import android.content.Intent; - +import android.content.pm.ShortcutInfo; +import android.content.pm.ShortcutManager; +import android.graphics.drawable.Icon; +import android.os.Build; +import android.support.annotation.Nullable; import com.readystatesoftware.chuck.internal.ui.MainActivity; +import java.util.Collections; /** * Chuck utilities. @@ -34,4 +40,30 @@ public class Chuck { public static Intent getLaunchIntent(Context context) { return new Intent(context, MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); } + + /** + * Register an app shortcut to launch the Chuck UI directly from the launcher on Android 7.0 and above. + * + * @param context A valid {@link Context} + * @return The id of the added shortcut (null if this feature is not supported on the device). + * It can be used if you want to remove this shortcut later on. + */ + @TargetApi(Build.VERSION_CODES.N_MR1) + @SuppressWarnings("WeakerAccess") + @Nullable + public static String addAppShortcut(Context context) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { + final String id = context.getPackageName() + ".chuck_ui"; + final ShortcutManager shortcutManager = context.getSystemService(ShortcutManager.class); + final ShortcutInfo shortcut = new ShortcutInfo.Builder(context, id).setShortLabel("Chuck") + .setLongLabel("Open Chuck UI") + .setIcon(Icon.createWithResource(context, R.drawable.chuck_ic_notification_white_24dp)) + .setIntent(getLaunchIntent(context).setAction(Intent.ACTION_VIEW)) + .build(); + shortcutManager.addDynamicShortcuts(Collections.singletonList(shortcut)); + return id; + } else { + return null; + } + } } \ No newline at end of file diff --git a/sample/src/main/java/com/readystatesoftware/chuck/sample/MainActivity.java b/sample/src/main/java/com/readystatesoftware/chuck/sample/MainActivity.java index d56c231f..5a51f1b2 100644 --- a/sample/src/main/java/com/readystatesoftware/chuck/sample/MainActivity.java +++ b/sample/src/main/java/com/readystatesoftware/chuck/sample/MainActivity.java @@ -48,6 +48,7 @@ public void onClick(View view) { launchChuckDirectly(); } }); + Chuck.addAppShortcut(this); } private OkHttpClient getClient(Context context) {