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