diff --git a/app/src/main/java/org/linphone/LinphoneApplication.kt b/app/src/main/java/org/linphone/LinphoneApplication.kt index 1642b5eaa..ad105ceec 100644 --- a/app/src/main/java/org/linphone/LinphoneApplication.kt +++ b/app/src/main/java/org/linphone/LinphoneApplication.kt @@ -36,6 +36,7 @@ import org.linphone.core.CorePreferences import org.linphone.core.Factory import org.linphone.core.LogCollectionState import org.linphone.core.LogLevel +import org.linphone.core.tools.Log @MainThread class LinphoneApplication : Application(), ImageLoaderFactory { @@ -71,6 +72,8 @@ class LinphoneApplication : Application(), ImageLoaderFactory { Factory.instance().loggingService.setLogLevel(LogLevel.Message) } + Log.i("[Linphone Application] Report Core preferences initialized") + coreContext = CoreContext(context) coreContext.start() diff --git a/app/src/main/java/org/linphone/core/CoreContext.kt b/app/src/main/java/org/linphone/core/CoreContext.kt index e21535a55..8139d919e 100644 --- a/app/src/main/java/org/linphone/core/CoreContext.kt +++ b/app/src/main/java/org/linphone/core/CoreContext.kt @@ -251,6 +251,7 @@ class CoreContext @UiThread constructor(val context: Context) : HandlerThread("C val audioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager audioManager.registerAudioDeviceCallback(audioDeviceCallback, coreThread) + Log.i("$TAG Report Core created and started") Looper.loop() } diff --git a/app/src/main/java/org/linphone/ui/call/fragment/AbstractNewTransferCallFragment.kt b/app/src/main/java/org/linphone/ui/call/fragment/AbstractNewTransferCallFragment.kt index 35ad90e08..065bb6ecc 100644 --- a/app/src/main/java/org/linphone/ui/call/fragment/AbstractNewTransferCallFragment.kt +++ b/app/src/main/java/org/linphone/ui/call/fragment/AbstractNewTransferCallFragment.kt @@ -119,6 +119,10 @@ abstract class AbstractNewTransferCallFragment : GenericCallFragment() { val headerItemDecoration = RecyclerViewHeaderDecoration(requireContext(), adapter) binding.contactsAndSuggestionsList.addItemDecoration(headerItemDecoration) + if (binding.contactsAndSuggestionsList.adapter != adapter) { + binding.contactsAndSuggestionsList.adapter = adapter + } + adapter.contactClickedEvent.observe(viewLifecycleOwner) { it.consume { model -> startCall(model) @@ -134,10 +138,6 @@ abstract class AbstractNewTransferCallFragment : GenericCallFragment() { val count = adapter.itemCount adapter.submitList(it) - if (binding.contactsAndSuggestionsList.adapter != adapter) { - binding.contactsAndSuggestionsList.adapter = adapter - } - if (count == 0) { (view.parent as? ViewGroup)?.doOnPreDraw { startPostponedEnterTransition() diff --git a/app/src/main/java/org/linphone/ui/call/fragment/CallsListFragment.kt b/app/src/main/java/org/linphone/ui/call/fragment/CallsListFragment.kt index 0c206d975..b15182d96 100644 --- a/app/src/main/java/org/linphone/ui/call/fragment/CallsListFragment.kt +++ b/app/src/main/java/org/linphone/ui/call/fragment/CallsListFragment.kt @@ -73,6 +73,10 @@ class CallsListFragment : GenericCallFragment() { binding.callsList.setHasFixedSize(true) binding.callsList.layoutManager = LinearLayoutManager(requireContext()) + if (binding.callsList.adapter != adapter) { + binding.callsList.adapter = adapter + } + adapter.callLongClickedEvent.observe(viewLifecycleOwner) { it.consume { model -> val modalBottomSheet = CallMenuDialogFragment(model) { @@ -97,10 +101,6 @@ class CallsListFragment : GenericCallFragment() { viewModel.calls.observe(viewLifecycleOwner) { Log.i("$TAG Calls list updated with [${it.size}] items") adapter.submitList(it) - - if (binding.callsList.adapter != adapter) { - binding.callsList.adapter = adapter - } } } diff --git a/app/src/main/java/org/linphone/ui/call/fragment/ConferenceParticipantsListFragment.kt b/app/src/main/java/org/linphone/ui/call/fragment/ConferenceParticipantsListFragment.kt index 9ca719ff2..6050dab97 100644 --- a/app/src/main/java/org/linphone/ui/call/fragment/ConferenceParticipantsListFragment.kt +++ b/app/src/main/java/org/linphone/ui/call/fragment/ConferenceParticipantsListFragment.kt @@ -70,6 +70,10 @@ class ConferenceParticipantsListFragment : GenericCallFragment() { binding.participantsList.setHasFixedSize(true) binding.participantsList.layoutManager = LinearLayoutManager(requireContext()) + if (binding.participantsList.adapter != adapter) { + binding.participantsList.adapter = adapter + } + binding.setBackClickListener { findNavController().popBackStack() } @@ -77,10 +81,6 @@ class ConferenceParticipantsListFragment : GenericCallFragment() { viewModel.conferenceModel.participants.observe(viewLifecycleOwner) { Log.i("$TAG participants list updated with [${it.size}] items") adapter.submitList(it) - - if (binding.participantsList.adapter != adapter) { - binding.participantsList.adapter = adapter - } } } } diff --git a/app/src/main/java/org/linphone/ui/main/MainActivity.kt b/app/src/main/java/org/linphone/ui/main/MainActivity.kt index b585fe7d0..e082f6ead 100644 --- a/app/src/main/java/org/linphone/ui/main/MainActivity.kt +++ b/app/src/main/java/org/linphone/ui/main/MainActivity.kt @@ -389,28 +389,19 @@ class MainActivity : GenericActivity() { Log.i( "$TAG Nav graph not set yet, loading it & set start destination to Conversations fragment instead of default" ) - val navGraph = findNavController().navInflater.inflate( - R.navigation.main_nav_graph - ) - navGraph.setStartDestination(R.id.conversationsListFragment) - findNavController().setGraph(navGraph, intent.extras) + findNavController().navigate(R.id.conversationsListFragment) } } else { Log.i( "$TAG Loading graph & set start destination to Conversations fragment instead of default" ) - val navGraph = findNavController().navInflater.inflate(R.navigation.main_nav_graph) - navGraph.setStartDestination(R.id.conversationsListFragment) - findNavController().setGraph(navGraph, intent.extras) + findNavController().navigate(R.id.conversationsListFragment) } } else { if (!isNewIntent && defaultDestination > 0) { try { Log.i("$TAG Setting nav graph with expected start destination") - val navGraph = - findNavController().navInflater.inflate(R.navigation.main_nav_graph) - navGraph.setStartDestination(defaultDestination) - findNavController().setGraph(navGraph, null) + findNavController().navigate(defaultDestination) } catch (ise: IllegalStateException) { Log.i("$TAG Failed to handle intent: $ise") } @@ -499,10 +490,7 @@ class MainActivity : GenericActivity() { intent.putExtra("LocalSipUri", localSipUri) intent.putExtra("RemoteSipUri", remoteSipUri) } - - val navGraph = findNavController().navInflater.inflate(R.navigation.main_nav_graph) - navGraph.setStartDestination(R.id.conversationsListFragment) - findNavController().setGraph(navGraph, intent.extras) + findNavController().navigate(R.id.conversationsListFragment) } } } diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt index 9b017ac93..739366ccc 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt @@ -288,6 +288,10 @@ class ConversationFragment : SlidingPaneChildFragment() { layoutManager.stackFromEnd = true binding.eventsList.layoutManager = layoutManager + if (binding.eventsList.adapter != adapter) { + binding.eventsList.adapter = adapter + } + val callbacks = RecyclerViewSwipeUtilsCallback( R.drawable.reply, ConversationEventAdapter.EventViewHolder::class.java @@ -348,10 +352,6 @@ class ConversationFragment : SlidingPaneChildFragment() { adapter.submitList(items) Log.i("$TAG Events (messages) list updated with [${items.size}] items") - if (binding.eventsList.adapter != adapter) { - binding.eventsList.adapter = adapter - } - (view.parent as? ViewGroup)?.doOnPreDraw { sharedViewModel.openSlidingPaneEvent.value = Event(true) } diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationInfoFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationInfoFragment.kt index a942f9d06..6f48c1182 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationInfoFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationInfoFragment.kt @@ -98,6 +98,10 @@ class ConversationInfoFragment : SlidingPaneChildFragment() { binding.participants.setHasFixedSize(true) binding.participants.layoutManager = LinearLayoutManager(requireContext()) + if (binding.participants.adapter != adapter) { + binding.participants.adapter = adapter + } + viewModel.chatRoomFoundEvent.observe(viewLifecycleOwner) { it.consume { found -> if (found) { @@ -120,10 +124,6 @@ class ConversationInfoFragment : SlidingPaneChildFragment() { viewModel.participants.observe(viewLifecycleOwner) { items -> adapter.submitList(items) Log.i("$TAG Participants list updated with [${items.size}] items") - - if (binding.participants.adapter != adapter) { - binding.participants.adapter = adapter - } } viewModel.groupLeftEvent.observe(viewLifecycleOwner) { diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationsListFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationsListFragment.kt index bdfc2b159..f9ea9bb34 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationsListFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationsListFragment.kt @@ -126,6 +126,10 @@ class ConversationsListFragment : AbstractTopBarFragment() { binding.conversationsList.setHasFixedSize(true) binding.conversationsList.layoutManager = LinearLayoutManager(requireContext()) + if (binding.conversationsList.adapter != adapter) { + binding.conversationsList.adapter = adapter + } + adapter.conversationLongClickedEvent.observe(viewLifecycleOwner) { it.consume { model -> val modalBottomSheet = ConversationDialogFragment( @@ -182,18 +186,9 @@ class ConversationsListFragment : AbstractTopBarFragment() { } listViewModel.conversations.observe(viewLifecycleOwner) { - val currentCount = adapter.itemCount adapter.submitList(it) Log.i("$TAG Conversations list ready with [${it.size}] items") - if (binding.conversationsList.adapter != adapter) { - binding.conversationsList.adapter = adapter - } - - if (currentCount < it.size) { - binding.conversationsList.scrollToPosition(0) - } - (view.parent as? ViewGroup)?.doOnPreDraw { startPostponedEnterTransition() sharedViewModel.isFirstFragmentReady = true 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 532d75322..ccedb5410 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 @@ -116,22 +116,19 @@ class ContactsListFragment : AbstractTopBarFragment() { configureAdapter(adapter) configureAdapter(favouritesAdapter) + if (binding.contactsList.adapter != adapter) { + binding.contactsList.adapter = adapter + } + if (binding.favouritesContactsList.adapter != favouritesAdapter) { + binding.favouritesContactsList.adapter = favouritesAdapter + } + listViewModel.contactsList.observe( viewLifecycleOwner ) { - val currentCount = adapter.itemCount adapter.submitList(it) Log.i("$TAG Contacts list updated with [${it.size}] items") - if (binding.contactsList.adapter != adapter) { - binding.contactsList.adapter = adapter - } - - if (currentCount < it.size) { - Log.i("$TAG Contacts list updated with new items, scrolling to top") - binding.contactsList.smoothScrollToPosition(0) - } - (view.parent as? ViewGroup)?.doOnPreDraw { startPostponedEnterTransition() sharedViewModel.isFirstFragmentReady = true @@ -142,10 +139,6 @@ class ContactsListFragment : AbstractTopBarFragment() { viewLifecycleOwner ) { favouritesAdapter.submitList(it) - - if (binding.favouritesContactsList.adapter != favouritesAdapter) { - binding.favouritesContactsList.adapter = favouritesAdapter - } Log.i("$TAG Favourites contacts list updated with [${it.size}] items") } diff --git a/app/src/main/java/org/linphone/ui/main/history/fragment/HistoryContactFragment.kt b/app/src/main/java/org/linphone/ui/main/history/fragment/HistoryContactFragment.kt index bd6fe7e65..f4ce4ae53 100644 --- a/app/src/main/java/org/linphone/ui/main/history/fragment/HistoryContactFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/history/fragment/HistoryContactFragment.kt @@ -102,6 +102,10 @@ class HistoryContactFragment : SlidingPaneChildFragment() { binding.callHistory.setHasFixedSize(true) binding.callHistory.layoutManager = LinearLayoutManager(requireContext()) + if (binding.callHistory.adapter != adapter) { + binding.callHistory.adapter = adapter + } + viewModel.callLogFoundEvent.observe(viewLifecycleOwner) { it.consume { found -> if (found) { @@ -128,10 +132,6 @@ class HistoryContactFragment : SlidingPaneChildFragment() { viewModel.historyCallLogs.observe(viewLifecycleOwner) { Log.i("$TAG Call history list ready with [${it.size}] items") adapter.submitList(it) - - if (binding.callHistory.adapter != adapter) { - binding.callHistory.adapter = adapter - } } viewModel.historyDeletedEvent.observe(viewLifecycleOwner) { diff --git a/app/src/main/java/org/linphone/ui/main/history/fragment/HistoryListFragment.kt b/app/src/main/java/org/linphone/ui/main/history/fragment/HistoryListFragment.kt index f817c5f53..b8c7c6957 100644 --- a/app/src/main/java/org/linphone/ui/main/history/fragment/HistoryListFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/history/fragment/HistoryListFragment.kt @@ -109,6 +109,10 @@ class HistoryListFragment : AbstractTopBarFragment() { binding.historyList.setHasFixedSize(true) binding.historyList.layoutManager = LinearLayoutManager(requireContext()) + if (binding.historyList.adapter != adapter) { + binding.historyList.adapter = adapter + } + adapter.callLogLongClickedEvent.observe(viewLifecycleOwner) { it.consume { model -> val modalBottomSheet = HistoryMenuDialogFragment( @@ -188,18 +192,9 @@ class HistoryListFragment : AbstractTopBarFragment() { } listViewModel.callLogs.observe(viewLifecycleOwner) { - val currentCount = adapter.itemCount adapter.submitList(it) Log.i("$TAG Call logs ready with [${it.size}] items") - if (binding.historyList.adapter != adapter) { - binding.historyList.adapter = adapter - } - - if (currentCount < it.size) { - binding.historyList.scrollToPosition(0) - } - (view.parent as? ViewGroup)?.doOnPreDraw { startPostponedEnterTransition() sharedViewModel.isFirstFragmentReady = true diff --git a/app/src/main/java/org/linphone/ui/main/meetings/fragment/MeetingsListFragment.kt b/app/src/main/java/org/linphone/ui/main/meetings/fragment/MeetingsListFragment.kt index 6ad500f89..9f30889cd 100644 --- a/app/src/main/java/org/linphone/ui/main/meetings/fragment/MeetingsListFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/meetings/fragment/MeetingsListFragment.kt @@ -104,6 +104,10 @@ class MeetingsListFragment : AbstractTopBarFragment() { val headerItemDecoration = RecyclerViewHeaderDecoration(requireContext(), adapter) binding.meetingsList.addItemDecoration(headerItemDecoration) + if (binding.meetingsList.adapter != adapter) { + binding.meetingsList.adapter = adapter + } + binding.setNewMeetingClicked { if (findNavController().currentDestination?.id == R.id.meetingsListFragment) { Log.i("$TAG Navigating to schedule meeting fragment") @@ -131,10 +135,6 @@ class MeetingsListFragment : AbstractTopBarFragment() { adapter.submitList(it) Log.i("$TAG Meetings list ready with [$newCount] items") - if (binding.meetingsList.adapter != adapter) { - binding.meetingsList.adapter = adapter - } - (view.parent as? ViewGroup)?.doOnPreDraw { startPostponedEnterTransition() sharedViewModel.isFirstFragmentReady = true diff --git a/app/src/main/res/layout/main_activity.xml b/app/src/main/res/layout/main_activity.xml index 72557bbd4..c16ae1e7b 100644 --- a/app/src/main/res/layout/main_activity.xml +++ b/app/src/main/res/layout/main_activity.xml @@ -39,6 +39,7 @@ android:layout_width="0dp" android:layout_height="0dp" app:defaultNavHost="true" + app:navGraph="@navigation/main_nav_graph" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@id/in_call_top_bar" diff --git a/app/src/main/res/navigation/main_nav_graph.xml b/app/src/main/res/navigation/main_nav_graph.xml index 5806b1a0a..3e3c6ddfd 100644 --- a/app/src/main/res/navigation/main_nav_graph.xml +++ b/app/src/main/res/navigation/main_nav_graph.xml @@ -3,7 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main_nav_graph" - app:startDestination="@id/historyListFragment"> + app:startDestination="@id/contactsListFragment">