From 6bb57e5f50e16555d88d7d1709456e84fac14620 Mon Sep 17 00:00:00 2001 From: Jawnnypoo Date: Sat, 7 May 2016 01:24:44 -0500 Subject: [PATCH] Change API call to where it reflects the actual response (void). Update the Join/Leave state properly based on the callbacks when attemping to join or leave guilds. --- .../PublicGuildsRecyclerViewAdapter.java | 102 ++++++++++-------- .../ui/fragments/social/GuildFragment.java | 11 +- .../fragments/social/party/PartyFragment.java | 4 +- .../habitrpgwrapper/lib/api/ApiService.java | 2 +- 4 files changed, 72 insertions(+), 47 deletions(-) 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 c7cba1352..55c7ba11e 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 { @Bind(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);