Change summary
src/main/java/eu/siacs/conversations/services/NotificationService.java | 8
src/main/java/eu/siacs/conversations/services/ShortcutService.java | 15
2 files changed, 19 insertions(+), 4 deletions(-)
Detailed changes
@@ -12,6 +12,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
+import android.content.pm.ShortcutManager;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Typeface;
@@ -40,6 +41,7 @@ import androidx.core.app.NotificationManagerCompat;
import androidx.core.app.Person;
import androidx.core.app.RemoteInput;
import androidx.core.content.ContextCompat;
+import androidx.core.content.pm.ShortcutInfoCompat;
import androidx.core.graphics.drawable.IconCompat;
import com.google.common.base.Joiner;
@@ -1362,6 +1364,12 @@ public class NotificationService {
mBuilder.setSmallIcon(R.drawable.ic_notification);
mBuilder.setDeleteIntent(createDeleteIntent(conversation));
mBuilder.setContentIntent(createContentIntent(conversation));
+
+ ShortcutInfoCompat info = mXmppConnectionService.getShortcutService().getShortcutInfoCompat(conversation.getContact());
+ mBuilder.setShortcutInfo(info);
+ if (Build.VERSION.SDK_INT >= 30) {
+ mXmppConnectionService.getSystemService(ShortcutManager.class).pushDynamicShortcut(info.toShortcutInfo());
+ }
}
return mBuilder;
}
@@ -11,6 +11,8 @@ import android.os.Build;
import android.util.Log;
import androidx.annotation.NonNull;
+import androidx.core.content.pm.ShortcutInfoCompat;
+import androidx.core.graphics.drawable.IconCompat;
import java.util.ArrayList;
import java.util.HashMap;
@@ -88,15 +90,20 @@ public class ShortcutService {
}
}
- @TargetApi(Build.VERSION_CODES.N_MR1)
- private ShortcutInfo getShortcutInfo(Contact contact) {
- return new ShortcutInfo.Builder(xmppConnectionService, getShortcutId(contact))
+ public ShortcutInfoCompat getShortcutInfoCompat(Contact contact) {
+ return new ShortcutInfoCompat.Builder(xmppConnectionService, getShortcutId(contact))
.setShortLabel(contact.getDisplayName())
.setIntent(getShortcutIntent(contact))
- .setIcon(Icon.createWithBitmap(xmppConnectionService.getAvatarService().getRoundedShortcut(contact)))
+ .setIcon(IconCompat.createFromIcon(Icon.createWithBitmap(xmppConnectionService.getAvatarService().getRoundedShortcut(contact))))
+ .setIsConversation()
.build();
}
+ @TargetApi(Build.VERSION_CODES.N_MR1)
+ private ShortcutInfo getShortcutInfo(Contact contact) {
+ return getShortcutInfoCompat(contact).toShortcutInfo();
+ }
+
private static boolean contactsChanged(List<Contact> needles, List<ShortcutInfo> haystack) {
for(Contact needle : needles) {
if(!contactExists(needle,haystack)) {