From 3595f6d460d1d5c3bbb01c3d7b72ab65cef78fc9 Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Mon, 27 Jun 2016 13:28:00 -0500 Subject: [PATCH 01/32] Added firebase notifications --- .gitignore | 1 + Habitica/AndroidManifest.xml | 14 ++++++++++++ Habitica/build.gradle | 5 +++++ .../HabiticaFirebaseInstanceIDService.java | 22 +++++++++++++++++++ .../HabiticaFirebaseMessagingService.java | 21 ++++++++++++++++++ build.gradle | 1 + 6 files changed, 64 insertions(+) create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseInstanceIDService.java create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.java diff --git a/.gitignore b/.gitignore index 6e6e04e44..80f87efef 100644 --- a/.gitignore +++ b/.gitignore @@ -54,3 +54,4 @@ fabric.properties Habitica/res/values/secret_strings.xml habitica.properties habitica.resources +Habitica/google-services.json diff --git a/Habitica/AndroidManifest.xml b/Habitica/AndroidManifest.xml index 832b03c34..4792a630d 100644 --- a/Habitica/AndroidManifest.xml +++ b/Habitica/AndroidManifest.xml @@ -128,6 +128,20 @@ + + + + + + + + + + + + Date: Tue, 28 Jun 2016 13:27:48 -0500 Subject: [PATCH 02/32] Add UI for push settings. Added push manager. Added toggle for push enabled/disabled. --- .../PushNotificationManager.java | 19 +++++++++++++++++++ .../PushNotificationsPreferencesFragment.java | 7 +++++++ 2 files changed, 26 insertions(+) create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PushNotificationsPreferencesFragment.java diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java new file mode 100644 index 000000000..357c0b27f --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java @@ -0,0 +1,19 @@ +package com.habitrpg.android.habitica.helpers.notifications; + +/** + * Created by keithholliday on 6/27/16. + */ +public class PushNotificationManager { + private static PushNotificationManager instance = null; + + protected PushNotificationManager() { + // Exists only to defeat instantiation. + } + + public static PushNotificationManager getInstance() { + if(instance == null) { + instance = new PushNotificationManager(); + } + return instance; + } +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PushNotificationsPreferencesFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PushNotificationsPreferencesFragment.java new file mode 100644 index 000000000..ca67f2d3d --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PushNotificationsPreferencesFragment.java @@ -0,0 +1,7 @@ +package com.habitrpg.android.habitica.ui.fragments.preferences; + +/** + * Created by keithholliday on 6/27/16. + */ +public class PushNotificationsPreferencesFragment { +} From 335453e92605f67d5680ebff20bed40a3fd9d27c Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Tue, 28 Jun 2016 13:27:57 -0500 Subject: [PATCH 03/32] Add UI for push settings. Added push manager. Added toggle for push enabled/disabled. --- Habitica/res/values/strings.xml | 11 ++++ Habitica/res/xml/preferences_fragment.xml | 63 +++++++++++++++++++ .../habitica/components/AppComponent.java | 4 ++ .../HabiticaFirebaseInstanceIDService.java | 15 +++-- .../PushNotificationManager.java | 50 +++++++++++++-- .../habitica/ui/activities/PrefsActivity.java | 5 ++ .../preferences/PreferencesFragment.java | 22 +++++++ .../PushNotificationsPreferencesFragment.java | 28 ++++++++- .../habitrpgwrapper/lib/api/ApiService.java | 9 ++- 9 files changed, 195 insertions(+), 12 deletions(-) diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index 390d4b3b9..7589f7f26 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -22,6 +22,17 @@ Activate Reminder Set Reminder Time + User Push Notifications + Push Notifications + You won a Challenge! + Received a Private Message + Gifted Gems + Gifted Subscription + Invited to Party + Invited to Guiild + Your Quest has Begun + Invited to Quest + Value New todo diff --git a/Habitica/res/xml/preferences_fragment.xml b/Habitica/res/xml/preferences_fragment.xml index e88c4312f..46d5b2e1b 100644 --- a/Habitica/res/xml/preferences_fragment.xml +++ b/Habitica/res/xml/preferences_fragment.xml @@ -75,4 +75,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file 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 1f4a1450e..52224eaee 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 @@ -1,6 +1,7 @@ package com.habitrpg.android.habitica.components; 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.ui.activities.AboutActivity; @@ -156,4 +157,7 @@ public interface AppComponent { void inject(ShopsFragment shopsFragment); void inject(ShopFragment shopFragment); + + void inject(PushNotificationManager pushNotificationManager); + } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseInstanceIDService.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseInstanceIDService.java index b1f27c790..7b07087ec 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseInstanceIDService.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseInstanceIDService.java @@ -4,19 +4,26 @@ import android.util.Log; import com.google.firebase.iid.FirebaseInstanceId; import com.google.firebase.iid.FirebaseInstanceIdService; +import com.habitrpg.android.habitica.APIHelper; + +import java.util.HashMap; +import java.util.Map; + +import javax.inject.Inject; /** * Created by keithholliday on 6/24/16. */ public class HabiticaFirebaseInstanceIDService extends FirebaseInstanceIdService { + + public PushNotificationManager pushNotificationManager; + @Override public void onTokenRefresh() { - // Get updated InstanceID token. + pushNotificationManager = PushNotificationManager.getInstance(this); String refreshedToken = FirebaseInstanceId.getInstance().getToken(); + pushNotificationManager.setRefreshedToken(refreshedToken); Log.d("test", "Refreshed token: " + refreshedToken); - - // TODO: Implement this method to send any registration to your app's servers. -// sendRegistrationToServer(refreshedToken); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java index 357c0b27f..1057ebd9b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java @@ -1,19 +1,59 @@ package com.habitrpg.android.habitica.helpers.notifications; +import android.content.Context; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; + +import com.habitrpg.android.habitica.APIHelper; +import com.habitrpg.android.habitica.HabiticaApplication; + +import java.util.HashMap; +import java.util.Map; + +import javax.inject.Inject; + /** * Created by keithholliday on 6/27/16. */ public class PushNotificationManager { - private static PushNotificationManager instance = null; - protected PushNotificationManager() { - // Exists only to defeat instantiation. + private static PushNotificationManager instance = null; + private static String DEVICE_TOKEN_PREFERENCE_STRING = "device-token-preference-string"; + + @Inject + public APIHelper apiHelper; + + private String refreshedToken; + private SharedPreferences sharedPreferences; + + protected PushNotificationManager(Context context) { + HabiticaApplication.getInstance(context).getComponent().inject(this); + sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); } - public static PushNotificationManager getInstance() { + public static PushNotificationManager getInstance(Context context) { if(instance == null) { - instance = new PushNotificationManager(); + instance = new PushNotificationManager(context); } return instance; } + + public void setRefreshedToken (String refreshedToken) { + if (this.refreshedToken == null) { + this.refreshedToken = refreshedToken; +// sharedPreferences.put + } + } + + //@TODO: Use preferences + public void addPushDeviceUsingStoredToken () { + Map pushDeviceData = new HashMap(); + pushDeviceData.put("regIdRequired", this.refreshedToken); + pushDeviceData.put("typeRequired", "android"); + apiHelper.apiService.addPushDevice(pushDeviceData); + } + + public void removePushDeviceUsingStoredToken () { + apiHelper.apiService.deletePushDevice(this.refreshedToken); + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/PrefsActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/PrefsActivity.java index cf74940b9..37e2f01d2 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/PrefsActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/PrefsActivity.java @@ -6,6 +6,7 @@ import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.components.AppComponent; import com.habitrpg.android.habitica.ui.fragments.preferences.AccountDetailsFragment; import com.habitrpg.android.habitica.ui.fragments.preferences.PreferencesFragment; +import com.habitrpg.android.habitica.ui.fragments.preferences.PushNotificationsPreferencesFragment; import android.content.Context; import android.content.SharedPreferences; @@ -88,6 +89,10 @@ public class PrefsActivity extends BaseActivity implements if (preferenceScreen.getKey().equals("accountDetails")) { fragment = new AccountDetailsFragment(); } + + if (preferenceScreen.getKey().equals("pushNotifications")) { + fragment = new PushNotificationsPreferencesFragment(); + } return fragment; } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.java index 1498261ce..7238243e8 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.java @@ -4,6 +4,7 @@ import com.habitrpg.android.habitica.APIHelper; import com.habitrpg.android.habitica.HabiticaApplication; import com.habitrpg.android.habitica.NotificationPublisher; import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.helpers.notifications.PushNotificationManager; import com.habitrpg.android.habitica.prefs.TimePreference; import com.habitrpg.android.habitica.ui.activities.ClassSelectionActivity; import com.habitrpg.android.habitica.ui.activities.MainActivity; @@ -21,6 +22,8 @@ import android.content.SharedPreferences; import android.os.Bundle; import android.support.v7.app.AlertDialog; import android.support.v7.preference.Preference; +import android.support.v7.preference.PreferenceScreen; +import android.util.Log; import java.util.Calendar; @@ -33,8 +36,11 @@ public class PreferencesFragment extends BasePreferencesFragment implements public APIHelper apiHelper; private Context context; private TimePreference timePreference; + private PreferenceScreen pushNotificationsPreference; private Preference classSelectionPreference; private HabitRPGUser user; + private PushNotificationManager pushNotificationManager; + private TransactionListener userTransactionListener = new TransactionListener() { @Override public void onResultReceived(HabitRPGUser habitRPGUser) { @@ -64,6 +70,7 @@ public class PreferencesFragment extends BasePreferencesFragment implements new Select().from(HabitRPGUser.class).where(Condition.column("id").eq(userID)).async().querySingle(userTransactionListener); } + pushNotificationManager = PushNotificationManager.getInstance(this.getActivity()); } @Override @@ -72,6 +79,12 @@ public class PreferencesFragment extends BasePreferencesFragment implements boolean useReminder = getPreferenceManager().getSharedPreferences().getBoolean("use_reminder", false); timePreference.setEnabled(useReminder); + + pushNotificationsPreference = (PreferenceScreen) findPreference("pushNotifications"); + boolean userPushNotifications = getPreferenceManager().getSharedPreferences().getBoolean("usePushNotifications", true); + pushNotificationsPreference.setEnabled(userPushNotifications); + + classSelectionPreference = findPreference("choose_class"); classSelectionPreference.setVisible(false); } @@ -176,6 +189,15 @@ public class PreferencesFragment extends BasePreferencesFragment implements } else if (key.equals("reminder_time")) { removeNotifications(); scheduleNotifications(); + } else if (key.equals("usePushNotifications")) { + boolean userPushNotifications = sharedPreferences.getBoolean(key, false); + pushNotificationsPreference.setEnabled(userPushNotifications); + Log.v("test", "test"); + if (userPushNotifications) { + pushNotificationManager.addPushDeviceUsingStoredToken(); + } else { + pushNotificationManager.removePushDeviceUsingStoredToken(); + } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PushNotificationsPreferencesFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PushNotificationsPreferencesFragment.java index ca67f2d3d..92f1074e0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PushNotificationsPreferencesFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PushNotificationsPreferencesFragment.java @@ -1,7 +1,31 @@ package com.habitrpg.android.habitica.ui.fragments.preferences; +import android.content.ClipData; +import android.content.ClipboardManager; +import android.content.Context; +import android.content.SharedPreferences; +import android.support.v7.preference.Preference; +import android.widget.Toast; + +import com.habitrpg.android.habitica.R; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + /** * Created by keithholliday on 6/27/16. */ -public class PushNotificationsPreferencesFragment { -} +public class PushNotificationsPreferencesFragment extends BasePreferencesFragment implements + SharedPreferences.OnSharedPreferenceChangeListener { + + @Override + protected void setupPreferences() { + + } + + @Override + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { + + } +} \ No newline at end of file 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 8a0a5f4ef..a2651304c 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 @@ -232,10 +232,17 @@ public interface ApiService { //Members URL @POST("members/send-private-message") Observable postPrivateMessage(@Body HashMap messageDetails); - + @GET("shops/{identifier}") Observable fetchShopInventory(@Path("identifier") String identifier); + //Push notifications + @POST("/user/push-devices") + Observable addPushDevice(@Body Map pushDeviceData); + + @DELETE("/user/push-devices/{regId}") + Observable deletePushDevice(@Path("regId") String regId); + //DEBUG: These calls only work on a local development server @POST("debug/add-ten-gems") From 9329def499947c87bfad3a966daa30222039aeb2 Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Wed, 29 Jun 2016 11:56:51 -0500 Subject: [PATCH 04/32] Added notification factory. Added party invite notification --- .../HabiticaFirebaseMessagingService.java | 8 ++- .../HabiticaLocalNotification.java | 12 +++++ .../HabiticaLocalNotificationFactory.java | 22 ++++++++ .../PartyInviteLocalNotification.java | 38 ++++++++++++++ .../PushNotificationManager.java | 51 ++++++++++++++++--- .../preferences/PreferencesFragment.java | 1 - .../habitrpgwrapper/lib/api/ApiService.java | 4 +- 7 files changed, 122 insertions(+), 14 deletions(-) create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotification.java create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotificationFactory.java create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PartyInviteLocalNotification.java diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.java index 54a8a9318..3f092b72b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.java @@ -11,11 +11,9 @@ import com.google.firebase.messaging.RemoteMessage; public class HabiticaFirebaseMessagingService extends FirebaseMessagingService { @Override public void onMessageReceived(RemoteMessage remoteMessage) { - // TODO(developer): Handle FCM messages here. - // If the application is in the foreground handle both data and notification messages here. - // Also if you intend on generating your own notifications as a result of a received FCM - // message, here is where that should be initiated. See sendNotification method below. - Log.d("test", "From: " + remoteMessage.getFrom()); Log.d("test", "Notification Message Body: " + remoteMessage.getNotification().getBody()); + + PushNotificationManager pushNotificationManager = PushNotificationManager.getInstance(this); + pushNotificationManager.displayNotification(remoteMessage); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotification.java new file mode 100644 index 000000000..511923d9e --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotification.java @@ -0,0 +1,12 @@ +package com.habitrpg.android.habitica.helpers.notifications; + +import android.content.Context; + +/** + * Created by keithholliday on 6/28/16. + */ +public interface HabiticaLocalNotification { + + void notifyLocally(Context context, String title, String message); + +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotificationFactory.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotificationFactory.java new file mode 100644 index 000000000..3ad79d3dc --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotificationFactory.java @@ -0,0 +1,22 @@ +package com.habitrpg.android.habitica.helpers.notifications; + +/** + * Created by keithholliday on 6/28/16. + */ +public class HabiticaLocalNotificationFactory { + + //use getShape method to get object of type shape + public HabiticaLocalNotification build(String notificationType){ + if(notificationType == null){ + return null; + } + + if(notificationType.equalsIgnoreCase("PARTY_INVITE_NOTIFICATION")){ + return new PartyInviteLocalNotification(); + + } + + return null; + } + +} 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 new file mode 100644 index 000000000..e65f58a63 --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PartyInviteLocalNotification.java @@ -0,0 +1,38 @@ +package com.habitrpg.android.habitica.helpers.notifications; + +import android.app.Notification; +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.util.Log; + +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.activities.PartyInviteActivity; + +/** + * Created by keithholliday on 6/28/16. + */ +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) + .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(); + + NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); + notification.flags |= Notification.FLAG_AUTO_CANCEL; + + notificationManager.notify((int) System.currentTimeMillis(), notification); + } + +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java index 1057ebd9b..8146e953f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java @@ -3,9 +3,13 @@ package com.habitrpg.android.habitica.helpers.notifications; import android.content.Context; import android.content.SharedPreferences; import android.preference.PreferenceManager; +import android.util.Log; +import com.google.firebase.iid.FirebaseInstanceId; +import com.google.firebase.messaging.RemoteMessage; import com.habitrpg.android.habitica.APIHelper; import com.habitrpg.android.habitica.HabiticaApplication; +import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback; import java.util.HashMap; import java.util.Map; @@ -25,6 +29,7 @@ public class PushNotificationManager { private String refreshedToken; private SharedPreferences sharedPreferences; + private Context context; protected PushNotificationManager(Context context) { HabiticaApplication.getInstance(context).getComponent().inject(this); @@ -35,25 +40,59 @@ public class PushNotificationManager { if(instance == null) { instance = new PushNotificationManager(context); } + + instance.context = context; + return instance; } public void setRefreshedToken (String refreshedToken) { if (this.refreshedToken == null) { - this.refreshedToken = refreshedToken; -// sharedPreferences.put + return; } + this.refreshedToken = refreshedToken; +// sharedPreferences.put } //@TODO: Use preferences public void addPushDeviceUsingStoredToken () { + if (this.refreshedToken == null) { + this.refreshedToken = FirebaseInstanceId.getInstance().getToken(); + } + + if (this.refreshedToken == null) { + return; + } + Map pushDeviceData = new HashMap(); - pushDeviceData.put("regIdRequired", this.refreshedToken); - pushDeviceData.put("typeRequired", "android"); - apiHelper.apiService.addPushDevice(pushDeviceData); + pushDeviceData.put("regId", this.refreshedToken); + pushDeviceData.put("type", "android"); + apiHelper.apiService.addPushDevice(pushDeviceData) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(aVoid -> {}, throwable -> {}); } public void removePushDeviceUsingStoredToken () { - apiHelper.apiService.deletePushDevice(this.refreshedToken); + apiHelper.apiService.deletePushDevice(this.refreshedToken) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(aVoid -> {}, throwable -> {}); + } + + public void displayNotification (RemoteMessage remoteMessage) { + HabiticaLocalNotificationFactory notificationFactory = new HabiticaLocalNotificationFactory(); + HabiticaLocalNotification notification = notificationFactory.build("PARTY_INVITE_NOTIFICATION"); + if (userIsSubscribedToNotificationType("PARTY_INVITE_NOTIFICATION") && notification != null) { + notification.notifyLocally(this.context, remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody()); + } + } + + private boolean userIsSubscribedToNotificationType(String type) { + String key = ""; + + if (type.equals("PARTY_INVITE_NOTIFICATION")) { + key = "preference_push_invited_to_party"; + } + + return sharedPreferences.getBoolean(key, true); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.java index 7238243e8..72bfc2cf7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.java @@ -192,7 +192,6 @@ public class PreferencesFragment extends BasePreferencesFragment implements } else if (key.equals("usePushNotifications")) { boolean userPushNotifications = sharedPreferences.getBoolean(key, false); pushNotificationsPreference.setEnabled(userPushNotifications); - Log.v("test", "test"); if (userPushNotifications) { pushNotificationManager.addPushDeviceUsingStoredToken(); } else { 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 a2651304c..f51208e2c 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 @@ -237,10 +237,10 @@ public interface ApiService { Observable fetchShopInventory(@Path("identifier") String identifier); //Push notifications - @POST("/user/push-devices") + @POST("user/push-devices") Observable addPushDevice(@Body Map pushDeviceData); - @DELETE("/user/push-devices/{regId}") + @DELETE("user/push-devices/{regId}") Observable deletePushDevice(@Path("regId") String regId); //DEBUG: These calls only work on a local development server From dd366a8337fc6b2bfb6b6510cbc5f3cb44cfbeea Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Thu, 30 Jun 2016 17:02:26 -0500 Subject: [PATCH 05/32] Added reciever for responding to local noitfication actions --- Habitica/AndroidManifest.xml | 7 +++ Habitica/res/values/strings.xml | 5 ++ .../habitica/components/AppComponent.java | 2 + .../PartyInviteLocalNotification.java | 52 +++++++++++----- .../LocalNotificationActionReceiver.java | 59 +++++++++++++++++++ .../habitrpgwrapper/lib/api/ApiService.java | 3 + 6 files changed, 114 insertions(+), 14 deletions(-) create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/receivers/LocalNotificationActionReceiver.java 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); From abe2a3a34d60dba7788d7a21374d0cf83ae80207 Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Fri, 1 Jul 2016 13:14:43 -0500 Subject: [PATCH 06/32] Added push notification fore received a priavate message --- .../HabiticaLocalNotificationFactory.java | 5 ++- .../PushNotificationManager.java | 14 ++++-- ...ceivedPrivateMessageLocalNotification.java | 44 +++++++++++++++++++ 3 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedPrivateMessageLocalNotification.java diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotificationFactory.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotificationFactory.java index 3ad79d3dc..e6dbe0c06 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotificationFactory.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotificationFactory.java @@ -11,9 +11,10 @@ public class HabiticaLocalNotificationFactory { return null; } - if(notificationType.equalsIgnoreCase("PARTY_INVITE_NOTIFICATION")){ + if (notificationType.equalsIgnoreCase(PushNotificationManager.PARTY_INVITE_PUSH_NOTIFICATION_KEY)) { return new PartyInviteLocalNotification(); - + } else if (notificationType.contains(PushNotificationManager.RECEIVED_PRIVATE_MESSAGE_PUSH_NOTIFICATION_KEY)) { + return new ReceivedPrivateMessageLocalNotification(); } return null; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java index 8146e953f..aaa1a3cfc 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java @@ -23,6 +23,8 @@ public class PushNotificationManager { private static PushNotificationManager instance = null; private static String DEVICE_TOKEN_PREFERENCE_STRING = "device-token-preference-string"; + public static String PARTY_INVITE_PUSH_NOTIFICATION_KEY = "Invited To Party"; + public static String RECEIVED_PRIVATE_MESSAGE_PUSH_NOTIFICATION_KEY = "New Message from test33@test.com:"; @Inject public APIHelper apiHelper; @@ -80,8 +82,8 @@ public class PushNotificationManager { public void displayNotification (RemoteMessage remoteMessage) { HabiticaLocalNotificationFactory notificationFactory = new HabiticaLocalNotificationFactory(); - HabiticaLocalNotification notification = notificationFactory.build("PARTY_INVITE_NOTIFICATION"); - if (userIsSubscribedToNotificationType("PARTY_INVITE_NOTIFICATION") && notification != null) { + HabiticaLocalNotification notification = notificationFactory.build(remoteMessage.getNotification().getBody()); + if (userIsSubscribedToNotificationType(remoteMessage.getNotification().getBody()) && notification != null) { notification.notifyLocally(this.context, remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody()); } } @@ -89,10 +91,16 @@ public class PushNotificationManager { private boolean userIsSubscribedToNotificationType(String type) { String key = ""; - if (type.equals("PARTY_INVITE_NOTIFICATION")) { + //@TODO: If user has push turned off to send + + if (type.equals(PARTY_INVITE_PUSH_NOTIFICATION_KEY)) { key = "preference_push_invited_to_party"; } + if (type.contains(RECEIVED_PRIVATE_MESSAGE_PUSH_NOTIFICATION_KEY)) { + key = "preference_push_received_a_private_message"; + } + return sharedPreferences.getBoolean(key, true); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedPrivateMessageLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedPrivateMessageLocalNotification.java new file mode 100644 index 000000000..89e966f2e --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedPrivateMessageLocalNotification.java @@ -0,0 +1,44 @@ +package com.habitrpg.android.habitica.helpers.notifications; + +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.content.res.Resources; +import android.media.RingtoneManager; +import android.net.Uri; +import android.support.v4.app.NotificationCompat; + +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.receivers.LocalNotificationActionReceiver; +import com.habitrpg.android.habitica.ui.activities.MainActivity; + +/** + * Created by keithholliday on 7/1/16. + */ +public class ReceivedPrivateMessageLocalNotification implements HabiticaLocalNotification { + @Override + public void notifyLocally(Context context, String title, String message) { + Uri path = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); + + NotificationCompat.Builder notificationBuilder = + new NotificationCompat.Builder(context) + .setSmallIcon(R.drawable.ic_gryphon) + .setContentTitle(title) + .setContentText(message) + .setAutoCancel(true) + .setSound(path); + + Intent intent = new Intent(context, MainActivity.class); + PendingIntent pendingIntent = PendingIntent.getActivity( + context, + 3000, + intent, + PendingIntent.FLAG_UPDATE_CURRENT + ); + notificationBuilder.setContentIntent(pendingIntent); + + NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); + notificationManager.notify(10, notificationBuilder.build()); + } +} From c580a6ad9a39f9b70d8d73ee7031233e4ecd1921 Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Fri, 1 Jul 2016 13:26:49 -0500 Subject: [PATCH 07/32] Added received gems gift notification. Added quest begun notification class --- .../HabiticaLocalNotificationFactory.java | 2 + .../PushNotificationManager.java | 7 ++-- .../QuestsBegunLocalNotification.java | 42 +++++++++++++++++++ .../ReceivedGemsGiftLocalNotification.java | 42 +++++++++++++++++++ 4 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestsBegunLocalNotification.java create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedGemsGiftLocalNotification.java diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotificationFactory.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotificationFactory.java index e6dbe0c06..c83ef55f6 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotificationFactory.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotificationFactory.java @@ -15,6 +15,8 @@ public class HabiticaLocalNotificationFactory { return new PartyInviteLocalNotification(); } else if (notificationType.contains(PushNotificationManager.RECEIVED_PRIVATE_MESSAGE_PUSH_NOTIFICATION_KEY)) { return new ReceivedPrivateMessageLocalNotification(); + } else if (notificationType.contains(PushNotificationManager.RECEIVED_GEMS_PUSH_NOTIFICATION_KEY)) { + return new ReceivedGemsGiftLocalNotification(); } return null; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java index aaa1a3cfc..914b4821a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java @@ -25,6 +25,7 @@ public class PushNotificationManager { private static String DEVICE_TOKEN_PREFERENCE_STRING = "device-token-preference-string"; public static String PARTY_INVITE_PUSH_NOTIFICATION_KEY = "Invited To Party"; public static String RECEIVED_PRIVATE_MESSAGE_PUSH_NOTIFICATION_KEY = "New Message from test33@test.com:"; + public static String RECEIVED_GEMS_PUSH_NOTIFICATION_KEY = "Gems"; @Inject public APIHelper apiHelper; @@ -95,10 +96,10 @@ public class PushNotificationManager { if (type.equals(PARTY_INVITE_PUSH_NOTIFICATION_KEY)) { key = "preference_push_invited_to_party"; - } - - if (type.contains(RECEIVED_PRIVATE_MESSAGE_PUSH_NOTIFICATION_KEY)) { + } else if (type.contains(RECEIVED_PRIVATE_MESSAGE_PUSH_NOTIFICATION_KEY)) { key = "preference_push_received_a_private_message"; + } else if (type.contains(RECEIVED_GEMS_PUSH_NOTIFICATION_KEY)) { + key = "preference_push_gifted_gems"; } return sharedPreferences.getBoolean(key, true); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestsBegunLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestsBegunLocalNotification.java new file mode 100644 index 000000000..adaf2270d --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestsBegunLocalNotification.java @@ -0,0 +1,42 @@ +package com.habitrpg.android.habitica.helpers.notifications; + +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.media.RingtoneManager; +import android.net.Uri; +import android.support.v4.app.NotificationCompat; + +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.activities.MainActivity; + +/** + * Created by keithholliday on 7/1/16. + */ +public class QuestsBegunLocalNotification implements HabiticaLocalNotification { + @Override + public void notifyLocally(Context context, String title, String message) { + Uri path = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); + + NotificationCompat.Builder notificationBuilder = + new NotificationCompat.Builder(context) + .setSmallIcon(R.drawable.ic_gryphon) + .setContentTitle(title) + .setContentText(message) + .setAutoCancel(true) + .setSound(path); + + Intent intent = new Intent(context, MainActivity.class); + PendingIntent pendingIntent = PendingIntent.getActivity( + context, + 3000, + intent, + PendingIntent.FLAG_UPDATE_CURRENT + ); + notificationBuilder.setContentIntent(pendingIntent); + + NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); + notificationManager.notify(10, notificationBuilder.build()); + } +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedGemsGiftLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedGemsGiftLocalNotification.java new file mode 100644 index 000000000..576be24f0 --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedGemsGiftLocalNotification.java @@ -0,0 +1,42 @@ +package com.habitrpg.android.habitica.helpers.notifications; + +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.media.RingtoneManager; +import android.net.Uri; +import android.support.v4.app.NotificationCompat; + +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.activities.MainActivity; + +/** + * Created by keithholliday on 7/1/16. + */ +public class ReceivedGemsGiftLocalNotification implements HabiticaLocalNotification { + @Override + public void notifyLocally(Context context, String title, String message) { + Uri path = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); + + NotificationCompat.Builder notificationBuilder = + new NotificationCompat.Builder(context) + .setSmallIcon(R.drawable.ic_gryphon) + .setContentTitle(title) + .setContentText(message) + .setAutoCancel(true) + .setSound(path); + + Intent intent = new Intent(context, MainActivity.class); + PendingIntent pendingIntent = PendingIntent.getActivity( + context, + 3000, + intent, + PendingIntent.FLAG_UPDATE_CURRENT + ); + notificationBuilder.setContentIntent(pendingIntent); + + NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); + notificationManager.notify(10, notificationBuilder.build()); + } +} From 1c45ee87cc3d3170da1102590a9e9b2dfe00d14e Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Fri, 1 Jul 2016 13:30:24 -0500 Subject: [PATCH 08/32] Added receive gift subscription notification --- .../HabiticaLocalNotificationFactory.java | 2 + .../PushNotificationManager.java | 3 ++ ...ivedSubscriptionGiftLocalNotification.java | 42 +++++++++++++++++++ 3 files changed, 47 insertions(+) create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedSubscriptionGiftLocalNotification.java diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotificationFactory.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotificationFactory.java index c83ef55f6..c5da1e695 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotificationFactory.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotificationFactory.java @@ -17,6 +17,8 @@ public class HabiticaLocalNotificationFactory { return new ReceivedPrivateMessageLocalNotification(); } else if (notificationType.contains(PushNotificationManager.RECEIVED_GEMS_PUSH_NOTIFICATION_KEY)) { return new ReceivedGemsGiftLocalNotification(); + } else if (notificationType.contains(PushNotificationManager.RECEIVED_SUBSCRIPTION_GIFT_PUSH_NOTIFICATION_KEY)) { + return new ReceivedSubscriptionGiftLocalNotification(); } return null; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java index 914b4821a..fbfc9d612 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java @@ -26,6 +26,7 @@ public class PushNotificationManager { public static String PARTY_INVITE_PUSH_NOTIFICATION_KEY = "Invited To Party"; public static String RECEIVED_PRIVATE_MESSAGE_PUSH_NOTIFICATION_KEY = "New Message from test33@test.com:"; public static String RECEIVED_GEMS_PUSH_NOTIFICATION_KEY = "Gems"; + public static String RECEIVED_SUBSCRIPTION_GIFT_PUSH_NOTIFICATION_KEY = "Subscription"; @Inject public APIHelper apiHelper; @@ -100,6 +101,8 @@ public class PushNotificationManager { key = "preference_push_received_a_private_message"; } else if (type.contains(RECEIVED_GEMS_PUSH_NOTIFICATION_KEY)) { key = "preference_push_gifted_gems"; + } else if (type.contains(RECEIVED_SUBSCRIPTION_GIFT_PUSH_NOTIFICATION_KEY)) { + key = "preference_push_gifted_subscription"; } return sharedPreferences.getBoolean(key, true); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedSubscriptionGiftLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedSubscriptionGiftLocalNotification.java new file mode 100644 index 000000000..553ce5796 --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedSubscriptionGiftLocalNotification.java @@ -0,0 +1,42 @@ +package com.habitrpg.android.habitica.helpers.notifications; + +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.media.RingtoneManager; +import android.net.Uri; +import android.support.v4.app.NotificationCompat; + +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.activities.MainActivity; + +/** + * Created by keithholliday on 7/1/16. + */ +public class ReceivedSubscriptionGiftLocalNotification implements HabiticaLocalNotification { + @Override + public void notifyLocally(Context context, String title, String message) { + Uri path = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); + + NotificationCompat.Builder notificationBuilder = + new NotificationCompat.Builder(context) + .setSmallIcon(R.drawable.ic_gryphon) + .setContentTitle(title) + .setContentText(message) + .setAutoCancel(true) + .setSound(path); + + Intent intent = new Intent(context, MainActivity.class); + PendingIntent pendingIntent = PendingIntent.getActivity( + context, + 3000, + intent, + PendingIntent.FLAG_UPDATE_CURRENT + ); + notificationBuilder.setContentIntent(pendingIntent); + + NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); + notificationManager.notify(10, notificationBuilder.build()); + } +} From c834d020ac0beb68cc0216c4f5aa03dff47e8ac5 Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Fri, 1 Jul 2016 14:20:42 -0500 Subject: [PATCH 09/32] Added quest begun, invite to party and invite to guild local notifications --- Habitica/res/values/strings.xml | 6 +- .../GuildInviteLocalNotification.java | 56 +++++++++++++++++++ .../HabiticaLocalNotificationFactory.java | 6 ++ .../PushNotificationManager.java | 11 +++- .../QuestBegunLocalNotification.java | 42 ++++++++++++++ .../QuestInviteLocalNotification.java | 56 +++++++++++++++++++ 6 files changed, 175 insertions(+), 2 deletions(-) create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/GuildInviteLocalNotification.java create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestBegunLocalNotification.java create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestInviteLocalNotification.java diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index a80079ffc..f8ea6fd5a 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -377,6 +377,10 @@ To start, which parts of your life do you want to improve? ACCEPT_PARTY_INVITE - ACCEPT_PARTY_INVITE + REJECT_PARTY_INVITE + ACCEPT_GUILD_INVITE + REJECT_GUILD_INVITE + ACCEPT_QUEST_INVITE + REJECT_QUEST_INVITE diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/GuildInviteLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/GuildInviteLocalNotification.java new file mode 100644 index 000000000..b259874ab --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/GuildInviteLocalNotification.java @@ -0,0 +1,56 @@ +package com.habitrpg.android.habitica.helpers.notifications; + +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.content.res.Resources; +import android.media.RingtoneManager; +import android.net.Uri; +import android.support.v4.app.NotificationCompat; + +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.receivers.LocalNotificationActionReceiver; + +/** + * Created by keithholliday on 7/1/16. + */ +public class GuildInviteLocalNotification implements HabiticaLocalNotification { + @Override + public void notifyLocally(Context context, String title, String message) { + Uri path = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); + + NotificationCompat.Builder notificationBuilder = + new NotificationCompat.Builder(context) + .setSmallIcon(R.drawable.ic_gryphon) + .setContentTitle(title) + .setContentText(message) + .setAutoCancel(true) + .setSound(path); + + Resources res = context.getResources(); + + Intent acceptInviteIntent = new Intent(context, LocalNotificationActionReceiver.class); + acceptInviteIntent.setAction(res.getString(R.string.accept_guild_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_guild_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); + notificationManager.notify(10, notificationBuilder.build()); + } +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotificationFactory.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotificationFactory.java index c5da1e695..9cc361ed4 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotificationFactory.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotificationFactory.java @@ -19,6 +19,12 @@ public class HabiticaLocalNotificationFactory { return new ReceivedGemsGiftLocalNotification(); } else if (notificationType.contains(PushNotificationManager.RECEIVED_SUBSCRIPTION_GIFT_PUSH_NOTIFICATION_KEY)) { return new ReceivedSubscriptionGiftLocalNotification(); + } else if (notificationType.contains(PushNotificationManager.GUILD_INVITE_PUSH_NOTIFICATION_KEY)) { + return new GuildInviteLocalNotification(); + } else if (notificationType.contains(PushNotificationManager.QUEST_INVITE_PUSH_NOTIFICATION_KEY)) { + return new QuestInviteLocalNotification(); + } else if (notificationType.contains(PushNotificationManager.QUEST_BEGUN_PUSH_NOTIFICATION_KEY)) { + return new QuestBegunLocalNotification(); } return null; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java index fbfc9d612..d3cf80124 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java @@ -24,9 +24,12 @@ public class PushNotificationManager { private static PushNotificationManager instance = null; private static String DEVICE_TOKEN_PREFERENCE_STRING = "device-token-preference-string"; public static String PARTY_INVITE_PUSH_NOTIFICATION_KEY = "Invited To Party"; - public static String RECEIVED_PRIVATE_MESSAGE_PUSH_NOTIFICATION_KEY = "New Message from test33@test.com:"; + public static String RECEIVED_PRIVATE_MESSAGE_PUSH_NOTIFICATION_KEY = "New Message from"; public static String RECEIVED_GEMS_PUSH_NOTIFICATION_KEY = "Gems"; public static String RECEIVED_SUBSCRIPTION_GIFT_PUSH_NOTIFICATION_KEY = "Subscription"; + public static String GUILD_INVITE_PUSH_NOTIFICATION_KEY = "Guild"; + public static String QUEST_INVITE_PUSH_NOTIFICATION_KEY = "Quest Invitation"; + public static String QUEST_BEGUN_PUSH_NOTIFICATION_KEY = "Your Quest has Begun"; @Inject public APIHelper apiHelper; @@ -103,6 +106,12 @@ public class PushNotificationManager { key = "preference_push_gifted_gems"; } else if (type.contains(RECEIVED_SUBSCRIPTION_GIFT_PUSH_NOTIFICATION_KEY)) { key = "preference_push_gifted_subscription"; + } else if (type.contains(GUILD_INVITE_PUSH_NOTIFICATION_KEY)) { + key = "preference_push_invited_to_guild"; + } else if (type.contains(QUEST_INVITE_PUSH_NOTIFICATION_KEY)) { + key = "preference_push_invited_to_quest"; + } else if (type.contains(QUEST_BEGUN_PUSH_NOTIFICATION_KEY)) { + key = "preference_push_your_quest_has_begun"; } return sharedPreferences.getBoolean(key, true); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestBegunLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestBegunLocalNotification.java new file mode 100644 index 000000000..579382076 --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestBegunLocalNotification.java @@ -0,0 +1,42 @@ +package com.habitrpg.android.habitica.helpers.notifications; + +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.media.RingtoneManager; +import android.net.Uri; +import android.support.v4.app.NotificationCompat; + +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.activities.MainActivity; + +/** + * Created by keithholliday on 7/1/16. + */ +public class QuestBegunLocalNotification implements HabiticaLocalNotification { + @Override + public void notifyLocally(Context context, String title, String message) { + Uri path = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); + + NotificationCompat.Builder notificationBuilder = + new NotificationCompat.Builder(context) + .setSmallIcon(R.drawable.ic_gryphon) + .setContentTitle(title) + .setContentText(message) + .setAutoCancel(true) + .setSound(path); + + Intent intent = new Intent(context, MainActivity.class); + PendingIntent pendingIntent = PendingIntent.getActivity( + context, + 3000, + intent, + PendingIntent.FLAG_UPDATE_CURRENT + ); + notificationBuilder.setContentIntent(pendingIntent); + + NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); + notificationManager.notify(10, notificationBuilder.build()); + } +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestInviteLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestInviteLocalNotification.java new file mode 100644 index 000000000..1dbb43639 --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestInviteLocalNotification.java @@ -0,0 +1,56 @@ +package com.habitrpg.android.habitica.helpers.notifications; + +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.content.res.Resources; +import android.media.RingtoneManager; +import android.net.Uri; +import android.support.v4.app.NotificationCompat; + +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.receivers.LocalNotificationActionReceiver; + +/** + * Created by keithholliday on 7/1/16. + */ +public class QuestInviteLocalNotification implements HabiticaLocalNotification { + @Override + public void notifyLocally(Context context, String title, String message) { + Uri path = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); + + NotificationCompat.Builder notificationBuilder = + new NotificationCompat.Builder(context) + .setSmallIcon(R.drawable.ic_gryphon) + .setContentTitle(title) + .setContentText(message) + .setAutoCancel(true) + .setSound(path); + + Resources res = context.getResources(); + + Intent acceptInviteIntent = new Intent(context, LocalNotificationActionReceiver.class); + acceptInviteIntent.setAction(res.getString(R.string.accept_quest_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_quest_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); + notificationManager.notify(10, notificationBuilder.build()); + } +} From fa4e49abcaf32dbea361fcded197c4dbe0a2c117 Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Sat, 2 Jul 2016 10:19:59 -0500 Subject: [PATCH 10/32] Subscribe on token refresh --- .../helpers/notifications/PushNotificationManager.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java index d3cf80124..2e93b9bdb 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java @@ -57,8 +57,12 @@ public class PushNotificationManager { if (this.refreshedToken == null) { return; } + this.refreshedToken = refreshedToken; -// sharedPreferences.put + + if (this.userIsSubscribedToNotifications()) { + this.addPushDeviceUsingStoredToken(); + } } //@TODO: Use preferences @@ -93,6 +97,10 @@ public class PushNotificationManager { } } + private boolean userIsSubscribedToNotifications() { + return sharedPreferences.getBoolean("pushNotifications", true); + } + private boolean userIsSubscribedToNotificationType(String type) { String key = ""; From 0883cab950433c0267250a4c796d139d0686f788 Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Sat, 2 Jul 2016 11:29:29 -0500 Subject: [PATCH 11/32] Added invitations to user model --- .../HabiticaFirebaseInstanceIDService.java | 1 - .../HabiticaFirebaseMessagingService.java | 1 + .../lib/models/HabitRPGUser.java | 18 +++++ .../lib/models/invitations/GuildInvite.java | 76 +++++++++++++++++++ .../lib/models/invitations/Invitations.java | 71 +++++++++++++++++ .../lib/models/invitations/PartyInvite.java | 73 ++++++++++++++++++ 6 files changed, 239 insertions(+), 1 deletion(-) create mode 100644 Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/invitations/GuildInvite.java create mode 100644 Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/invitations/Invitations.java create mode 100644 Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/invitations/PartyInvite.java diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseInstanceIDService.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseInstanceIDService.java index 7b07087ec..c9504930a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseInstanceIDService.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseInstanceIDService.java @@ -23,7 +23,6 @@ public class HabiticaFirebaseInstanceIDService extends FirebaseInstanceIdService pushNotificationManager = PushNotificationManager.getInstance(this); String refreshedToken = FirebaseInstanceId.getInstance().getToken(); pushNotificationManager.setRefreshedToken(refreshedToken); - Log.d("test", "Refreshed token: " + refreshedToken); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.java index 3f092b72b..d5c4d7c4a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.java @@ -12,6 +12,7 @@ public class HabiticaFirebaseMessagingService extends FirebaseMessagingService { @Override public void onMessageReceived(RemoteMessage remoteMessage) { Log.d("test", "Notification Message Body: " + remoteMessage.getNotification().getBody()); + Log.d("test", "Notification Message Body: " + remoteMessage.getData().toString()); PushNotificationManager pushNotificationManager = PushNotificationManager.getInstance(this); pushNotificationManager.displayNotification(remoteMessage); diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java index 211d0ee4a..eea72813f 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java @@ -4,6 +4,7 @@ import com.google.gson.annotations.SerializedName; import com.habitrpg.android.habitica.HabitDatabase; import com.habitrpg.android.habitica.ui.AvatarView; +import com.magicmicky.habitrpgwrapper.lib.models.invitations.Invitations; import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; import com.magicmicky.habitrpgwrapper.lib.models.tasks.TasksOrder; import com.raizlabs.android.dbflow.annotation.Column; @@ -92,6 +93,12 @@ public class HabitRPGUser extends BaseModel { foreignColumnName = "user_id")}) private ContributorInfo contributor; + @Column + @ForeignKey(references = {@ForeignKeyReference(columnName = "invitations_id", + columnType = String.class, + foreignColumnName = "user_id")}) + private Invitations invitations; + private Purchases purchased; private TasksOrder tasksOrder; @@ -137,6 +144,7 @@ public class HabitRPGUser extends BaseModel { this.profile = profile; } +<<<<<<< e956287345a142dd1171f260872d6f1813f43d22 public ContributorInfo getContributor() { return contributor; } @@ -145,6 +153,13 @@ public class HabitRPGUser extends BaseModel { this.contributor = contributor; } + public Invitations getInvitations() { + return invitations; + } + + public void setInvitations(Invitations invitations) { + this.invitations = invitations; + } public UserParty getParty() { return party; @@ -293,6 +308,9 @@ public class HabitRPGUser extends BaseModel { authentication.user_id = id; flags.user_id = id; if (contributor != null) { contributor.user_id = id; } + contributor.user_id = id; + invitations.user_id = id; + ArrayList allTasks = new ArrayList(); if (dailys != null) { diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/invitations/GuildInvite.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/invitations/GuildInvite.java new file mode 100644 index 000000000..e3d1a7291 --- /dev/null +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/invitations/GuildInvite.java @@ -0,0 +1,76 @@ +package com.magicmicky.habitrpgwrapper.lib.models.invitations; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +/** + * Created by keithholliday on 7/2/16. + */ +public class GuildInvite { + + @SerializedName("inviter") + @Expose + private String inviter; + + @SerializedName("name") + @Expose + private String name; + + @SerializedName("id") + @Expose + private String id; + + /** + * + * @return + * The inviter + */ + public String getInviter() { + return inviter; + } + + /** + * + * @param inviter + * The inviter + */ + public void setInviter(String inviter) { + this.inviter = inviter; + } + + /** + * + * @return + * The name + */ + public String getName() { + return name; + } + + /** + * + * @param name + * The name + */ + public void setName(String name) { + this.name = name; + } + + /** + * + * @return + * The id + */ + public String getId() { + return id; + } + + /** + * + * @param id + * The id + */ + public void setId(String id) { + this.id = id; + } +} diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/invitations/Invitations.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/invitations/Invitations.java new file mode 100644 index 000000000..64dcf9c98 --- /dev/null +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/invitations/Invitations.java @@ -0,0 +1,71 @@ +package com.magicmicky.habitrpgwrapper.lib.models.invitations; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; +import com.habitrpg.android.habitica.HabitDatabase; +import com.magicmicky.habitrpgwrapper.lib.models.invitations.PartyInvite; +import com.raizlabs.android.dbflow.annotation.Column; +import com.raizlabs.android.dbflow.annotation.NotNull; +import com.raizlabs.android.dbflow.annotation.PrimaryKey; +import com.raizlabs.android.dbflow.annotation.Table; +import com.raizlabs.android.dbflow.structure.BaseModel; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * Created by keithholliday on 7/2/16. + */ +@Table(databaseName = HabitDatabase.NAME) +public class Invitations extends BaseModel { + + @Column + @PrimaryKey + @NotNull + public String user_id; + + @SerializedName("party") + @Expose + private Map party; + + @SerializedName("guilds") + @Expose + private List guilds = new ArrayList(); + + /** + * + * @return + * The party invite + */ + public Map getParty() { + return party; + } + + /** + * + * @param party + * The party + */ + public void setParty(Map party) { + this.party = party; + } + + /** + * + * @return + * The guilds invite + */ + public List getGuilds() { + return guilds; + } + + /** + * + * @param guilds + * The guilds + */ + public void setGuilds(List guilds) { + this.guilds = guilds; + } +} diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/invitations/PartyInvite.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/invitations/PartyInvite.java new file mode 100644 index 000000000..05bb1e08c --- /dev/null +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/invitations/PartyInvite.java @@ -0,0 +1,73 @@ +package com.magicmicky.habitrpgwrapper.lib.models.invitations; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +/** + * Created by keithholliday on 7/2/16. + */ +public class PartyInvite { + @SerializedName("id") + @Expose + private String id; + @SerializedName("name") + @Expose + private String name; + @SerializedName("inviter") + @Expose + private String inviter; + + /** + * + * @return + * The id + */ + public String getId() { + return id; + } + + /** + * + * @param id + * The id + */ + public void setId(String id) { + this.id = id; + } + + /** + * + * @return + * The name + */ + public String getName() { + return name; + } + + /** + * + * @param name + * The name + */ + public void setName(String name) { + this.name = name; + } + + /** + * + * @return + * The inviter + */ + public String getInviter() { + return inviter; + } + + /** + * + * @param inviter + * The inviter + */ + public void setInviter(String inviter) { + this.inviter = inviter; + } +} From 59bf3f9b807bfdb6fe8d4bd83de9f2ffedc9973f Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Sat, 2 Jul 2016 11:45:19 -0500 Subject: [PATCH 12/32] Added party notification actions --- .../receivers/LocalNotificationActionReceiver.java | 8 ++++++-- .../lib/models/invitations/Invitations.java | 6 +++--- 2 files changed, 9 insertions(+), 5 deletions(-) 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 index 3cd526c9e..04ea865af 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/LocalNotificationActionReceiver.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/LocalNotificationActionReceiver.java @@ -47,11 +47,15 @@ public class LocalNotificationActionReceiver extends BroadcastReceiver implement //@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") + if (this.user.getInvitations().getParty() == null) return; + String partyId = this.user.getInvitations().getParty().getId(); + apiHelper.apiService.joinGroup(partyId) .compose(apiHelper.configureApiCallObserver()) .subscribe(aVoid -> {}, throwable -> {}); } else if (action.equals(this.resources.getString(R.string.reject_party_invite))) { - apiHelper.apiService.rejectGroupInvite("party") + if (this.user.getInvitations().getParty() == null) return; + String partyId = this.user.getInvitations().getParty().getId(); + apiHelper.apiService.rejectGroupInvite(partyId) .compose(apiHelper.configureApiCallObserver()) .subscribe(aVoid -> {}, throwable -> {}); } diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/invitations/Invitations.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/invitations/Invitations.java index 64dcf9c98..d09fda0e8 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/invitations/Invitations.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/invitations/Invitations.java @@ -27,7 +27,7 @@ public class Invitations extends BaseModel { @SerializedName("party") @Expose - private Map party; + private PartyInvite party; @SerializedName("guilds") @Expose @@ -38,7 +38,7 @@ public class Invitations extends BaseModel { * @return * The party invite */ - public Map getParty() { + public PartyInvite getParty() { return party; } @@ -47,7 +47,7 @@ public class Invitations extends BaseModel { * @param party * The party */ - public void setParty(Map party) { + public void setParty(PartyInvite party) { this.party = party; } From 057b734ee5a39aab04224b9a4d5c7ba194b9deec Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Sat, 2 Jul 2016 13:11:35 -0500 Subject: [PATCH 13/32] Added use of push identifier --- .../helpers/notifications/PushNotificationManager.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java index 2e93b9bdb..70c0ae5fa 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java @@ -24,11 +24,11 @@ public class PushNotificationManager { private static PushNotificationManager instance = null; private static String DEVICE_TOKEN_PREFERENCE_STRING = "device-token-preference-string"; public static String PARTY_INVITE_PUSH_NOTIFICATION_KEY = "Invited To Party"; - public static String RECEIVED_PRIVATE_MESSAGE_PUSH_NOTIFICATION_KEY = "New Message from"; + public static String RECEIVED_PRIVATE_MESSAGE_PUSH_NOTIFICATION_KEY = "newPM"; public static String RECEIVED_GEMS_PUSH_NOTIFICATION_KEY = "Gems"; public static String RECEIVED_SUBSCRIPTION_GIFT_PUSH_NOTIFICATION_KEY = "Subscription"; public static String GUILD_INVITE_PUSH_NOTIFICATION_KEY = "Guild"; - public static String QUEST_INVITE_PUSH_NOTIFICATION_KEY = "Quest Invitation"; + public static String QUEST_INVITE_PUSH_NOTIFICATION_KEY = "questInvitation"; public static String QUEST_BEGUN_PUSH_NOTIFICATION_KEY = "Your Quest has Begun"; @Inject @@ -90,9 +90,11 @@ public class PushNotificationManager { } public void displayNotification (RemoteMessage remoteMessage) { + String remoteMessageIdentifier = remoteMessage.getData().get("identifier"); + HabiticaLocalNotificationFactory notificationFactory = new HabiticaLocalNotificationFactory(); - HabiticaLocalNotification notification = notificationFactory.build(remoteMessage.getNotification().getBody()); - if (userIsSubscribedToNotificationType(remoteMessage.getNotification().getBody()) && notification != null) { + HabiticaLocalNotification notification = notificationFactory.build(remoteMessageIdentifier); + if (userIsSubscribedToNotificationType(remoteMessageIdentifier) && notification != null) { notification.notifyLocally(this.context, remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody()); } } From a020bd6f2d696c47d2084d035a604e1440ceed31 Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Sat, 2 Jul 2016 13:35:38 -0500 Subject: [PATCH 14/32] Added quest actions --- Habitica/AndroidManifest.xml | 2 ++ .../HabiticaFirebaseMessagingService.java | 2 +- .../notifications/PushNotificationManager.java | 2 +- .../QuestInviteLocalNotification.java | 4 ++-- .../receivers/LocalNotificationActionReceiver.java | 14 +++++++++++++- 5 files changed, 19 insertions(+), 5 deletions(-) diff --git a/Habitica/AndroidManifest.xml b/Habitica/AndroidManifest.xml index 15f767a52..4741a895f 100644 --- a/Habitica/AndroidManifest.xml +++ b/Habitica/AndroidManifest.xml @@ -127,6 +127,8 @@ + + diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.java index d5c4d7c4a..5a21f5e97 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.java @@ -12,7 +12,7 @@ public class HabiticaFirebaseMessagingService extends FirebaseMessagingService { @Override public void onMessageReceived(RemoteMessage remoteMessage) { Log.d("test", "Notification Message Body: " + remoteMessage.getNotification().getBody()); - Log.d("test", "Notification Message Body: " + remoteMessage.getData().toString()); + Log.d("test", "Notification Message Body: " + remoteMessage.getData().get("identifier")); PushNotificationManager pushNotificationManager = PushNotificationManager.getInstance(this); pushNotificationManager.displayNotification(remoteMessage); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java index 70c0ae5fa..f84820933 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java @@ -29,7 +29,7 @@ public class PushNotificationManager { public static String RECEIVED_SUBSCRIPTION_GIFT_PUSH_NOTIFICATION_KEY = "Subscription"; public static String GUILD_INVITE_PUSH_NOTIFICATION_KEY = "Guild"; public static String QUEST_INVITE_PUSH_NOTIFICATION_KEY = "questInvitation"; - public static String QUEST_BEGUN_PUSH_NOTIFICATION_KEY = "Your Quest has Begun"; + public static String QUEST_BEGUN_PUSH_NOTIFICATION_KEY = "questStarted"; @Inject public APIHelper apiHelper; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestInviteLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestInviteLocalNotification.java index 1dbb43639..0273f38a7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestInviteLocalNotification.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestInviteLocalNotification.java @@ -40,12 +40,12 @@ public class QuestInviteLocalNotification implements HabiticaLocalNotification { ); notificationBuilder.addAction(R.drawable.ic_gryphon, "Accept", pendingIntentAccept); - Intent rejectInviteIntent = new Intent(); + Intent rejectInviteIntent = new Intent(context, LocalNotificationActionReceiver.class); rejectInviteIntent.setAction(res.getString(R.string.reject_quest_invite)); PendingIntent pendingIntentReject = PendingIntent.getBroadcast( context, 2000, - acceptInviteIntent, + rejectInviteIntent, PendingIntent.FLAG_UPDATE_CURRENT ); notificationBuilder.addAction(R.drawable.ic_gryphon, "Reject", pendingIntentReject); 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 index 04ea865af..d3305e265 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/LocalNotificationActionReceiver.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/LocalNotificationActionReceiver.java @@ -45,7 +45,7 @@ public class LocalNotificationActionReceiver extends BroadcastReceiver implement private void handleLocalNotificationAction(String action) { //@TODO: This is a good place for a factory and event emitter pattern - + Log.v("test", action); if (action.equals(this.resources.getString(R.string.accept_party_invite))) { if (this.user.getInvitations().getParty() == null) return; String partyId = this.user.getInvitations().getParty().getId(); @@ -58,6 +58,18 @@ public class LocalNotificationActionReceiver extends BroadcastReceiver implement apiHelper.apiService.rejectGroupInvite(partyId) .compose(apiHelper.configureApiCallObserver()) .subscribe(aVoid -> {}, throwable -> {}); + } else if (action.equals(this.resources.getString(R.string.accept_quest_invite))) { + if (this.user.getParty() == null) return; + String partyId = this.user.getParty().getId(); + apiHelper.apiService.acceptQuest(partyId) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(aVoid -> {}, throwable -> {}); + } else if (action.equals(this.resources.getString(R.string.reject_quest_invite))) { + if (this.user.getParty() == null) return; + String partyId = this.user.getParty().getId(); + apiHelper.apiService.rejectQuest(partyId) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(aVoid -> {}, throwable -> {}); } } } From eaed54db57925bfa062ec6b981fd8c3e8142b2f3 Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Sat, 2 Jul 2016 13:44:47 -0500 Subject: [PATCH 15/32] Added won a challenge local notification --- .../HabiticaLocalNotificationFactory.java | 2 + .../PushNotificationManager.java | 4 ++ .../WonChallengeLocalNotification.java | 42 +++++++++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/WonChallengeLocalNotification.java diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotificationFactory.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotificationFactory.java index 9cc361ed4..3abb8db9d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotificationFactory.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotificationFactory.java @@ -25,6 +25,8 @@ public class HabiticaLocalNotificationFactory { return new QuestInviteLocalNotification(); } else if (notificationType.contains(PushNotificationManager.QUEST_BEGUN_PUSH_NOTIFICATION_KEY)) { return new QuestBegunLocalNotification(); + } else if (notificationType.contains(PushNotificationManager.WON_CHALLENGE_PUSH_NOTIFICATION_KEY)) { + return new WonChallengeLocalNotification(); } return null; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java index f84820933..be38aec8d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java @@ -30,6 +30,8 @@ public class PushNotificationManager { public static String GUILD_INVITE_PUSH_NOTIFICATION_KEY = "Guild"; public static String QUEST_INVITE_PUSH_NOTIFICATION_KEY = "questInvitation"; public static String QUEST_BEGUN_PUSH_NOTIFICATION_KEY = "questStarted"; + public static String WON_CHALLENGE_PUSH_NOTIFICATION_KEY = "wonChallenge"; + @Inject public APIHelper apiHelper; @@ -122,6 +124,8 @@ public class PushNotificationManager { key = "preference_push_invited_to_quest"; } else if (type.contains(QUEST_BEGUN_PUSH_NOTIFICATION_KEY)) { key = "preference_push_your_quest_has_begun"; + } else if (type.contains(WON_CHALLENGE_PUSH_NOTIFICATION_KEY)) { + key = "preference_push_you_won_challenge"; } return sharedPreferences.getBoolean(key, true); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/WonChallengeLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/WonChallengeLocalNotification.java new file mode 100644 index 000000000..8b30869bd --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/WonChallengeLocalNotification.java @@ -0,0 +1,42 @@ +package com.habitrpg.android.habitica.helpers.notifications; + +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.media.RingtoneManager; +import android.net.Uri; +import android.support.v4.app.NotificationCompat; + +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.activities.MainActivity; + +/** + * Created by keithholliday on 7/2/16. + */ +public class WonChallengeLocalNotification implements HabiticaLocalNotification { + @Override + public void notifyLocally(Context context, String title, String message) { + Uri path = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); + + NotificationCompat.Builder notificationBuilder = + new NotificationCompat.Builder(context) + .setSmallIcon(R.drawable.ic_gryphon) + .setContentTitle(title) + .setContentText(message) + .setAutoCancel(true) + .setSound(path); + + Intent intent = new Intent(context, MainActivity.class); + PendingIntent pendingIntent = PendingIntent.getActivity( + context, + 3000, + intent, + PendingIntent.FLAG_UPDATE_CURRENT + ); + notificationBuilder.setContentIntent(pendingIntent); + + NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); + notificationManager.notify(10, notificationBuilder.build()); + } +} From cad531936aa1a05bc98e6c5e4b228eb532c1ed6e Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Sat, 2 Jul 2016 14:25:38 -0500 Subject: [PATCH 16/32] Added guild invite actions --- .../GuildInviteLocalNotification.java | 17 +++++++++++++-- .../HabiticaFirebaseMessagingService.java | 2 +- .../HabiticaLocalNotification.java | 3 +++ .../PartyInviteLocalNotification.java | 7 +++++++ .../PushNotificationManager.java | 4 ++-- .../QuestBegunLocalNotification.java | 7 +++++++ .../QuestInviteLocalNotification.java | 7 +++++++ .../QuestsBegunLocalNotification.java | 7 +++++++ .../ReceivedGemsGiftLocalNotification.java | 7 +++++++ ...ceivedPrivateMessageLocalNotification.java | 7 +++++++ ...ivedSubscriptionGiftLocalNotification.java | 7 +++++++ .../WonChallengeLocalNotification.java | 7 +++++++ .../LocalNotificationActionReceiver.java | 21 +++++++++++++++++-- 13 files changed, 96 insertions(+), 7 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/GuildInviteLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/GuildInviteLocalNotification.java index b259874ab..5bc9f5307 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/GuildInviteLocalNotification.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/GuildInviteLocalNotification.java @@ -7,15 +7,21 @@ import android.content.Intent; import android.content.res.Resources; import android.media.RingtoneManager; import android.net.Uri; +import android.os.Bundle; import android.support.v4.app.NotificationCompat; import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.receivers.LocalNotificationActionReceiver; +import java.util.Map; + /** * Created by keithholliday on 7/1/16. */ public class GuildInviteLocalNotification implements HabiticaLocalNotification { + + private Map data; + @Override public void notifyLocally(Context context, String title, String message) { Uri path = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); @@ -32,6 +38,7 @@ public class GuildInviteLocalNotification implements HabiticaLocalNotification { Intent acceptInviteIntent = new Intent(context, LocalNotificationActionReceiver.class); acceptInviteIntent.setAction(res.getString(R.string.accept_guild_invite)); + acceptInviteIntent.putExtra("groupID", this.data.get("groupID")); PendingIntent pendingIntentAccept = PendingIntent.getBroadcast( context, 3000, @@ -40,12 +47,13 @@ public class GuildInviteLocalNotification implements HabiticaLocalNotification { ); notificationBuilder.addAction(R.drawable.ic_gryphon, "Accept", pendingIntentAccept); - Intent rejectInviteIntent = new Intent(); + Intent rejectInviteIntent = new Intent(context, LocalNotificationActionReceiver.class); rejectInviteIntent.setAction(res.getString(R.string.reject_guild_invite)); + rejectInviteIntent.putExtra("groupID", this.data.get("groupID")); PendingIntent pendingIntentReject = PendingIntent.getBroadcast( context, 2000, - acceptInviteIntent, + rejectInviteIntent, PendingIntent.FLAG_UPDATE_CURRENT ); notificationBuilder.addAction(R.drawable.ic_gryphon, "Reject", pendingIntentReject); @@ -53,4 +61,9 @@ public class GuildInviteLocalNotification implements HabiticaLocalNotification { NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); notificationManager.notify(10, notificationBuilder.build()); } + + @Override + public void setExtras(Map data) { + this.data = data; + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.java index 5a21f5e97..c640998bc 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.java @@ -12,7 +12,7 @@ public class HabiticaFirebaseMessagingService extends FirebaseMessagingService { @Override public void onMessageReceived(RemoteMessage remoteMessage) { Log.d("test", "Notification Message Body: " + remoteMessage.getNotification().getBody()); - Log.d("test", "Notification Message Body: " + remoteMessage.getData().get("identifier")); + Log.d("test", "Notification Message Body: " + remoteMessage.getData()); PushNotificationManager pushNotificationManager = PushNotificationManager.getInstance(this); pushNotificationManager.displayNotification(remoteMessage); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotification.java index 511923d9e..686e3d281 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotification.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotification.java @@ -2,6 +2,8 @@ package com.habitrpg.android.habitica.helpers.notifications; import android.content.Context; +import java.util.Map; + /** * Created by keithholliday on 6/28/16. */ @@ -9,4 +11,5 @@ public interface HabiticaLocalNotification { void notifyLocally(Context context, String title, String message); + void setExtras(Map data); } 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 1b65d94e0..a50200dfe 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 @@ -16,6 +16,8 @@ import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.receivers.LocalNotificationActionReceiver; import com.habitrpg.android.habitica.ui.activities.MainActivity; +import java.util.Map; + /** * Created by keithholliday on 6/28/16. */ @@ -59,4 +61,9 @@ public class PartyInviteLocalNotification implements HabiticaLocalNotification { notificationManager.notify(10, notificationBuilder.build()); } + @Override + public void setExtras(Map data) { + + } + } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java index be38aec8d..3caeb1b99 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java @@ -22,12 +22,11 @@ import javax.inject.Inject; public class PushNotificationManager { private static PushNotificationManager instance = null; - private static String DEVICE_TOKEN_PREFERENCE_STRING = "device-token-preference-string"; public static String PARTY_INVITE_PUSH_NOTIFICATION_KEY = "Invited To Party"; public static String RECEIVED_PRIVATE_MESSAGE_PUSH_NOTIFICATION_KEY = "newPM"; public static String RECEIVED_GEMS_PUSH_NOTIFICATION_KEY = "Gems"; public static String RECEIVED_SUBSCRIPTION_GIFT_PUSH_NOTIFICATION_KEY = "Subscription"; - public static String GUILD_INVITE_PUSH_NOTIFICATION_KEY = "Guild"; + public static String GUILD_INVITE_PUSH_NOTIFICATION_KEY = "invitedGuild"; public static String QUEST_INVITE_PUSH_NOTIFICATION_KEY = "questInvitation"; public static String QUEST_BEGUN_PUSH_NOTIFICATION_KEY = "questStarted"; public static String WON_CHALLENGE_PUSH_NOTIFICATION_KEY = "wonChallenge"; @@ -97,6 +96,7 @@ public class PushNotificationManager { HabiticaLocalNotificationFactory notificationFactory = new HabiticaLocalNotificationFactory(); HabiticaLocalNotification notification = notificationFactory.build(remoteMessageIdentifier); if (userIsSubscribedToNotificationType(remoteMessageIdentifier) && notification != null) { + notification.setExtras(remoteMessage.getData()); notification.notifyLocally(this.context, remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody()); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestBegunLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestBegunLocalNotification.java index 579382076..41023b89d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestBegunLocalNotification.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestBegunLocalNotification.java @@ -11,6 +11,8 @@ import android.support.v4.app.NotificationCompat; import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.ui.activities.MainActivity; +import java.util.Map; + /** * Created by keithholliday on 7/1/16. */ @@ -39,4 +41,9 @@ public class QuestBegunLocalNotification implements HabiticaLocalNotification { NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); notificationManager.notify(10, notificationBuilder.build()); } + + @Override + public void setExtras(Map data) { + + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestInviteLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestInviteLocalNotification.java index 0273f38a7..d3d1a41dc 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestInviteLocalNotification.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestInviteLocalNotification.java @@ -12,6 +12,8 @@ import android.support.v4.app.NotificationCompat; import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.receivers.LocalNotificationActionReceiver; +import java.util.Map; + /** * Created by keithholliday on 7/1/16. */ @@ -53,4 +55,9 @@ public class QuestInviteLocalNotification implements HabiticaLocalNotification { NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); notificationManager.notify(10, notificationBuilder.build()); } + + @Override + public void setExtras(Map data) { + + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestsBegunLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestsBegunLocalNotification.java index adaf2270d..8c90b6664 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestsBegunLocalNotification.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestsBegunLocalNotification.java @@ -11,6 +11,8 @@ import android.support.v4.app.NotificationCompat; import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.ui.activities.MainActivity; +import java.util.Map; + /** * Created by keithholliday on 7/1/16. */ @@ -39,4 +41,9 @@ public class QuestsBegunLocalNotification implements HabiticaLocalNotification { NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); notificationManager.notify(10, notificationBuilder.build()); } + + @Override + public void setExtras(Map data) { + + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedGemsGiftLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedGemsGiftLocalNotification.java index 576be24f0..63fe5658b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedGemsGiftLocalNotification.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedGemsGiftLocalNotification.java @@ -11,6 +11,8 @@ import android.support.v4.app.NotificationCompat; import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.ui.activities.MainActivity; +import java.util.Map; + /** * Created by keithholliday on 7/1/16. */ @@ -39,4 +41,9 @@ public class ReceivedGemsGiftLocalNotification implements HabiticaLocalNotificat NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); notificationManager.notify(10, notificationBuilder.build()); } + + @Override + public void setExtras(Map data) { + + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedPrivateMessageLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedPrivateMessageLocalNotification.java index 89e966f2e..576164279 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedPrivateMessageLocalNotification.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedPrivateMessageLocalNotification.java @@ -13,6 +13,8 @@ import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.receivers.LocalNotificationActionReceiver; import com.habitrpg.android.habitica.ui.activities.MainActivity; +import java.util.Map; + /** * Created by keithholliday on 7/1/16. */ @@ -41,4 +43,9 @@ public class ReceivedPrivateMessageLocalNotification implements HabiticaLocalNot NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); notificationManager.notify(10, notificationBuilder.build()); } + + @Override + public void setExtras(Map data) { + + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedSubscriptionGiftLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedSubscriptionGiftLocalNotification.java index 553ce5796..3bbf54958 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedSubscriptionGiftLocalNotification.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedSubscriptionGiftLocalNotification.java @@ -11,6 +11,8 @@ import android.support.v4.app.NotificationCompat; import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.ui.activities.MainActivity; +import java.util.Map; + /** * Created by keithholliday on 7/1/16. */ @@ -39,4 +41,9 @@ public class ReceivedSubscriptionGiftLocalNotification implements HabiticaLocalN NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); notificationManager.notify(10, notificationBuilder.build()); } + + @Override + public void setExtras(Map data) { + + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/WonChallengeLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/WonChallengeLocalNotification.java index 8b30869bd..3912414dc 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/WonChallengeLocalNotification.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/WonChallengeLocalNotification.java @@ -11,6 +11,8 @@ import android.support.v4.app.NotificationCompat; import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.ui.activities.MainActivity; +import java.util.Map; + /** * Created by keithholliday on 7/2/16. */ @@ -39,4 +41,9 @@ public class WonChallengeLocalNotification implements HabiticaLocalNotification NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); notificationManager.notify(10, notificationBuilder.build()); } + + @Override + public void setExtras(Map data) { + + } } 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 index d3305e265..a60882035 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/LocalNotificationActionReceiver.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/LocalNotificationActionReceiver.java @@ -4,6 +4,7 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.res.Resources; +import android.os.Bundle; import android.util.Log; import com.habitrpg.android.habitica.APIHelper; @@ -24,13 +25,15 @@ public class LocalNotificationActionReceiver extends BroadcastReceiver implement private HabitRPGUser user; private String action; private Resources resources; + private Intent intent; @Override - public void onReceive(Context context, Intent arg1) { + public void onReceive(Context context, Intent intent) { HabiticaApplication.getInstance(context).getComponent().inject(this); this.resources = context.getResources(); - this.action = arg1.getAction(); + this.action = intent.getAction(); + this.intent = intent; this.apiHelper.apiService.getUser() .compose(this.apiHelper.configureApiCallObserver()) @@ -70,6 +73,20 @@ public class LocalNotificationActionReceiver extends BroadcastReceiver implement apiHelper.apiService.rejectQuest(partyId) .compose(apiHelper.configureApiCallObserver()) .subscribe(aVoid -> {}, throwable -> {}); + } else if (action.equals(this.resources.getString(R.string.accept_guild_invite))) { + Bundle extras = this.intent.getExtras(); + String guildId = extras.getString("groupID"); + if (guildId == null) return; + apiHelper.apiService.joinGroup(guildId) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(aVoid -> {}, throwable -> {}); + } else if (action.equals(this.resources.getString(R.string.reject_guild_invite))) { + Bundle extras = this.intent.getExtras(); + String guildId = extras.getString("groupID"); + if (guildId == null) return; + apiHelper.apiService.rejectGroupInvite(guildId) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(aVoid -> {}, throwable -> {}); } } } From 31f4ea6c0d7acff90845658983c834a8ada27a6a Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Sun, 3 Jul 2016 11:12:27 -0500 Subject: [PATCH 17/32] Ensured user gets subscribed to notification --- .../PushNotificationManager.java | 11 ++++- ...ceivedPrivateMessageLocalNotification.java | 9 +++- .../LocalNotificationActionReceiver.java | 7 ++- .../habitica/ui/activities/LoginActivity.java | 48 +++++++++++++++++++ .../habitica/ui/activities/MainActivity.java | 4 ++ 5 files changed, 75 insertions(+), 4 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java index 3caeb1b99..9c107412f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java @@ -22,6 +22,8 @@ import javax.inject.Inject; public class PushNotificationManager { private static PushNotificationManager instance = null; + public static String DEVICE_TOKEN_PREFERENCE_KEY = "device-token-preference"; + public static String PARTY_INVITE_PUSH_NOTIFICATION_KEY = "Invited To Party"; public static String RECEIVED_PRIVATE_MESSAGE_PUSH_NOTIFICATION_KEY = "newPM"; public static String RECEIVED_GEMS_PUSH_NOTIFICATION_KEY = "Gems"; @@ -49,6 +51,7 @@ public class PushNotificationManager { instance = new PushNotificationManager(context); } + instance.refreshedToken = instance.sharedPreferences.getString(DEVICE_TOKEN_PREFERENCE_KEY, ""); instance.context = context; return instance; @@ -60,6 +63,10 @@ public class PushNotificationManager { } this.refreshedToken = refreshedToken; + SharedPreferences.Editor editor = sharedPreferences.edit(); + editor.putString(DEVICE_TOKEN_PREFERENCE_KEY, refreshedToken); + editor.commit(); + if (this.userIsSubscribedToNotifications()) { this.addPushDeviceUsingStoredToken(); @@ -68,11 +75,11 @@ public class PushNotificationManager { //@TODO: Use preferences public void addPushDeviceUsingStoredToken () { - if (this.refreshedToken == null) { + if (this.refreshedToken == null || this.refreshedToken.isEmpty()) { this.refreshedToken = FirebaseInstanceId.getInstance().getToken(); } - if (this.refreshedToken == null) { + if (this.refreshedToken == null || this.refreshedToken.isEmpty()) { return; } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedPrivateMessageLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedPrivateMessageLocalNotification.java index 576164279..9dd3d7649 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedPrivateMessageLocalNotification.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedPrivateMessageLocalNotification.java @@ -1,5 +1,6 @@ package com.habitrpg.android.habitica.helpers.notifications; +import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; @@ -8,6 +9,9 @@ import android.content.res.Resources; import android.media.RingtoneManager; import android.net.Uri; import android.support.v4.app.NotificationCompat; +import android.support.v4.app.RemoteInput; +import android.util.Log; +import android.widget.RemoteViews; import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.receivers.LocalNotificationActionReceiver; @@ -19,6 +23,7 @@ import java.util.Map; * Created by keithholliday on 7/1/16. */ public class ReceivedPrivateMessageLocalNotification implements HabiticaLocalNotification { + @Override public void notifyLocally(Context context, String title, String message) { Uri path = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); @@ -31,13 +36,15 @@ public class ReceivedPrivateMessageLocalNotification implements HabiticaLocalNot .setAutoCancel(true) .setSound(path); - Intent intent = new Intent(context, MainActivity.class); + Intent intent = new Intent(context, LocalNotificationActionReceiver.class); +// rejectInviteIntent.setAction(res.getString(R.string.reject_guild_invite)); PendingIntent pendingIntent = PendingIntent.getActivity( context, 3000, intent, PendingIntent.FLAG_UPDATE_CURRENT ); + notificationBuilder.setContentIntent(pendingIntent); NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); 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 index a60882035..90e8fe8c1 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/LocalNotificationActionReceiver.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/LocalNotificationActionReceiver.java @@ -1,5 +1,6 @@ package com.habitrpg.android.habitica.receivers; +import android.app.NotificationManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -26,6 +27,7 @@ public class LocalNotificationActionReceiver extends BroadcastReceiver implement private String action; private Resources resources; private Intent intent; + private Context conext; @Override public void onReceive(Context context, Intent intent) { @@ -34,6 +36,7 @@ public class LocalNotificationActionReceiver extends BroadcastReceiver implement this.action = intent.getAction(); this.intent = intent; + this.conext = conext; this.apiHelper.apiService.getUser() .compose(this.apiHelper.configureApiCallObserver()) @@ -48,7 +51,6 @@ public class LocalNotificationActionReceiver extends BroadcastReceiver implement private void handleLocalNotificationAction(String action) { //@TODO: This is a good place for a factory and event emitter pattern - Log.v("test", action); if (action.equals(this.resources.getString(R.string.accept_party_invite))) { if (this.user.getInvitations().getParty() == null) return; String partyId = this.user.getInvitations().getParty().getId(); @@ -88,5 +90,8 @@ public class LocalNotificationActionReceiver extends BroadcastReceiver implement .compose(apiHelper.configureApiCallObserver()) .subscribe(aVoid -> {}, throwable -> {}); } + + NotificationManager notificationManager = (NotificationManager) this.conext.getSystemService(this.conext.NOTIFICATION_SERVICE); + notificationManager.cancel(10); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.java index 364968838..bdeb3efae 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.java @@ -214,6 +214,54 @@ public class LoginActivity extends BaseActivity hide(this.mConfirmPasswordRow); } } + } + + private View.OnClickListener mLoginNormalClick = new View.OnClickListener() { + @Override + public void onClick(View v) { + mProgressBar.setVisibility(View.VISIBLE); + if (isRegistering) { + String username, email,password,cpassword; + username = String.valueOf(mUsernameET.getText()).trim(); + email = String.valueOf(mEmail.getText()).trim(); + password = String.valueOf(mPasswordET.getText()); + cpassword = String.valueOf(mConfirmPassword.getText()); + if (username.length() == 0 || password.length() == 0 || email.length() == 0 || cpassword.length() == 0) { + showValidationError(R.string.login_validation_error_fieldsmissing); + return; + } + apiHelper.registerUser(username,email,password, cpassword) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(LoginActivity.this, throwable -> {hideProgress();}); + } else { + String username,password; + username = String.valueOf(mUsernameET.getText()).trim(); + password = String.valueOf(mPasswordET.getText()); + if (username.length() == 0 || password.length() == 0) { + showValidationError(R.string.login_validation_error_fieldsmissing); + return; + } + apiHelper.connectUser(username,password) + .compose(apiHelper.configureApiCallObserver()) + .subscribe(LoginActivity.this, throwable -> {hideProgress();}); + } + } + }; + + private View.OnClickListener mForgotPWClick = v -> { + String url = BuildConfig.BASE_URL; + Intent i = new Intent(Intent.ACTION_VIEW); + i.setData(Uri.parse(url)); + startActivity(i); + }; + + + public static void show(final View v) { + v.setVisibility(View.VISIBLE); + } + + public static void hide(final View v) { + v.setVisibility(View.GONE); } private void startMainActivity() { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java index 7c685e246..71f499fe5 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java @@ -32,6 +32,7 @@ import com.habitrpg.android.habitica.events.commands.OpenMenuItemCommand; import com.habitrpg.android.habitica.events.commands.SellItemCommand; import com.habitrpg.android.habitica.events.commands.UnlockPathCommand; import com.habitrpg.android.habitica.events.commands.UpdateUserCommand; +import com.habitrpg.android.habitica.helpers.notifications.PushNotificationManager; import com.habitrpg.android.habitica.ui.AvatarView; import com.habitrpg.android.habitica.ui.AvatarWithBarsViewModel; import com.habitrpg.android.habitica.ui.TutorialView; @@ -221,6 +222,9 @@ public class MainActivity extends BaseActivity implements Action1, Ha //Check if reminder alarm is set scheduleReminder(this); + PushNotificationManager pushNotificationManager = PushNotificationManager.getInstance(this); + pushNotificationManager.addPushDeviceUsingStoredToken(); + new Select().from(HabitRPGUser.class).where(Condition.column("id").eq(hostConfig.getUser())).async().querySingle(userTransactionListener); setupToolbar(toolbar); From 17f3e87050d875d7802ffb0c18d73c361dae0b30 Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Mon, 4 Jul 2016 20:10:54 -0500 Subject: [PATCH 18/32] Updated identifiers. Fixed party notification --- .../helpers/notifications/PartyInviteLocalNotification.java | 4 ++-- .../helpers/notifications/PushNotificationManager.java | 6 +++--- .../habitica/receivers/LocalNotificationActionReceiver.java | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) 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 a50200dfe..9388364f5 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 @@ -47,12 +47,12 @@ public class PartyInviteLocalNotification implements HabiticaLocalNotification { ); notificationBuilder.addAction(R.drawable.ic_gryphon, "Accept", pendingIntentAccept); - Intent rejectInviteIntent = new Intent(); + Intent rejectInviteIntent = new Intent(context, LocalNotificationActionReceiver.class); rejectInviteIntent.setAction(res.getString(R.string.reject_party_invite)); PendingIntent pendingIntentReject = PendingIntent.getBroadcast( context, 2000, - acceptInviteIntent, + rejectInviteIntent, PendingIntent.FLAG_UPDATE_CURRENT ); notificationBuilder.addAction(R.drawable.ic_gryphon, "Reject", pendingIntentReject); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java index 9c107412f..e45a19403 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java @@ -24,10 +24,10 @@ public class PushNotificationManager { private static PushNotificationManager instance = null; public static String DEVICE_TOKEN_PREFERENCE_KEY = "device-token-preference"; - public static String PARTY_INVITE_PUSH_NOTIFICATION_KEY = "Invited To Party"; + public static String PARTY_INVITE_PUSH_NOTIFICATION_KEY = "invitedParty"; public static String RECEIVED_PRIVATE_MESSAGE_PUSH_NOTIFICATION_KEY = "newPM"; - public static String RECEIVED_GEMS_PUSH_NOTIFICATION_KEY = "Gems"; - public static String RECEIVED_SUBSCRIPTION_GIFT_PUSH_NOTIFICATION_KEY = "Subscription"; + public static String RECEIVED_GEMS_PUSH_NOTIFICATION_KEY = "giftedGems"; + public static String RECEIVED_SUBSCRIPTION_GIFT_PUSH_NOTIFICATION_KEY = "giftedSubscription"; public static String GUILD_INVITE_PUSH_NOTIFICATION_KEY = "invitedGuild"; public static String QUEST_INVITE_PUSH_NOTIFICATION_KEY = "questInvitation"; public static String QUEST_BEGUN_PUSH_NOTIFICATION_KEY = "questStarted"; 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 index 90e8fe8c1..cad645295 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/LocalNotificationActionReceiver.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/LocalNotificationActionReceiver.java @@ -50,6 +50,9 @@ public class LocalNotificationActionReceiver extends BroadcastReceiver implement } private void handleLocalNotificationAction(String action) { + NotificationManager notificationManager = (NotificationManager) this.conext.getSystemService(this.conext.NOTIFICATION_SERVICE); + notificationManager.cancel(10); + //@TODO: This is a good place for a factory and event emitter pattern if (action.equals(this.resources.getString(R.string.accept_party_invite))) { if (this.user.getInvitations().getParty() == null) return; @@ -90,8 +93,5 @@ public class LocalNotificationActionReceiver extends BroadcastReceiver implement .compose(apiHelper.configureApiCallObserver()) .subscribe(aVoid -> {}, throwable -> {}); } - - NotificationManager notificationManager = (NotificationManager) this.conext.getSystemService(this.conext.NOTIFICATION_SERVICE); - notificationManager.cancel(10); } } From 51029dacbe3225311d9188489cd9761a7ccfa14d Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Mon, 4 Jul 2016 22:39:51 -0500 Subject: [PATCH 19/32] Removed icon from notification actions --- .../GuildInviteLocalNotification.java | 4 +- .../PartyInviteLocalNotification.java | 4 +- .../QuestBegunLocalNotification.java | 2 +- .../QuestInviteLocalNotification.java | 6 +-- .../QuestsBegunLocalNotification.java | 49 ------------------- ...ceivedPrivateMessageLocalNotification.java | 1 - .../LocalNotificationActionReceiver.java | 2 +- 7 files changed, 9 insertions(+), 59 deletions(-) delete mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestsBegunLocalNotification.java diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/GuildInviteLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/GuildInviteLocalNotification.java index 5bc9f5307..8c6e15cc7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/GuildInviteLocalNotification.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/GuildInviteLocalNotification.java @@ -45,7 +45,7 @@ public class GuildInviteLocalNotification implements HabiticaLocalNotification { acceptInviteIntent, PendingIntent.FLAG_UPDATE_CURRENT ); - notificationBuilder.addAction(R.drawable.ic_gryphon, "Accept", pendingIntentAccept); + notificationBuilder.addAction(0, "Accept", pendingIntentAccept); Intent rejectInviteIntent = new Intent(context, LocalNotificationActionReceiver.class); rejectInviteIntent.setAction(res.getString(R.string.reject_guild_invite)); @@ -56,7 +56,7 @@ public class GuildInviteLocalNotification implements HabiticaLocalNotification { rejectInviteIntent, PendingIntent.FLAG_UPDATE_CURRENT ); - notificationBuilder.addAction(R.drawable.ic_gryphon, "Reject", pendingIntentReject); + notificationBuilder.addAction(0, "Reject", pendingIntentReject); NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); notificationManager.notify(10, notificationBuilder.build()); 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 9388364f5..190f30218 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 @@ -45,7 +45,7 @@ public class PartyInviteLocalNotification implements HabiticaLocalNotification { acceptInviteIntent, PendingIntent.FLAG_UPDATE_CURRENT ); - notificationBuilder.addAction(R.drawable.ic_gryphon, "Accept", pendingIntentAccept); + notificationBuilder.addAction(0, "Accept", pendingIntentAccept); Intent rejectInviteIntent = new Intent(context, LocalNotificationActionReceiver.class); rejectInviteIntent.setAction(res.getString(R.string.reject_party_invite)); @@ -55,7 +55,7 @@ public class PartyInviteLocalNotification implements HabiticaLocalNotification { rejectInviteIntent, PendingIntent.FLAG_UPDATE_CURRENT ); - notificationBuilder.addAction(R.drawable.ic_gryphon, "Reject", pendingIntentReject); + notificationBuilder.addAction(0, "Reject", pendingIntentReject); NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); notificationManager.notify(10, notificationBuilder.build()); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestBegunLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestBegunLocalNotification.java index 41023b89d..b58d4b620 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestBegunLocalNotification.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestBegunLocalNotification.java @@ -39,7 +39,7 @@ public class QuestBegunLocalNotification implements HabiticaLocalNotification { notificationBuilder.setContentIntent(pendingIntent); NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); - notificationManager.notify(10, notificationBuilder.build()); + notificationManager.notify(10000, notificationBuilder.build()); } @Override diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestInviteLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestInviteLocalNotification.java index d3d1a41dc..221346c03 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestInviteLocalNotification.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestInviteLocalNotification.java @@ -40,7 +40,7 @@ public class QuestInviteLocalNotification implements HabiticaLocalNotification { acceptInviteIntent, PendingIntent.FLAG_UPDATE_CURRENT ); - notificationBuilder.addAction(R.drawable.ic_gryphon, "Accept", pendingIntentAccept); + notificationBuilder.addAction(0, "Accept", pendingIntentAccept); Intent rejectInviteIntent = new Intent(context, LocalNotificationActionReceiver.class); rejectInviteIntent.setAction(res.getString(R.string.reject_quest_invite)); @@ -50,10 +50,10 @@ public class QuestInviteLocalNotification implements HabiticaLocalNotification { rejectInviteIntent, PendingIntent.FLAG_UPDATE_CURRENT ); - notificationBuilder.addAction(R.drawable.ic_gryphon, "Reject", pendingIntentReject); + notificationBuilder.addAction(0, "Reject", pendingIntentReject); NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); - notificationManager.notify(10, notificationBuilder.build()); + notificationManager.notify(10000, notificationBuilder.build()); } @Override diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestsBegunLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestsBegunLocalNotification.java deleted file mode 100644 index 8c90b6664..000000000 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestsBegunLocalNotification.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.habitrpg.android.habitica.helpers.notifications; - -import android.app.NotificationManager; -import android.app.PendingIntent; -import android.content.Context; -import android.content.Intent; -import android.media.RingtoneManager; -import android.net.Uri; -import android.support.v4.app.NotificationCompat; - -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.ui.activities.MainActivity; - -import java.util.Map; - -/** - * Created by keithholliday on 7/1/16. - */ -public class QuestsBegunLocalNotification implements HabiticaLocalNotification { - @Override - public void notifyLocally(Context context, String title, String message) { - Uri path = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); - - NotificationCompat.Builder notificationBuilder = - new NotificationCompat.Builder(context) - .setSmallIcon(R.drawable.ic_gryphon) - .setContentTitle(title) - .setContentText(message) - .setAutoCancel(true) - .setSound(path); - - Intent intent = new Intent(context, MainActivity.class); - PendingIntent pendingIntent = PendingIntent.getActivity( - context, - 3000, - intent, - PendingIntent.FLAG_UPDATE_CURRENT - ); - notificationBuilder.setContentIntent(pendingIntent); - - NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); - notificationManager.notify(10, notificationBuilder.build()); - } - - @Override - public void setExtras(Map data) { - - } -} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedPrivateMessageLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedPrivateMessageLocalNotification.java index 9dd3d7649..7d9203642 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedPrivateMessageLocalNotification.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedPrivateMessageLocalNotification.java @@ -37,7 +37,6 @@ public class ReceivedPrivateMessageLocalNotification implements HabiticaLocalNot .setSound(path); Intent intent = new Intent(context, LocalNotificationActionReceiver.class); -// rejectInviteIntent.setAction(res.getString(R.string.reject_guild_invite)); PendingIntent pendingIntent = PendingIntent.getActivity( context, 3000, 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 index cad645295..d9527289a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/LocalNotificationActionReceiver.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/LocalNotificationActionReceiver.java @@ -51,7 +51,7 @@ public class LocalNotificationActionReceiver extends BroadcastReceiver implement private void handleLocalNotificationAction(String action) { NotificationManager notificationManager = (NotificationManager) this.conext.getSystemService(this.conext.NOTIFICATION_SERVICE); - notificationManager.cancel(10); + notificationManager.cancelAll(); //@TODO: This is a good place for a factory and event emitter pattern if (action.equals(this.resources.getString(R.string.accept_party_invite))) { From c8b05d54b82e57bfd3e0afabfada476262f6e73f Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Tue, 5 Jul 2016 11:31:14 -0500 Subject: [PATCH 20/32] Added dismiss notification when action is clicked --- .../helpers/notifications/QuestInviteLocalNotification.java | 2 +- .../habitica/receivers/LocalNotificationActionReceiver.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestInviteLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestInviteLocalNotification.java index 221346c03..f87c3abd7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestInviteLocalNotification.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestInviteLocalNotification.java @@ -52,7 +52,7 @@ public class QuestInviteLocalNotification implements HabiticaLocalNotification { ); notificationBuilder.addAction(0, "Reject", pendingIntentReject); - NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); + NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(10000, 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 index d9527289a..506b41c67 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/LocalNotificationActionReceiver.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/LocalNotificationActionReceiver.java @@ -27,7 +27,7 @@ public class LocalNotificationActionReceiver extends BroadcastReceiver implement private String action; private Resources resources; private Intent intent; - private Context conext; + private Context context; @Override public void onReceive(Context context, Intent intent) { @@ -36,7 +36,7 @@ public class LocalNotificationActionReceiver extends BroadcastReceiver implement this.action = intent.getAction(); this.intent = intent; - this.conext = conext; + this.context = context; this.apiHelper.apiService.getUser() .compose(this.apiHelper.configureApiCallObserver()) @@ -50,7 +50,7 @@ public class LocalNotificationActionReceiver extends BroadcastReceiver implement } private void handleLocalNotificationAction(String action) { - NotificationManager notificationManager = (NotificationManager) this.conext.getSystemService(this.conext.NOTIFICATION_SERVICE); + NotificationManager notificationManager = (NotificationManager) this.context.getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.cancelAll(); //@TODO: This is a good place for a factory and event emitter pattern From 2bf908f9de6fd47ddb0a88ff19b2a64c9baab0d4 Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Tue, 5 Jul 2016 12:20:10 -0500 Subject: [PATCH 21/32] Ensured user was subscribed to notification only when they do not have the device token --- .../PushNotificationManager.java | 30 +++++++++++++--- .../habitica/ui/activities/MainActivity.java | 8 +++-- .../lib/models/HabitRPGUser.java | 10 ++++++ .../lib/models/PushDevice.java | 34 +++++++++++++++++++ 4 files changed, 74 insertions(+), 8 deletions(-) create mode 100644 Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/PushDevice.java diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java index e45a19403..ed58f8288 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java @@ -10,6 +10,8 @@ import com.google.firebase.messaging.RemoteMessage; import com.habitrpg.android.habitica.APIHelper; import com.habitrpg.android.habitica.HabiticaApplication; import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback; +import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; +import com.magicmicky.habitrpgwrapper.lib.models.PushDevice; import java.util.HashMap; import java.util.Map; @@ -40,12 +42,18 @@ public class PushNotificationManager { private String refreshedToken; private SharedPreferences sharedPreferences; private Context context; + private HabitRPGUser user; protected PushNotificationManager(Context context) { HabiticaApplication.getInstance(context).getComponent().inject(this); sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); } + public void setUser(HabitRPGUser user) { + Log.v("test", "sdffsdf"); + this.user = user; + } + public static PushNotificationManager getInstance(Context context) { if(instance == null) { instance = new PushNotificationManager(context); @@ -66,11 +74,6 @@ public class PushNotificationManager { SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString(DEVICE_TOKEN_PREFERENCE_KEY, refreshedToken); editor.commit(); - - - if (this.userIsSubscribedToNotifications()) { - this.addPushDeviceUsingStoredToken(); - } } //@TODO: Use preferences @@ -82,6 +85,14 @@ public class PushNotificationManager { if (this.refreshedToken == null || this.refreshedToken.isEmpty()) { return; } + Log.v("Test", this.user.toString()); + if (this.user == null || this.userHasPushDevice()) { + return; + } + + if (!this.userIsSubscribedToNotifications()) { + return; + } Map pushDeviceData = new HashMap(); pushDeviceData.put("regId", this.refreshedToken); @@ -97,6 +108,15 @@ public class PushNotificationManager { .subscribe(aVoid -> {}, throwable -> {}); } + private Boolean userHasPushDevice() { + for(PushDevice pushDevice : this.user.getPushDevices()) { + if(pushDevice.getRegId().equals(this.refreshedToken)) { + return true; + } + } + return false; + } + public void displayNotification (RemoteMessage remoteMessage) { String remoteMessageIdentifier = remoteMessage.getData().get("identifier"); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java index 71f499fe5..dfdd1e5fd 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java @@ -206,6 +206,8 @@ public class MainActivity extends BaseActivity implements Action1, Ha return (Math.round(value * Math.pow(10, n))) / (Math.pow(10, n)); } + PushNotificationManager pushNotificationManager; + @Override protected int getLayoutResId() { return R.layout.activity_main; @@ -222,8 +224,7 @@ public class MainActivity extends BaseActivity implements Action1, Ha //Check if reminder alarm is set scheduleReminder(this); - PushNotificationManager pushNotificationManager = PushNotificationManager.getInstance(this); - pushNotificationManager.addPushDeviceUsingStoredToken(); + pushNotificationManager = PushNotificationManager.getInstance(this); new Select().from(HabitRPGUser.class).where(Condition.column("id").eq(hostConfig.getUser())).async().querySingle(userTransactionListener); @@ -352,8 +353,9 @@ public class MainActivity extends BaseActivity implements Action1, Ha displayDeathDialogIfNeeded(); if (!fromLocalDb) { - displayNewInboxMessagesBadge(); + pushNotificationManager.setUser(user); + pushNotificationManager.addPushDeviceUsingStoredToken(); // Update the oldEntries new Thread(() -> { diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java index eea72813f..5521c042c 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java @@ -99,6 +99,8 @@ public class HabitRPGUser extends BaseModel { foreignColumnName = "user_id")}) private Invitations invitations; + private List pushDevices = new ArrayList(); + private Purchases purchased; private TasksOrder tasksOrder; @@ -297,6 +299,14 @@ public class HabitRPGUser extends BaseModel { this.tasksOrder = tasksOrder; } + public List getPushDevices() { + return this.pushDevices; + } + + public void setPushDevices(List pushDevices) { + this.pushDevices = pushDevices; + } + @Override public void save() { // We need to set the user_id to all other objects diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/PushDevice.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/PushDevice.java new file mode 100644 index 000000000..c70ec2a06 --- /dev/null +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/PushDevice.java @@ -0,0 +1,34 @@ +package com.magicmicky.habitrpgwrapper.lib.models; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +/** + * Created by keithholliday on 7/5/16. + */ +public class PushDevice { + + @SerializedName("regId") + @Expose + private String regId; + + @SerializedName("type") + @Expose + private String type; + + public String getRegId() { + return this.regId; + } + + public void setRegId(String regId) { + this.regId = regId; + } + + public String getType() { + return this.type; + } + + public void setType(String type) { + this.type = type; + } +} From 3a774858b4e1433dd5e2f816fa3a1a6428e60693 Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Fri, 8 Jul 2016 16:01:53 -0500 Subject: [PATCH 22/32] Added example google services. Added instruction for google services. --- Habitica/google-services.json.example | 73 +++++++++++++++++++++++++++ README.md | 3 +- 2 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 Habitica/google-services.json.example diff --git a/Habitica/google-services.json.example b/Habitica/google-services.json.example new file mode 100644 index 000000000..07d605784 --- /dev/null +++ b/Habitica/google-services.json.example @@ -0,0 +1,73 @@ +{ + "project_info": { + "project_number": "project-number", + "firebase_url": "https://example.firebaseio.com", + "project_id": "project-id", + "storage_bucket": "storage.bucket" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "app-id", + "android_client_info": { + "package_name": "com.example" + } + }, + "oauth_client": [ + { + "client_id": "client-key", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "api-key" + } + ], + "services": { + "analytics_service": { + "status": 1 + }, + "appinvite_service": { + "status": 1, + "other_platform_oauth_client": [] + }, + "ads_service": { + "status": 2 + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "app-id", + "android_client_info": { + "package_name": "com.example" + } + }, + "oauth_client": [ + { + "client_id": "client-id", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "api-key" + } + ], + "services": { + "analytics_service": { + "status": 1 + }, + "appinvite_service": { + "status": 1, + "other_platform_oauth_client": [] + }, + "ads_service": { + "status": 2 + } + } + } + ], + "configuration_version": "1" +} diff --git a/README.md b/README.md index e671d23ce..284422afb 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ It's also on Google Play: src="https://play.google.com/intl/en_us/badges/images/generic/en-play-badge.png" /> -Having the application installed is a good way to be notified of new releases. However, clicking "Watch" on this +Having the application installed is a good way to be notified of new releases. However, clicking "Watch" on this repository will allow GitHub to email you whenever we publish a release. @@ -54,6 +54,7 @@ Setup Habitica build config files by simply copying the example habitica files. $ cp habitica.properties.example habitica.properties $ cp habitica.resources.example habitica.resources + $ cp Habitica/google-services.json.example Habitica/google-services.json (Get .json from Firebase Console) Note: this is the default production `habitica.properties` file for habitica.com. If you want to use a local habitica server, please modify the values in the properties file accordingly. From b1a4f7b6543307c555864318567c430c5fab2def Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Fri, 8 Jul 2016 16:02:59 -0500 Subject: [PATCH 23/32] Corrected db number --- .../main/java/com/habitrpg/android/habitica/HabitDatabase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/HabitDatabase.java b/Habitica/src/main/java/com/habitrpg/android/habitica/HabitDatabase.java index c0c6af461..f4d1cc3d4 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/HabitDatabase.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/HabitDatabase.java @@ -7,5 +7,5 @@ public class HabitDatabase { public static final String NAME = "Habitica"; - public static final int VERSION = 23; + public static final int VERSION = 24; } From 63347ab72b6cfa43be9a4d7f586da4986e78f9c4 Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Fri, 8 Jul 2016 16:13:28 -0500 Subject: [PATCH 24/32] Removed extra log --- .../habitica/helpers/notifications/PushNotificationManager.java | 1 - 1 file changed, 1 deletion(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java index ed58f8288..b91acde42 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java @@ -50,7 +50,6 @@ public class PushNotificationManager { } public void setUser(HabitRPGUser user) { - Log.v("test", "sdffsdf"); this.user = user; } From 27ad0a1ed6e6c138532ed1da7696a0b62ffab4ce Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Fri, 8 Jul 2016 16:30:02 -0500 Subject: [PATCH 25/32] Moved strings to contants file. Ensured constants will not be translated. --- Habitica/res/values/strings.constants.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Habitica/res/values/strings.constants.xml b/Habitica/res/values/strings.constants.xml index 2c56c1eb5..b7d64b085 100644 --- a/Habitica/res/values/strings.constants.xml +++ b/Habitica/res/values/strings.constants.xml @@ -7,4 +7,12 @@ Username E-mail https://habitica.com + + + ACCEPT_PARTY_INVITE + REJECT_PARTY_INVITE + ACCEPT_GUILD_INVITE + REJECT_GUILD_INVITE + ACCEPT_QUEST_INVITE + REJECT_QUEST_INVITE \ No newline at end of file From 5c8b1a676c200c441d5273f447615aa64665ca90 Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Fri, 8 Jul 2016 16:41:50 -0500 Subject: [PATCH 26/32] Fixed merge error --- .../habitica/ui/activities/LoginActivity.java | 49 ------------------- 1 file changed, 49 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.java index bdeb3efae..a36181a04 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.java @@ -84,55 +84,6 @@ public class LoginActivity extends BaseActivity TextView mForgotPWTV; private Menu menu; private CallbackManager callbackManager; - private View.OnClickListener mLoginNormalClick = new View.OnClickListener() { - @Override - public void onClick(View v) { - mProgressBar.setVisibility(View.VISIBLE); - if (isRegistering) { - String username, email, password, cpassword; - username = String.valueOf(mUsernameET.getText()).trim(); - email = String.valueOf(mEmail.getText()).trim(); - password = String.valueOf(mPasswordET.getText()); - cpassword = String.valueOf(mConfirmPassword.getText()); - if (username.length() == 0 || password.length() == 0 || email.length() == 0 || cpassword.length() == 0) { - showValidationError(R.string.login_validation_error_fieldsmissing); - return; - } - apiHelper.registerUser(username, email, password, cpassword) - .compose(apiHelper.configureApiCallObserver()) - .subscribe(LoginActivity.this, throwable -> { - hideProgress(); - }); - } else { - String username, password; - username = String.valueOf(mUsernameET.getText()).trim(); - password = String.valueOf(mPasswordET.getText()); - if (username.length() == 0 || password.length() == 0) { - showValidationError(R.string.login_validation_error_fieldsmissing); - return; - } - apiHelper.connectUser(username, password) - .compose(apiHelper.configureApiCallObserver()) - .subscribe(LoginActivity.this, throwable -> { - hideProgress(); - }); - } - } - }; - private View.OnClickListener mForgotPWClick = v -> { - String url = BuildConfig.BASE_URL; - Intent i = new Intent(Intent.ACTION_VIEW); - i.setData(Uri.parse(url)); - startActivity(i); - }; - - public static void show(final View v) { - v.setVisibility(View.VISIBLE); - } - - public static void hide(final View v) { - v.setVisibility(View.GONE); - } @Override protected int getLayoutResId() { From 634651690f8108b65d2fa7a12c0a636066c040f9 Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Fri, 8 Jul 2016 20:27:07 -0500 Subject: [PATCH 27/32] Refactored HabiticaLocalNotifications to be an abstract class --- .../GuildInviteLocalNotification.java | 27 ++++--------- .../HabiticaLocalNotification.java | 38 +++++++++++++++++-- .../PartyInviteLocalNotification.java | 27 ++++--------- .../QuestBegunLocalNotification.java | 25 ++++-------- .../QuestInviteLocalNotification.java | 25 ++++-------- .../ReceivedGemsGiftLocalNotification.java | 27 +++++-------- ...ceivedPrivateMessageLocalNotification.java | 25 ++++-------- ...ivedSubscriptionGiftLocalNotification.java | 25 ++++-------- .../WonChallengeLocalNotification.java | 25 ++++-------- 9 files changed, 93 insertions(+), 151 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/GuildInviteLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/GuildInviteLocalNotification.java index 8c6e15cc7..a728ac0cd 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/GuildInviteLocalNotification.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/GuildInviteLocalNotification.java @@ -18,22 +18,17 @@ import java.util.Map; /** * Created by keithholliday on 7/1/16. */ -public class GuildInviteLocalNotification implements HabiticaLocalNotification { - - private Map data; +public class GuildInviteLocalNotification extends HabiticaLocalNotification { @Override public void notifyLocally(Context context, String title, String message) { - Uri path = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); - - NotificationCompat.Builder notificationBuilder = - new NotificationCompat.Builder(context) - .setSmallIcon(R.drawable.ic_gryphon) - .setContentTitle(title) - .setContentText(message) - .setAutoCancel(true) - .setSound(path); + super.notifyLocally(context, title, message); + this.setNotificationActions(); + NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + notificationManager.notify(10, notificationBuilder.build()); + } + protected void setNotificationActions() { Resources res = context.getResources(); Intent acceptInviteIntent = new Intent(context, LocalNotificationActionReceiver.class); @@ -57,13 +52,5 @@ public class GuildInviteLocalNotification implements HabiticaLocalNotification { PendingIntent.FLAG_UPDATE_CURRENT ); notificationBuilder.addAction(0, "Reject", pendingIntentReject); - - NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); - notificationManager.notify(10, notificationBuilder.build()); - } - - @Override - public void setExtras(Map data) { - this.data = data; } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotification.java index 686e3d281..bad509da4 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotification.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotification.java @@ -1,15 +1,47 @@ package com.habitrpg.android.habitica.helpers.notifications; import android.content.Context; +import android.media.RingtoneManager; +import android.net.Uri; +import android.support.annotation.CallSuper; +import android.support.v4.app.NotificationCompat; + +import com.habitrpg.android.habitica.R; import java.util.Map; /** * Created by keithholliday on 6/28/16. */ -public interface HabiticaLocalNotification { +public abstract class HabiticaLocalNotification { - void notifyLocally(Context context, String title, String message); + protected Map data; + protected Context context; + protected String title; + protected String message; - void setExtras(Map data); + protected NotificationCompat.Builder notificationBuilder; + + @CallSuper + public void notifyLocally(Context context, String title, String message) { + this.context = context; + this.title = title; + this.message = message; + + Uri path = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); + + this.notificationBuilder = + new NotificationCompat.Builder(context) + .setSmallIcon(R.drawable.ic_gryphon) + .setContentTitle(title) + .setContentText(message) + .setAutoCancel(true) + .setSound(path); + } + + public void setExtras(Map data) { + this.data = data; + } + + protected abstract void setNotificationActions(); } 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 190f30218..3b1e2d5e3 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 @@ -21,20 +21,16 @@ import java.util.Map; /** * Created by keithholliday on 6/28/16. */ -public class PartyInviteLocalNotification implements HabiticaLocalNotification { +public class PartyInviteLocalNotification extends HabiticaLocalNotification { public void notifyLocally(Context context, String title, String message) { + super.notifyLocally(context, title, message); + this.setNotificationActions(); + NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + notificationManager.notify(10, notificationBuilder.build()); + } - Uri path = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); - - NotificationCompat.Builder notificationBuilder = - new NotificationCompat.Builder(context) - .setSmallIcon(R.drawable.ic_gryphon) - .setContentTitle(title) - .setContentText(message) - .setAutoCancel(true) - .setSound(path); - + protected void setNotificationActions() { Resources res = context.getResources(); Intent acceptInviteIntent = new Intent(context, LocalNotificationActionReceiver.class); @@ -56,14 +52,5 @@ public class PartyInviteLocalNotification implements HabiticaLocalNotification { PendingIntent.FLAG_UPDATE_CURRENT ); notificationBuilder.addAction(0, "Reject", pendingIntentReject); - - NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); - notificationManager.notify(10, notificationBuilder.build()); } - - @Override - public void setExtras(Map data) { - - } - } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestBegunLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestBegunLocalNotification.java index b58d4b620..f49d32ec5 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestBegunLocalNotification.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestBegunLocalNotification.java @@ -16,19 +16,16 @@ import java.util.Map; /** * Created by keithholliday on 7/1/16. */ -public class QuestBegunLocalNotification implements HabiticaLocalNotification { +public class QuestBegunLocalNotification extends HabiticaLocalNotification { @Override public void notifyLocally(Context context, String title, String message) { - Uri path = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); - - NotificationCompat.Builder notificationBuilder = - new NotificationCompat.Builder(context) - .setSmallIcon(R.drawable.ic_gryphon) - .setContentTitle(title) - .setContentText(message) - .setAutoCancel(true) - .setSound(path); + super.notifyLocally(context, title, message); + this.setNotificationActions(); + NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + notificationManager.notify(10000, notificationBuilder.build()); + } + protected void setNotificationActions() { Intent intent = new Intent(context, MainActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity( context, @@ -37,13 +34,5 @@ public class QuestBegunLocalNotification implements HabiticaLocalNotification { PendingIntent.FLAG_UPDATE_CURRENT ); notificationBuilder.setContentIntent(pendingIntent); - - NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); - notificationManager.notify(10000, notificationBuilder.build()); - } - - @Override - public void setExtras(Map data) { - } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestInviteLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestInviteLocalNotification.java index f87c3abd7..87ddbc61e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestInviteLocalNotification.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/QuestInviteLocalNotification.java @@ -17,19 +17,16 @@ import java.util.Map; /** * Created by keithholliday on 7/1/16. */ -public class QuestInviteLocalNotification implements HabiticaLocalNotification { +public class QuestInviteLocalNotification extends HabiticaLocalNotification { @Override public void notifyLocally(Context context, String title, String message) { - Uri path = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); - - NotificationCompat.Builder notificationBuilder = - new NotificationCompat.Builder(context) - .setSmallIcon(R.drawable.ic_gryphon) - .setContentTitle(title) - .setContentText(message) - .setAutoCancel(true) - .setSound(path); + super.notifyLocally(context, title, message); + this.setNotificationActions(); + NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + notificationManager.notify(10000, notificationBuilder.build()); + } + protected void setNotificationActions() { Resources res = context.getResources(); Intent acceptInviteIntent = new Intent(context, LocalNotificationActionReceiver.class); @@ -51,13 +48,5 @@ public class QuestInviteLocalNotification implements HabiticaLocalNotification { PendingIntent.FLAG_UPDATE_CURRENT ); notificationBuilder.addAction(0, "Reject", pendingIntentReject); - - NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.notify(10000, notificationBuilder.build()); - } - - @Override - public void setExtras(Map data) { - } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedGemsGiftLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedGemsGiftLocalNotification.java index 63fe5658b..7e4d394c4 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedGemsGiftLocalNotification.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedGemsGiftLocalNotification.java @@ -4,11 +4,13 @@ import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; +import android.content.res.Resources; import android.media.RingtoneManager; import android.net.Uri; import android.support.v4.app.NotificationCompat; import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.receivers.LocalNotificationActionReceiver; import com.habitrpg.android.habitica.ui.activities.MainActivity; import java.util.Map; @@ -16,19 +18,16 @@ import java.util.Map; /** * Created by keithholliday on 7/1/16. */ -public class ReceivedGemsGiftLocalNotification implements HabiticaLocalNotification { +public class ReceivedGemsGiftLocalNotification extends HabiticaLocalNotification { @Override public void notifyLocally(Context context, String title, String message) { - Uri path = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); - - NotificationCompat.Builder notificationBuilder = - new NotificationCompat.Builder(context) - .setSmallIcon(R.drawable.ic_gryphon) - .setContentTitle(title) - .setContentText(message) - .setAutoCancel(true) - .setSound(path); + super.notifyLocally(context, title, message); + this.setNotificationActions(); + NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + notificationManager.notify(10, notificationBuilder.build()); + } + protected void setNotificationActions() { Intent intent = new Intent(context, MainActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity( context, @@ -37,13 +36,5 @@ public class ReceivedGemsGiftLocalNotification implements HabiticaLocalNotificat PendingIntent.FLAG_UPDATE_CURRENT ); notificationBuilder.setContentIntent(pendingIntent); - - NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); - notificationManager.notify(10, notificationBuilder.build()); - } - - @Override - public void setExtras(Map data) { - } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedPrivateMessageLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedPrivateMessageLocalNotification.java index 7d9203642..e36f9b605 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedPrivateMessageLocalNotification.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedPrivateMessageLocalNotification.java @@ -22,20 +22,17 @@ import java.util.Map; /** * Created by keithholliday on 7/1/16. */ -public class ReceivedPrivateMessageLocalNotification implements HabiticaLocalNotification { +public class ReceivedPrivateMessageLocalNotification extends HabiticaLocalNotification { @Override public void notifyLocally(Context context, String title, String message) { - Uri path = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); - - NotificationCompat.Builder notificationBuilder = - new NotificationCompat.Builder(context) - .setSmallIcon(R.drawable.ic_gryphon) - .setContentTitle(title) - .setContentText(message) - .setAutoCancel(true) - .setSound(path); + super.notifyLocally(context, title, message); + this.setNotificationActions(); + NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); + notificationManager.notify(10, notificationBuilder.build()); + } + protected void setNotificationActions() { Intent intent = new Intent(context, LocalNotificationActionReceiver.class); PendingIntent pendingIntent = PendingIntent.getActivity( context, @@ -45,13 +42,5 @@ public class ReceivedPrivateMessageLocalNotification implements HabiticaLocalNot ); notificationBuilder.setContentIntent(pendingIntent); - - NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); - notificationManager.notify(10, notificationBuilder.build()); - } - - @Override - public void setExtras(Map data) { - } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedSubscriptionGiftLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedSubscriptionGiftLocalNotification.java index 3bbf54958..e2658ff6f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedSubscriptionGiftLocalNotification.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedSubscriptionGiftLocalNotification.java @@ -16,19 +16,16 @@ import java.util.Map; /** * Created by keithholliday on 7/1/16. */ -public class ReceivedSubscriptionGiftLocalNotification implements HabiticaLocalNotification { +public class ReceivedSubscriptionGiftLocalNotification extends HabiticaLocalNotification { @Override public void notifyLocally(Context context, String title, String message) { - Uri path = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); - - NotificationCompat.Builder notificationBuilder = - new NotificationCompat.Builder(context) - .setSmallIcon(R.drawable.ic_gryphon) - .setContentTitle(title) - .setContentText(message) - .setAutoCancel(true) - .setSound(path); + super.notifyLocally(context, title, message); + this.setNotificationActions(); + NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); + notificationManager.notify(10, notificationBuilder.build()); + } + protected void setNotificationActions() { Intent intent = new Intent(context, MainActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity( context, @@ -37,13 +34,5 @@ public class ReceivedSubscriptionGiftLocalNotification implements HabiticaLocalN PendingIntent.FLAG_UPDATE_CURRENT ); notificationBuilder.setContentIntent(pendingIntent); - - NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); - notificationManager.notify(10, notificationBuilder.build()); - } - - @Override - public void setExtras(Map data) { - } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/WonChallengeLocalNotification.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/WonChallengeLocalNotification.java index 3912414dc..62e709169 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/WonChallengeLocalNotification.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/WonChallengeLocalNotification.java @@ -16,19 +16,16 @@ import java.util.Map; /** * Created by keithholliday on 7/2/16. */ -public class WonChallengeLocalNotification implements HabiticaLocalNotification { +public class WonChallengeLocalNotification extends HabiticaLocalNotification { @Override public void notifyLocally(Context context, String title, String message) { - Uri path = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); - - NotificationCompat.Builder notificationBuilder = - new NotificationCompat.Builder(context) - .setSmallIcon(R.drawable.ic_gryphon) - .setContentTitle(title) - .setContentText(message) - .setAutoCancel(true) - .setSound(path); + super.notifyLocally(context, title, message); + this.setNotificationActions(); + NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); + notificationManager.notify(10, notificationBuilder.build()); + } + protected void setNotificationActions() { Intent intent = new Intent(context, MainActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity( context, @@ -37,13 +34,5 @@ public class WonChallengeLocalNotification implements HabiticaLocalNotification PendingIntent.FLAG_UPDATE_CURRENT ); notificationBuilder.setContentIntent(pendingIntent); - - NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); - notificationManager.notify(10, notificationBuilder.build()); - } - - @Override - public void setExtras(Map data) { - } } From b77e825960f6f31b2ab29209d288d4515562716a Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Sat, 9 Jul 2016 01:13:55 -0500 Subject: [PATCH 28/32] Removed extra logging code --- .../notifications/HabiticaFirebaseMessagingService.java | 3 --- .../helpers/notifications/PushNotificationManager.java | 4 ++-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.java index c640998bc..a4c66251c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.java @@ -11,9 +11,6 @@ import com.google.firebase.messaging.RemoteMessage; public class HabiticaFirebaseMessagingService extends FirebaseMessagingService { @Override public void onMessageReceived(RemoteMessage remoteMessage) { - Log.d("test", "Notification Message Body: " + remoteMessage.getNotification().getBody()); - Log.d("test", "Notification Message Body: " + remoteMessage.getData()); - PushNotificationManager pushNotificationManager = PushNotificationManager.getInstance(this); pushNotificationManager.displayNotification(remoteMessage); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java index b91acde42..8b0ec84a0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java @@ -84,7 +84,7 @@ public class PushNotificationManager { if (this.refreshedToken == null || this.refreshedToken.isEmpty()) { return; } - Log.v("Test", this.user.toString()); + if (this.user == null || this.userHasPushDevice()) { return; } @@ -123,7 +123,7 @@ public class PushNotificationManager { HabiticaLocalNotification notification = notificationFactory.build(remoteMessageIdentifier); if (userIsSubscribedToNotificationType(remoteMessageIdentifier) && notification != null) { notification.setExtras(remoteMessage.getData()); - notification.notifyLocally(this.context, remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody()); + notification.notifyLocally(this.context, remoteMessage.getData().get("title"), remoteMessage.getData().get("body")); } } From 730274286210e81b85207c43ef95d377cd066c46 Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Thu, 14 Jul 2016 14:10:17 -0500 Subject: [PATCH 29/32] Added google service json to travis --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 15b9c450c..52df7c594 100644 --- a/.travis.yml +++ b/.travis.yml @@ -41,5 +41,6 @@ android: script: - cp habitica.properties.travis habitica.properties - cp habitica.resources.example habitica.resources + - cp Habitica/google-services.json.example Habitica/google-services.json - ./gradlew assembleDebug - ./gradlew testDebugUnitTest --info From 4df8d3c615925cb07e452321ef390e6ba9e382d8 Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Thu, 14 Jul 2016 16:10:05 -0500 Subject: [PATCH 30/32] Updated example to use habitica debug package --- Habitica/google-services.json.example | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Habitica/google-services.json.example b/Habitica/google-services.json.example index 07d605784..a7499e800 100644 --- a/Habitica/google-services.json.example +++ b/Habitica/google-services.json.example @@ -10,7 +10,7 @@ "client_info": { "mobilesdk_app_id": "app-id", "android_client_info": { - "package_name": "com.example" + "package_name": "com.habitrpg.android.habitica.debug" } }, "oauth_client": [ @@ -41,7 +41,7 @@ "client_info": { "mobilesdk_app_id": "app-id", "android_client_info": { - "package_name": "com.example" + "package_name": "com.habitrpg.android.habitica.debug" } }, "oauth_client": [ From 4b27900d1d56d43c69ce9390e9e9e0acff51e9c8 Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Thu, 14 Jul 2016 19:11:52 -0500 Subject: [PATCH 31/32] Fixed merge issue --- .../com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java | 1 - 1 file changed, 1 deletion(-) diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java index 5521c042c..1092cfd45 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java @@ -146,7 +146,6 @@ public class HabitRPGUser extends BaseModel { this.profile = profile; } -<<<<<<< e956287345a142dd1171f260872d6f1813f43d22 public ContributorInfo getContributor() { return contributor; } From 6aa8da81a07d5ff40af3c1f28aa19bb024ba6d84 Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Tue, 2 Aug 2016 13:40:51 -0500 Subject: [PATCH 32/32] Removed strings left accidently by merge --- Habitica/res/values/strings.xml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index f8ea6fd5a..7589f7f26 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -374,13 +374,4 @@ To start, which parts of your life do you want to improve? hourglasses gold gold - - - ACCEPT_PARTY_INVITE - REJECT_PARTY_INVITE - ACCEPT_GUILD_INVITE - REJECT_GUILD_INVITE - ACCEPT_QUEST_INVITE - REJECT_QUEST_INVITE -