mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-04-14 19:56:32 +00:00
Added reciever for responding to local noitfication actions
This commit is contained in:
parent
9329def499
commit
dd366a8337
6 changed files with 114 additions and 14 deletions
|
|
@ -122,6 +122,13 @@
|
|||
<receiver android:process=":remote" android:name=".NotificationPublisher" />
|
||||
|
||||
<receiver android:process=":remote" android:name=".receivers.TaskReceiver"></receiver>
|
||||
|
||||
<receiver android:name=".receivers.LocalNotificationActionReceiver">
|
||||
<intent-filter>
|
||||
<action android:name="@string/accept_party_invite"/>
|
||||
<action android:name="@string/reject_party_invite"/>
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
<receiver android:name=".receivers.TaskAlarmBootReceiver" android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action._BOOT_COMPLETED"/>
|
||||
|
|
|
|||
|
|
@ -374,4 +374,9 @@ To start, which parts of your life do you want to improve?</string>
|
|||
<string name="hourglasses">hourglasses</string>
|
||||
<string name="gold_singular">gold</string>
|
||||
<string name="gems_plural">gold</string>
|
||||
|
||||
<!-- Local notification actions -->
|
||||
<string name="accept_party_invite">ACCEPT_PARTY_INVITE</string>
|
||||
<string name="reject_party_invite">ACCEPT_PARTY_INVITE</string>
|
||||
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 -> {});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -205,6 +205,9 @@ public interface ApiService {
|
|||
@POST("groups/{gid}/invite")
|
||||
Observable<Void> inviteToGroup(@Path("gid") String groupId, @Body Map<String, Object> inviteData);
|
||||
|
||||
@POST("groups/{gid}/reject-invite")
|
||||
Observable<Void> rejectGroupInvite(@Path("gid") String groupId);
|
||||
|
||||
@POST("groups/{gid}/quests/accept")
|
||||
Observable<Void> acceptQuest(@Path("gid") String groupId);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue