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"?>
<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" />
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_invite_item"
android:title="@string/invite"
app:showAsAction="never" />
<item
android:id="@+id/menu.guild.leave"
android:orderInCategory="1"
app:showAsAction="ifRoom"
android:title="@string/leave" />
</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="invite_existing_users">Invite Existing Users</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_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="user_id">User ID</string>
<string name="email">Email</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_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>

View file

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

View file

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

View file

@ -24,7 +24,6 @@ import retrofit.RetrofitError;
import retrofit.client.Response;
public class GuildFragment extends BaseMainFragment implements Callback<Group> {
private final int GROUP_FORM_ACTIVITY = 11;
private Group guild;
public boolean isMember;
@ -190,14 +189,14 @@ public class GuildFragment extends BaseMainFragment implements Callback<Group> {
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();

View file

@ -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<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);
}
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<String, Object> inviteData = new HashMap<>();
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);
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<Void>() {
@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<String> invites = new ArrayList<>();
Collections.addAll(invites, userIDs);
inviteData.put("uuids", invites);
break;
}
this.mAPIHelper.apiService.inviteToGroup(this.group.id, inviteData, new Callback<Void>() {
@Override
public void success(Void group, Response response) {
case (PartyInviteActivity.RESULT_SEND_INVITES) : {
Map<String, Object> inviteData = new HashMap<>();
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
public void failure(RetrofitError error) {
@Override
public void failure(RetrofitError error) {
}
});
}
});
}
}
}