Prepare for new menu

This commit is contained in:
Phillip Thelen 2022-10-12 17:50:02 +02:00
parent 5ae7f9bbb7
commit e3f66e57df
11 changed files with 18 additions and 121 deletions

View file

@ -147,7 +147,7 @@ android {
}
defaultConfig {
minSdkVersion 21
minSdkVersion min_sdk
applicationId "com.habitrpg.android.habitica"
vectorDrawables.useSupportLibrary = true
buildConfigField "String", "STORE", "\"google\""

View file

@ -1,13 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
style="@style/Body1"
<Space xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="22dp"
android:gravity="center_vertical"
android:paddingStart="@dimen/drawer_padding"
android:paddingEnd="@dimen/drawer_padding"
android:textAllCaps="true"
android:textColor="@color/white"
android:textSize="12sp"
tools:text="Social" />
android:layout_height="30dp" />

View file

@ -4,16 +4,6 @@
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_nav"
app:startDestination="@id/tasksFragment">
<fragment
android:id="@+id/equipmentOverviewFragment"
android:name="com.habitrpg.android.habitica.ui.fragments.inventory.equipment.EquipmentOverviewFragment"
android:label="@string/sidebar_equipment" >
<deepLink app:uri="habitica.com/inventory/equipment" />
<action
android:id="@+id/openEquipmentDetail"
app:destination="@id/equipmentDetailFragment" />
</fragment>
<fragment
android:id="@+id/equipmentDetailFragment"
android:name="com.habitrpg.android.habitica.ui.fragments.inventory.equipment.EquipmentDetailFragment"
@ -121,8 +111,8 @@
android:id="@+id/openAvatarDetail"
app:destination="@id/avatarCustomizationFragment" />
<action
android:id="@+id/openAvatarEquipment"
app:destination="@id/avatarEquipmentFragment" />
android:id="@+id/openEquipmentDetail"
app:destination="@id/equipmentDetailFragment" />
</fragment>
<fragment
android:id="@+id/itemsFragment"
@ -298,17 +288,6 @@
android:name="category"
app:argType="string" />
</fragment>
<fragment
android:id="@+id/avatarEquipmentFragment"
android:name="com.habitrpg.android.habitica.ui.fragments.inventory.customization.AvatarEquipmentFragment"
android:label="@string/sidebar_avatar" >
<argument
android:name="type"
app:argType="string" />
<argument
android:name="category"
app:argType="string" />
</fragment>
<activity
android:id="@+id/prefsActivity"
android:name="com.habitrpg.android.habitica.ui.activities.PrefsActivity"

View file

@ -52,10 +52,8 @@ import com.habitrpg.android.habitica.ui.fragments.PromoInfoFragment;
import com.habitrpg.android.habitica.ui.fragments.PromoWebFragment;
import com.habitrpg.android.habitica.ui.fragments.StatsFragment;
import com.habitrpg.android.habitica.ui.fragments.inventory.customization.AvatarCustomizationFragment;
import com.habitrpg.android.habitica.ui.fragments.inventory.customization.AvatarEquipmentFragment;
import com.habitrpg.android.habitica.ui.fragments.inventory.customization.AvatarOverviewFragment;
import com.habitrpg.android.habitica.ui.fragments.inventory.equipment.EquipmentDetailFragment;
import com.habitrpg.android.habitica.ui.fragments.inventory.equipment.EquipmentOverviewFragment;
import com.habitrpg.android.habitica.ui.fragments.inventory.items.ItemDialogFragment;
import com.habitrpg.android.habitica.ui.fragments.inventory.items.ItemRecyclerFragment;
import com.habitrpg.android.habitica.ui.fragments.inventory.items.ItemsFragment;
@ -165,8 +163,6 @@ public interface UserComponent {
void inject(EquipmentDetailFragment equipmentDetailFragment);
void inject(EquipmentOverviewFragment equipmentOverviewFragment);
void inject(ItemRecyclerFragment itemRecyclerFragment);
void inject(ItemsFragment itemsFragment);
@ -333,8 +329,6 @@ public interface UserComponent {
void inject(BugFixFragment bugFixFragment);
void inject(AvatarEquipmentFragment avatarEquipmentFragment);
void inject(FAQDetailFragment faqDetailFragment);
void inject(AdventureGuideActivity adventureGuideFragment);

View file

@ -4,19 +4,16 @@ import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.core.os.bundleOf
import androidx.recyclerview.widget.RecyclerView
import com.habitrpg.android.habitica.R
import com.habitrpg.common.habitica.extensions.dpToPx
import com.habitrpg.android.habitica.extensions.inflate
import com.habitrpg.android.habitica.models.TeamPlan
import com.habitrpg.android.habitica.models.promotions.HabiticaPromotion
import com.habitrpg.android.habitica.ui.fragments.NavigationDrawerFragment
import com.habitrpg.android.habitica.ui.menu.HabiticaDrawerItem
import com.habitrpg.android.habitica.ui.views.promo.PromoMenuView
import com.habitrpg.android.habitica.ui.views.promo.PromoMenuViewHolder
import com.habitrpg.android.habitica.ui.views.promo.SubscriptionBuyGemsPromoView
import com.habitrpg.android.habitica.ui.views.promo.SubscriptionBuyGemsPromoViewHolder
import com.habitrpg.common.habitica.extensions.dpToPx
import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.subjects.PublishSubject
@ -29,19 +26,6 @@ class NavigationDrawerAdapter(tintColor: Int, backgroundTintColor: Int) : Recycl
notifyDataSetChanged()
}
var backgroundTintColor: Int = backgroundTintColor
set(value) {
field = value
for (item in items) {
if (item.isHeader) {
val visiblePosition = getVisibleItemPosition(item.identifier)
if (visiblePosition >= 0) {
notifyItemChanged(visiblePosition)
}
}
}
}
internal val items: MutableList<HabiticaDrawerItem> = ArrayList()
var selectedItem: Int? = null
set(value) {
@ -77,32 +61,6 @@ class NavigationDrawerAdapter(tintColor: Int, backgroundTintColor: Int) : Recycl
notifyDataSetChanged()
}
fun setTeams(teams: List<TeamPlan>) {
var teamHeaderIndex = -1
var nextHeaderIndex = -1
for ((index, item) in items.withIndex()) {
if (teamHeaderIndex != -1 && item.isHeader) {
nextHeaderIndex = index
break
} else if (item.identifier == NavigationDrawerFragment.SIDEBAR_TEAMS) {
teamHeaderIndex = index
}
}
if (teamHeaderIndex != -1 && nextHeaderIndex != -1) {
for (x in nextHeaderIndex - 1 downTo teamHeaderIndex + 1) {
items.removeAt(x)
notifyItemRemoved(x)
}
for ((index, team) in teams.withIndex()) {
val item = HabiticaDrawerItem(R.id.tasksFragment, team.id, team.summary)
item.bundle = bundleOf(Pair("ownerID", team.id))
val newIndex = teamHeaderIndex + index + 1
items.add(newIndex, item)
notifyItemInserted(newIndex)
}
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val drawerItem = getItem(position)
when {
@ -112,10 +70,6 @@ class NavigationDrawerAdapter(tintColor: Int, backgroundTintColor: Int) : Recycl
itemHolder?.bind(drawerItem, drawerItem.transitionId == selectedItem)
itemHolder?.itemView?.setOnClickListener { itemSelectedEvents.onNext(drawerItem) }
}
getItemViewType(position) == 1 -> {
(holder as? SectionHeaderViewHolder)?.backgroundTintColor = backgroundTintColor
(holder as? SectionHeaderViewHolder)?.bind(drawerItem)
}
getItemViewType(position) == 5 -> {
activePromo?.let { promo ->
(holder as? PromoMenuViewHolder)?.bind(promo)
@ -216,10 +170,5 @@ class NavigationDrawerAdapter(tintColor: Int, backgroundTintColor: Int) : Recycl
class SectionHeaderViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var backgroundTintColor: Int = 0
fun bind(drawerItem: HabiticaDrawerItem) {
(itemView as? TextView)?.text = drawerItem.text
itemView.setBackgroundColor(backgroundTintColor)
}
}
}

View file

@ -52,7 +52,6 @@ import io.reactivex.rxjava3.disposables.CompositeDisposable
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.launch
import java.util.Calendar
import java.util.Date
@ -176,19 +175,6 @@ class NavigationDrawerFragment : DialogFragment() {
)
)
if (configManager.enableTeamBoards()) {
lifecycleScope.launch(ExceptionHandler.coroutine()) {
userRepository.getTeamPlans()
.distinctUntilChanged()
.collect {
getItemWithIdentifier(SIDEBAR_TEAMS)?.isVisible = it.isNotEmpty()
adapter.setTeams(it)
}
}
} else {
getItemWithIdentifier(SIDEBAR_TEAMS)?.isVisible = false
}
userViewModel.user.observe(viewLifecycleOwner) {
if (it != null) {
updateUser(it)
@ -356,9 +342,7 @@ class NavigationDrawerFragment : DialogFragment() {
items.add(HabiticaDrawerItem(R.id.statsFragment, SIDEBAR_STATS, context.getString(R.string.sidebar_stats)))
items.add(HabiticaDrawerItem(R.id.achievementsFragment, SIDEBAR_ACHIEVEMENTS, context.getString(R.string.sidebar_achievements)))
items.add(HabiticaDrawerItem(0, SIDEBAR_TEAMS, context.getString(R.string.sidebar_teams), true))
items.add(HabiticaDrawerItem(0, SIDEBAR_INVENTORY, context.getString(R.string.sidebar_shops), true))
items.add(HabiticaDrawerItem(0, SIDEBAR_INVENTORY, context.getString(R.string.sidebar_shops), isHeader = true))
items.add(HabiticaDrawerItem(R.id.marketFragment, SIDEBAR_SHOPS_MARKET, context.getString(R.string.market)))
items.add(HabiticaDrawerItem(R.id.questShopFragment, SIDEBAR_SHOPS_QUEST, context.getString(R.string.questShop)))
val seasonalShopEntry = HabiticaDrawerItem(R.id.seasonalShopFragment, SIDEBAR_SHOPS_SEASONAL, context.getString(R.string.seasonalShop))
@ -366,20 +350,20 @@ class NavigationDrawerFragment : DialogFragment() {
items.add(seasonalShopEntry)
items.add(HabiticaDrawerItem(R.id.timeTravelersShopFragment, SIDEBAR_SHOPS_TIMETRAVEL, context.getString(R.string.timeTravelers)))
items.add(HabiticaDrawerItem(0, SIDEBAR_INVENTORY, context.getString(R.string.sidebar_section_inventory), true))
items.add(HabiticaDrawerItem(0, SIDEBAR_INVENTORY, context.getString(R.string.sidebar_section_inventory), isHeader = true))
items.add(HabiticaDrawerItem(R.id.avatarOverviewFragment, SIDEBAR_AVATAR, context.getString(R.string.sidebar_avatar_equipment)))
items.add(HabiticaDrawerItem(R.id.itemsFragment, SIDEBAR_ITEMS, context.getString(R.string.sidebar_items)))
items.add(HabiticaDrawerItem(R.id.stableFragment, SIDEBAR_STABLE, context.getString(R.string.sidebar_stable)))
items.add(HabiticaDrawerItem(R.id.gemPurchaseActivity, SIDEBAR_GEMS, context.getString(R.string.sidebar_gems)))
items.add(HabiticaDrawerItem(R.id.subscriptionPurchaseActivity, SIDEBAR_SUBSCRIPTION, context.getString(R.string.sidebar_subscription)))
items.add(HabiticaDrawerItem(0, SIDEBAR_SOCIAL, context.getString(R.string.sidebar_section_social), true))
items.add(HabiticaDrawerItem(0, SIDEBAR_SOCIAL, context.getString(R.string.sidebar_section_social), isHeader = true))
items.add(HabiticaDrawerItem(R.id.partyFragment, SIDEBAR_PARTY, context.getString(R.string.sidebar_party)))
items.add(HabiticaDrawerItem(R.id.tavernFragment, SIDEBAR_TAVERN, context.getString(R.string.sidebar_tavern)))
items.add(HabiticaDrawerItem(R.id.guildOverviewFragment, SIDEBAR_GUILDS, context.getString(R.string.sidebar_guilds)))
items.add(HabiticaDrawerItem(R.id.challengesOverviewFragment, SIDEBAR_CHALLENGES, context.getString(R.string.sidebar_challenges)))
items.add(HabiticaDrawerItem(0, SIDEBAR_ABOUT_HEADER, context.getString(R.string.sidebar_about), true))
items.add(HabiticaDrawerItem(0, SIDEBAR_ABOUT_HEADER, context.getString(R.string.sidebar_about), isHeader = true))
items.add(HabiticaDrawerItem(R.id.newsFragment, SIDEBAR_NEWS, context.getString(R.string.sidebar_news)))
items.add(HabiticaDrawerItem(R.id.supportMainFragment, SIDEBAR_HELP, context.getString(R.string.sidebar_help)))
items.add(HabiticaDrawerItem(R.id.aboutFragment, SIDEBAR_ABOUT, context.getString(R.string.sidebar_about)))
@ -634,7 +618,6 @@ class NavigationDrawerFragment : DialogFragment() {
const val SIDEBAR_SKILLS = "skills"
const val SIDEBAR_STATS = "stats"
const val SIDEBAR_ACHIEVEMENTS = "achievements"
const val SIDEBAR_TEAMS = "teams"
const val SIDEBAR_SOCIAL = "social"
const val SIDEBAR_TAVERN = "tavern"
const val SIDEBAR_PARTY = "party"

View file

@ -26,7 +26,6 @@ import com.habitrpg.android.habitica.databinding.FragmentComposeScrollingBinding
import com.habitrpg.android.habitica.helpers.ExceptionHandler
import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
import com.habitrpg.android.habitica.ui.fragments.inventory.equipment.EquipmentOverviewFragmentDirections
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
import com.habitrpg.android.habitica.ui.views.AvatarCustomizationOverviewView
@ -83,7 +82,7 @@ class AvatarOverviewFragment : BaseMainFragment<FragmentComposeScrollingBinding>
}
private fun displayEquipmentFragment(type: String, equipped: String?, isCostume: Boolean = false) {
MainNavigationController.navigate(EquipmentOverviewFragmentDirections.openEquipmentDetail(type, isCostume, equipped ?: ""))
MainNavigationController.navigate(AvatarOverviewFragmentDirections.openEquipmentDetail(type, isCostume, equipped ?: ""))
}
override fun onItemSelected(parent: AdapterView<*>, view: View?, position: Int, id: Long) {

View file

@ -8,6 +8,7 @@ data class HabiticaDrawerItem(
var transitionId: Int,
val identifier: String,
val text: String,
val icon: Drawable? = null,
val isHeader: Boolean = false
) {
constructor(transitionId: Int, identifier: String) : this(transitionId, identifier, "")

View file

@ -2,6 +2,7 @@
buildscript {
ext {
min_sdk = 21
target_sdk = 33
app_version_name = ''
app_version_code = 0

View file

@ -4,11 +4,11 @@ plugins {
}
android {
compileSdk 32
compileSdk target_sdk
defaultConfig {
minSdk 21
targetSdk 32
minSdk min_sdk
targetSdkVersion target_sdk
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles "consumer-rules.pro"

View file

@ -54,11 +54,11 @@ kotlin {
}
android {
compileSdk = 32
compileSdk = 33
sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
defaultConfig {
minSdk = 21
targetSdk = 32
targetSdk = 33
}
namespace = "com.habitrpg.shared.habitica"
}