From d64f150bdc18c2c5faf4bfaed25efd66094e1d78 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Thu, 21 Apr 2016 19:16:58 +0200 Subject: [PATCH] allow party editing and leaving --- Habitica/res/menu/menu_party.xml | 15 +- Habitica/res/menu/menu_party_admin.xml | 13 ++ Habitica/res/values/strings.xml | 4 +- .../ui/activities/GroupFormActivity.java | 2 + .../ui/fragments/BaseMainFragment.java | 1 - .../ui/fragments/social/GuildFragment.java | 5 +- .../fragments/social/party/PartyFragment.java | 129 ++++++++++++++---- 7 files changed, 131 insertions(+), 38 deletions(-) create mode 100644 Habitica/res/menu/menu_party_admin.xml diff --git a/Habitica/res/menu/menu_party.xml b/Habitica/res/menu/menu_party.xml index 72766c45d..fe9f258fb 100644 --- a/Habitica/res/menu/menu_party.xml +++ b/Habitica/res/menu/menu_party.xml @@ -1,8 +1,13 @@ - + xmlns:app="http://schemas.android.com/apk/res-auto"> + + \ No newline at end of file diff --git a/Habitica/res/menu/menu_party_admin.xml b/Habitica/res/menu/menu_party_admin.xml new file mode 100644 index 000000000..a5f15352d --- /dev/null +++ b/Habitica/res/menu/menu_party_admin.xml @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index dd639b060..d3cab148c 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -332,14 +332,14 @@ To start, which parts of your life do you want to improve? By Email Invite Existing Users Send - Invite + Invite Friends If you have friends already using Habitica, invite them by User ID here. If a friend joins Habitica via your email, they\'ll automatically be invited to your party! Add Invites User ID Email Invite to Party - Share using + Share usingo I got to level %s in Habitica by improving my real-life habits! I just hatched a %1$s %2$s pet in Habitica by completing my real-life tasks! I just gained a %1$s %2$s mount in Habitica by completing my real-life tasks! diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GroupFormActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GroupFormActivity.java index c64feeb59..6944ce16a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GroupFormActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GroupFormActivity.java @@ -28,6 +28,8 @@ import butterknife.Bind; public class GroupFormActivity extends BaseActivity { + public static final int GROUP_FORM_ACTIVITY = 11; + String groupID; String groupName; String groupDescription; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseMainFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseMainFragment.java index 4c2afc2f2..aec12f2e9 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseMainFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseMainFragment.java @@ -109,5 +109,4 @@ public abstract class BaseMainFragment extends BaseFragment { super.onSaveInstanceState(outState); } - } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildFragment.java index a9bcffd3d..880b0b8eb 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildFragment.java @@ -24,7 +24,6 @@ import retrofit.RetrofitError; import retrofit.client.Response; public class GuildFragment extends BaseMainFragment implements Callback { - private final int GROUP_FORM_ACTIVITY = 11; private Group guild; public boolean isMember; @@ -190,14 +189,14 @@ public class GuildFragment extends BaseMainFragment implements Callback { Intent intent = new Intent(activity, GroupFormActivity.class); intent.putExtras(bundle); intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); - startActivityForResult(intent, GROUP_FORM_ACTIVITY); + startActivityForResult(intent, GroupFormActivity.GROUP_FORM_ACTIVITY); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch(requestCode) { - case (GROUP_FORM_ACTIVITY) : { + case (GroupFormActivity.GROUP_FORM_ACTIVITY) : { if (resultCode == Activity.RESULT_OK) { boolean needsSaving = false; Bundle bundle = data.getExtras(); 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 a03fd4911..56a45f58b 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 @@ -1,6 +1,6 @@ package com.habitrpg.android.habitica.ui.fragments.social.party; -import android.content.DialogInterface; +import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; @@ -16,13 +16,13 @@ import android.view.ViewGroup; import com.habitrpg.android.habitica.ContentCache; import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.activities.GroupFormActivity; import com.habitrpg.android.habitica.ui.activities.PartyInviteActivity; import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; import com.habitrpg.android.habitica.ui.fragments.social.ChatListFragment; import com.habitrpg.android.habitica.ui.fragments.social.GroupInformationFragment; import com.magicmicky.habitrpgwrapper.lib.models.Group; import com.magicmicky.habitrpgwrapper.lib.models.UserParty; -import com.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent; import java.util.ArrayList; import java.util.Collections; @@ -85,6 +85,8 @@ public class PartyFragment extends BaseMainFragment { chatListFragment.seenGroupId = group.id; } + PartyFragment.this.activity.supportInvalidateOptionsMenu(); + if (group.quest != null && group.quest.key != null && !group.quest.key.isEmpty()) { contentCache.GetQuestContent(group.quest.key, content -> { if (groupInformationFragment != null) { @@ -108,7 +110,13 @@ public class PartyFragment extends BaseMainFragment { @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - inflater.inflate(R.menu.menu_party, menu); + if (this.group != null) { + if (this.group.leaderID.equals(this.user.getId())) { + inflater.inflate(R.menu.menu_party_admin, menu); + } else { + inflater.inflate(R.menu.menu_party, menu); + } + } } @Override @@ -123,43 +131,110 @@ public class PartyFragment extends BaseMainFragment { Intent intent = new Intent(getActivity(), PartyInviteActivity.class); startActivityForResult(intent, PartyInviteActivity.RESULT_SEND_INVITES); return true; + case R.id.menu_guild_edit: + this.displayEditForm(); + return true; + case R.id.menu_guild_leave: + this.mAPIHelper.apiService.leaveGroup(this.group.id, new Callback() { + @Override + public void success(Group group, Response response) { + getActivity().getSupportFragmentManager().beginTransaction().remove(PartyFragment.this).commit(); + } + + @Override + public void failure(RetrofitError error) { + + } + }); + return true; } return super.onOptionsItemSelected(item); } + private void displayEditForm() { + Bundle bundle = new Bundle(); + bundle.putString("groupID",this.group.id); + bundle.putString("name",this.group.name); + bundle.putString("description",this.group.description); + bundle.putString("leader",this.group.leaderID); + + Intent intent = new Intent(activity, GroupFormActivity.class); + intent.putExtras(bundle); + intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); + startActivityForResult(intent, GroupFormActivity.GROUP_FORM_ACTIVITY); + } + @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); - if (resultCode == PartyInviteActivity.RESULT_SEND_INVITES) { - Map inviteData = new HashMap<>(); - inviteData.put("inviter", this.user.getProfile().getName()); - if (data.getBooleanExtra("isEmail", false)) { - String[] emails = data.getStringArrayExtra("emails"); - List> invites = new ArrayList<>(); - for (String email : emails) { - HashMap invite = new HashMap<>(); - invite.put("name", ""); - invite.put("email", email); - invites.add(invite); + switch(requestCode) { + case (GroupFormActivity.GROUP_FORM_ACTIVITY) : { + if (resultCode == Activity.RESULT_OK) { + boolean needsSaving = false; + Bundle bundle = data.getExtras(); + if (this.group.name != null && !this.group.name.equals(bundle.getString("name"))) { + this.group.name = bundle.getString("name"); + needsSaving = true; + } + if (this.group.description != null && !this.group.description.equals(bundle.getString("description"))) { + this.group.description = bundle.getString("description"); + needsSaving = true; + } + if (this.group.leaderID != null && !this.group.leaderID.equals(bundle.getString("leader"))) { + this.group.leaderID = bundle.getString("leader"); + needsSaving = true; + } + if (this.group.privacy != null && !this.group.privacy.equals(bundle.getString("privacy"))) { + this.group.privacy = bundle.getString("privacy"); + needsSaving = true; + } + if (needsSaving) { + this.mAPIHelper.apiService.updateGroup(this.group.id, this.group, new Callback() { + @Override + public void success(Void aVoid, Response response) { + } + + @Override + public void failure(RetrofitError error) { + + } + }); + this.groupInformationFragment.setGroup(group); + } } - inviteData.put("emails", invites); - } else { - String[] userIDs = data.getStringArrayExtra("userIDs"); - List invites = new ArrayList<>(); - Collections.addAll(invites, userIDs); - inviteData.put("uuids", invites); + break; } - this.mAPIHelper.apiService.inviteToGroup(this.group.id, inviteData, new Callback() { - @Override - public void success(Void group, Response response) { + case (PartyInviteActivity.RESULT_SEND_INVITES) : { + Map inviteData = new HashMap<>(); + inviteData.put("inviter", this.user.getProfile().getName()); + if (data.getBooleanExtra("isEmail", false)) { + String[] emails = data.getStringArrayExtra("emails"); + List> invites = new ArrayList<>(); + for (String email : emails) { + HashMap invite = new HashMap<>(); + invite.put("name", ""); + invite.put("email", email); + invites.add(invite); + } + inviteData.put("emails", invites); + } else { + String[] userIDs = data.getStringArrayExtra("userIDs"); + List invites = new ArrayList<>(); + Collections.addAll(invites, userIDs); + inviteData.put("uuids", invites); } + this.mAPIHelper.apiService.inviteToGroup(this.group.id, inviteData, new Callback() { + @Override + public void success(Void group, Response response) { + } - @Override - public void failure(RetrofitError error) { + @Override + public void failure(RetrofitError error) { - } - }); + } + }); + } } }