Skip to content

Commit 8fb1d09

Browse files
committed
Added setEmail, default accent color option, fixed badge issue.
* Added setEmail method. * Added `com.onesignal.NotificationAccentColor.DEFAULT` manifest option. * Fixed issue a null context error with badge counts.
1 parent ddb8900 commit 8fb1d09

File tree

9 files changed

+85
-28
lines changed

9 files changed

+85
-28
lines changed

OneSignalSDK/onesignal/src/main/java/com/onesignal/BadgeCountUpdater.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
package com.onesignal;
2929

30+
import android.content.Context;
3031
import android.content.pm.ApplicationInfo;
3132
import android.content.pm.PackageManager;
3233
import android.database.Cursor;
@@ -37,11 +38,11 @@
3738

3839
class BadgeCountUpdater {
3940

40-
static void update(SQLiteDatabase readableDb) {
41+
static void update(SQLiteDatabase readableDb, Context context) {
4142
boolean isEnabled = true;
4243

4344
try {
44-
ApplicationInfo ai = OneSignal.appContext.getPackageManager().getApplicationInfo(OneSignal.appContext.getPackageName(), PackageManager.GET_META_DATA);
45+
ApplicationInfo ai = context.getPackageManager().getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
4546
Bundle bundle = ai.metaData;
4647
String defaultStr = bundle.getString("com.onesignal.BadgeCount");
4748
isEnabled = !"DISABLE".equals(defaultStr);
@@ -62,12 +63,12 @@ static void update(SQLiteDatabase readableDb) {
6263
null // sort order, new to old
6364
);
6465

65-
updateCount(cursor.getCount());
66+
updateCount(cursor.getCount(), context);
6667
cursor.close();
6768
}
6869
}
6970

70-
private static void updateCount(int count) {
71-
ShortcutBadger.applyCount(OneSignal.appContext, count);
71+
private static void updateCount(int count, Context context) {
72+
ShortcutBadger.applyCount(context, count);
7273
}
7374
}

OneSignalSDK/onesignal/src/main/java/com/onesignal/GenerateNotification.java

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -235,13 +235,11 @@ private static NotificationCompat.Builder getBaseNotificationCompatBuilder(JSONO
235235
if (notify)
236236
notifBuilder.setTicker(message);
237237

238-
// Android 5.0 accent color to use, only works when AndroidManifest.xml is
239-
// targetSdkVersion >= 21
240-
if (gcmBundle.has("bgac")) {
241-
try {
242-
notifBuilder.setColor(new BigInteger(gcmBundle.getString("bgac"), 16).intValue());
243-
} catch (Throwable t) {} // Can throw if an old android support lib is used or parse error.
244-
}
238+
try {
239+
BigInteger accentColor = getAccentColor(gcmBundle);
240+
if (accentColor != null)
241+
notifBuilder.setColor(accentColor.intValue());
242+
} catch (Throwable t) {} // Can throw if an old android support lib is used.
245243

246244
BigInteger ledColor = null;
247245

@@ -685,6 +683,22 @@ private static Uri getCustomSound(JSONObject gcmBundle) {
685683
return null;
686684
}
687685

686+
// Android 5.0 accent color to use, only works when AndroidManifest.xml is targetSdkVersion >= 21
687+
private static BigInteger getAccentColor(JSONObject gcmBundle) {
688+
try {
689+
if (gcmBundle.has("bgac"))
690+
return new BigInteger(gcmBundle.getString("bgac"), 16);
691+
} catch (Throwable t) {} // Can throw a parse error parse error.
692+
693+
try {
694+
String defaultColor = OSUtils.getManifestMeta(currentContext, "com.onesignal.NotificationAccentColor.DEFAULT");
695+
if (defaultColor != null)
696+
return new BigInteger(defaultColor, 16);
697+
} catch (Throwable t) {} // Can throw a parse error parse error.
698+
699+
return null;
700+
}
701+
688702
private static void addNotificationActionButtons(JSONObject gcmBundle, NotificationCompat.Builder mBuilder, int notificationId, String groupSummary) {
689703
try {
690704
JSONObject customJson = new JSONObject(gcmBundle.getString("custom"));

OneSignalSDK/onesignal/src/main/java/com/onesignal/NotificationBundleProcessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ private static void saveNotification(Context context, Bundle bundle, boolean ope
108108
null);
109109

110110
if (!opened)
111-
BadgeCountUpdater.update(writableDb);
111+
BadgeCountUpdater.update(writableDb, context);
112112

113113
writableDb.close();
114114
} catch (JSONException e) {

OneSignalSDK/onesignal/src/main/java/com/onesignal/NotificationOpenedProcessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ private static void markNotificationsConsumed(SQLiteDatabase writableDb) {
133133
whereStr = NotificationTable.COLUMN_NAME_ANDROID_NOTIFICATION_ID + " = " + intent.getIntExtra("notificationId", 0);
134134

135135
writableDb.update(NotificationTable.TABLE_NAME, newContentValuesWithConsumed(), whereStr, whereArgs);
136-
BadgeCountUpdater.update(writableDb);
136+
BadgeCountUpdater.update(writableDb, context);
137137
}
138138

139139
private static void updateSummaryNotification(SQLiteDatabase writableDb) {

OneSignalSDK/onesignal/src/main/java/com/onesignal/OSUtils.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,11 @@
2828
package com.onesignal;
2929

3030
import android.content.Context;
31+
import android.content.pm.ApplicationInfo;
32+
import android.content.pm.PackageManager;
3133
import android.net.ConnectivityManager;
3234
import android.net.NetworkInfo;
35+
import android.os.Bundle;
3336
import android.telephony.TelephonyManager;
3437

3538
class OSUtils {
@@ -63,4 +66,16 @@ String getCarrierName() {
6366
String carrierName = manager.getNetworkOperatorName();
6467
return "".equals(carrierName) ? null : carrierName;
6568
}
69+
70+
static String getManifestMeta(Context context, String metaName) {
71+
try {
72+
ApplicationInfo ai = context.getPackageManager().getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
73+
Bundle bundle = ai.metaData;
74+
return bundle.getString(metaName);
75+
} catch (Throwable t) {
76+
OneSignal.Log(OneSignal.LOG_LEVEL.ERROR, "", t);
77+
}
78+
79+
return null;
80+
}
6681
}

OneSignalSDK/onesignal/src/main/java/com/onesignal/OneSignal.java

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ public void init() {
160160
private static TrackGooglePurchase trackGooglePurchase;
161161
private static TrackAmazonPurchase trackAmazonPurchase;
162162

163-
public static final String VERSION = "020200";
163+
public static final String VERSION = "020300";
164164

165165
private static AdvertisingIdentifierProvider mainAdIdProvider = new AdvertisingIdProviderGPS();
166166

@@ -621,7 +621,11 @@ public void run() {
621621
userState.set("pkgs", pkgs);
622622
} catch (Throwable t) {}
623623

624-
if (AndroidSupportV4Compat.ContextCompat.checkSelfPermission(appContext, "android.permission.GET_ACCOUNTS") == PackageManager.PERMISSION_GRANTED) {
624+
final SharedPreferences prefs = getGcmPreferences(appContext);
625+
String email = prefs.getString("OS_USER_EMAIL", null);
626+
if (email != null)
627+
userState.set("email", email);
628+
else if (AndroidSupportV4Compat.ContextCompat.checkSelfPermission(appContext, "android.permission.GET_ACCOUNTS") == PackageManager.PERMISSION_GRANTED) {
625629
Account[] accounts = AccountManager.get(appContext).getAccounts();
626630
for (Account account : accounts) {
627631
if (Patterns.EMAIL_ADDRESS.matcher(account.name).matches()) {
@@ -643,6 +647,21 @@ public void run() {
643647
}).start();
644648
}
645649

650+
public static void setEmail(String email) {
651+
if (appContext == null) {
652+
Log(LOG_LEVEL.ERROR, "You must initialize OneSignal before setting email! Omitting this operation.");
653+
return;
654+
}
655+
656+
if (email != null && !"".equals(email)) {
657+
final SharedPreferences prefs = getGcmPreferences(appContext);
658+
SharedPreferences.Editor editor = prefs.edit();
659+
editor.putString("OS_USER_EMAIL", email);
660+
editor.commit();
661+
OneSignalStateSynchronizer.setEmail(email);
662+
}
663+
}
664+
646665
public static void sendTag(String key, String value) {
647666
try {
648667
sendTags(new JSONObject().put(key, value));
@@ -977,20 +996,11 @@ static void handleNotificationOpened(JSONArray data) {
977996
public static void handleNotificationOpened(Context inContext, JSONArray data, boolean fromAlert) {
978997
sendNotificationOpened(inContext, data);
979998

980-
boolean defaultOpenActionDisabled = false;
981-
try {
982-
ApplicationInfo ai = inContext.getPackageManager().getApplicationInfo(inContext.getPackageName(), PackageManager.GET_META_DATA);
983-
Bundle bundle = ai.metaData;
984-
String defaultStr = bundle.getString("com.onesignal.NotificationOpened.DEFAULT");
985-
defaultOpenActionDisabled = "DISABLE".equals(defaultStr);
986-
} catch (Throwable t) {
987-
Log(LOG_LEVEL.ERROR, "", t);
988-
}
989-
990999
boolean urlOpened = false;
1000+
boolean defaultOpenActionDisabled = "DISABLE".equals(OSUtils.getManifestMeta(inContext, "com.onesignal.NotificationOpened.DEFAULT"));
9911001

9921002
if (!defaultOpenActionDisabled)
993-
openURLFromNotification(inContext, data);
1003+
urlOpened = openURLFromNotification(inContext, data);
9941004

9951005
runNotificationOpenedCallback(data, false);
9961006

OneSignalSDK/onesignal/src/main/java/com/onesignal/OneSignalStateSynchronizer.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -600,6 +600,15 @@ static void sendTags(JSONObject newTags) {
600600
} catch (JSONException e) { e.printStackTrace(); }
601601
}
602602

603+
static void setEmail(String email) {
604+
JSONObject syncValues = getUserStateForModification().syncValues;
605+
try {
606+
System.out.println("syncValues1: " + syncValues.toString());
607+
generateJsonDiff(syncValues, new JSONObject().put("email", email), syncValues, null);
608+
System.out.println("syncValues2: " + syncValues.toString());
609+
} catch (JSONException e) { e.printStackTrace(); }
610+
}
611+
603612
static void setSubscription(boolean enable) {
604613
try {
605614
getUserStateForModification().dependValues.put("userSubscribePref", enable);

OneSignalSDK/onesignal/src/main/java/com/onesignal/PermissionsActivity.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import android.content.Intent;
3232
import android.content.pm.PackageManager;
3333
import android.os.Bundle;
34+
import android.support.annotation.NonNull;
3435

3536
import com.onesignal.AndroidSupportV4Compat.ActivityCompat;
3637

@@ -61,7 +62,7 @@ private void requestPermission() {
6162
}
6263

6364
@Override
64-
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
65+
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
6566
answered = true;
6667
waiting = false;
6768

OneSignalSDK/onesignal/src/unity/java/com/onesignal/OneSignalUnityProxy.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,4 +152,11 @@ public void onFailure(JSONObject response) {
152152
}
153153
});
154154
}
155+
156+
public void promptLocation() {
157+
OneSignal.promptLocation();
158+
}
159+
public void setEmail(String email) {
160+
OneSignal.setEmail(email);
161+
}
155162
}

0 commit comments

Comments
 (0)