diff --git a/Habitica/build.gradle b/Habitica/build.gradle index a0cd29990..cc5e25dea 100644 --- a/Habitica/build.gradle +++ b/Habitica/build.gradle @@ -166,7 +166,7 @@ android { buildConfigField "String", "TESTING_LEVEL", "\"production\"" resConfigs 'en', 'bg', 'de', 'en-rGB', 'es', 'fr', 'hr-rHR', 'in', 'it', 'iw', 'ja', 'ko', 'lt', 'nl', 'pl', 'pt-rBR', 'pt-rPT', 'ru', 'tr', 'zh', 'zh-rTW' - versionCode 3320 + versionCode 3321 versionName "3.6" targetSdkVersion 32 diff --git a/Habitica/res/drawable/teams_title_bg.xml b/Habitica/res/drawable/teams_title_bg.xml new file mode 100644 index 000000000..1f820214a --- /dev/null +++ b/Habitica/res/drawable/teams_title_bg.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Habitica/res/layout/activity_main.xml b/Habitica/res/layout/activity_main.xml index 4cc80650d..87046e954 100644 --- a/Habitica/res/layout/activity_main.xml +++ b/Habitica/res/layout/activity_main.xml @@ -57,7 +57,9 @@ style="@style/Toolbar.Modern" android:background="?attr/headerBackgroundColor" app:layout_collapseMode="pin" - app:popupTheme="@style/Theme.AppCompat.DayNight"> + app:popupTheme="@style/Theme.AppCompat.DayNight" + app:contentInsetStart="0dp" + app:contentInsetStartWithNavigation="0dp"> + tools:text="Habitica" + android:background="@drawable/teams_title_bg" + android:paddingHorizontal="@dimen/spacing_large" + android:paddingVertical="1dp" + /> diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt index ea676cfa0..201b3bbaa 100755 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt @@ -219,7 +219,9 @@ open class MainActivity : BaseActivity(), SnackbarActivity { } private fun updateToolbarTitle(destination: NavDestination, arguments: Bundle?) { - viewModel.getToolbarTitle(destination.id, destination.label, arguments?.getString("type")) { title = it } + viewModel.getToolbarTitle(destination.id, destination.label, arguments?.getString("type")) { + title = it + } drawerFragment?.setSelection(destination.id, null, false) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailFragment.kt index a788545c1..ae6aaae2b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailFragment.kt @@ -37,8 +37,8 @@ import com.habitrpg.android.habitica.ui.viewHolders.tasks.TodoViewHolder import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog -import javax.inject.Inject import retrofit2.HttpException +import javax.inject.Inject class ChallengeDetailFragment : BaseMainFragment() { @@ -168,6 +168,7 @@ class ChallengeDetailFragment : BaseMainFragment } override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + super.onCreateOptionsMenu(menu, inflater) inflater.inflate(R.menu.menu_challenge_details, menu) val editMenuItem = menu.findItem(R.id.action_edit) editMenuItem?.isVisible = isCreator diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengesOverviewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengesOverviewFragment.kt index 017e98ce4..c501142f5 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengesOverviewFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengesOverviewFragment.kt @@ -71,6 +71,7 @@ class ChallengesOverviewFragment : BaseMainFragment() } override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + super.onCreateOptionsMenu(menu, inflater) inflater.inflate(R.menu.menu_list_challenges, menu) @Suppress("Deprecation") diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildOverviewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildOverviewFragment.kt index 517bd239b..4fd32b39c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildOverviewFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildOverviewFragment.kt @@ -59,6 +59,7 @@ class GuildOverviewFragment : BaseMainFragment(), Sear } override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + super.onCreateOptionsMenu(menu, inflater) inflater.inflate(R.menu.menu_public_guild, menu) val searchItem = menu.findItem(R.id.action_search) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.kt index 6cbee702c..0f5d48b8e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.kt @@ -99,6 +99,7 @@ class PartyFragment : BaseMainFragment() { } override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + super.onCreateOptionsMenu(menu, inflater) val group = viewModel.getGroupData().value if (viewModel.isLeader) { inflater.inflate(R.menu.menu_party_admin, menu) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragment.kt index 48843d641..7e1836842 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragment.kt @@ -138,6 +138,7 @@ open class TaskRecyclerViewFragment : BaseFragment(), SearchView.O val args = TasksFragmentArgs.fromBundle(it) val taskTypeValue = args.taskType if (args.ownerID?.isNotBlank() == true) { + viewModel.canSwitchOwners.value = false viewModel.ownerID.value = args.ownerID ?: viewModel.userID } else { + viewModel.canSwitchOwners.value = viewModel.appConfigManager.enableTeamBoards() viewModel.ownerID.value = viewModel.userID } if (taskTypeValue?.isNotBlank() == true) { @@ -99,6 +101,10 @@ class TasksFragment : BaseMainFragment(), SearchView.O viewModel.ownerID.observe(viewLifecycleOwner) { updateBoardDisplay() } + viewModel.canSwitchOwners.observe(viewLifecycleOwner) { + isTitleInteractive = it ?: false + updateToolbarInteractivity() + } } override fun onResume() { @@ -131,6 +137,7 @@ class TasksFragment : BaseMainFragment(), SearchView.O } override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + super.onCreateOptionsMenu(menu, inflater) if (viewModel.isPersonalBoard) { inflater.inflate(R.menu.menu_main_activity, menu) } else { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TasksViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TasksViewModel.kt index 359969698..27c7c4120 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TasksViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TasksViewModel.kt @@ -46,7 +46,7 @@ class TasksViewModel: BaseViewModel() { lateinit var sharedPreferences: SharedPreferences private var owners: List> = listOf() - + var canSwitchOwners = MutableLiveData() val ownerID: MutableLiveData by lazy { MutableLiveData() } @@ -63,7 +63,15 @@ class TasksViewModel: BaseViewModel() { init { compositeSubscription.add(userRepository.getTeamPlans() .subscribe({ - owners = listOf(Pair(userID ?: "", userViewModel.displayName)) + it.map { Pair(it.id, it.summary) } + owners = listOf(Pair(userID ?: "", userViewModel.displayName)) + it.map { + Pair( + it.id, + it.summary + ) + } + if (owners.size > 1 && canSwitchOwners.value != false) { + canSwitchOwners.value = owners.size > 1 + } }, RxErrorHandler.handleEmptyError())) compositeSubscription.add(userRepository.retrieveTeamPlans().subscribe({}, RxErrorHandler.handleEmptyError())) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/navigation/HabiticaBottomNavigationView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/navigation/HabiticaBottomNavigationView.kt index 3dc5d513a..55d90c6cb 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/navigation/HabiticaBottomNavigationView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/navigation/HabiticaBottomNavigationView.kt @@ -64,16 +64,37 @@ class HabiticaBottomNavigationView @JvmOverloads constructor( var canAddTasks = true set(value) { + if (field == value) return field = value + val animator = ObjectAnimator.ofFloat(0f, 1.0f) if (field) { - binding.cutoutWrapper.visibility = View.VISIBLE + val params = binding.cutoutFill.layoutParams + params.height = binding.cutoutBackground.height + binding.cutoutFill.layoutParams = params + animator.addUpdateListener { + val reversed = 1.0f - it.animatedFraction + binding.cutoutFill.translationY = -(reversed) * binding.cutoutBackground.height + } binding.cutoutSpace.visibility = View.VISIBLE - binding.addButtonBackground.visibility = View.VISIBLE + binding.addButtonBackground.animate() + .translationY(0f) + .alpha(1f) + .setDuration(200) } else { - binding.cutoutWrapper.visibility = View.GONE - binding.cutoutSpace.visibility = View.GONE - binding.addButtonBackground.visibility = View.GONE + val params = binding.cutoutFill.layoutParams + params.height = binding.cutoutBackground.height + binding.cutoutFill.layoutParams = params + animator.addUpdateListener { + binding.cutoutFill.translationY = -it.animatedFraction * (binding.cutoutBackground.height) + } + binding.cutoutSpace.visibility = View.INVISIBLE + binding.addButtonBackground.animate() + .translationY(-binding.addButtonBackground.height.toFloat()/2) + .alpha(0.0f) + .setDuration(200) } + animator.duration = 200 + animator.start() } val barHeight: Int