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 1af973a0f..14f4041e0 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 @@ -19,7 +19,9 @@ */ package org.linphone.activities.main.fragments +import android.animation.ValueAnimator import android.os.Bundle +import android.view.animation.LinearInterpolator import androidx.lifecycle.ViewModelProvider import androidx.navigation.NavController import androidx.navigation.NavDestination @@ -34,6 +36,10 @@ class TabsFragment : GenericFragment(), NavController.OnDes override fun getLayoutId(): Int = R.layout.tabs_fragment + private val bounceAnimator: ValueAnimator by lazy { + ValueAnimator.ofFloat(resources.getDimension(R.dimen.tabs_fragment_unread_count_bounce_offset), 0f) + } + override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) @@ -75,14 +81,26 @@ class TabsFragment : GenericFragment(), NavController.OnDes R.id.dialerFragment -> findNavController().navigate(R.id.action_dialerFragment_to_masterChatRoomsFragment) } } + + bounceAnimator.addUpdateListener { + val value = it.animatedValue as Float + binding.historyUnreadCount.translationY = -value + binding.chatUnreadCount.translationY = -value + } + bounceAnimator.interpolator = LinearInterpolator() + bounceAnimator.duration = 250 + bounceAnimator.repeatMode = ValueAnimator.REVERSE + bounceAnimator.repeatCount = ValueAnimator.INFINITE } override fun onStart() { super.onStart() + bounceAnimator.start() findNavController().addOnDestinationChangedListener(this) } override fun onStop() { + bounceAnimator.pause() findNavController().removeOnDestinationChangedListener(this) super.onStop() } @@ -93,10 +111,10 @@ class TabsFragment : GenericFragment(), NavController.OnDes arguments: Bundle? ) { when (destination.id) { - R.id.masterCallLogsFragment -> binding.selectorMotion.transitionToState(R.id.call_history) - R.id.masterContactsFragment -> binding.selectorMotion.transitionToState(R.id.contacts) - R.id.dialerFragment -> binding.selectorMotion.transitionToState(R.id.dialer) - R.id.masterChatRoomsFragment -> binding.selectorMotion.transitionToState(R.id.chat_rooms) + R.id.masterCallLogsFragment -> binding.motionLayout.transitionToState(R.id.call_history) + R.id.masterContactsFragment -> binding.motionLayout.transitionToState(R.id.contacts) + R.id.dialerFragment -> binding.motionLayout.transitionToState(R.id.dialer) + R.id.masterChatRoomsFragment -> binding.motionLayout.transitionToState(R.id.chat_rooms) } } } diff --git a/app/src/main/res/layout-land/tabs_fragment.xml b/app/src/main/res/layout-land/tabs_fragment.xml index 7c5956e73..619c33de7 100644 --- a/app/src/main/res/layout-land/tabs_fragment.xml +++ b/app/src/main/res/layout-land/tabs_fragment.xml @@ -1,5 +1,6 @@ - @@ -21,13 +22,11 @@ type="org.linphone.activities.main.viewmodels.TabsViewModel" /> - + app:layoutDescription="@xml/motion_main_activity_tabs_land"> - + app:layout_constraintBottom_toTopOf="@id/guidelineTop" /> - - - - - + - + app:layout_constraintBottom_toBottomOf="parent" /> - + - + - - - - - - - - - - - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/tabs_fragment.xml b/app/src/main/res/layout/tabs_fragment.xml index dd3f7eb3c..0ba902072 100644 --- a/app/src/main/res/layout/tabs_fragment.xml +++ b/app/src/main/res/layout/tabs_fragment.xml @@ -1,5 +1,5 @@ - @@ -22,10 +22,11 @@ type="org.linphone.activities.main.viewmodels.TabsViewModel" /> - + android:layout_height="@dimen/main_activity_tabs_fragment_size" + app:layoutDescription="@xml/motion_main_activity_tabs"> - + app:layout_constraintEnd_toEndOf="@id/guidelineLeft" /> - - - - - + - + app:layout_constraintStart_toStartOf="@id/guidelineRight" /> - + - + - - - - - - - - - - - - - + \ No newline at end of file diff --git a/app/src/main/res/values/dimen.xml b/app/src/main/res/values/dimen.xml index 3d6cfd715..66e0cb1bc 100644 --- a/app/src/main/res/values/dimen.xml +++ b/app/src/main/res/values/dimen.xml @@ -9,4 +9,6 @@ 50dp 60dp 40dp + 5dp + 5dp \ No newline at end of file diff --git a/app/src/main/res/xml/motion_main_activity_tabs.xml b/app/src/main/res/xml/motion_main_activity_tabs.xml index 2ca2f6d4f..07d401be0 100644 --- a/app/src/main/res/xml/motion_main_activity_tabs.xml +++ b/app/src/main/res/xml/motion_main_activity_tabs.xml @@ -7,6 +7,30 @@ motion:constraintSetStart="@+id/visible" motion:constraintSetEnd="@+id/gone" /> + + + + + + + + + + + + + + + + + + + + @@ -27,4 +61,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/xml/motion_main_activity_tabs_chat_unread_count.xml b/app/src/main/res/xml/motion_main_activity_tabs_chat_unread_count.xml deleted file mode 100644 index 6baaedbd9..000000000 --- a/app/src/main/res/xml/motion_main_activity_tabs_chat_unread_count.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/xml/motion_main_activity_tabs_chat_unread_count_land.xml b/app/src/main/res/xml/motion_main_activity_tabs_chat_unread_count_land.xml deleted file mode 100644 index 777e35278..000000000 --- a/app/src/main/res/xml/motion_main_activity_tabs_chat_unread_count_land.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/xml/motion_main_activity_tabs_history_unread_count.xml b/app/src/main/res/xml/motion_main_activity_tabs_history_unread_count.xml deleted file mode 100644 index af83c0cd5..000000000 --- a/app/src/main/res/xml/motion_main_activity_tabs_history_unread_count.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/xml/motion_main_activity_tabs_history_unread_count_land.xml b/app/src/main/res/xml/motion_main_activity_tabs_history_unread_count_land.xml deleted file mode 100644 index 516c5713c..000000000 --- a/app/src/main/res/xml/motion_main_activity_tabs_history_unread_count_land.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/xml/motion_main_activity_tabs_land.xml b/app/src/main/res/xml/motion_main_activity_tabs_land.xml index 127cdbfb2..67905417e 100644 --- a/app/src/main/res/xml/motion_main_activity_tabs_land.xml +++ b/app/src/main/res/xml/motion_main_activity_tabs_land.xml @@ -7,6 +7,30 @@ motion:constraintSetStart="@+id/visible" motion:constraintSetEnd="@+id/gone" /> + + + + + + + + + + + + + + + + + + + + @@ -28,4 +62,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/xml/motion_main_activity_tabs_selector.xml b/app/src/main/res/xml/motion_main_activity_tabs_selector.xml deleted file mode 100644 index b57b48f33..000000000 --- a/app/src/main/res/xml/motion_main_activity_tabs_selector.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/xml/motion_main_activity_tabs_selector_land.xml b/app/src/main/res/xml/motion_main_activity_tabs_selector_land.xml deleted file mode 100644 index ce90ba20d..000000000 --- a/app/src/main/res/xml/motion_main_activity_tabs_selector_land.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file