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")