From 715a3c3074ec0600a9d23c2704a06a60ace774ec Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 16 Oct 2020 16:37:38 +0200 Subject: [PATCH] Improved tabs fragment use, not created each time a view changes --- .../linphone/activities/main/MainActivity.kt | 11 +- .../activities/main/fragments/TabsFragment.kt | 44 +++- .../layout-land/chat_room_master_fragment.xml | 105 --------- .../layout-land/contact_master_fragment.xml | 179 --------------- .../main/res/layout-land/dialer_fragment.xml | 11 - .../layout-land/history_master_fragment.xml | 141 ------------ .../main/res/layout-land/main_activity.xml | 85 +++++++ .../chat_room_master_fragment.xml | 139 ------------ .../contact_master_fragment.xml | 210 ------------------ .../layout-sw533dp-land/dialer_fragment.xml | 10 - .../history_master_fragment.xml | 174 --------------- .../chat_room_master_fragment.xml | 9 - .../contact_master_fragment.xml | 9 - .../res/layout-sw533dp/dialer_fragment.xml | 10 +- .../history_detail_fragment.xml | 191 ---------------- .../history_master_fragment.xml | 9 - .../res/layout/chat_room_master_fragment.xml | 9 - .../res/layout/contact_master_fragment.xml | 9 - app/src/main/res/layout/dialer_fragment.xml | 10 +- .../res/layout/history_master_fragment.xml | 9 - app/src/main/res/layout/main_activity.xml | 28 ++- 21 files changed, 147 insertions(+), 1255 deletions(-) delete mode 100644 app/src/main/res/layout-land/chat_room_master_fragment.xml delete mode 100644 app/src/main/res/layout-land/contact_master_fragment.xml delete mode 100644 app/src/main/res/layout-land/history_master_fragment.xml create mode 100644 app/src/main/res/layout-land/main_activity.xml delete mode 100644 app/src/main/res/layout-sw533dp-land/chat_room_master_fragment.xml delete mode 100644 app/src/main/res/layout-sw533dp-land/contact_master_fragment.xml delete mode 100644 app/src/main/res/layout-sw533dp-land/history_master_fragment.xml delete mode 100644 app/src/main/res/layout-sw533dp/history_detail_fragment.xml diff --git a/app/src/main/java/org/linphone/activities/main/MainActivity.kt b/app/src/main/java/org/linphone/activities/main/MainActivity.kt index 65b300db7..fd21098a7 100644 --- a/app/src/main/java/org/linphone/activities/main/MainActivity.kt +++ b/app/src/main/java/org/linphone/activities/main/MainActivity.kt @@ -28,7 +28,6 @@ import android.view.Gravity import android.view.View import android.view.inputmethod.InputMethodManager import androidx.databinding.DataBindingUtil -import androidx.fragment.app.FragmentContainerView import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope import androidx.navigation.NavController @@ -125,9 +124,8 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin override fun showSnackBar(resourceId: Int) { val snackBar = Snackbar.make(binding.coordinator, resourceId, Snackbar.LENGTH_LONG) - val anchorView = binding.navHostFragment.findViewById(R.id.tabs_fragment) - if (anchorView != null) { - snackBar.anchorView = anchorView + if (binding.tabsFragment.visibility == View.VISIBLE) { + snackBar.anchorView = binding.tabsFragment } snackBar.show() } @@ -150,6 +148,11 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin arguments: Bundle? ) { currentFocus?.hideKeyboard() + + binding.tabsFragment.visibility = when (destination.id) { + R.id.masterCallLogsFragment, R.id.masterContactsFragment, R.id.dialerFragment, R.id.masterChatRoomsFragment -> View.VISIBLE + else -> View.GONE + } } private fun View.hideKeyboard() { diff --git a/app/src/main/java/org/linphone/activities/main/fragments/TabsFragment.kt b/app/src/main/java/org/linphone/activities/main/fragments/TabsFragment.kt index 2b7f2a35d..a6ad9de7c 100644 --- a/app/src/main/java/org/linphone/activities/main/fragments/TabsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/fragments/TabsFragment.kt @@ -21,13 +21,16 @@ package org.linphone.activities.main.fragments import android.os.Bundle import androidx.lifecycle.ViewModelProvider +import androidx.navigation.NavController +import androidx.navigation.NavDestination +import androidx.navigation.findNavController import androidx.navigation.fragment.findNavController import org.linphone.R import org.linphone.activities.GenericFragment import org.linphone.activities.main.viewmodels.TabsViewModel import org.linphone.databinding.TabsFragmentBinding -class TabsFragment : GenericFragment() { +class TabsFragment : GenericFragment(), NavController.OnDestinationChangedListener { private lateinit var viewModel: TabsViewModel override fun getLayoutId(): Int = R.layout.tabs_fragment @@ -42,17 +45,6 @@ class TabsFragment : GenericFragment() { } ?: throw Exception("Invalid Activity") binding.viewModel = viewModel - viewModel.historySelected.value = false - viewModel.contactsSelected.value = false - viewModel.dialerSelected.value = false - viewModel.chatSelected.value = false - when (findNavController().currentDestination?.id) { - R.id.masterCallLogsFragment -> viewModel.historySelected.value = true - R.id.masterContactsFragment -> viewModel.contactsSelected.value = true - R.id.dialerFragment -> viewModel.dialerSelected.value = true - R.id.masterChatRoomsFragment -> viewModel.chatSelected.value = true - } - binding.setHistoryClickListener { when (findNavController().currentDestination?.id) { R.id.masterContactsFragment -> findNavController().navigate(R.id.action_masterContactsFragment_to_masterCallLogsFragment) @@ -85,4 +77,32 @@ class TabsFragment : GenericFragment() { } } } + + override fun onStart() { + super.onStart() + findNavController().addOnDestinationChangedListener(this) + } + + override fun onStop() { + findNavController().removeOnDestinationChangedListener(this) + super.onStop() + } + + override fun onDestinationChanged( + controller: NavController, + destination: NavDestination, + arguments: Bundle? + ) { + viewModel.historySelected.value = false + viewModel.contactsSelected.value = false + viewModel.dialerSelected.value = false + viewModel.chatSelected.value = false + + when (destination.id) { + R.id.masterCallLogsFragment -> viewModel.historySelected.value = true + R.id.masterContactsFragment -> viewModel.contactsSelected.value = true + R.id.dialerFragment -> viewModel.dialerSelected.value = true + R.id.masterChatRoomsFragment -> viewModel.chatSelected.value = true + } + } } diff --git a/app/src/main/res/layout-land/chat_room_master_fragment.xml b/app/src/main/res/layout-land/chat_room_master_fragment.xml deleted file mode 100644 index e4d66a7c1..000000000 --- a/app/src/main/res/layout-land/chat_room_master_fragment.xml +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout-land/contact_master_fragment.xml b/app/src/main/res/layout-land/contact_master_fragment.xml deleted file mode 100644 index 32f428e7e..000000000 --- a/app/src/main/res/layout-land/contact_master_fragment.xml +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout-land/dialer_fragment.xml b/app/src/main/res/layout-land/dialer_fragment.xml index 28c53eb65..f778b294a 100644 --- a/app/src/main/res/layout-land/dialer_fragment.xml +++ b/app/src/main/res/layout-land/dialer_fragment.xml @@ -34,17 +34,8 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - @@ -139,7 +129,6 @@ android:layout_height="match_parent" android:layout_below="@id/address_bar" android:layout_above="@id/controls" - android:layout_toRightOf="@id/tabs_fragment" android:padding="30dp" android:layout_centerHorizontal="true" android:contentDescription="@null" diff --git a/app/src/main/res/layout-land/history_master_fragment.xml b/app/src/main/res/layout-land/history_master_fragment.xml deleted file mode 100644 index 80ebf91c0..000000000 --- a/app/src/main/res/layout-land/history_master_fragment.xml +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout-land/main_activity.xml b/app/src/main/res/layout-land/main_activity.xml new file mode 100644 index 000000000..9bb417a1d --- /dev/null +++ b/app/src/main/res/layout-land/main_activity.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-sw533dp-land/chat_room_master_fragment.xml b/app/src/main/res/layout-sw533dp-land/chat_room_master_fragment.xml deleted file mode 100644 index a61872db6..000000000 --- a/app/src/main/res/layout-sw533dp-land/chat_room_master_fragment.xml +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout-sw533dp-land/contact_master_fragment.xml b/app/src/main/res/layout-sw533dp-land/contact_master_fragment.xml deleted file mode 100644 index 7bfbda6b3..000000000 --- a/app/src/main/res/layout-sw533dp-land/contact_master_fragment.xml +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout-sw533dp-land/dialer_fragment.xml b/app/src/main/res/layout-sw533dp-land/dialer_fragment.xml index ebd81d95a..f04c72ffd 100644 --- a/app/src/main/res/layout-sw533dp-land/dialer_fragment.xml +++ b/app/src/main/res/layout-sw533dp-land/dialer_fragment.xml @@ -35,20 +35,11 @@ android:layout_height="match_parent" android:background="@color/grey_color"> - - diff --git a/app/src/main/res/layout-sw533dp-land/history_master_fragment.xml b/app/src/main/res/layout-sw533dp-land/history_master_fragment.xml deleted file mode 100644 index b541dfc6f..000000000 --- a/app/src/main/res/layout-sw533dp-land/history_master_fragment.xml +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout-sw533dp/chat_room_master_fragment.xml b/app/src/main/res/layout-sw533dp/chat_room_master_fragment.xml index f69d1f5a1..62118c5f5 100644 --- a/app/src/main/res/layout-sw533dp/chat_room_master_fragment.xml +++ b/app/src/main/res/layout-sw533dp/chat_room_master_fragment.xml @@ -23,18 +23,9 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout-sw533dp/history_master_fragment.xml b/app/src/main/res/layout-sw533dp/history_master_fragment.xml index a9b725a56..559a25831 100644 --- a/app/src/main/res/layout-sw533dp/history_master_fragment.xml +++ b/app/src/main/res/layout-sw533dp/history_master_fragment.xml @@ -23,18 +23,9 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - - diff --git a/app/src/main/res/layout/contact_master_fragment.xml b/app/src/main/res/layout/contact_master_fragment.xml index eb52cec7b..7b7c90e18 100644 --- a/app/src/main/res/layout/contact_master_fragment.xml +++ b/app/src/main/res/layout/contact_master_fragment.xml @@ -26,14 +26,6 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - - + android:layout_alignParentBottom="true"> - - diff --git a/app/src/main/res/layout/main_activity.xml b/app/src/main/res/layout/main_activity.xml index 3f1968e61..183d6d3fd 100644 --- a/app/src/main/res/layout/main_activity.xml +++ b/app/src/main/res/layout/main_activity.xml @@ -37,14 +37,28 @@ android:layout_height="match_parent" android:layout_below="@id/status_fragment"> - + android:layout_height="match_parent"> + + + + + +