diff --git a/Habitica/AndroidManifest.xml b/Habitica/AndroidManifest.xml
index 4792a630d..15f767a52 100644
--- a/Habitica/AndroidManifest.xml
+++ b/Habitica/AndroidManifest.xml
@@ -122,6 +122,13 @@
+
+
+
+
+
+
+
diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index 7589f7f26..a80079ffc 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -374,4 +374,9 @@ To start, which parts of your life do you want to improve?
hourglasses
gold
gold
+
+
+ ACCEPT_PARTY_INVITE
+ ACCEPT_PARTY_INVITE
+
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java b/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java
index 52224eaee..988db627a 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java
@@ -4,6 +4,7 @@ import com.habitrpg.android.habitica.HabiticaApplication;
import com.habitrpg.android.habitica.helpers.notifications.PushNotificationManager;
import com.habitrpg.android.habitica.modules.ApiModule;
import com.habitrpg.android.habitica.modules.AppModule;
+import com.habitrpg.android.habitica.receivers.LocalNotificationActionReceiver;
import com.habitrpg.android.habitica.ui.activities.AboutActivity;
import com.habitrpg.android.habitica.ui.activities.ClassSelectionActivity;
import com.habitrpg.android.habitica.ui.activities.GroupFormActivity;
@@ -160,4 +161,5 @@ public interface AppComponent {
void inject(PushNotificationManager pushNotificationManager);
+ void inject(LocalNotificationActionReceiver localNotificationActionReceiver);
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PartyInviteLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PartyInviteLocalNotification.java
index e65f58a63..1b65d94e0 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PartyInviteLocalNotification.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PartyInviteLocalNotification.java
@@ -5,12 +5,16 @@ import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
-import android.support.v4.app.TaskStackBuilder;
-import android.support.v7.app.NotificationCompat;
+import android.content.res.Resources;
+import android.media.RingtoneManager;
+import android.net.Uri;
+
+import android.support.v4.app.NotificationCompat;
import android.util.Log;
import com.habitrpg.android.habitica.R;
-import com.habitrpg.android.habitica.ui.activities.PartyInviteActivity;
+import com.habitrpg.android.habitica.receivers.LocalNotificationActionReceiver;
+import com.habitrpg.android.habitica.ui.activities.MainActivity;
/**
* Created by keithholliday on 6/28/16.
@@ -18,21 +22,41 @@ import com.habitrpg.android.habitica.ui.activities.PartyInviteActivity;
public class PartyInviteLocalNotification implements HabiticaLocalNotification {
public void notifyLocally(Context context, String title, String message) {
- Intent intent = new Intent(context, PartyInviteActivity.class);
- PendingIntent pendingIntent = PendingIntent.getActivity(context, (int) System.currentTimeMillis(), intent, 0);
- Notification notification = new Notification.Builder(context)
+ Uri path = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
+
+ NotificationCompat.Builder notificationBuilder =
+ new NotificationCompat.Builder(context)
+ .setSmallIcon(R.drawable.ic_gryphon)
.setContentTitle(title)
- .setContentText(message).setSmallIcon(R.drawable.ic_gryphon)
- .setContentIntent(pendingIntent)
- .addAction(R.drawable.ic_action_delete_white_24, "Accept", pendingIntent)
- .addAction(R.drawable.ic_gryphon, "Reject", pendingIntent)
- .build();
+ .setContentText(message)
+ .setAutoCancel(true)
+ .setSound(path);
+
+ Resources res = context.getResources();
+
+ Intent acceptInviteIntent = new Intent(context, LocalNotificationActionReceiver.class);
+ acceptInviteIntent.setAction(res.getString(R.string.accept_party_invite));
+ PendingIntent pendingIntentAccept = PendingIntent.getBroadcast(
+ context,
+ 3000,
+ acceptInviteIntent,
+ PendingIntent.FLAG_UPDATE_CURRENT
+ );
+ notificationBuilder.addAction(R.drawable.ic_gryphon, "Accept", pendingIntentAccept);
+
+ Intent rejectInviteIntent = new Intent();
+ rejectInviteIntent.setAction(res.getString(R.string.reject_party_invite));
+ PendingIntent pendingIntentReject = PendingIntent.getBroadcast(
+ context,
+ 2000,
+ acceptInviteIntent,
+ PendingIntent.FLAG_UPDATE_CURRENT
+ );
+ notificationBuilder.addAction(R.drawable.ic_gryphon, "Reject", pendingIntentReject);
NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
- notification.flags |= Notification.FLAG_AUTO_CANCEL;
-
- notificationManager.notify((int) System.currentTimeMillis(), notification);
+ notificationManager.notify(10, notificationBuilder.build());
}
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/LocalNotificationActionReceiver.java b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/LocalNotificationActionReceiver.java
new file mode 100644
index 000000000..3cd526c9e
--- /dev/null
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/LocalNotificationActionReceiver.java
@@ -0,0 +1,59 @@
+package com.habitrpg.android.habitica.receivers;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.util.Log;
+
+import com.habitrpg.android.habitica.APIHelper;
+import com.habitrpg.android.habitica.HabiticaApplication;
+import com.habitrpg.android.habitica.R;
+import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback;
+import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
+
+import javax.inject.Inject;
+
+/**
+ * Created by keithholliday on 6/30/16.
+ */
+public class LocalNotificationActionReceiver extends BroadcastReceiver implements HabitRPGUserCallback.OnUserReceived {
+ @Inject
+ public APIHelper apiHelper;
+
+ private HabitRPGUser user;
+ private String action;
+ private Resources resources;
+
+ @Override
+ public void onReceive(Context context, Intent arg1) {
+ HabiticaApplication.getInstance(context).getComponent().inject(this);
+ this.resources = context.getResources();
+
+ this.action = arg1.getAction();
+
+ this.apiHelper.apiService.getUser()
+ .compose(this.apiHelper.configureApiCallObserver())
+ .subscribe(new HabitRPGUserCallback(this), throwable -> {});
+ }
+
+ @Override
+ public void onUserReceived(HabitRPGUser user) {
+ this.user = user;
+ this.handleLocalNotificationAction(action);
+ }
+
+ private void handleLocalNotificationAction(String action) {
+ //@TODO: This is a good place for a factory and event emitter pattern
+
+ if (action.equals(this.resources.getString(R.string.accept_party_invite))) {
+ apiHelper.apiService.joinGroup("party")
+ .compose(apiHelper.configureApiCallObserver())
+ .subscribe(aVoid -> {}, throwable -> {});
+ } else if (action.equals(this.resources.getString(R.string.reject_party_invite))) {
+ apiHelper.apiService.rejectGroupInvite("party")
+ .compose(apiHelper.configureApiCallObserver())
+ .subscribe(aVoid -> {}, throwable -> {});
+ }
+ }
+}
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 f51208e2c..aed129702 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
@@ -205,6 +205,9 @@ public interface ApiService {
@POST("groups/{gid}/invite")
Observable inviteToGroup(@Path("gid") String groupId, @Body Map inviteData);
+ @POST("groups/{gid}/reject-invite")
+ Observable rejectGroupInvite(@Path("gid") String groupId);
+
@POST("groups/{gid}/quests/accept")
Observable acceptQuest(@Path("gid") String groupId);