mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-07-22 05:45:04 +00:00
allow party editing and leaving
This commit is contained in:
parent
af7da65c0d
commit
d64f150bdc
7 changed files with 131 additions and 38 deletions
|
|
@ -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>
|
||||||
13
Habitica/res/menu/menu_party_admin.xml
Normal file
13
Habitica/res/menu/menu_party_admin.xml
Normal 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>
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -109,5 +109,4 @@ public abstract class BaseMainFragment extends BaseFragment {
|
||||||
|
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue