diff --git a/app/src/main/java/org/linphone/ui/call/CallActivity.kt b/app/src/main/java/org/linphone/ui/call/CallActivity.kt index e352bb22a..ef52922eb 100644 --- a/app/src/main/java/org/linphone/ui/call/CallActivity.kt +++ b/app/src/main/java/org/linphone/ui/call/CallActivity.kt @@ -36,6 +36,7 @@ import androidx.navigation.findNavController import androidx.window.layout.FoldingFeature import androidx.window.layout.WindowInfoTracker import androidx.window.layout.WindowLayoutInfo +import com.google.android.material.bottomsheet.BottomSheetDialogFragment import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import org.linphone.R @@ -69,6 +70,8 @@ class CallActivity : GenericActivity() { private lateinit var callsViewModel: CallsViewModel private lateinit var callViewModel: CurrentCallViewModel + private var bottomSheetDialog: BottomSheetDialogFragment? = null + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -272,6 +275,13 @@ class CallActivity : GenericActivity() { } } + override fun onPause() { + super.onPause() + + bottomSheetDialog?.dismiss() + bottomSheetDialog = null + } + override fun onResume() { super.onResume() @@ -414,10 +424,12 @@ class CallActivity : GenericActivity() { private fun showAudioRoutesMenu(devicesList: List) { val modalBottomSheet = AudioDevicesMenuDialogFragment(devicesList) modalBottomSheet.show(supportFragmentManager, AudioDevicesMenuDialogFragment.TAG) + bottomSheetDialog = modalBottomSheet } private fun showConferenceLayoutMenu() { val modalBottomSheet = ConferenceLayoutMenuDialogFragment(callViewModel.conferenceModel) modalBottomSheet.show(supportFragmentManager, ConferenceLayoutMenuDialogFragment.TAG) + bottomSheetDialog = modalBottomSheet } } 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 a8ff71da0..0c206d975 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 @@ -26,6 +26,7 @@ import android.view.ViewGroup import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager +import com.google.android.material.bottomsheet.BottomSheetDialogFragment import org.linphone.core.tools.Log import org.linphone.databinding.CallsListFragmentBinding import org.linphone.ui.call.adapter.CallsListAdapter @@ -42,6 +43,8 @@ class CallsListFragment : GenericCallFragment() { private lateinit var adapter: CallsListAdapter + private var bottomSheetDialog: BottomSheetDialogFragment? = null + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -77,6 +80,7 @@ class CallsListFragment : GenericCallFragment() { adapter.resetSelection() } modalBottomSheet.show(parentFragmentManager, CallMenuDialogFragment.TAG) + bottomSheetDialog = modalBottomSheet } } @@ -99,4 +103,11 @@ class CallsListFragment : GenericCallFragment() { } } } + + override fun onPause() { + super.onPause() + + bottomSheetDialog?.dismiss() + bottomSheetDialog = null + } } 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 3fb2b8e55..1ce016454 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 @@ -32,6 +32,7 @@ import androidx.navigation.findNavController import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import com.google.android.material.bottomsheet.BottomSheetDialogFragment import org.linphone.R import org.linphone.core.tools.Log import org.linphone.databinding.ChatListFragmentBinding @@ -54,6 +55,8 @@ class ConversationsListFragment : AbstractTopBarFragment() { private lateinit var adapter: ConversationsListAdapter + private var bottomSheetDialog: BottomSheetDialogFragment? = null + private val dataObserver = object : RecyclerView.AdapterDataObserver() { override fun onItemRangeInserted(positionStart: Int, itemCount: Int) { Log.i("$TAG [$itemCount] added, scrolling to top") @@ -147,6 +150,7 @@ class ConversationsListFragment : AbstractTopBarFragment() { } ) modalBottomSheet.show(parentFragmentManager, HistoryMenuDialogFragment.TAG) + bottomSheetDialog = modalBottomSheet } } @@ -272,6 +276,9 @@ class ConversationsListFragment : AbstractTopBarFragment() { override fun onPause() { super.onPause() + bottomSheetDialog?.dismiss() + bottomSheetDialog = null + try { adapter.unregisterAdapterDataObserver(dataObserver) } catch (e: IllegalStateException) { diff --git a/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactFragment.kt b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactFragment.kt index d4f72f8cf..db6d68346 100644 --- a/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactFragment.kt @@ -36,6 +36,7 @@ import androidx.core.view.doOnPreDraw import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs +import com.google.android.material.bottomsheet.BottomSheetDialogFragment import java.io.File import org.linphone.R import org.linphone.core.tools.Log @@ -63,6 +64,8 @@ class ContactFragment : GenericFragment() { private var numberOrAddressPickerDialog: Dialog? = null + private var bottomSheetDialog: BottomSheetDialogFragment? = null + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -138,6 +141,7 @@ class ContactFragment : GenericFragment() { parentFragmentManager, ContactNumberOrAddressMenuDialogFragment.TAG ) + bottomSheetDialog = modalBottomSheet } } @@ -224,6 +228,9 @@ class ContactFragment : GenericFragment() { numberOrAddressPickerDialog?.dismiss() numberOrAddressPickerDialog = null + + bottomSheetDialog?.dismiss() + bottomSheetDialog = null } private fun copyNumberOrAddressToClipboard(value: String, isSip: Boolean) { 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 3e8080a85..569731df9 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 @@ -35,6 +35,7 @@ import androidx.lifecycle.ViewModelProvider import androidx.navigation.findNavController import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager +import com.google.android.material.bottomsheet.BottomSheetDialogFragment import java.io.File import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R @@ -59,6 +60,8 @@ class ContactsListFragment : AbstractTopBarFragment() { private lateinit var adapter: ContactsListAdapter private lateinit var favouritesAdapter: ContactsListAdapter + private var bottomSheetDialog: BottomSheetDialogFragment? = null + override fun onDefaultAccountChanged() { Log.i( "$TAG Default account changed, updating avatar in top bar & refreshing contacts list" @@ -230,6 +233,7 @@ class ContactsListFragment : AbstractTopBarFragment() { } ) modalBottomSheet.show(parentFragmentManager, ContactsListMenuDialogFragment.TAG) + bottomSheetDialog = modalBottomSheet } } @@ -240,6 +244,13 @@ class ContactsListFragment : AbstractTopBarFragment() { } } + override fun onPause() { + super.onPause() + + bottomSheetDialog?.dismiss() + bottomSheetDialog = null + } + private fun shareContact(name: String, file: File) { val publicUri = FileProvider.getUriForFile( requireContext(), 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 b6c2e1355..948696c23 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 @@ -37,6 +37,7 @@ import androidx.lifecycle.ViewModelProvider import androidx.navigation.findNavController import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager +import com.google.android.material.bottomsheet.BottomSheetDialogFragment import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R import org.linphone.core.tools.Log @@ -62,6 +63,8 @@ class HistoryListFragment : AbstractTopBarFragment() { private lateinit var adapter: HistoryListAdapter + private var bottomSheetDialog: BottomSheetDialogFragment? = null + override fun onDefaultAccountChanged() { Log.i( "$TAG Default account changed, updating avatar in top bar & re-computing call logs" @@ -148,6 +151,7 @@ class HistoryListFragment : AbstractTopBarFragment() { } ) modalBottomSheet.show(parentFragmentManager, HistoryMenuDialogFragment.TAG) + bottomSheetDialog = modalBottomSheet } } @@ -249,6 +253,13 @@ class HistoryListFragment : AbstractTopBarFragment() { initNavigation(R.id.historyListFragment) } + override fun onPause() { + super.onPause() + + bottomSheetDialog?.dismiss() + bottomSheetDialog = null + } + override fun onResume() { super.onResume() 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 cc2f7cce7..17e389258 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 @@ -31,6 +31,7 @@ import androidx.lifecycle.ViewModelProvider import androidx.navigation.findNavController import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager +import com.google.android.material.bottomsheet.BottomSheetDialogFragment import org.linphone.R import org.linphone.core.tools.Log import org.linphone.databinding.MeetingsListFragmentBinding @@ -52,6 +53,8 @@ class MeetingsListFragment : AbstractTopBarFragment() { private lateinit var adapter: MeetingsListAdapter + private var bottomSheetDialog: BottomSheetDialogFragment? = null + override fun onDefaultAccountChanged() { Log.i( "$TAG Default account changed, updating avatar in top bar & re-computing meetings list" @@ -153,6 +156,7 @@ class MeetingsListFragment : AbstractTopBarFragment() { } ) modalBottomSheet.show(parentFragmentManager, MeetingsMenuDialogFragment.TAG) + bottomSheetDialog = modalBottomSheet } } @@ -207,6 +211,13 @@ class MeetingsListFragment : AbstractTopBarFragment() { initNavigation(R.id.meetingsListFragment) } + override fun onPause() { + super.onPause() + + bottomSheetDialog?.dismiss() + bottomSheetDialog = null + } + private fun scrollToToday() { Log.i("$TAG Scrolling to today's meeting (if any)") val todayMeeting = listViewModel.meetings.value.orEmpty().find {