mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-04-14 19:56:32 +00:00
Teams support fixes
This commit is contained in:
parent
dbf92e030e
commit
f32bac7ec6
13 changed files with 68 additions and 13 deletions
|
|
@ -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
|
||||
|
|
|
|||
6
Habitica/res/drawable/teams_title_bg.xml
Normal file
6
Habitica/res/drawable/teams_title_bg.xml
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="@color/window_background" />
|
||||
<corners android:radius="20dp" />
|
||||
<stroke android:color="?colorAccent" android:width="2dp" />
|
||||
</shape>
|
||||
|
|
@ -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">
|
||||
<RelativeLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
|
|
@ -71,10 +73,13 @@
|
|||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:singleLine="true"
|
||||
android:layout_toStartOf="@id/toolbar_accessory_container"
|
||||
android:layout_alignParentStart="true"
|
||||
style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
|
||||
tools:text="Habitica" />
|
||||
tools:text="Habitica"
|
||||
android:background="@drawable/teams_title_bg"
|
||||
android:paddingHorizontal="@dimen/spacing_large"
|
||||
android:paddingVertical="1dp"
|
||||
/>
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/toolbar_accessory_container"
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@
|
|||
android:src="@drawable/bottom_navigation_inset"
|
||||
android:layout_gravity="top"/>
|
||||
<View
|
||||
android:id="@+id/cutout_fill"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?barColor" />
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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<FragmentChallengeDetailBinding>() {
|
||||
|
||||
|
|
@ -168,6 +168,7 @@ class ChallengeDetailFragment : BaseMainFragment<FragmentChallengeDetailBinding>
|
|||
}
|
||||
|
||||
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
|
||||
|
|
|
|||
|
|
@ -71,6 +71,7 @@ class ChallengesOverviewFragment : BaseMainFragment<FragmentViewpagerBinding>()
|
|||
}
|
||||
|
||||
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
|
||||
super.onCreateOptionsMenu(menu, inflater)
|
||||
inflater.inflate(R.menu.menu_list_challenges, menu)
|
||||
|
||||
@Suppress("Deprecation")
|
||||
|
|
|
|||
|
|
@ -59,6 +59,7 @@ class GuildOverviewFragment : BaseMainFragment<FragmentViewpagerBinding>(), 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)
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@ class PartyFragment : BaseMainFragment<FragmentViewpagerBinding>() {
|
|||
}
|
||||
|
||||
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)
|
||||
|
|
|
|||
|
|
@ -138,6 +138,7 @@ open class TaskRecyclerViewFragment : BaseFragment<FragmentRefreshRecyclerviewBi
|
|||
viewModel?.ownerID?.observe(viewLifecycleOwner) {
|
||||
canEditTasks = viewModel?.isPersonalBoard ?: true
|
||||
canScoreTaks = viewModel?.isPersonalBoard ?: true
|
||||
recyclerAdapter?.canScoreTasks = canScoreTaks
|
||||
updateTaskSubscription(it)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -79,8 +79,10 @@ class TasksFragment : BaseMainFragment<FragmentViewpagerBinding>(), 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<FragmentViewpagerBinding>(), 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<FragmentViewpagerBinding>(), 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 {
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ class TasksViewModel: BaseViewModel() {
|
|||
lateinit var sharedPreferences: SharedPreferences
|
||||
|
||||
private var owners: List<Pair<String, CharSequence>> = listOf()
|
||||
|
||||
var canSwitchOwners = MutableLiveData<Boolean?>()
|
||||
val ownerID: MutableLiveData<String?> 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()))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue