Using ShortcutManagerCompat, got rid of Compatibility layer
This commit is contained in:
parent
4218c5b2a9
commit
363322485e
8 changed files with 41 additions and 69 deletions
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<SettingsChatFragmentBinding>() {
|
||||
private lateinit var viewModel: ChatSettingsViewModel
|
||||
|
@ -55,9 +55,9 @@ class ChatSettingsFragment : GenericSettingFragment<SettingsChatFragmentBinding>
|
|||
) {
|
||||
it.consume { newValue ->
|
||||
if (newValue) {
|
||||
Compatibility.createShortcutsToChatRooms(requireContext())
|
||||
ShortcutsHelper.createShortcutsToChatRooms(requireContext())
|
||||
} else {
|
||||
Compatibility.removeShortcuts(requireContext())
|
||||
ShortcutsHelper.removeShortcuts(requireContext())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<SettingsContactsFragmentBinding>() {
|
||||
private lateinit var viewModel: ContactsSettingsViewModel
|
||||
|
@ -57,11 +57,11 @@ class ContactsSettingsFragment : GenericSettingFragment<SettingsContactsFragment
|
|||
) {
|
||||
it.consume { newValue ->
|
||||
if (newValue) {
|
||||
Compatibility.createShortcutsToContacts(requireContext())
|
||||
ShortcutsHelper.createShortcutsToContacts(requireContext())
|
||||
} else {
|
||||
Compatibility.removeShortcuts(requireContext())
|
||||
ShortcutsHelper.removeShortcuts(requireContext())
|
||||
if (corePreferences.chatRoomShortcuts) {
|
||||
Compatibility.createShortcutsToChatRooms(requireContext())
|
||||
ShortcutsHelper.createShortcutsToChatRooms(requireContext())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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<NotifiableMessage> = 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)
|
||||
}
|
||||
|
|
|
@ -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<ShortcutInfo>()
|
||||
val shortcutManager = context.getSystemService(ShortcutManager::class.java)
|
||||
if (shortcutManager.isRateLimitingActive) {
|
||||
val shortcuts = ArrayList<ShortcutInfoCompat>()
|
||||
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<String>()
|
||||
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<String> = 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<ShortcutInfo>()
|
||||
val shortcutManager = context.getSystemService(ShortcutManager::class.java)
|
||||
if (shortcutManager.isRateLimitingActive) {
|
||||
val shortcuts = ArrayList<ShortcutInfoCompat>()
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue