diff --git a/app/src/main/java/org/linphone/activities/GenericActivity.kt b/app/src/main/java/org/linphone/activities/GenericActivity.kt index a29c6f7e3..e22ee764e 100644 --- a/app/src/main/java/org/linphone/activities/GenericActivity.kt +++ b/app/src/main/java/org/linphone/activities/GenericActivity.kt @@ -36,6 +36,9 @@ import org.linphone.core.tools.Log abstract class GenericActivity : AppCompatActivity() { private var timer: Timer? = null + private var _isDestructionPending = false + val isDestructionPending: Boolean + get() = _isDestructionPending @SuppressLint("SourceLockedOrientationActivity") override fun onCreate(savedInstanceState: Bundle?) { @@ -49,19 +52,24 @@ abstract class GenericActivity : AppCompatActivity() { ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED } + _isDestructionPending = false val nightMode = resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK val darkModeEnabled = corePreferences.darkMode when (nightMode) { Configuration.UI_MODE_NIGHT_NO, Configuration.UI_MODE_NIGHT_UNDEFINED -> { if (darkModeEnabled == 1) { // Force dark mode + Log.w("[Generic Activity] Forcing night mode") AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) + _isDestructionPending = true } } Configuration.UI_MODE_NIGHT_YES -> { if (darkModeEnabled == 0) { // Force light mode + Log.w("[Generic Activity] Forcing day mode") AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) + _isDestructionPending = true } } } diff --git a/app/src/main/java/org/linphone/activities/main/chat/fragments/MasterChatRoomsFragment.kt b/app/src/main/java/org/linphone/activities/main/chat/fragments/MasterChatRoomsFragment.kt index 3f89b24ff..9305974d8 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/fragments/MasterChatRoomsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/fragments/MasterChatRoomsFragment.kt @@ -29,6 +29,7 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R +import org.linphone.activities.GenericActivity import org.linphone.activities.main.MainActivity import org.linphone.activities.main.chat.adapters.ChatRoomsListAdapter import org.linphone.activities.main.chat.viewmodels.ChatRoomsListViewModel @@ -141,8 +142,13 @@ class MasterChatRoomsFragment : MasterFragment - sharedViewModel.selectedChatRoom.value = chatRoom - navigateToChatRoom() + if ((requireActivity() as GenericActivity).isDestructionPending) { + Log.w("[Chat] Activity is pending destruction, don't start navigating now!") + sharedViewModel.destructionPendingChatRoom = chatRoom + } else { + sharedViewModel.selectedChatRoom.value = chatRoom + navigateToChatRoom() + } } }) @@ -159,6 +165,14 @@ class MasterChatRoomsFragment : MasterFragment AppCompatDelegate.MODE_NIGHT_NO 1 -> AppCompatDelegate.MODE_NIGHT_YES - else -> AppCompatDelegate.MODE_NIGHT_UNSPECIFIED + else -> AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM } ) } diff --git a/app/src/main/java/org/linphone/activities/main/viewmodels/SharedMainViewModel.kt b/app/src/main/java/org/linphone/activities/main/viewmodels/SharedMainViewModel.kt index b059d43e7..53a9ec387 100644 --- a/app/src/main/java/org/linphone/activities/main/viewmodels/SharedMainViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/viewmodels/SharedMainViewModel.kt @@ -36,6 +36,7 @@ class SharedMainViewModel : ViewModel() { /* Chat */ val selectedChatRoom = MutableLiveData() + var destructionPendingChatRoom: ChatRoom? = null val selectedGroupChatRoom = MutableLiveData()