From 363322485e0542cc03b310727c4bdf949c77ffb9 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 16 May 2022 15:25:47 +0200 Subject: [PATCH] Using ShortcutManagerCompat, got rid of Compatibility layer --- .../linphone/activities/main/MainActivity.kt | 5 ++- .../fragments/ChatSettingsFragment.kt | 6 +-- .../fragments/ContactsSettingsFragment.kt | 8 ++-- .../compatibility/Api23Compatibility.kt | 1 - .../compatibility/Api25Compatibility.kt | 13 ------ .../linphone/compatibility/Compatibility.kt | 20 --------- .../notifications/NotificationsManager.kt | 13 +++--- .../org/linphone/utils/ShortcutsHelper.kt | 44 ++++++++++--------- 8 files changed, 41 insertions(+), 69 deletions(-) diff --git a/app/src/main/java/org/linphone/activities/main/MainActivity.kt b/app/src/main/java/org/linphone/activities/main/MainActivity.kt index 21fd1b48f..dc8e6b868 100644 --- a/app/src/main/java/org/linphone/activities/main/MainActivity.kt +++ b/app/src/main/java/org/linphone/activities/main/MainActivity.kt @@ -64,6 +64,7 @@ import org.linphone.databinding.MainActivityBinding import org.linphone.utils.AppUtils import org.linphone.utils.Event import org.linphone.utils.FileUtils +import org.linphone.utils.ShortcutsHelper class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestinationChangedListener { private lateinit var binding: MainActivityBinding @@ -74,9 +75,9 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin override fun onContactsUpdated() { Log.i("[Main Activity] Contact(s) updated, update shortcuts") if (corePreferences.contactsShortcuts) { - Compatibility.createShortcutsToContacts(this@MainActivity) + ShortcutsHelper.createShortcutsToContacts(this@MainActivity) } else if (corePreferences.chatRoomShortcuts) { - Compatibility.createShortcutsToChatRooms(this@MainActivity) + ShortcutsHelper.createShortcutsToChatRooms(this@MainActivity) } } } diff --git a/app/src/main/java/org/linphone/activities/main/settings/fragments/ChatSettingsFragment.kt b/app/src/main/java/org/linphone/activities/main/settings/fragments/ChatSettingsFragment.kt index 59bf64a39..dee6299ab 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/fragments/ChatSettingsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/fragments/ChatSettingsFragment.kt @@ -29,10 +29,10 @@ import org.linphone.R import org.linphone.activities.main.chat.viewmodels.ChatRoomsListViewModel import org.linphone.activities.main.settings.viewmodels.ChatSettingsViewModel import org.linphone.activities.navigateToEmptySetting -import org.linphone.compatibility.Compatibility import org.linphone.databinding.SettingsChatFragmentBinding import org.linphone.mediastream.Version import org.linphone.utils.Event +import org.linphone.utils.ShortcutsHelper class ChatSettingsFragment : GenericSettingFragment() { private lateinit var viewModel: ChatSettingsViewModel @@ -55,9 +55,9 @@ class ChatSettingsFragment : GenericSettingFragment ) { it.consume { newValue -> if (newValue) { - Compatibility.createShortcutsToChatRooms(requireContext()) + ShortcutsHelper.createShortcutsToChatRooms(requireContext()) } else { - Compatibility.removeShortcuts(requireContext()) + ShortcutsHelper.removeShortcuts(requireContext()) } } } diff --git a/app/src/main/java/org/linphone/activities/main/settings/fragments/ContactsSettingsFragment.kt b/app/src/main/java/org/linphone/activities/main/settings/fragments/ContactsSettingsFragment.kt index 389615299..d394bcc81 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/fragments/ContactsSettingsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/fragments/ContactsSettingsFragment.kt @@ -30,11 +30,11 @@ import org.linphone.activities.main.settings.SettingListenerStub import org.linphone.activities.main.settings.viewmodels.ContactsSettingsViewModel import org.linphone.activities.navigateToEmptySetting import org.linphone.activities.navigateToLdapSettings -import org.linphone.compatibility.Compatibility import org.linphone.core.tools.Log import org.linphone.databinding.SettingsContactsFragmentBinding import org.linphone.utils.Event import org.linphone.utils.PermissionHelper +import org.linphone.utils.ShortcutsHelper class ContactsSettingsFragment : GenericSettingFragment() { private lateinit var viewModel: ContactsSettingsViewModel @@ -57,11 +57,11 @@ class ContactsSettingsFragment : GenericSettingFragment if (newValue) { - Compatibility.createShortcutsToContacts(requireContext()) + ShortcutsHelper.createShortcutsToContacts(requireContext()) } else { - Compatibility.removeShortcuts(requireContext()) + ShortcutsHelper.removeShortcuts(requireContext()) if (corePreferences.chatRoomShortcuts) { - Compatibility.createShortcutsToChatRooms(requireContext()) + ShortcutsHelper.createShortcutsToChatRooms(requireContext()) } } } diff --git a/app/src/main/java/org/linphone/compatibility/Api23Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Api23Compatibility.kt index c230de7bf..79a5727d9 100644 --- a/app/src/main/java/org/linphone/compatibility/Api23Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Api23Compatibility.kt @@ -21,7 +21,6 @@ package org.linphone.compatibility import android.Manifest import android.annotation.SuppressLint -import android.annotation.TargetApi import android.app.Activity import android.app.Notification import android.app.PendingIntent diff --git a/app/src/main/java/org/linphone/compatibility/Api25Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Api25Compatibility.kt index 19f9e370f..b217510ed 100644 --- a/app/src/main/java/org/linphone/compatibility/Api25Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Api25Compatibility.kt @@ -25,7 +25,6 @@ import android.bluetooth.BluetoothAdapter import android.content.Context import android.os.Build import android.provider.Settings -import org.linphone.utils.ShortcutsHelper @TargetApi(25) class Api25Compatibility { @@ -50,17 +49,5 @@ class Api25Compatibility { } return name } - - fun createShortcutsToContacts(context: Context) { - ShortcutsHelper.createShortcutsToContacts(context) - } - - fun createShortcutsToChatRooms(context: Context) { - ShortcutsHelper.createShortcutsToChatRooms(context) - } - - fun removeShortcuts(context: Context) { - ShortcutsHelper.removeShortcuts(context) - } } } diff --git a/app/src/main/java/org/linphone/compatibility/Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Compatibility.kt index 8b941dfd2..d948565ac 100644 --- a/app/src/main/java/org/linphone/compatibility/Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Compatibility.kt @@ -273,28 +273,8 @@ class Compatibility { } } - /* Contacts */ - - fun createShortcutsToContacts(context: Context) { - if (Version.sdkAboveOrEqual(Version.API25_NOUGAT_71)) { - Api25Compatibility.createShortcutsToContacts(context) - } - } - - fun removeShortcuts(context: Context) { - if (Version.sdkAboveOrEqual(Version.API25_NOUGAT_71)) { - Api25Compatibility.removeShortcuts(context) - } - } - /* Chat */ - fun createShortcutsToChatRooms(context: Context) { - if (Version.sdkAboveOrEqual(Version.API25_NOUGAT_71)) { - Api25Compatibility.createShortcutsToChatRooms(context) - } - } - fun removeChatRoomShortcut(context: Context, chatRoom: ChatRoom) { if (Version.sdkAboveOrEqual(Version.API30_ANDROID_11)) { Api30Compatibility.removeChatRoomShortcut(context, chatRoom) diff --git a/app/src/main/java/org/linphone/notifications/NotificationsManager.kt b/app/src/main/java/org/linphone/notifications/NotificationsManager.kt index e0f93e799..335d23023 100644 --- a/app/src/main/java/org/linphone/notifications/NotificationsManager.kt +++ b/app/src/main/java/org/linphone/notifications/NotificationsManager.kt @@ -49,10 +49,7 @@ import org.linphone.contact.getPerson import org.linphone.contact.getThumbnailUri import org.linphone.core.* import org.linphone.core.tools.Log -import org.linphone.utils.AppUtils -import org.linphone.utils.FileUtils -import org.linphone.utils.ImageUtils -import org.linphone.utils.LinphoneUtils +import org.linphone.utils.* class Notifiable(val notificationId: Int) { val messages: ArrayList = arrayListOf() @@ -163,8 +160,12 @@ class NotificationsManager(private val context: Context) { } if (corePreferences.chatRoomShortcuts) { - Log.i("[Notifications Manager] Ensure chat room shortcut exists for bubble notification") - Compatibility.createShortcutsToChatRooms(context) + if (ShortcutsHelper.isShortcutToChatRoomAlreadyCreated(context, room)) { + Log.i("[Notifications Manager] Chat room shortcut already exists") + } else { + Log.i("[Notifications Manager] Ensure chat room shortcut exists for bubble notification") + ShortcutsHelper.createShortcutsToChatRooms(context) + } } displayIncomingChatNotification(room, message) } diff --git a/app/src/main/java/org/linphone/utils/ShortcutsHelper.kt b/app/src/main/java/org/linphone/utils/ShortcutsHelper.kt index 5bc66c5e5..28e0e73c0 100644 --- a/app/src/main/java/org/linphone/utils/ShortcutsHelper.kt +++ b/app/src/main/java/org/linphone/utils/ShortcutsHelper.kt @@ -23,12 +23,12 @@ import android.annotation.TargetApi import android.content.Context import android.content.Intent import android.content.pm.ShortcutInfo -import android.content.pm.ShortcutManager import android.os.Bundle import androidx.collection.ArraySet import androidx.core.app.Person import androidx.core.content.LocusIdCompat import androidx.core.content.pm.ShortcutInfoCompat +import androidx.core.content.pm.ShortcutManagerCompat import androidx.core.graphics.drawable.IconCompat import kotlin.math.min import org.linphone.LinphoneApplication.Companion.coreContext @@ -45,14 +45,13 @@ import org.linphone.mediastream.Version class ShortcutsHelper(val context: Context) { companion object { fun createShortcutsToContacts(context: Context) { - val shortcuts = ArrayList() - val shortcutManager = context.getSystemService(ShortcutManager::class.java) - if (shortcutManager.isRateLimitingActive) { + val shortcuts = ArrayList() + if (ShortcutManagerCompat.isRateLimitingActive(context)) { Log.e("[Shortcut Helper] Rate limiting is active, aborting") return } - val maxShortcuts = shortcutManager.maxShortcutCountPerActivity + val maxShortcuts = min(ShortcutManagerCompat.getMaxShortcutCountPerActivity(context), 5) var count = 0 val processedAddresses = arrayListOf() for (room in coreContext.core.chatRooms) { @@ -82,7 +81,7 @@ class ShortcutsHelper(val context: Context) { coreContext.contactsManager.findContactByAddress(address) if (contact != null && contact.refKey != null) { - val shortcut: ShortcutInfo? = createContactShortcut(context, contact) + val shortcut: ShortcutInfoCompat? = createContactShortcut(context, contact) if (shortcut != null) { Log.i("[Shortcut Helper] Creating launcher shortcut for ${shortcut.shortLabel}") shortcuts.add(shortcut) @@ -94,10 +93,10 @@ class ShortcutsHelper(val context: Context) { } } } - shortcutManager.dynamicShortcuts = shortcuts + ShortcutManagerCompat.setDynamicShortcuts(context, shortcuts) } - private fun createContactShortcut(context: Context, contact: Friend): ShortcutInfo? { + private fun createContactShortcut(context: Context, contact: Friend): ShortcutInfoCompat? { try { val categories: ArraySet = ArraySet() categories.add(ShortcutInfo.SHORTCUT_CATEGORY_CONVERSATION) @@ -116,7 +115,7 @@ class ShortcutsHelper(val context: Context) { .setPerson(person) .setCategories(categories) .setIntent(intent) - .build().toShortcutInfo() + .build() } catch (e: Exception) { Log.e("[Shortcuts Helper] createContactShortcut for contact [${contact.name}] exception: $e") } @@ -125,15 +124,13 @@ class ShortcutsHelper(val context: Context) { } fun createShortcutsToChatRooms(context: Context) { - val shortcuts = ArrayList() - val shortcutManager = context.getSystemService(ShortcutManager::class.java) - if (shortcutManager.isRateLimitingActive) { + val shortcuts = ArrayList() + if (ShortcutManagerCompat.isRateLimitingActive(context)) { Log.e("[Shortcut Helper] Rate limiting is active, aborting") return } - Log.i("[Shortcut Helper] Creating launcher shortcuts for chat rooms") - val maxShortcuts = min(shortcutManager.maxShortcutCountPerActivity, 5) + val maxShortcuts = min(ShortcutManagerCompat.getMaxShortcutCountPerActivity(context), 5) var count = 0 for (room in coreContext.core.chatRooms) { // Android can usually only have around 4-5 shortcuts at a time @@ -142,18 +139,18 @@ class ShortcutsHelper(val context: Context) { break } - val shortcut: ShortcutInfo? = createChatRoomShortcut(context, room) + val shortcut: ShortcutInfoCompat? = createChatRoomShortcut(context, room) if (shortcut != null) { Log.i("[Shortcut Helper] Created launcher shortcut for ${shortcut.shortLabel}") shortcuts.add(shortcut) count += 1 } } - shortcutManager.dynamicShortcuts = shortcuts + ShortcutManagerCompat.setDynamicShortcuts(context, shortcuts) Log.i("[Shortcut Helper] Created $count launcher shortcuts") } - private fun createChatRoomShortcut(context: Context, chatRoom: ChatRoom): ShortcutInfo? { + private fun createChatRoomShortcut(context: Context, chatRoom: ChatRoom): ShortcutInfoCompat? { val localAddress = chatRoom.localAddress.asStringUriOnly() val peerAddress = chatRoom.peerAddress.asStringUriOnly() val id = LinphoneUtils.getChatRoomId(chatRoom.localAddress, chatRoom.peerAddress) @@ -219,7 +216,7 @@ class ShortcutsHelper(val context: Context) { .setIntent(intent) .setLongLived(Version.sdkAboveOrEqual(Version.API30_ANDROID_11)) .setLocusId(LocusIdCompat(id)) - .build().toShortcutInfo() + .build() } catch (e: Exception) { Log.e("[Shortcuts Helper] createChatRoomShortcut for id [$id] exception: $e") } @@ -229,8 +226,15 @@ class ShortcutsHelper(val context: Context) { fun removeShortcuts(context: Context) { Log.w("[Shortcut Helper] Removing all contacts shortcuts") - val shortcutManager = context.getSystemService(ShortcutManager::class.java) - shortcutManager.removeAllDynamicShortcuts() + ShortcutManagerCompat.removeAllDynamicShortcuts(context) + } + + fun isShortcutToChatRoomAlreadyCreated(context: Context, chatRoom: ChatRoom): Boolean { + val id = LinphoneUtils.getChatRoomId(chatRoom.localAddress, chatRoom.peerAddress) + val found = ShortcutManagerCompat.getDynamicShortcuts(context).find { + it.id == id + } + return found != null } } }