Skip to content

Commit 1b8eb37

Browse files
committed
Restoring old notification fix + gms prompt customizations
* Notification restoring - Notifications receiver more than 1 week ago will no longer be restored. - Ones received more than 4 weeks ago will be delete from the local db. * Google Play services out date prompt - Added disableGmsMissingPrompt method to the OneSignal.Builder class. - Added new string value keys to control the language of the prompt - onesignal_gms_missing_alert_text - onesignal_gms_missing_alert_button_update - onesignal_gms_missing_alert_button_skip - onesignal_gms_missing_alert_button_close
1 parent 6c2f520 commit 1b8eb37

File tree

5 files changed

+51
-25
lines changed

5 files changed

+51
-25
lines changed

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,8 @@ static void saveNotification(Context context, JSONObject jsonPayload, boolean op
103103
OneSignalDbHelper dbHelper = new OneSignalDbHelper(context);
104104
SQLiteDatabase writableDb = dbHelper.getWritableDatabase();
105105

106+
deleteOldNotifications(writableDb);
107+
106108
ContentValues values = new ContentValues();
107109
values.put(NotificationTable.COLUMN_NAME_NOTIFICATION_ID, customJSON.optString("i"));
108110
if (jsonPayload.has("grp"))
@@ -120,8 +122,6 @@ static void saveNotification(Context context, JSONObject jsonPayload, boolean op
120122

121123
writableDb.insert(NotificationTable.TABLE_NAME, null, values);
122124

123-
deleteOldNotifications(writableDb);
124-
125125
if (!opened)
126126
BadgeCountUpdater.update(writableDb, context);
127127

@@ -131,11 +131,10 @@ static void saveNotification(Context context, JSONObject jsonPayload, boolean op
131131
}
132132
}
133133

134-
// Clean up old records that have been dismissed or opened already after 1 week.
134+
// Clean up old records after 4 weeks.
135135
static void deleteOldNotifications(SQLiteDatabase writableDb) {
136136
writableDb.delete(NotificationTable.TABLE_NAME,
137-
NotificationTable.COLUMN_NAME_CREATED_TIME + " < " + ((System.currentTimeMillis() / 1000) - 604800) + " AND " +
138-
"(" + NotificationTable.COLUMN_NAME_DISMISSED + " = 1 OR " + NotificationTable.COLUMN_NAME_OPENED + " = 1" + ")",
137+
NotificationTable.COLUMN_NAME_CREATED_TIME + " < " + ((System.currentTimeMillis() / 1000L) - 2419200L),
139138
null);
140139
}
141140

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

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,11 @@
3333
import android.database.Cursor;
3434
import android.database.sqlite.SQLiteDatabase;
3535

36+
import com.onesignal.OneSignalDbContract.NotificationTable;
37+
3638
class NotificationRestorer {
3739

38-
private static boolean restored;
40+
public static boolean restored;
3941

4042
static void asyncRestore(final Context context) {
4143
new Thread(new Runnable() {
@@ -46,7 +48,7 @@ public void run() {
4648
}).start();
4749
}
4850

49-
static void restore(Context context) {
51+
public static void restore(Context context) {
5052
if (restored)
5153
return;
5254
restored = true;
@@ -56,27 +58,29 @@ static void restore(Context context) {
5658

5759
NotificationBundleProcessor.deleteOldNotifications(writableDb);
5860

59-
String[] retColumn = { OneSignalDbContract.NotificationTable.COLUMN_NAME_ANDROID_NOTIFICATION_ID,
60-
OneSignalDbContract.NotificationTable.COLUMN_NAME_FULL_DATA };
61+
String[] retColumn = { NotificationTable.COLUMN_NAME_ANDROID_NOTIFICATION_ID,
62+
NotificationTable.COLUMN_NAME_FULL_DATA };
6163

6264
Cursor cursor = writableDb.query(
63-
OneSignalDbContract.NotificationTable.TABLE_NAME,
65+
NotificationTable.TABLE_NAME,
6466
retColumn,
65-
OneSignalDbContract.NotificationTable.COLUMN_NAME_DISMISSED + " = 0 AND " +
66-
OneSignalDbContract.NotificationTable.COLUMN_NAME_OPENED + " = 0 AND " +
67-
OneSignalDbContract.NotificationTable.COLUMN_NAME_IS_SUMMARY + " = 0",
67+
// 1 Week back.
68+
NotificationTable.COLUMN_NAME_CREATED_TIME + " > " + ((System.currentTimeMillis() / 1000L) - 604800L) + " AND " +
69+
NotificationTable.COLUMN_NAME_DISMISSED + " = 0 AND " +
70+
NotificationTable.COLUMN_NAME_OPENED + " = 0 AND " +
71+
NotificationTable.COLUMN_NAME_IS_SUMMARY + " = 0",
6872
null,
69-
null, // group by
70-
null, // filter by row groups
71-
OneSignalDbContract.NotificationTable._ID + " ASC" // sort order, old to new
73+
null, // group by
74+
null, // filter by row groups
75+
NotificationTable._ID + " ASC" // sort order, old to new
7276
);
7377

7478
if (cursor.moveToFirst()) {
7579
boolean useExtender = (NotificationExtenderService.getIntent(context) != null);
7680

7781
do {
78-
int existingId = cursor.getInt(cursor.getColumnIndex(OneSignalDbContract.NotificationTable.COLUMN_NAME_ANDROID_NOTIFICATION_ID));
79-
String fullData = cursor.getString(cursor.getColumnIndex(OneSignalDbContract.NotificationTable.COLUMN_NAME_FULL_DATA));
82+
int existingId = cursor.getInt(cursor.getColumnIndex(NotificationTable.COLUMN_NAME_ANDROID_NOTIFICATION_ID));
83+
String fullData = cursor.getString(cursor.getColumnIndex(NotificationTable.COLUMN_NAME_FULL_DATA));
8084

8185
Intent serviceIntent;
8286

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,8 @@ public static class Builder {
107107
Context mContext;
108108
NotificationOpenedHandler mNotificationOpenedHandler;
109109
boolean mPromptLocation;
110-
110+
boolean mDisableGmsMissingPrompt;
111+
111112
private Builder() {}
112113

113114
private Builder(Context context) {
@@ -124,6 +125,11 @@ public Builder setAutoPromptLocation(boolean enable) {
124125
return this;
125126
}
126127

128+
public Builder disableGmsMissingPrompt(boolean disable) {
129+
mDisableGmsMissingPrompt = disable;
130+
return this;
131+
}
132+
127133
public void init() {
128134
OneSignal.init(this);
129135
}
@@ -157,7 +163,7 @@ public void init() {
157163
private static TrackGooglePurchase trackGooglePurchase;
158164
private static TrackAmazonPurchase trackAmazonPurchase;
159165

160-
public static final String VERSION = "020600";
166+
public static final String VERSION = "020601";
161167

162168
private static AdvertisingIdentifierProvider mainAdIdProvider = new AdvertisingIdProviderGPS();
163169

@@ -173,7 +179,7 @@ public void init() {
173179
private static Double lastLocLat, lastLocLong;
174180
private static Float lastLocAcc;
175181
private static Integer lastLocType;
176-
private static OneSignal.Builder mInitBuilder;
182+
static OneSignal.Builder mInitBuilder;
177183

178184
static Collection<JSONArray> unprocessedOpenedNotifis = new ArrayList<JSONArray>();
179185

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

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import android.content.DialogInterface.OnClickListener;
4141
import android.content.pm.PackageInfo;
4242
import android.content.pm.PackageManager;
43+
import android.content.res.Resources;
4344

4445
import java.io.IOException;
4546

@@ -106,16 +107,29 @@ private boolean checkPlayServices() {
106107
return true;
107108
}
108109

110+
private String getResourceString(Context context, String key, String defaultStr) {
111+
Resources resources = context.getResources();
112+
int bodyResId = resources.getIdentifier(key, "string", context.getPackageName());
113+
if (bodyResId != 0)
114+
return resources.getString(bodyResId);
115+
return defaultStr;
116+
}
117+
109118
private void ShowUpdateGPSDialog(final int resultCode) {
110119
OneSignal.runOnUiThread(new Runnable() {
111120
@Override
112121
public void run() {
113122
final Activity activity = ActivityLifecycleHandler.curActivity;
114-
if (activity == null)
123+
if (activity == null || OneSignal.mInitBuilder.mDisableGmsMissingPrompt)
115124
return;
116125

126+
String alertBodyText = getResourceString(activity, "onesignal_gms_missing_alert_text", "To receive push notifications please press 'Update' to enable 'Google Play services'.");
127+
String alertButtonUpdate = getResourceString(activity, "onesignal_gms_missing_alert_button_update", "Update");
128+
String alertButtonSkip = getResourceString(activity, "onesignal_gms_missing_alert_button_skip", "Skip");
129+
String alertButtonClose = getResourceString(activity, "onesignal_gms_missing_alert_button_close", "Close");
130+
117131
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
118-
builder.setMessage("To receive push notifications please press 'Update' to enable 'Google Play services'.").setPositiveButton("Update", new OnClickListener() {
132+
builder.setMessage(alertBodyText).setPositiveButton(alertButtonUpdate, new OnClickListener() {
119133
@Override
120134
public void onClick(DialogInterface dialog, int which) {
121135
try {
@@ -126,15 +140,15 @@ public void onClick(DialogInterface dialog, int which) {
126140
}
127141

128142
}
129-
}).setNegativeButton("Skip", new OnClickListener() {
143+
}).setNegativeButton(alertButtonSkip, new OnClickListener() {
130144
@Override
131145
public void onClick(DialogInterface dialog, int which) {
132146
final SharedPreferences prefs = OneSignal.getGcmPreferences(activity);
133147
SharedPreferences.Editor editor = prefs.edit();
134148
editor.putBoolean("GT_DO_NOT_SHOW_MISSING_GPS", true);
135149
editor.commit();
136150
}
137-
}).setNeutralButton("Close", null).create().show();
151+
}).setNeutralButton(alertButtonClose, null).create().show();
138152
}
139153
});
140154
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,4 +159,7 @@ public void promptLocation() {
159159
public void setEmail(String email) {
160160
OneSignal.setEmail(email);
161161
}
162+
public void clearOneSignalNotifications () {
163+
OneSignal.clearOneSignalNotifications();
164+
}
162165
}

0 commit comments

Comments
 (0)