From 489483e22a07e5eeddcd5ae282ecb29bcd37a604 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 4 Sep 2023 12:37:19 +0200 Subject: [PATCH] Add back buttons in new fragments --- .../org/linphone/contacts/ContactsManager.kt | 7 +- .../contacts/fragment/ContactsListFragment.kt | 7 +- .../ui/main/recordings/RecordingsFragment.kt | 9 +++ .../ui/main/settings/fragment/HelpFragment.kt | 9 +++ .../settings/fragment/SettingsFragment.kt | 9 +++ .../ui/voip/viewmodel/CallsViewModel.kt | 4 +- .../org/linphone/utils/DataBindingUtils.kt | 64 ++++++------------- app/src/main/res/layout/help_fragment.xml | 32 ++++++++++ .../main/res/layout/recordings_fragment.xml | 32 ++++++++++ app/src/main/res/layout/settings_fragment.xml | 32 ++++++++++ 10 files changed, 155 insertions(+), 50 deletions(-) diff --git a/app/src/main/java/org/linphone/contacts/ContactsManager.kt b/app/src/main/java/org/linphone/contacts/ContactsManager.kt index d9d5d4048..ba0214492 100644 --- a/app/src/main/java/org/linphone/contacts/ContactsManager.kt +++ b/app/src/main/java/org/linphone/contacts/ContactsManager.kt @@ -55,7 +55,9 @@ class ContactsManager @UiThread constructor(context: Context) { private val friendListListener: FriendListListenerStub = object : FriendListListenerStub() { @WorkerThread override fun onPresenceReceived(list: FriendList, friends: Array) { - Log.i("$TAG Presence received") + Log.i( + "$TAG Presence received for list [${list.displayName}] and [${friends.size}] friends" + ) for (listener in listeners) { listener.onContactsLoaded() } @@ -65,11 +67,14 @@ class ContactsManager @UiThread constructor(context: Context) { private val coreListener: CoreListenerStub = object : CoreListenerStub() { @WorkerThread override fun onFriendListCreated(core: Core, friendList: FriendList) { + Log.i("$TAG Friend list [${friendList.displayName}] created") friendList.addListener(friendListListener) + friendList.updateSubscriptions() } @WorkerThread override fun onFriendListRemoved(core: Core, friendList: FriendList) { + Log.i("$TAG Friend list [${friendList.displayName}] remoed") friendList.removeListener(friendListListener) } } diff --git a/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListFragment.kt b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListFragment.kt index 575e9b7d2..c14a090f7 100644 --- a/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListFragment.kt @@ -106,15 +106,18 @@ class ContactsListFragment : GenericFragment() { listViewModel.contactsList.observe( viewLifecycleOwner ) { - val emptyAdapter = adapter.itemCount == 0 + val currentCount = adapter.itemCount adapter.submitList(it) Log.i("$TAG Contacts list updated with [${it.size}] items") - if (emptyAdapter) { + if (currentCount == 0) { (view.parent as? ViewGroup)?.doOnPreDraw { startPostponedEnterTransition() sharedViewModel.contactsListReadyToBeDisplayedEvent.value = Event(true) } + } else if (currentCount < it.size) { + Log.i("$TAG Contacts list updated with new items, scrolling to top") + binding.contactsList.smoothScrollToPosition(0) } } diff --git a/app/src/main/java/org/linphone/ui/main/recordings/RecordingsFragment.kt b/app/src/main/java/org/linphone/ui/main/recordings/RecordingsFragment.kt index 05aa22473..78cc0c7cf 100644 --- a/app/src/main/java/org/linphone/ui/main/recordings/RecordingsFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/recordings/RecordingsFragment.kt @@ -5,6 +5,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.annotation.UiThread +import androidx.navigation.fragment.findNavController import org.linphone.databinding.RecordingsFragmentBinding import org.linphone.ui.main.fragment.GenericFragment @@ -20,8 +21,16 @@ class RecordingsFragment : GenericFragment() { return binding.root } + override fun goBack() { + findNavController().popBackStack() + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) binding.lifecycleOwner = viewLifecycleOwner + + binding.setBackClickListener { + goBack() + } } } diff --git a/app/src/main/java/org/linphone/ui/main/settings/fragment/HelpFragment.kt b/app/src/main/java/org/linphone/ui/main/settings/fragment/HelpFragment.kt index 5a524cf98..0be9c0dcd 100644 --- a/app/src/main/java/org/linphone/ui/main/settings/fragment/HelpFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/settings/fragment/HelpFragment.kt @@ -5,6 +5,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.annotation.UiThread +import androidx.navigation.fragment.findNavController import org.linphone.databinding.HelpFragmentBinding import org.linphone.ui.main.fragment.GenericFragment @@ -21,8 +22,16 @@ class HelpFragment : GenericFragment() { return binding.root } + override fun goBack() { + findNavController().popBackStack() + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) binding.lifecycleOwner = viewLifecycleOwner + + binding.setBackClickListener { + goBack() + } } } diff --git a/app/src/main/java/org/linphone/ui/main/settings/fragment/SettingsFragment.kt b/app/src/main/java/org/linphone/ui/main/settings/fragment/SettingsFragment.kt index 868154064..5920ae4c6 100644 --- a/app/src/main/java/org/linphone/ui/main/settings/fragment/SettingsFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/settings/fragment/SettingsFragment.kt @@ -5,6 +5,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.annotation.UiThread +import androidx.navigation.fragment.findNavController import org.linphone.databinding.SettingsFragmentBinding import org.linphone.ui.main.fragment.GenericFragment @@ -21,8 +22,16 @@ class SettingsFragment : GenericFragment() { return binding.root } + override fun goBack() { + findNavController().popBackStack() + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) binding.lifecycleOwner = viewLifecycleOwner + + binding.setBackClickListener { + goBack() + } } } diff --git a/app/src/main/java/org/linphone/ui/voip/viewmodel/CallsViewModel.kt b/app/src/main/java/org/linphone/ui/voip/viewmodel/CallsViewModel.kt index 931d96479..400bcea49 100644 --- a/app/src/main/java/org/linphone/ui/voip/viewmodel/CallsViewModel.kt +++ b/app/src/main/java/org/linphone/ui/voip/viewmodel/CallsViewModel.kt @@ -49,7 +49,7 @@ class CallsViewModel @UiThread constructor() : ViewModel() { private val alertListener = object : AlertListenerStub() { @WorkerThread - override fun onOnTerminated(alert: Alert) { + override fun onTerminated(alert: Alert) { val remote = alert.call.remoteAddress.asStringUriOnly() Log.w("$TAG Alert of type [${alert.type}] dismissed for call from [$remote]") alert.removeListener(this) @@ -89,7 +89,7 @@ class CallsViewModel @UiThread constructor() : ViewModel() { } @WorkerThread - override fun onOnAlert(core: Core, alert: Alert) { + override fun onNewAlertTriggered(core: Core, alert: Alert) { val remote = alert.call.remoteAddress.asStringUriOnly() Log.w("$TAG Alert of type [${alert.type}] triggered for call from [$remote]") alert.addListener(alertListener) diff --git a/app/src/main/java/org/linphone/utils/DataBindingUtils.kt b/app/src/main/java/org/linphone/utils/DataBindingUtils.kt index 20ccb1a19..b5f65a2a6 100644 --- a/app/src/main/java/org/linphone/utils/DataBindingUtils.kt +++ b/app/src/main/java/org/linphone/utils/DataBindingUtils.kt @@ -272,53 +272,27 @@ fun AvatarView.loadContactAvatar(contact: ContactAvatarModel?) { if (contact == null) { loadImage(R.drawable.contact_avatar) } else { - val lifecycleOwner = findViewTreeLifecycleOwner() - if (lifecycleOwner != null) { - contact.avatar.observe(lifecycleOwner) { uri -> - loadImage( - data = uri, - onStart = { - // Use initials as placeholder - avatarInitials = contact.initials + val uri = contact.avatar.value + loadImage( + data = uri, + onStart = { + // Use initials as placeholder + avatarInitials = contact.initials - if (contact.showTrust.value == true) { - avatarBorderColor = - resources.getColor(R.color.trusted_blue, context.theme) - avatarBorderWidth = - AppUtils.getDimension(R.dimen.avatar_trust_border_width).toInt() - } else { - avatarBorderWidth = AppUtils.getDimension(R.dimen.zero).toInt() - } - }, - onSuccess = { _, _ -> - // If loading is successful, remove initials otherwise image won't be visible - avatarInitials = "" - } - ) - } - } else { - val uri = contact.avatar.value - loadImage( - data = uri, - onStart = { - // Use initials as placeholder - avatarInitials = contact.initials - - if (contact.showTrust.value == true) { - avatarBorderColor = - resources.getColor(R.color.trusted_blue, context.theme) - avatarBorderWidth = - AppUtils.getDimension(R.dimen.avatar_trust_border_width).toInt() - } else { - avatarBorderWidth = AppUtils.getDimension(R.dimen.zero).toInt() - } - }, - onSuccess = { _, _ -> - // If loading is successful, remove initials otherwise image won't be visible - avatarInitials = "" + if (contact.showTrust.value == true) { + avatarBorderColor = + resources.getColor(R.color.trusted_blue, context.theme) + avatarBorderWidth = + AppUtils.getDimension(R.dimen.avatar_trust_border_width).toInt() + } else { + avatarBorderWidth = AppUtils.getDimension(R.dimen.zero).toInt() } - ) - } + }, + onSuccess = { _, _ -> + // If loading is successful, remove initials otherwise image won't be visible + avatarInitials = "" + } + ) } } diff --git a/app/src/main/res/layout/help_fragment.xml b/app/src/main/res/layout/help_fragment.xml index f1e8f3c96..365216a88 100644 --- a/app/src/main/res/layout/help_fragment.xml +++ b/app/src/main/res/layout/help_fragment.xml @@ -5,6 +5,9 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/recordings_fragment.xml b/app/src/main/res/layout/recordings_fragment.xml index f1e8f3c96..5937a585b 100644 --- a/app/src/main/res/layout/recordings_fragment.xml +++ b/app/src/main/res/layout/recordings_fragment.xml @@ -5,6 +5,9 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/settings_fragment.xml b/app/src/main/res/layout/settings_fragment.xml index f1e8f3c96..b7e639ae5 100644 --- a/app/src/main/res/layout/settings_fragment.xml +++ b/app/src/main/res/layout/settings_fragment.xml @@ -5,6 +5,9 @@ + + + + + \ No newline at end of file