diff --git a/app/src/main/java/org/linphone/ui/MainActivity.kt b/app/src/main/java/org/linphone/ui/MainActivity.kt index 6adf6f160..7eafcf5fa 100644 --- a/app/src/main/java/org/linphone/ui/MainActivity.kt +++ b/app/src/main/java/org/linphone/ui/MainActivity.kt @@ -20,6 +20,7 @@ package org.linphone.ui import android.Manifest +import android.content.pm.ActivityInfo import android.content.pm.PackageManager import android.os.Bundle import android.view.Gravity @@ -42,6 +43,8 @@ class MainActivity : AppCompatActivity() { WindowCompat.setDecorFitsSystemWindows(window, true) super.onCreate(savedInstanceState) + requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LOCKED + window.statusBarColor = ContextCompat.getColor( this, R.color.primary_color diff --git a/app/src/main/java/org/linphone/ui/contacts/ContactFragment.kt b/app/src/main/java/org/linphone/ui/contacts/ContactFragment.kt index 201a00070..0f26f60b5 100644 --- a/app/src/main/java/org/linphone/ui/contacts/ContactFragment.kt +++ b/app/src/main/java/org/linphone/ui/contacts/ContactFragment.kt @@ -23,12 +23,11 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.core.content.ContextCompat -import androidx.core.view.ViewCompat +import androidx.core.view.doOnPreDraw import androidx.fragment.app.Fragment import androidx.navigation.fragment.navArgs -import androidx.transition.AutoTransition -import org.linphone.R +import androidx.transition.ChangeBounds +import org.linphone.core.tools.Log import org.linphone.databinding.ContactFragmentBinding class ContactFragment : Fragment() { @@ -38,7 +37,7 @@ class ContactFragment : Fragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - sharedElementEnterTransition = AutoTransition() + sharedElementEnterTransition = ChangeBounds() } override fun onCreateView( @@ -53,22 +52,22 @@ class ContactFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + postponeEnterTransition() + binding.lifecycleOwner = viewLifecycleOwner val model = args.contact binding.model = model - ViewCompat.setTransitionName(binding.avatar, "transition-avatar-${model.id}") - ViewCompat.setTransitionName(binding.name, "transition-name-${model.id}") + Log.i("[Contact] Model ID is [${model.id}]") + binding.avatar.transitionName = "transition-avatar-${model.id}" + binding.name.transitionName = "transition-name-${model.id}" binding.setBackClickListener { requireActivity().onBackPressedDispatcher.onBackPressed() } - } - override fun onResume() { - super.onResume() - - val window = requireActivity().window - window.statusBarColor = ContextCompat.getColor(requireActivity(), R.color.white) + (view.parent as? ViewGroup)?.doOnPreDraw { + startPostponedEnterTransition() + } } } diff --git a/app/src/main/java/org/linphone/ui/contacts/ContactsFragment.kt b/app/src/main/java/org/linphone/ui/contacts/ContactsFragment.kt index 2772129b2..b703c4ad0 100644 --- a/app/src/main/java/org/linphone/ui/contacts/ContactsFragment.kt +++ b/app/src/main/java/org/linphone/ui/contacts/ContactsFragment.kt @@ -28,20 +28,18 @@ import android.view.animation.Animation import android.view.animation.AnimationUtils import androidx.core.view.doOnPreDraw import androidx.fragment.app.Fragment -import androidx.navigation.findNavController import androidx.navigation.fragment.FragmentNavigatorExtras import androidx.navigation.fragment.NavHostFragment import androidx.navigation.fragment.findNavController import androidx.navigation.navGraphViewModels import androidx.recyclerview.widget.LinearLayoutManager -import androidx.slidingpanelayout.widget.SlidingPaneLayout import androidx.transition.AutoTransition import org.linphone.R +import org.linphone.core.tools.Log import org.linphone.databinding.ContactsFragmentBinding import org.linphone.ui.MainActivity import org.linphone.ui.contacts.adapter.ContactsListAdapter import org.linphone.ui.contacts.viewmodel.ContactsListViewModel -import org.linphone.utils.SlidingPaneBackPressedCallback import org.linphone.utils.hideKeyboard import org.linphone.utils.setKeyboardInsetListener import org.linphone.utils.showKeyboard @@ -84,15 +82,6 @@ class ContactsFragment : Fragment() { listViewModel.bottomNavBarVisible.value = !portraitOrientation || !keyboardVisible } - binding.root.doOnPreDraw { - val slidingPane = binding.slidingPaneLayout - requireActivity().onBackPressedDispatcher.addCallback( - viewLifecycleOwner, - SlidingPaneBackPressedCallback(slidingPane) - ) - slidingPane.lockMode = SlidingPaneLayout.LOCK_MODE_LOCKED - } - adapter = ContactsListAdapter(viewLifecycleOwner) binding.contactsList.setHasFixedSize(true) binding.contactsList.adapter = adapter @@ -112,17 +101,19 @@ class ContactsFragment : Fragment() { val model = pair.second if (findNavController().currentDestination?.id == R.id.contactsFragment) { - val navHostFragment = - childFragmentManager.findFragmentById(R.id.contacts_nav_container) as NavHostFragment val extras = FragmentNavigatorExtras( b.avatar to "transition-avatar-${model.id}", b.name to "transition-name-${model.id}" ) + Log.i("[Contacts List] Model ID is [${model.id}]") val action = ContactFragmentDirections.actionGlobalContactFragment(model) - navHostFragment.navController.navigate(action, extras) - if (!binding.slidingPaneLayout.isOpen) { - binding.slidingPaneLayout.openPane() + val navHostFragment = + childFragmentManager.findFragmentById(R.id.contacts_nav_container) as NavHostFragment? + if (navHostFragment != null) { + navHostFragment.navController.navigate(action, extras) + } else { + findNavController().navigate(action, extras) } } } diff --git a/app/src/main/java/org/linphone/ui/contacts/adapter/ContactsListAdapter.kt b/app/src/main/java/org/linphone/ui/contacts/adapter/ContactsListAdapter.kt index 4bf6ffd0a..02e7d8dee 100644 --- a/app/src/main/java/org/linphone/ui/contacts/adapter/ContactsListAdapter.kt +++ b/app/src/main/java/org/linphone/ui/contacts/adapter/ContactsListAdapter.kt @@ -2,7 +2,6 @@ package org.linphone.ui.contacts.adapter import android.view.LayoutInflater import android.view.ViewGroup -import androidx.core.view.ViewCompat import androidx.databinding.DataBindingUtil import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.MutableLiveData @@ -10,6 +9,7 @@ import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import org.linphone.R +import org.linphone.core.tools.Log import org.linphone.databinding.ContactListCellBinding import org.linphone.ui.contacts.model.ContactModel import org.linphone.utils.Event @@ -73,8 +73,9 @@ class ContactsListAdapter( lifecycleOwner = viewLifecycleOwner binding.root.isSelected = bindingAdapterPosition == selectedAdapterPosition - ViewCompat.setTransitionName(binding.avatar, "transition-avatar-${contactModel.id}") - ViewCompat.setTransitionName(binding.name, "transition-name-${contactModel.id}") + Log.i("[Contacts List] Model ID is [${contactModel.id}]") + binding.avatar.transitionName = "transition-avatar-${contactModel.id}" + binding.name.transitionName = "transition-name-${contactModel.id}" binding.setOnClickListener { contactClickedEvent.value = Event(Pair(binding, contactModel)) diff --git a/app/src/main/java/org/linphone/ui/contacts/model/ContactModel.kt b/app/src/main/java/org/linphone/ui/contacts/model/ContactModel.kt index 50d8fc4a0..512081b8c 100644 --- a/app/src/main/java/org/linphone/ui/contacts/model/ContactModel.kt +++ b/app/src/main/java/org/linphone/ui/contacts/model/ContactModel.kt @@ -38,8 +38,6 @@ class ContactModel(val friend: Friend) : Serializable { val name = MutableLiveData() - val avatar = getAvatarUri() - private val friendListener = object : FriendListenerStub() { override fun onPresenceReceived(fr: Friend) { presenceStatus.postValue(fr.consolidatedPresence) @@ -61,7 +59,7 @@ class ContactModel(val friend: Friend) : Serializable { friend.removeListener(friendListener) } - private fun getAvatarUri(): Uri? { + fun getAvatarUri(): Uri? { // Core thread val refKey = friend.refKey if (refKey != null) { diff --git a/app/src/main/java/org/linphone/utils/DataBindingUtils.kt b/app/src/main/java/org/linphone/utils/DataBindingUtils.kt index 6fa2ac6b9..02dd8bbb3 100644 --- a/app/src/main/java/org/linphone/utils/DataBindingUtils.kt +++ b/app/src/main/java/org/linphone/utils/DataBindingUtils.kt @@ -119,7 +119,7 @@ fun AvatarView.loadContactPicture(contact: ContactModel?) { } indicatorEnabled = true - val uri = contact.avatar + val uri = contact.getAvatarUri() Log.i("[Data binding Utils] Loading URI [$uri]") loadImage( data = uri, diff --git a/app/src/main/res/drawable-land/shape_gray_background.xml b/app/src/main/res/drawable-land/shape_gray_background.xml new file mode 100644 index 000000000..960325aff --- /dev/null +++ b/app/src/main/res/drawable-land/shape_gray_background.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-land/shape_white_background.xml b/app/src/main/res/drawable-land/shape_white_background.xml new file mode 100644 index 000000000..95a658bb5 --- /dev/null +++ b/app/src/main/res/drawable-land/shape_white_background.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/contacts_fragment.xml b/app/src/main/res/layout-land/contacts_fragment.xml index a47e731fc..ea17dd88d 100644 --- a/app/src/main/res/layout-land/contacts_fragment.xml +++ b/app/src/main/res/layout-land/contacts_fragment.xml @@ -19,112 +19,123 @@ type="org.linphone.ui.contacts.viewmodel.ContactsListViewModel" /> - + android:layout_height="match_parent" + android:background="@color/primary_color"> - + - + - + - + - + - + - + - + - + + app:navGraph="@navigation/chat_nav_graph" + app:layout_constraintTop_toBottomOf="@id/top_bar" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toEndOf="@id/separator" + app:layout_constraintEnd_toEndOf="parent"/> - + \ No newline at end of file diff --git a/app/src/main/res/layout/contact_fragment.xml b/app/src/main/res/layout/contact_fragment.xml index c403686fc..a65d26f74 100644 --- a/app/src/main/res/layout/contact_fragment.xml +++ b/app/src/main/res/layout/contact_fragment.xml @@ -22,7 +22,7 @@ android:layout_width="24dp" android:layout_height="24dp" android:layout_marginStart="10dp" - android:layout_marginTop="7dp" + android:layout_marginTop="17dp" android:onClick="@{backClickListener}" android:padding="1dp" android:src="@drawable/back" @@ -33,7 +33,7 @@ android:id="@+id/edit" android:layout_width="24dp" android:layout_height="24dp" - android:layout_marginTop="7dp" + android:layout_marginTop="17dp" android:layout_marginEnd="10dp" android:padding="1dp" android:src="@drawable/edit" diff --git a/app/src/main/res/layout/contacts_fragment.xml b/app/src/main/res/layout/contacts_fragment.xml index fd63d7d11..85135aa97 100644 --- a/app/src/main/res/layout/contacts_fragment.xml +++ b/app/src/main/res/layout/contacts_fragment.xml @@ -19,113 +19,97 @@ type="org.linphone.ui.contacts.viewmodel.ContactsListViewModel" /> - + android:layout_height="match_parent" + android:background="@color/primary_color"> - + - + - + - + - + - + - + - + - - - - - - - + \ No newline at end of file diff --git a/app/src/main/res/navigation/main_nav_graph.xml b/app/src/main/res/navigation/main_nav_graph.xml index 5edecc27f..6c5d5bc0a 100644 --- a/app/src/main/res/navigation/main_nav_graph.xml +++ b/app/src/main/res/navigation/main_nav_graph.xml @@ -54,6 +54,7 @@ android:name="remoteSipUri" app:argType="string" /> + + + + + + + \ No newline at end of file