Build new guild detail screen

This commit is contained in:
Phillip Thelen 2019-04-25 10:06:56 +02:00
parent 42432d369d
commit 12002b47cf
17 changed files with 336 additions and 80 deletions

View file

@ -153,7 +153,7 @@ android {
buildConfigField "String", "TESTING_LEVEL", "\"production\""
multiDexEnabled true
versionCode 2099
versionCode 2101
versionName "1.9"
}

View file

@ -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>

View file

@ -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"

View file

@ -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"

View 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>

View file

@ -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>

View file

@ -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"

View file

@ -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" />

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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);
}

View file

@ -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]

View file

@ -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()
}
}

View file

@ -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
}
}
}

View file

@ -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