Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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;
}
}
34 changes: 33 additions & 1 deletion library/src/main/java/com/readystatesoftware/chuck/Chuck.java
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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 (<code>null</code> 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")
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not fan of this SuppressWarnings

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This function is obviously not called from within the library, thus there will be a warning that its access can be weaker, but apps need access to it so it must be public -> Get rid of the warning.

@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")
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The label should be retrieved from the resources, or maybe given by paramters to let de developer choose the wording.

.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;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ public void onClick(View view) {
launchChuckDirectly();
}
});
Chuck.addAppShortcut(this);
}

private OkHttpClient getClient(Context context) {
Expand Down