diff --git a/Habitica/res/layout/item_public_guild.xml b/Habitica/res/layout/item_public_guild.xml
index 284134399..928e6100d 100644
--- a/Habitica/res/layout/item_public_guild.xml
+++ b/Habitica/res/layout/item_public_guild.xml
@@ -1,44 +1,47 @@
-
+ android:orientation="vertical"
+ android:padding="@dimen/row_padding"
+ android:background="?attr/selectableItemBackground">
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+ android:layout_weight="1"
+ android:text="New Text" />
+ android:text="New Button" />
\ No newline at end of file
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/PublicGuildsRecyclerViewAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/PublicGuildsRecyclerViewAdapter.java
index 04182f7e1..cb75ed552 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/PublicGuildsRecyclerViewAdapter.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/PublicGuildsRecyclerViewAdapter.java
@@ -6,6 +6,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
+import android.widget.Toast;
import com.habitrpg.android.habitica.APIHelper;
import com.habitrpg.android.habitica.R;
@@ -40,16 +41,64 @@ public class PublicGuildsRecyclerViewAdapter extends RecyclerView.Adapter {
+ Group guild = (Group) v.getTag();
+ GuildFragment guildFragment = new GuildFragment();
+ guildFragment.setGuild(guild);
+ guildFragment.isMember = isInGroup(guild);
+ DisplayFragmentEvent event = new DisplayFragmentEvent();
+ event.fragment = guildFragment;
+ EventBus.getDefault().post(event);
+ });
+ guildViewHolder.joinLeaveButton.setOnClickListener(v -> {
+ Group guild = (Group) v.getTag();
+ boolean isMember = this.memberGuildIDs != null && this.memberGuildIDs.contains(guild.id);
+ if (isMember) {
+ PublicGuildsRecyclerViewAdapter.this.apiHelper.apiService.leaveGroup(guild.id, new Callback() {
+ @Override
+ public void success(Void nope, Response response) {
+ memberGuildIDs.remove(guild.id);
+ int indexOfGroup = publicGuildList.indexOf(guild);
+ notifyItemChanged(indexOfGroup);
+ }
- return new GuildViewHolder(view);
+ @Override
+ public void failure(RetrofitError error) {
+ Toast.makeText(guildViewHolder.itemView.getContext(), R.string.unknown_error, Toast.LENGTH_SHORT)
+ .show();
+ }
+ });
+ } else {
+ PublicGuildsRecyclerViewAdapter.this.apiHelper.apiService.joinGroup(guild.id, new Callback() {
+ @Override
+ public void success(Group group, Response response) {
+ memberGuildIDs.add(group.id);
+ int indexOfGroup = publicGuildList.indexOf(group);
+ notifyItemChanged(indexOfGroup);
+ }
+
+ @Override
+ public void failure(RetrofitError error) {
+ Toast.makeText(guildViewHolder.itemView.getContext(), R.string.unknown_error, Toast.LENGTH_SHORT)
+ .show();
+ }
+ });
+ }
+
+ });
+ return guildViewHolder;
}
@Override
public void onBindViewHolder(GuildViewHolder holder, int position) {
- holder.bind(publicGuildList.get(position));
+ Group guild = publicGuildList.get(position);
+ boolean isInGroup = isInGroup(guild);
+ holder.bind(guild, isInGroup);
+ holder.itemView.setTag(guild);
+ holder.joinLeaveButton.setTag(guild);
}
@Override
@@ -57,7 +106,11 @@ public class PublicGuildsRecyclerViewAdapter extends RecyclerView.Adapter {
+ private boolean isInGroup(Group guild) {
+ return this.memberGuildIDs != null && this.memberGuildIDs.contains(guild.id);
+ }
+
+ static class GuildViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.nameTextView)
TextView nameTextView;
@@ -71,57 +124,20 @@ public class PublicGuildsRecyclerViewAdapter extends RecyclerView.Adapter {
this.isMember = true;
return true;
case R.id.menu_guild_leave:
- this.mAPIHelper.apiService.leaveGroup(this.guild.id, this);
+ this.mAPIHelper.apiService.leaveGroup(this.guild.id, new Callback() {
+ @Override
+ public void success(Void aVoid, Response response) {
+ getActivity().supportInvalidateOptionsMenu();
+ }
+
+ @Override
+ public void failure(RetrofitError error) {
+ }
+ });
this.isMember = false;
return true;
case R.id.menu_guild_edit:
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.java
index 56a45f58b..331e83e57 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.java
@@ -135,9 +135,9 @@ public class PartyFragment extends BaseMainFragment {
this.displayEditForm();
return true;
case R.id.menu_guild_leave:
- this.mAPIHelper.apiService.leaveGroup(this.group.id, new Callback() {
+ this.mAPIHelper.apiService.leaveGroup(this.group.id, new Callback() {
@Override
- public void success(Group group, Response response) {
+ public void success(Void aVoid, Response response) {
getActivity().getSupportFragmentManager().beginTransaction().remove(PartyFragment.this).commit();
}
diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java
index 35cf16759..ab4de9ae1 100644
--- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java
+++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java
@@ -145,7 +145,7 @@ public interface ApiService {
void joinGroup(@Path("gid") String groupId, Callback cb);
@POST("/groups/{gid}/leave")
- void leaveGroup(@Path("gid") String groupId, Callback cb);
+ void leaveGroup(@Path("gid") String groupId, Callback cb);
@POST("/groups/{gid}/chat")
void postGroupChat(@Path("gid") String groupId, @Query("message") String message, Callback cb);
diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Group.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Group.java
index 1e4dc7c95..f4446876d 100644
--- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Group.java
+++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Group.java
@@ -40,4 +40,21 @@ public class Group extends BaseModel {
public int challengeCount;
// TODO Challenges
+
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ Group group = (Group) o;
+
+ return id != null ? id.equals(group.id) : group.id == null;
+
+ }
+
+ @Override
+ public int hashCode() {
+ return id != null ? id.hashCode() : 0;
+ }
}