allow party editing and leaving

This commit is contained in:
Phillip Thelen 2016-04-21 19:16:58 +02:00
parent af7da65c0d
commit d64f150bdc
7 changed files with 131 additions and 38 deletions

View file

@ -1,8 +1,13 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" <menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto">
xmlns:tools="http://schemas.android.com/tools"> <item
<item android:id="@+id/menu_invite_item" android:id="@+id/menu_invite_item"
android:title="@string/invite" android:title="@string/invite"
app:showAsAction="never" /> app:showAsAction="never" />
<item
android:id="@+id/menu.guild.leave"
android:orderInCategory="1"
app:showAsAction="ifRoom"
android:title="@string/leave" />
</menu> </menu>

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<item android:id="@+id/menu_invite_item"
android:title="@string/invite"
app:showAsAction="never" />
<item
android:id="@+id/menu.guild.edit"
android:orderInCategory="1"
app:showAsAction="never"
android:title="@string/action_edit" />
</menu>

View file

@ -332,14 +332,14 @@ To start, which parts of your life do you want to improve?</string>
<string name="by_email">By Email</string> <string name="by_email">By Email</string>
<string name="invite_existing_users">Invite Existing Users</string> <string name="invite_existing_users">Invite Existing Users</string>
<string name="send">Send</string> <string name="send">Send</string>
<string name="invite">Invite</string> <string name="invite">Invite Friends</string>
<string name="invite_id_description">If you have friends already using Habitica, invite them by User ID here.</string> <string name="invite_id_description">If you have friends already using Habitica, invite them by User ID here.</string>
<string name="invite_email_description">If a friend joins Habitica via your email, they\'ll automatically be invited to your party!</string> <string name="invite_email_description">If a friend joins Habitica via your email, they\'ll automatically be invited to your party!</string>
<string name="add_invites">Add Invites</string> <string name="add_invites">Add Invites</string>
<string name="user_id">User ID</string> <string name="user_id">User ID</string>
<string name="email">Email</string> <string name="email">Email</string>
<string name="invite_users">Invite to Party</string> <string name="invite_users">Invite to Party</string>
<string name="share_using">Share using</string> <string name="share_using">Share using</string>o
<string name="share_levelup" formatted="false">I got to level %s in Habitica by improving my real-life habits!</string> <string name="share_levelup" formatted="false">I got to level %s in Habitica by improving my real-life habits!</string>
<string name="share_hatched" formatted="false">I just hatched a %1$s %2$s pet in Habitica by completing my real-life tasks!</string> <string name="share_hatched" formatted="false">I just hatched a %1$s %2$s pet in Habitica by completing my real-life tasks!</string>
<string name="share_raised" formatted="false">I just gained a %1$s %2$s mount in Habitica by completing my real-life tasks!</string> <string name="share_raised" formatted="false">I just gained a %1$s %2$s mount in Habitica by completing my real-life tasks!</string>

View file

@ -28,6 +28,8 @@ import butterknife.Bind;
public class GroupFormActivity extends BaseActivity { public class GroupFormActivity extends BaseActivity {
public static final int GROUP_FORM_ACTIVITY = 11;
String groupID; String groupID;
String groupName; String groupName;
String groupDescription; String groupDescription;

View file

@ -109,5 +109,4 @@ public abstract class BaseMainFragment extends BaseFragment {
super.onSaveInstanceState(outState); super.onSaveInstanceState(outState);
} }
} }

View file

@ -24,7 +24,6 @@ import retrofit.RetrofitError;
import retrofit.client.Response; import retrofit.client.Response;
public class GuildFragment extends BaseMainFragment implements Callback<Group> { public class GuildFragment extends BaseMainFragment implements Callback<Group> {
private final int GROUP_FORM_ACTIVITY = 11;
private Group guild; private Group guild;
public boolean isMember; public boolean isMember;
@ -190,14 +189,14 @@ public class GuildFragment extends BaseMainFragment implements Callback<Group> {
Intent intent = new Intent(activity, GroupFormActivity.class); Intent intent = new Intent(activity, GroupFormActivity.class);
intent.putExtras(bundle); intent.putExtras(bundle);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivityForResult(intent, GROUP_FORM_ACTIVITY); startActivityForResult(intent, GroupFormActivity.GROUP_FORM_ACTIVITY);
} }
@Override @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) { public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
switch(requestCode) { switch(requestCode) {
case (GROUP_FORM_ACTIVITY) : { case (GroupFormActivity.GROUP_FORM_ACTIVITY) : {
if (resultCode == Activity.RESULT_OK) { if (resultCode == Activity.RESULT_OK) {
boolean needsSaving = false; boolean needsSaving = false;
Bundle bundle = data.getExtras(); Bundle bundle = data.getExtras();

View file

@ -1,6 +1,6 @@
package com.habitrpg.android.habitica.ui.fragments.social.party; package com.habitrpg.android.habitica.ui.fragments.social.party;
import android.content.DialogInterface; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.Fragment; 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.ContentCache;
import com.habitrpg.android.habitica.R; 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.activities.PartyInviteActivity;
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; 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.ChatListFragment;
import com.habitrpg.android.habitica.ui.fragments.social.GroupInformationFragment; import com.habitrpg.android.habitica.ui.fragments.social.GroupInformationFragment;
import com.magicmicky.habitrpgwrapper.lib.models.Group; import com.magicmicky.habitrpgwrapper.lib.models.Group;
import com.magicmicky.habitrpgwrapper.lib.models.UserParty; import com.magicmicky.habitrpgwrapper.lib.models.UserParty;
import com.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@ -85,6 +85,8 @@ public class PartyFragment extends BaseMainFragment {
chatListFragment.seenGroupId = group.id; chatListFragment.seenGroupId = group.id;
} }
PartyFragment.this.activity.supportInvalidateOptionsMenu();
if (group.quest != null && group.quest.key != null && !group.quest.key.isEmpty()) { if (group.quest != null && group.quest.key != null && !group.quest.key.isEmpty()) {
contentCache.GetQuestContent(group.quest.key, content -> { contentCache.GetQuestContent(group.quest.key, content -> {
if (groupInformationFragment != null) { if (groupInformationFragment != null) {
@ -108,7 +110,13 @@ public class PartyFragment extends BaseMainFragment {
@Override @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 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 @Override
@ -123,43 +131,110 @@ public class PartyFragment extends BaseMainFragment {
Intent intent = new Intent(getActivity(), PartyInviteActivity.class); Intent intent = new Intent(getActivity(), PartyInviteActivity.class);
startActivityForResult(intent, PartyInviteActivity.RESULT_SEND_INVITES); startActivityForResult(intent, PartyInviteActivity.RESULT_SEND_INVITES);
return true; 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<Group>() {
@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); 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 @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) { public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
if (resultCode == PartyInviteActivity.RESULT_SEND_INVITES) { switch(requestCode) {
Map<String, Object> inviteData = new HashMap<>(); case (GroupFormActivity.GROUP_FORM_ACTIVITY) : {
inviteData.put("inviter", this.user.getProfile().getName()); if (resultCode == Activity.RESULT_OK) {
if (data.getBooleanExtra("isEmail", false)) { boolean needsSaving = false;
String[] emails = data.getStringArrayExtra("emails"); Bundle bundle = data.getExtras();
List<HashMap<String, String>> invites = new ArrayList<>(); if (this.group.name != null && !this.group.name.equals(bundle.getString("name"))) {
for (String email : emails) { this.group.name = bundle.getString("name");
HashMap<String, String> invite = new HashMap<>(); needsSaving = true;
invite.put("name", ""); }
invite.put("email", email); if (this.group.description != null && !this.group.description.equals(bundle.getString("description"))) {
invites.add(invite); 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<Void>() {
@Override
public void success(Void aVoid, Response response) {
}
@Override
public void failure(RetrofitError error) {
}
});
this.groupInformationFragment.setGroup(group);
}
} }
inviteData.put("emails", invites); break;
} else {
String[] userIDs = data.getStringArrayExtra("userIDs");
List<String> invites = new ArrayList<>();
Collections.addAll(invites, userIDs);
inviteData.put("uuids", invites);
} }
this.mAPIHelper.apiService.inviteToGroup(this.group.id, inviteData, new Callback<Void>() { case (PartyInviteActivity.RESULT_SEND_INVITES) : {
@Override Map<String, Object> inviteData = new HashMap<>();
public void success(Void group, Response response) { inviteData.put("inviter", this.user.getProfile().getName());
if (data.getBooleanExtra("isEmail", false)) {
String[] emails = data.getStringArrayExtra("emails");
List<HashMap<String, String>> invites = new ArrayList<>();
for (String email : emails) {
HashMap<String, String> invite = new HashMap<>();
invite.put("name", "");
invite.put("email", email);
invites.add(invite);
}
inviteData.put("emails", invites);
} else {
String[] userIDs = data.getStringArrayExtra("userIDs");
List<String> invites = new ArrayList<>();
Collections.addAll(invites, userIDs);
inviteData.put("uuids", invites);
} }
this.mAPIHelper.apiService.inviteToGroup(this.group.id, inviteData, new Callback<Void>() {
@Override
public void success(Void group, Response response) {
}
@Override @Override
public void failure(RetrofitError error) { public void failure(RetrofitError error) {
} }
}); });
}
} }
} }