Dismiss dialogs when fragment is paused to prevent crashes when rotating device

This commit is contained in:
Sylvain Berfini 2023-11-27 12:58:12 +01:00
parent 39a6254ee1
commit 489aece7c5
7 changed files with 70 additions and 0 deletions

View file

@ -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<AudioDeviceModel>) {
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
}
}

View file

@ -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
}
}

View file

@ -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) {

View file

@ -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) {

View file

@ -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(),

View file

@ -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()

View file

@ -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 {