From 1fb84ad046cc4db2971315db82db55a27d6a137d Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 21 Jun 2019 14:28:50 +0200 Subject: [PATCH] Added setting for contacts shortcuts and related improvements --- .../java/org/linphone/LinphoneService.java | 3 - .../compatibility/ApiTwentyFivePlus.java | 60 +++++++++--------- .../linphone/compatibility/Compatibility.java | 6 -- .../contacts/AsyncContactsLoader.java | 3 + .../linphone/contacts/ContactsManager.java | 2 +- .../settings/ContactSettingsFragment.java | 23 ++++++- .../settings/LinphonePreferences.java | 8 +++ .../utils/LinphoneShortcutManager.java | 62 +++---------------- app/src/main/res/layout/settings_contact.xml | 6 ++ app/src/main/res/values/strings.xml | 1 + 10 files changed, 80 insertions(+), 94 deletions(-) diff --git a/app/src/main/java/org/linphone/LinphoneService.java b/app/src/main/java/org/linphone/LinphoneService.java index af27253a4..32e18352e 100644 --- a/app/src/main/java/org/linphone/LinphoneService.java +++ b/app/src/main/java/org/linphone/LinphoneService.java @@ -32,7 +32,6 @@ import android.provider.ContactsContract; import android.view.WindowManager; import org.linphone.call.CallIncomingActivity; import org.linphone.call.CallOutgoingActivity; -import org.linphone.compatibility.Compatibility; import org.linphone.contacts.ContactsManager; import org.linphone.core.Call; import org.linphone.core.Call.State; @@ -215,8 +214,6 @@ public final class LinphoneService extends Service { } mContactsManager.initializeContactManager(); - Compatibility.createChatShortcuts(this); - return START_STICKY; } diff --git a/app/src/main/java/org/linphone/compatibility/ApiTwentyFivePlus.java b/app/src/main/java/org/linphone/compatibility/ApiTwentyFivePlus.java index af7720f2d..c12f4715c 100644 --- a/app/src/main/java/org/linphone/compatibility/ApiTwentyFivePlus.java +++ b/app/src/main/java/org/linphone/compatibility/ApiTwentyFivePlus.java @@ -29,18 +29,22 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import org.linphone.LinphoneManager; -import org.linphone.R; +import org.linphone.contacts.ContactsManager; +import org.linphone.contacts.LinphoneContact; +import org.linphone.core.Address; import org.linphone.core.ChatRoom; import org.linphone.core.ChatRoomCapabilities; +import org.linphone.core.tools.Log; +import org.linphone.settings.LinphonePreferences; import org.linphone.utils.LinphoneShortcutManager; @TargetApi(25) class ApiTwentyFivePlus { public static void createChatShortcuts(Context context) { - if (!context.getResources().getBoolean(R.bool.create_most_recent_chat_rooms_shortcuts)) - return; + if (!LinphonePreferences.instance().shortcutsCreationEnabled()) return; + LinphoneShortcutManager manager = new LinphoneShortcutManager(context); ShortcutManager shortcutManager = (ShortcutManager) context.getSystemService(Context.SHORTCUT_SERVICE); ArrayList shortcuts = new ArrayList<>(); @@ -64,37 +68,37 @@ class ApiTwentyFivePlus { } }); - LinphoneShortcutManager manager = new LinphoneShortcutManager(context); + int i = 0; int maxShortcuts = min(notEmptyOneToOneRooms.size(), shortcutManager.getMaxShortcutCountPerActivity()); - for (int i = 0; i < maxShortcuts; i++) { + ArrayList contacts = new ArrayList<>(); + for (ChatRoom room : notEmptyOneToOneRooms) { // Android can only have around 4-5 shortcuts at a time - ChatRoom room = notEmptyOneToOneRooms.get(i); - ShortcutInfo shortcut = manager.createChatRoomShortcutInfo(room); - if (shortcut != null) { - shortcuts.add(shortcut); + if (i >= maxShortcuts) break; + + Address participantAddress = + room.hasCapability(ChatRoomCapabilities.Basic.toInt()) + ? room.getPeerAddress() + : room.getParticipants()[0].getAddress(); + LinphoneContact contact = + ContactsManager.getInstance().findContactFromAddress(participantAddress); + + if (contact != null && !contacts.contains(contact)) { + String peerAddress = room.getPeerAddress().asStringUriOnly(); + ShortcutInfo shortcut = manager.createChatRoomShortcutInfo(contact, peerAddress); + if (shortcut != null) { + Log.i( + "[Shortcut] Creating launcher shortcut " + + shortcut.getShortLabel() + + " for room " + + shortcut.getId()); + shortcuts.add(shortcut); + contacts.add(contact); + i += 1; + } } } shortcutManager.setDynamicShortcuts(shortcuts); } - - public static void updateShortcuts(Context context) { - if (!context.getResources().getBoolean(R.bool.create_most_recent_chat_rooms_shortcuts)) - return; - - ShortcutManager shortcutManager = - (ShortcutManager) context.getSystemService(Context.SHORTCUT_SERVICE); - ArrayList shortcuts = new ArrayList<>(); - LinphoneShortcutManager manager = new LinphoneShortcutManager(context); - - for (ShortcutInfo shortcutInfo : shortcutManager.getDynamicShortcuts()) { - ShortcutInfo shortcut = manager.updateShortcutInfo(shortcutInfo); - if (shortcut != null) { - shortcuts.add(shortcut); - } - } - - shortcutManager.updateShortcuts(shortcuts); - } } diff --git a/app/src/main/java/org/linphone/compatibility/Compatibility.java b/app/src/main/java/org/linphone/compatibility/Compatibility.java index 0b1473e04..1052827a0 100644 --- a/app/src/main/java/org/linphone/compatibility/Compatibility.java +++ b/app/src/main/java/org/linphone/compatibility/Compatibility.java @@ -251,12 +251,6 @@ public class Compatibility { } } - public static void updateShortcuts(Context context) { - if (Version.sdkAboveOrEqual(Version.API25_NOUGAT_71)) { - ApiTwentyFivePlus.updateShortcuts(context); - } - } - public static void enterPipMode(Activity activity) { if (Version.sdkAboveOrEqual(Version.API26_O_80)) { ApiTwentySixPlus.enterPipMode(activity); diff --git a/app/src/main/java/org/linphone/contacts/AsyncContactsLoader.java b/app/src/main/java/org/linphone/contacts/AsyncContactsLoader.java index 72581a558..f67aa6cd4 100644 --- a/app/src/main/java/org/linphone/contacts/AsyncContactsLoader.java +++ b/app/src/main/java/org/linphone/contacts/AsyncContactsLoader.java @@ -31,6 +31,7 @@ import java.util.HashMap; import java.util.List; import org.linphone.LinphoneManager; import org.linphone.R; +import org.linphone.compatibility.Compatibility; import org.linphone.core.Core; import org.linphone.core.Friend; import org.linphone.core.FriendList; @@ -253,6 +254,8 @@ class AsyncContactsLoader extends AsyncTask + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b6d5832bf..768be07df 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -435,6 +435,7 @@ Inserting information shortcuts from the Linphone contact into native Android contacts Contact Display contact organization + Create shortcuts in launcher Call