mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-04-14 19:56:32 +00:00
Build new guild detail screen
This commit is contained in:
parent
42432d369d
commit
12002b47cf
17 changed files with 336 additions and 80 deletions
|
|
@ -153,7 +153,7 @@ android {
|
|||
buildConfigField "String", "TESTING_LEVEL", "\"production\""
|
||||
multiDexEnabled true
|
||||
|
||||
versionCode 2099
|
||||
versionCode 2101
|
||||
versionName "1.9"
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="36dp"
|
||||
android:id="@+id/subscribeButton"
|
||||
style="@style/Button.Purple.Small"
|
||||
style="@style/HabiticaButton.Purple.Small"
|
||||
android:textAllCaps="false"
|
||||
android:layout_marginTop="8dp"/>
|
||||
</LinearLayout>
|
||||
|
|
|
|||
|
|
@ -55,7 +55,8 @@
|
|||
android:paddingLeft="24dp"
|
||||
android:paddingRight="24dp"
|
||||
android:paddingBottom="25dp"
|
||||
android:layout_marginBottom="0dp">
|
||||
android:layout_marginBottom="0dp"
|
||||
android:focusableInTouchMode="true">
|
||||
<TextView
|
||||
android:id="@+id/title_text_view"
|
||||
android:layout_width="wrap_content"
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@
|
|||
android:layout_gravity="center"
|
||||
android:text="@string/visit_habitica_website"
|
||||
android:layout_marginBottom="50dp"
|
||||
style="@style/Button.Purple"
|
||||
style="@style/HabiticaButton.Purple"
|
||||
android:visibility="gone" />
|
||||
<LinearLayout
|
||||
android:id="@+id/gemPurchaseOptions"
|
||||
|
|
|
|||
112
Habitica/res/layout/fragment_guild_detail.xml
Normal file
112
Habitica/res/layout/fragment_guild_detail.xml
Normal file
|
|
@ -0,0 +1,112 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/refreshLayout"
|
||||
android:background="@color/gray_700">
|
||||
<androidx.core.widget.NestedScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/gray_700">
|
||||
<com.habitrpg.android.habitica.ui.views.PaddedLinearLayout
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/gray_700">
|
||||
<TextView
|
||||
android:id="@+id/title_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/Title1"
|
||||
tools:text="Awesome Party"
|
||||
android:gravity="center"
|
||||
android:layout_margin="@dimen/spacing_large" />
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:background="@color/white"
|
||||
android:showDividers="beginning|end|middle"
|
||||
android:divider="@drawable/vertical_divider">
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingStart="@dimen/spacing_large"
|
||||
android:paddingEnd="@dimen/spacing_large"
|
||||
android:paddingTop="12dp"
|
||||
android:paddingBottom="12dp"
|
||||
android:orientation="horizontal">
|
||||
<Button
|
||||
android:id="@+id/invite_button"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_height="@dimen/button_height"
|
||||
android:text="@string/invite_to_guild"
|
||||
style="@style/HabiticaButton.Purple"
|
||||
android:layout_marginEnd="17dp" />
|
||||
<Button
|
||||
android:id="@+id/join_button"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_height="@dimen/button_height"
|
||||
android:text="@string/join_guild"
|
||||
style="@style/HabiticaButton.Green"/>
|
||||
</LinearLayout>
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="65dp"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingStart="12dp"
|
||||
android:paddingEnd="12dp">
|
||||
<com.habitrpg.android.habitica.ui.views.RoundedCornerLayout
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp">
|
||||
<com.habitrpg.android.habitica.ui.AvatarView
|
||||
android:id="@+id/leader_avatar_view"
|
||||
android:layout_width="70dp"
|
||||
android:layout_height="70dp"
|
||||
android:layout_gravity="center"/>
|
||||
</com.habitrpg.android.habitica.ui.views.RoundedCornerLayout>
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:gravity="center_vertical">
|
||||
<com.habitrpg.android.habitica.ui.views.social.UsernameLabel
|
||||
android:id="@+id/leader_profile_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
<TextView
|
||||
android:id="@+id/leader_username"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="2dp"/>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
<com.habitrpg.android.habitica.ui.views.CollapsibleSectionView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:title="@string/guild_description"
|
||||
app:identifier="tavernInn">
|
||||
<TextView
|
||||
android:id="@+id/guild_description"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/inn_description"
|
||||
android:layout_marginTop="@dimen/spacing_large" />
|
||||
</com.habitrpg.android.habitica.ui.views.CollapsibleSectionView>
|
||||
</LinearLayout>
|
||||
<Button
|
||||
android:id="@+id/leave_button"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/button_height"
|
||||
android:layout_margin="@dimen/spacing_large"
|
||||
style="@style/HabiticaButton.Red"
|
||||
android:text="@string/leave_party"/>
|
||||
</com.habitrpg.android.habitica.ui.views.PaddedLinearLayout>
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
||||
|
|
@ -223,7 +223,7 @@
|
|||
android:layout_gravity="center"
|
||||
android:text="@string/visit_habitica_website"
|
||||
android:layout_marginBottom="50dp"
|
||||
style="@style/Button.Purple"
|
||||
style="@style/HabiticaButton.Purple"
|
||||
android:visibility="gone" />
|
||||
|
||||
<LinearLayout
|
||||
|
|
@ -270,7 +270,7 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="36dp"
|
||||
android:id="@+id/subscribeButton"
|
||||
style="@style/Button.Purple.Small"
|
||||
style="@style/HabiticaButton.Purple.Small"
|
||||
android:textAllCaps="false"
|
||||
android:layout_marginTop="8dp"/>
|
||||
</LinearLayout>
|
||||
|
|
|
|||
|
|
@ -8,8 +8,7 @@
|
|||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/white"
|
||||
android:paddingBottom="?attr/actionBarSize">
|
||||
android:background="@color/white">
|
||||
<include layout="@layout/shop_header"
|
||||
android:layout_marginBottom="@dimen/spacing_large"
|
||||
android:layout_height="wrap_content"
|
||||
|
|
@ -38,7 +37,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:text="@string/tavern.inn.rest"
|
||||
style="@style/Button.Yellow.Small"/>
|
||||
style="@style/HabiticaButton.Yellow"/>
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
|
|
|||
|
|
@ -1,6 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/material_drawer_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fitsSystemWindows="false" />
|
||||
|
|
@ -148,7 +148,7 @@
|
|||
android:layout_height="32dp"
|
||||
android:text="@string/visit_website"
|
||||
android:layout_gravity="center"
|
||||
style="@style/Button.Purple.Small"/>
|
||||
style="@style/HabiticaButton.Purple.Small"/>
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
|
@ -138,4 +138,5 @@
|
|||
<dimen name="bb_height">65dp</dimen>
|
||||
<dimen name="bb_default_elevation">8dp</dimen>
|
||||
<dimen name="bb_fake_shadow_height">4dp</dimen>
|
||||
<dimen name="button_height">38dp</dimen>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -891,4 +891,7 @@
|
|||
<string name="report_message_title">Report %s for violation:</string>
|
||||
<string name="reason_for_report">Reason for report (optional)</string>
|
||||
<string name="mystery_sets">Mystery Sets</string>
|
||||
<string name="guild_description">Guild Description</string>
|
||||
<string name="invite_to_guild">Invite to Guild</string>
|
||||
<string name="join_guild">Join Guild</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -303,29 +303,12 @@
|
|||
<item name="android:layout_marginRight">16dp</item>
|
||||
</style>
|
||||
|
||||
<style name="Button">
|
||||
<item name="android:paddingLeft">@dimen/button_padding</item>
|
||||
<item name="android:paddingRight">@dimen/button_padding</item>
|
||||
</style>
|
||||
|
||||
<style name="Button.Purple">
|
||||
<style name="HabiticaButton.Purple" parent="HabiticaButton">
|
||||
<item name="android:background">@drawable/rounded_purple_square</item>
|
||||
<item name="android:textColor">@color/white</item>
|
||||
</style>
|
||||
|
||||
<style name="Button.Purple.Small">
|
||||
<item name="android:paddingLeft">@dimen/button_padding_small</item>
|
||||
<item name="android:paddingRight">@dimen/button_padding_small</item>
|
||||
<item name="android:paddingTop">@dimen/button_padding_vertical_small</item>
|
||||
<item name="android:paddingBottom">@dimen/button_padding_vertical_small</item>
|
||||
</style>
|
||||
|
||||
<style name="Button.Yellow">
|
||||
<item name="android:background">@drawable/rounded_yellow_10_square</item>
|
||||
<item name="android:textColor">@color/white</item>
|
||||
</style>
|
||||
|
||||
<style name="Button.Yellow.Small">
|
||||
<style name="HabiticaButton.Purple.Small" parent="HabiticaButton.Purple">
|
||||
<item name="android:paddingLeft">@dimen/button_padding_small</item>
|
||||
<item name="android:paddingRight">@dimen/button_padding_small</item>
|
||||
<item name="android:paddingTop">@dimen/button_padding_vertical_small</item>
|
||||
|
|
@ -395,11 +378,10 @@
|
|||
<item name="android:textAllCaps">false</item>
|
||||
<item name="android:textSize">16sp</item>
|
||||
<item name="android:fontFamily">@string/font_family_medium</item>
|
||||
<item name="android:minHeight">0dp</item>
|
||||
<item name="android:paddingTop">12dp</item>
|
||||
<item name="android:paddingBottom">12dp</item>
|
||||
<item name="android:minHeight">@dimen/button_height</item>
|
||||
<item name="android:shadowColor">@color/transparent</item>
|
||||
<item name="android:textColor">@color/white</item>
|
||||
<item name="android:layout_height">@dimen/button_height</item>
|
||||
</style>
|
||||
|
||||
<style name="HabiticaButton.Gray" parent="HabiticaButton">
|
||||
|
|
@ -428,6 +410,13 @@
|
|||
<item name="android:background">@drawable/layout_rounded_bg_yellow</item>
|
||||
</style>
|
||||
|
||||
<style name="HabiticaButton.Yellow.Small" parent="HabiticaButton.Yellow">
|
||||
<item name="android:paddingLeft">@dimen/button_padding_small</item>
|
||||
<item name="android:paddingRight">@dimen/button_padding_small</item>
|
||||
<item name="android:paddingTop">@dimen/button_padding_vertical_small</item>
|
||||
<item name="android:paddingBottom">@dimen/button_padding_vertical_small</item>
|
||||
</style>
|
||||
|
||||
<style name="CurrencyTextView">
|
||||
<item name="android:textSize">14sp</item>
|
||||
<item name="android:layout_marginLeft">16dp</item>
|
||||
|
|
|
|||
|
|
@ -75,6 +75,7 @@ import com.habitrpg.android.habitica.ui.fragments.skills.SkillsFragment;
|
|||
import com.habitrpg.android.habitica.ui.fragments.social.ChatFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.social.ChatListFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.social.GroupInformationFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.social.GuildDetailFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.social.GuildFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.social.GuildsOverviewFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.social.InboxFragment;
|
||||
|
|
@ -314,4 +315,6 @@ public interface AppComponent {
|
|||
void inject(@NotNull TaskFormActivity taskFormActivity);
|
||||
|
||||
void inject(@NotNull ReportMessageActivity reportMessageActivity);
|
||||
|
||||
void inject(@NotNull GuildDetailFragment guildDetailFragment);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -185,7 +185,7 @@ class AvatarView : View {
|
|||
}
|
||||
|
||||
if (showSleeping && avatar.sleep) {
|
||||
layerMap[AvatarView.LayerType.ZZZ] = "zzz"
|
||||
layerMap[LayerType.ZZZ] = "zzz"
|
||||
}
|
||||
|
||||
return layerMap
|
||||
|
|
@ -201,8 +201,8 @@ class AvatarView : View {
|
|||
}
|
||||
|
||||
@Suppress("ReturnCount")
|
||||
private fun getAvatarLayerMap(avatar: Avatar, substitutions: Map<String, Map<String, String>>): EnumMap<AvatarView.LayerType, String> {
|
||||
val layerMap = EnumMap<AvatarView.LayerType, String>(AvatarView.LayerType::class.java)
|
||||
private fun getAvatarLayerMap(avatar: Avatar, substitutions: Map<String, Map<String, String>>): EnumMap<LayerType, String> {
|
||||
val layerMap = EnumMap<LayerType, String>(LayerType::class.java)
|
||||
|
||||
if (!avatar.isValid) {
|
||||
return layerMap
|
||||
|
|
@ -221,86 +221,86 @@ class AvatarView : View {
|
|||
val buffs = avatar.stats?.buffs
|
||||
|
||||
if (buffs?.snowball == true) {
|
||||
layerMap[AvatarView.LayerType.VISUAL_BUFF] = "snowman"
|
||||
layerMap[LayerType.VISUAL_BUFF] = "snowman"
|
||||
hasVisualBuffs = true
|
||||
}
|
||||
|
||||
if (buffs?.seafoam == true) {
|
||||
layerMap[AvatarView.LayerType.VISUAL_BUFF] = "seafoam_star"
|
||||
layerMap[LayerType.VISUAL_BUFF] = "seafoam_star"
|
||||
hasVisualBuffs = true
|
||||
}
|
||||
|
||||
if (buffs?.shinySeed == true) {
|
||||
layerMap[AvatarView.LayerType.VISUAL_BUFF] = "avatar_floral_" + avatar.stats?.habitClass
|
||||
layerMap[LayerType.VISUAL_BUFF] = "avatar_floral_" + avatar.stats?.habitClass
|
||||
hasVisualBuffs = true
|
||||
}
|
||||
|
||||
if (buffs?.spookySparkles == true) {
|
||||
layerMap[AvatarView.LayerType.VISUAL_BUFF] = "ghost"
|
||||
layerMap[LayerType.VISUAL_BUFF] = "ghost"
|
||||
hasVisualBuffs = true
|
||||
}
|
||||
}
|
||||
|
||||
val substitutedVisualBuff = substitutions["visualBuff"]?.get("full")
|
||||
if (substitutedVisualBuff != null) {
|
||||
layerMap[AvatarView.LayerType.VISUAL_BUFF] = substitutedVisualBuff
|
||||
layerMap[LayerType.VISUAL_BUFF] = substitutedVisualBuff
|
||||
hasVisualBuffs = true
|
||||
}
|
||||
|
||||
if (!hasVisualBuffs) {
|
||||
if (!TextUtils.isEmpty(prefs.chair)) {
|
||||
layerMap[AvatarView.LayerType.CHAIR] = prefs.chair
|
||||
layerMap[LayerType.CHAIR] = prefs.chair
|
||||
}
|
||||
|
||||
if (outfit != null) {
|
||||
if (!TextUtils.isEmpty(outfit.back) && "back_base_0" != outfit.back) {
|
||||
layerMap[AvatarView.LayerType.BACK] = outfit.back
|
||||
layerMap[LayerType.BACK] = outfit.back
|
||||
}
|
||||
if (outfit.isAvailable(outfit.armor)) {
|
||||
layerMap[AvatarView.LayerType.ARMOR] = prefs.size + "_" + outfit.armor
|
||||
layerMap[LayerType.ARMOR] = prefs.size + "_" + outfit.armor
|
||||
}
|
||||
if (outfit.isAvailable(outfit.body)) {
|
||||
layerMap[AvatarView.LayerType.BODY] = outfit.body
|
||||
layerMap[LayerType.BODY] = outfit.body
|
||||
}
|
||||
if (outfit.isAvailable(outfit.eyeWear)) {
|
||||
layerMap[AvatarView.LayerType.EYEWEAR] = outfit.eyeWear
|
||||
layerMap[LayerType.EYEWEAR] = outfit.eyeWear
|
||||
}
|
||||
if (outfit.isAvailable(outfit.head)) {
|
||||
layerMap[AvatarView.LayerType.HEAD] = outfit.head
|
||||
layerMap[LayerType.HEAD] = outfit.head
|
||||
}
|
||||
if (outfit.isAvailable(outfit.headAccessory)) {
|
||||
layerMap[AvatarView.LayerType.HEAD_ACCESSORY] = outfit.headAccessory
|
||||
layerMap[LayerType.HEAD_ACCESSORY] = outfit.headAccessory
|
||||
}
|
||||
if (outfit.isAvailable(outfit.shield)) {
|
||||
layerMap[AvatarView.LayerType.SHIELD] = outfit.shield
|
||||
layerMap[LayerType.SHIELD] = outfit.shield
|
||||
}
|
||||
if (outfit.isAvailable(outfit.weapon)) {
|
||||
layerMap[AvatarView.LayerType.WEAPON] = outfit.weapon
|
||||
layerMap[LayerType.WEAPON] = outfit.weapon
|
||||
}
|
||||
}
|
||||
|
||||
layerMap[AvatarView.LayerType.SKIN] = "skin_" + prefs.skin + if (prefs.sleep) "_sleep" else ""
|
||||
layerMap[AvatarView.LayerType.SHIRT] = prefs.size + "_shirt_" + prefs.shirt
|
||||
layerMap[AvatarView.LayerType.HEAD_0] = "head_0"
|
||||
layerMap[LayerType.SKIN] = "skin_" + prefs.skin + if (prefs.sleep) "_sleep" else ""
|
||||
layerMap[LayerType.SHIRT] = prefs.size + "_shirt_" + prefs.shirt
|
||||
layerMap[LayerType.HEAD_0] = "head_0"
|
||||
|
||||
val hair = prefs.hair
|
||||
if (hair != null) {
|
||||
val hairColor = hair.color
|
||||
|
||||
if (hair.isAvailable(hair.base)) {
|
||||
layerMap[AvatarView.LayerType.HAIR_BASE] = "hair_base_" + hair.base + "_" + hairColor
|
||||
layerMap[LayerType.HAIR_BASE] = "hair_base_" + hair.base + "_" + hairColor
|
||||
}
|
||||
if (hair.isAvailable(hair.bangs)) {
|
||||
layerMap[AvatarView.LayerType.HAIR_BANGS] = "hair_bangs_" + hair.bangs + "_" + hairColor
|
||||
layerMap[LayerType.HAIR_BANGS] = "hair_bangs_" + hair.bangs + "_" + hairColor
|
||||
}
|
||||
if (hair.isAvailable(hair.mustache)) {
|
||||
layerMap[AvatarView.LayerType.HAIR_MUSTACHE] = "hair_mustache_" + hair.mustache + "_" + hairColor
|
||||
layerMap[LayerType.HAIR_MUSTACHE] = "hair_mustache_" + hair.mustache + "_" + hairColor
|
||||
}
|
||||
if (hair.isAvailable(hair.beard)) {
|
||||
layerMap[AvatarView.LayerType.HAIR_BEARD] = "hair_beard_" + hair.beard + "_" + hairColor
|
||||
layerMap[LayerType.HAIR_BEARD] = "hair_beard_" + hair.beard + "_" + hairColor
|
||||
}
|
||||
if (hair.isAvailable(hair.flower)) {
|
||||
layerMap[AvatarView.LayerType.HAIR_FLOWER] = "hair_flower_" + hair.flower
|
||||
layerMap[LayerType.HAIR_FLOWER] = "hair_flower_" + hair.flower
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
|
@ -308,7 +308,7 @@ class AvatarView : View {
|
|||
|
||||
// Show flower all the time!
|
||||
if (hair != null && hair.isAvailable(hair.flower)) {
|
||||
layerMap[AvatarView.LayerType.HAIR_FLOWER] = "hair_flower_" + hair.flower
|
||||
layerMap[LayerType.HAIR_FLOWER] = "hair_flower_" + hair.flower
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -341,11 +341,11 @@ class AvatarView : View {
|
|||
// otherwise lookup default layer type based offset
|
||||
if (offset == null) {
|
||||
when (layerType) {
|
||||
AvatarView.LayerType.BACKGROUND -> if (!(showMount || showPet)) {
|
||||
LayerType.BACKGROUND -> if (!(showMount || showPet)) {
|
||||
offset = PointF(-25.0f, 0.0f) // compact hero box
|
||||
}
|
||||
AvatarView.LayerType.MOUNT_BODY, AvatarView.LayerType.MOUNT_HEAD -> offset = PointF(25.0f, 18.0f) // full hero box
|
||||
AvatarView.LayerType.CHAIR, AvatarView.LayerType.BACK, AvatarView.LayerType.SKIN, AvatarView.LayerType.SHIRT, AvatarView.LayerType.ARMOR, AvatarView.LayerType.BODY, AvatarView.LayerType.HEAD_0, AvatarView.LayerType.HAIR_BASE, AvatarView.LayerType.HAIR_BANGS, AvatarView.LayerType.HAIR_MUSTACHE, AvatarView.LayerType.HAIR_BEARD, AvatarView.LayerType.EYEWEAR, AvatarView.LayerType.VISUAL_BUFF, AvatarView.LayerType.HEAD, AvatarView.LayerType.HEAD_ACCESSORY, AvatarView.LayerType.HAIR_FLOWER, AvatarView.LayerType.SHIELD, AvatarView.LayerType.WEAPON, AvatarView.LayerType.ZZZ -> if (showMount || showPet) {
|
||||
LayerType.MOUNT_BODY, LayerType.MOUNT_HEAD -> offset = PointF(25.0f, 18.0f) // full hero box
|
||||
LayerType.CHAIR, LayerType.BACK, LayerType.SKIN, LayerType.SHIRT, LayerType.ARMOR, LayerType.BODY, LayerType.HEAD_0, LayerType.HAIR_BASE, LayerType.HAIR_BANGS, LayerType.HAIR_MUSTACHE, LayerType.HAIR_BEARD, LayerType.EYEWEAR, LayerType.VISUAL_BUFF, LayerType.HEAD, LayerType.HEAD_ACCESSORY, LayerType.HAIR_FLOWER, LayerType.SHIELD, LayerType.WEAPON, LayerType.ZZZ -> if (showMount || showPet) {
|
||||
// full hero box
|
||||
offset = when {
|
||||
hasMount -> if (layerMap[LayerType.MOUNT_HEAD]?.contains("Kangaroo") == true) {
|
||||
|
|
@ -360,7 +360,7 @@ class AvatarView : View {
|
|||
// compact hero box
|
||||
offset = PointF(0.0f, 18.0f)
|
||||
}
|
||||
AvatarView.LayerType.PET -> offset = PointF(0f, (FULL_HERO_RECT.height() - layerImageInfo.height).toFloat())
|
||||
LayerType.PET -> offset = PointF(0f, (FULL_HERO_RECT.height() - layerImageInfo.height).toFloat())
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -384,12 +384,10 @@ class AvatarView : View {
|
|||
}
|
||||
|
||||
private fun getFileName(imageName: String): String {
|
||||
val name = if (FILENAME_MAP.containsKey(imageName)) {
|
||||
FILENAME_MAP[imageName]
|
||||
} else if (imageName.startsWith("handleless")) {
|
||||
"chair_$imageName"
|
||||
} else {
|
||||
imageName
|
||||
val name = when {
|
||||
FILENAME_MAP.containsKey(imageName) -> FILENAME_MAP[imageName]
|
||||
imageName.startsWith("handleless") -> "chair_$imageName"
|
||||
else -> imageName
|
||||
}
|
||||
return name + if (FILEFORMAT_MAP.containsKey(imageName)) {
|
||||
"." + FILEFORMAT_MAP[imageName]
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import android.view.View
|
|||
import android.view.ViewGroup
|
||||
import android.widget.Button
|
||||
import android.widget.TextView
|
||||
import androidx.core.os.bundleOf
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
||||
|
|
@ -106,7 +107,8 @@ class FAQOverviewRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Ada
|
|||
init {
|
||||
val textView = itemView.findViewById<TextView>(R.id.text_view)
|
||||
textView.text = MarkdownParser.parseMarkdown(itemView.context.getString(R.string.need_help_header_description, "[Habitica Help Guild](https://habitica.com/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a)"))
|
||||
textView.setMovementMethod(LinkMovementMethod.getInstance());
|
||||
textView.setOnClickListener { MainNavigationController.navigate(R.id.guildFragment, bundleOf("groupID" to "5481ccf3-5d2d-48a9-a871-70a7380cee5a")) }
|
||||
textView.movementMethod = LinkMovementMethod.getInstance()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,149 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.social
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.text.method.LinkMovementMethod
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.Button
|
||||
import android.widget.TextView
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.components.AppComponent
|
||||
import com.habitrpg.android.habitica.data.SocialRepository
|
||||
import com.habitrpg.android.habitica.data.UserRepository
|
||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.members.Member
|
||||
import com.habitrpg.android.habitica.models.social.Group
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import com.habitrpg.android.habitica.ui.AvatarView
|
||||
import com.habitrpg.android.habitica.ui.activities.GroupFormActivity
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseFragment
|
||||
import com.habitrpg.android.habitica.ui.helpers.MarkdownParser
|
||||
import com.habitrpg.android.habitica.ui.helpers.bindView
|
||||
import com.habitrpg.android.habitica.ui.helpers.resetViews
|
||||
import com.habitrpg.android.habitica.ui.views.social.UsernameLabel
|
||||
import io.reactivex.functions.Consumer
|
||||
import javax.inject.Inject
|
||||
|
||||
class GuildDetailFragment : BaseFragment() {
|
||||
|
||||
var isMember: Boolean = false
|
||||
@Inject
|
||||
lateinit var socialRepository: SocialRepository
|
||||
@Inject
|
||||
lateinit var userRepository: UserRepository
|
||||
@Inject
|
||||
lateinit var configManager: AppConfigManager
|
||||
|
||||
val refreshLayout: SwipeRefreshLayout by bindView(R.id.refreshLayout)
|
||||
private val guildTitleView: TextView by bindView(R.id.title_view)
|
||||
private val guildDescriptionView: TextView by bindView(R.id.guild_description)
|
||||
private val leaderAvatarView: AvatarView by bindView(R.id.leader_avatar_view)
|
||||
private val leaderProfileNameView: UsernameLabel by bindView(R.id.leader_profile_name)
|
||||
private val leaderUsernameView: TextView by bindView(R.id.leader_username)
|
||||
|
||||
val inviteToGuildButton: Button by bindView(R.id.invite_button)
|
||||
private val joinGuildButton: Button by bindView(R.id.join_button)
|
||||
private val leaveGuildButton: Button by bindView(R.id.leave_button)
|
||||
|
||||
var groupID: String? = null
|
||||
var guild: Group? = null
|
||||
private var user: User? = null
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? =
|
||||
inflater.inflate(R.layout.fragment_guild_detail, container, false)
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
resetViews()
|
||||
|
||||
refreshLayout.setOnRefreshListener { this.refresh() }
|
||||
|
||||
compositeSubscription.add(socialRepository.getGroup(groupID ?: "")
|
||||
.doOnNext {
|
||||
guild = it
|
||||
updateGuild(it)
|
||||
}
|
||||
.distinctUntilChanged { group1, group2 -> group1.id == group2.id }
|
||||
.flatMap { socialRepository.getMember(it.leaderID) }
|
||||
.subscribe(Consumer {
|
||||
setLeader(it)
|
||||
}, RxErrorHandler.handleEmptyError()))
|
||||
|
||||
guildDescriptionView.movementMethod = LinkMovementMethod.getInstance()
|
||||
|
||||
leaveGuildButton.setOnClickListener {
|
||||
compositeSubscription.add(socialRepository.leaveGroup(groupID).subscribe(Consumer {}, RxErrorHandler.handleEmptyError()))
|
||||
}
|
||||
joinGuildButton.setOnClickListener {
|
||||
compositeSubscription.add(socialRepository.joinGroup(groupID).subscribe(Consumer {}, RxErrorHandler.handleEmptyError()))
|
||||
}
|
||||
|
||||
joinGuildButton.visibility = if (isMember) View.GONE else View.VISIBLE
|
||||
leaveGuildButton.visibility = if (isMember) View.VISIBLE else View.GONE
|
||||
}
|
||||
|
||||
private fun setLeader(leader: Member) {
|
||||
leaderAvatarView.setAvatar(leader)
|
||||
leaderProfileNameView.username = leader.profile?.name
|
||||
leaderProfileNameView.tier = leader.contributor?.level ?: 0
|
||||
leaderUsernameView.text = leader.formattedUsername
|
||||
}
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
super.onActivityResult(requestCode, resultCode, data)
|
||||
when (requestCode) {
|
||||
GroupFormActivity.GROUP_FORM_ACTIVITY -> {
|
||||
if (resultCode == Activity.RESULT_OK) {
|
||||
val bundle = data?.extras
|
||||
this.socialRepository.updateGroup(this.guild,
|
||||
bundle?.getString("name"),
|
||||
bundle?.getString("description"),
|
||||
bundle?.getString("leader"),
|
||||
bundle?.getBoolean("leaderCreateChallenge"))
|
||||
.subscribe(Consumer { }, RxErrorHandler.handleEmptyError())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun refresh() {
|
||||
compositeSubscription.add(socialRepository.retrieveGroup(guild?.id ?: "").subscribe(Consumer {}, RxErrorHandler.handleEmptyError()))
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
userRepository.close()
|
||||
socialRepository.close()
|
||||
super.onDestroy()
|
||||
}
|
||||
|
||||
override fun injectFragment(component: AppComponent) {
|
||||
component.inject(this)
|
||||
}
|
||||
|
||||
private fun updateGuild(guild: Group?) {
|
||||
guildTitleView?.text = guild?.name
|
||||
guildDescriptionView.text = MarkdownParser.parseMarkdown(guild?.description)
|
||||
//gemCountWrapper.visibility = if (group?.balance != null && group.balance > 0) View.VISIBLE else View.GONE
|
||||
//gemCountTextView.text = (group?.balance ?: 0 * 4.0).toInt().toString()
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
fun newInstance(group: Group?, user: User?): GuildDetailFragment {
|
||||
val args = Bundle()
|
||||
|
||||
val fragment = GuildDetailFragment()
|
||||
fragment.arguments = args
|
||||
fragment.groupID = group?.id
|
||||
fragment.user = user
|
||||
return fragment
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -31,9 +31,13 @@ class GuildFragment : BaseMainFragment() {
|
|||
internal lateinit var socialRepository: SocialRepository
|
||||
|
||||
var isMember: Boolean = false
|
||||
set(value) {
|
||||
field = value
|
||||
guildInformationFragment?.isMember = value
|
||||
}
|
||||
private val viewPager: androidx.viewpager.widget.ViewPager? by bindView(R.id.viewPager)
|
||||
private var guild: Group? = null
|
||||
private var guildInformationFragment: GroupInformationFragment? = null
|
||||
private var guildInformationFragment: GuildDetailFragment? = null
|
||||
private var chatListFragment: ChatListFragment? = null
|
||||
private var guildId: String? = null
|
||||
|
||||
|
|
@ -124,13 +128,14 @@ class GuildFragment : BaseMainFragment() {
|
|||
|
||||
viewPager?.adapter = object : FragmentPagerAdapter(fragmentManager) {
|
||||
|
||||
override fun getItem(position: Int): androidx.fragment.app.Fragment {
|
||||
override fun getItem(position: Int): Fragment {
|
||||
|
||||
val fragment: androidx.fragment.app.Fragment?
|
||||
val fragment: Fragment?
|
||||
|
||||
when (position) {
|
||||
0 -> {
|
||||
guildInformationFragment = GroupInformationFragment.newInstance(this@GuildFragment.guild, user)
|
||||
guildInformationFragment = GuildDetailFragment.newInstance(this@GuildFragment.guild, user)
|
||||
guildInformationFragment?.isMember = isMember
|
||||
fragment = guildInformationFragment
|
||||
}
|
||||
1 -> {
|
||||
|
|
@ -213,7 +218,7 @@ class GuildFragment : BaseMainFragment() {
|
|||
|
||||
private fun setGroup(group: Group?) {
|
||||
if (group != null) {
|
||||
guildInformationFragment?.group = group
|
||||
guildInformationFragment?.groupID = group.id
|
||||
|
||||
this.chatListFragment?.groupId = group.id
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue