diff --git a/.idea/misc.xml b/.idea/misc.xml index 0ad17cbd3..8978d23db 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,3 @@ - diff --git a/app/build.gradle b/app/build.gradle index 86afc3422..7425e45a1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,6 +5,7 @@ plugins { id 'org.jlleitschuh.gradle.ktlint' version '11.3.1' id 'org.jetbrains.kotlin.android' id 'com.google.gms.google-services' + id 'androidx.navigation.safeargs.kotlin' } static def getPackageName() { 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 6aad4b172..09ad5cd5e 100644 --- a/app/src/main/java/org/linphone/ui/contacts/ContactsFragment.kt +++ b/app/src/main/java/org/linphone/ui/contacts/ContactsFragment.kt @@ -26,8 +26,10 @@ import android.view.ViewGroup import android.view.animation.Animation import android.view.animation.AnimationUtils import androidx.fragment.app.Fragment +import androidx.navigation.fragment.FragmentNavigatorExtras import androidx.navigation.fragment.findNavController import androidx.navigation.navGraphViewModels +import androidx.transition.AutoTransition import org.linphone.R import org.linphone.databinding.ContactsFragmentBinding import org.linphone.ui.contacts.viewmodel.ContactsListViewModel @@ -52,6 +54,7 @@ class ContactsFragment : Fragment() { savedInstanceState: Bundle? ): View { binding = ContactsFragmentBinding.inflate(layoutInflater) + sharedElementEnterTransition = AutoTransition() return binding.root } @@ -73,9 +76,11 @@ class ContactsFragment : Fragment() { binding.setOnConversationsClicked { if (findNavController().currentDestination?.id == R.id.contactsFragment) { - findNavController().navigate( - R.id.action_contactsFragment_to_conversationsFragment + val extras = FragmentNavigatorExtras( + binding.bottomNavBar.root to "bottom_nav_bar" ) + val action = ContactsFragmentDirections.actionContactsFragmentToConversationsFragment() + findNavController().navigate(action, extras) } } diff --git a/app/src/main/java/org/linphone/ui/conversations/ConversationsFragment.kt b/app/src/main/java/org/linphone/ui/conversations/ConversationsFragment.kt index 9e5be380a..4fdf657d0 100644 --- a/app/src/main/java/org/linphone/ui/conversations/ConversationsFragment.kt +++ b/app/src/main/java/org/linphone/ui/conversations/ConversationsFragment.kt @@ -28,10 +28,12 @@ import android.view.animation.AnimationUtils import androidx.core.os.bundleOf import androidx.core.view.doOnPreDraw import androidx.fragment.app.Fragment +import androidx.navigation.fragment.FragmentNavigatorExtras import androidx.navigation.fragment.findNavController import androidx.navigation.navGraphViewModels import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import androidx.transition.AutoTransition import org.linphone.R import org.linphone.databinding.ConversationsFragmentBinding import org.linphone.ui.conversations.adapter.ConversationsListAdapter @@ -82,6 +84,7 @@ class ConversationsFragment : Fragment() { savedInstanceState: Bundle? ): View { binding = ConversationsFragmentBinding.inflate(layoutInflater) + sharedElementEnterTransition = AutoTransition() return binding.root } @@ -143,9 +146,18 @@ class ConversationsFragment : Fragment() { binding.setOnNewConversationClicked { if (findNavController().currentDestination?.id == R.id.conversationsFragment) { - findNavController().navigate( - R.id.action_conversationsFragment_to_newConversationFragment + val action = ConversationsFragmentDirections.actionConversationsFragmentToNewConversationFragment() + findNavController().navigate(action) + } + } + + binding.setOnContactsClicked { + if (findNavController().currentDestination?.id == R.id.conversationsFragment) { + val extras = FragmentNavigatorExtras( + binding.bottomNavBar.root to "bottom_nav_bar" ) + val action = ConversationsFragmentDirections.actionConversationsFragmentToContactsFragment() + findNavController().navigate(action, extras) } } } diff --git a/app/src/main/res/anim/slide_in_left.xml b/app/src/main/res/anim/slide_in_left.xml new file mode 100644 index 000000000..d3b0fd448 --- /dev/null +++ b/app/src/main/res/anim/slide_in_left.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/anim/slide_out_left.xml b/app/src/main/res/anim/slide_out_left.xml new file mode 100644 index 000000000..44889852c --- /dev/null +++ b/app/src/main/res/anim/slide_out_left.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 02ecb8a9b..404ed1bb6 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -8,6 +8,7 @@ + @@ -22,10 +24,10 @@ android:layout_marginBottom="16dp" android:drawableTop="@drawable/contacts" android:drawablePadding="10dp" - android:drawableTint="@color/primary_color" android:text="Contacts" android:textSize="11sp" android:textColor="@color/gray_9" + android:drawableTint="@color/primary_color" android:textStyle="bold" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@id/calls" @@ -44,6 +46,7 @@ android:text="Calls" android:textSize="11sp" android:textColor="@color/gray_9" + android:drawableTint="@color/gray_9" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@id/conversations" app:layout_constraintStart_toEndOf="@id/contacts" @@ -62,6 +65,7 @@ android:text="Conversations" android:textSize="11sp" android:textColor="@color/gray_9" + android:drawableTint="@color/gray_9" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@id/meetings" app:layout_constraintStart_toEndOf="@id/calls" @@ -79,6 +83,7 @@ android:text="Meetings" android:textSize="11sp" android:textColor="@color/gray_9" + android:drawableTint="@color/gray_9" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@id/conversations" diff --git a/app/src/main/res/layout/bottom_nav_bar_conversations.xml b/app/src/main/res/layout/bottom_nav_bar_conversations.xml new file mode 100644 index 000000000..08bfc3524 --- /dev/null +++ b/app/src/main/res/layout/bottom_nav_bar_conversations.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/contacts_fragment.xml b/app/src/main/res/layout/contacts_fragment.xml index 52c253030..af45ba261 100644 --- a/app/src/main/res/layout/contacts_fragment.xml +++ b/app/src/main/res/layout/contacts_fragment.xml @@ -165,7 +165,7 @@ - + + @@ -15,7 +18,8 @@ + android:layout_height="match_parent" + android:background="@color/primary_color"> + app:launchSingleTop="true" + app:popExitAnim="@anim/slide_out" /> + + app:launchSingleTop="true" + app:popUpTo="@id/conversationsFragment" + app:popUpToInclusive="true" /> @android:color/transparent + true \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 2b24af9dc..83ab811e1 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -6,5 +6,6 @@ @android:color/transparent + true \ No newline at end of file diff --git a/build.gradle b/build.gradle index a8b69f717..6efd8fde3 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,16 @@ +buildscript { + repositories { + google() + } + dependencies { + def nav_version = "2.6.0" + classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" + } +} // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { - id 'com.android.application' version '8.0.2' apply false - id 'com.android.library' version '8.0.2' apply false + id 'com.android.application' version '8.1.0' apply false + id 'com.android.library' version '8.1.0' apply false id 'org.jetbrains.kotlin.android' version '1.9.0-RC' apply false id 'com.google.gms.google-services' version '4.3.15' apply false } \ No newline at end of file