Skip to content

Commit b9d6929

Browse files
committed
Turned catch Throwables into a specific exception
* Catching Throwable is hiding root case exceptions which is causing unrelated exceptions to throw - Such as an NPE due to something not being set or a Thread trying to start twice. * Only first pass, many more we can clean up.
1 parent 89504ee commit b9d6929

15 files changed

+116
-73
lines changed

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

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import android.service.notification.StatusBarNotification;
3939
import android.support.annotation.RequiresApi;
4040

41+
import com.onesignal.shortcutbadger.ShortcutBadgeException;
4142
import com.onesignal.shortcutbadger.ShortcutBadger;
4243

4344
import com.onesignal.OneSignalDbContract.NotificationTable;
@@ -62,9 +63,9 @@ private static boolean areBadgeSettingsEnabled(Context context) {
6263
}
6364
else
6465
badgesEnabled = 1;
65-
} catch (Throwable t) {
66+
} catch (PackageManager.NameNotFoundException e) {
6667
badgesEnabled = 0;
67-
OneSignal.Log(OneSignal.LOG_LEVEL.ERROR, "Error reading meta-data tag 'com.onesignal.BadgeCount'. Disabling badge setting.", t);
68+
OneSignal.Log(OneSignal.LOG_LEVEL.ERROR, "Error reading meta-data tag 'com.onesignal.BadgeCount'. Disabling badge setting.", e);
6869
}
6970

7071
return (badgesEnabled == 1);
@@ -120,10 +121,13 @@ static void updateCount(int count, Context context) {
120121
if (!areBadgeSettingsEnabled(context))
121122
return;
122123

123-
// Can throw if badges are not support on the device.
124-
// Or app does not have a default launch Activity.
125124
try {
126125
ShortcutBadger.applyCountOrThrow(context, count);
127-
} catch(Throwable t) {}
126+
} catch (ShortcutBadgeException e) {
127+
// Suppress error as there are normal cases where this will throw
128+
// Can throw if:
129+
// - Badges are not support on the device.
130+
// - App does not have a default launch Activity.
131+
}
128132
}
129133
}

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

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,10 @@ private static boolean isGooglePlayStoreInstalled() {
3030
PackageManager pm = OneSignal.appContext.getPackageManager();
3131
PackageInfo info = pm.getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, PackageManager.GET_META_DATA);
3232
String label = (String) info.applicationInfo.loadLabel(pm);
33-
return (label != null && !label.equals("Market"));
34-
} catch (Throwable e) {}
33+
return (!label.equals("Market"));
34+
} catch (PackageManager.NameNotFoundException e) {
35+
// Google Play Store might not be installed, ignore exception if so
36+
}
3537

3638
return false;
3739
}
@@ -86,13 +88,15 @@ private static void OpenPlayStoreToApp(Activity activity) {
8688
GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance();
8789
int resultCode = apiAvailability.isGooglePlayServicesAvailable(OneSignal.appContext);
8890
// Send the Intent to trigger opening the store
89-
apiAvailability.getErrorResolutionPendingIntent(
90-
activity,
91-
resultCode,
92-
PLAY_SERVICES_RESOLUTION_REQUEST
93-
).send();
91+
PendingIntent pendingIntent =
92+
apiAvailability.getErrorResolutionPendingIntent(
93+
activity,
94+
resultCode,
95+
PLAY_SERVICES_RESOLUTION_REQUEST
96+
);
97+
if (pendingIntent != null)
98+
pendingIntent.send();
9499
} catch (PendingIntent.CanceledException e) {
95-
} catch (Throwable e) {
96100
e.printStackTrace();
97101
}
98102
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ static String toStringNE(JSONArray jsonArray) {
125125
try {
126126
for (int i = 0; i < jsonArray.length(); i++)
127127
strArray += "\"" + jsonArray.getString(i) + "\"";
128-
} catch (Throwable t) {}
128+
} catch (JSONException ignored) {}
129129

130130
return strArray + "]";
131131
}
@@ -148,7 +148,7 @@ static JSONObject getJSONObjectWithoutBlankValues(JSONObject jsonObject, String
148148
value = keyValues.get(key);
149149
if (!"".equals(value))
150150
toReturn.put(key, value);
151-
} catch (Throwable t) {}
151+
} catch (JSONException ignored) {}
152152
}
153153

154154
return toReturn;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,8 +164,8 @@ else if (locationCoarsePermission == PackageManager.PERMISSION_GRANTED)
164164
startGetLocation();
165165
else
166166
fireFailedComplete();
167-
} catch (Throwable t) {
168-
t.printStackTrace();
167+
} catch (PackageManager.NameNotFoundException e) {
168+
e.printStackTrace();
169169
}
170170
}
171171
else

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

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

2828
package com.onesignal;
2929

30+
import org.json.JSONException;
3031
import org.json.JSONObject;
3132

3233
public class OSEmailSubscriptionStateChanges {
@@ -46,9 +47,8 @@ public JSONObject toJSONObject() {
4647
try {
4748
mainObj.put("from", from.toJSONObject());
4849
mainObj.put("to", to.toJSONObject());
49-
}
50-
catch(Throwable t) {
51-
t.printStackTrace();
50+
} catch (JSONException e) {
51+
e.printStackTrace();
5252
}
5353

5454
return mainObj;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,8 @@ public JSONObject toJSONObject() {
141141

142142
mainObj.put("payload", payload.toJSONObject());
143143
}
144-
catch(Throwable t) {
145-
t.printStackTrace();
144+
catch(JSONException e) {
145+
e.printStackTrace();
146146
}
147147

148148
return mainObj;

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

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
package com.onesignal;
2929

3030
import java.lang.ref.WeakReference;
31+
import java.lang.reflect.InvocationTargetException;
3132
import java.lang.reflect.Method;
3233
import java.util.ArrayList;
3334
import java.util.List;
@@ -72,30 +73,39 @@ boolean notifyChange(final StateType state) {
7273
strongRefObserver = observer;
7374

7475
if (strongRefObserver != null) {
76+
Class<?> clazz = strongRefObserver.getClass();
7577
try {
76-
Class<?> clazz = strongRefObserver.getClass();
7778
final Method method = clazz.getDeclaredMethod(methodName, state.getClass());
7879
method.setAccessible(true);
7980
if (fireOnMainThread) {
8081
OSUtils.runOnMainUIThread(
81-
new Runnable() {
82-
@Override
83-
public void run() {
84-
try {
85-
method.invoke(strongRefObserver, state);
86-
}
87-
catch (Throwable t) {
88-
t.printStackTrace();
89-
}
90-
}
91-
});
92-
82+
new Runnable() {
83+
@Override
84+
public void run() {
85+
try {
86+
method.invoke(strongRefObserver, state);
87+
} catch (IllegalAccessException e) {
88+
e.printStackTrace();
89+
} catch (InvocationTargetException e) {
90+
e.printStackTrace();
91+
}
92+
}
93+
}
94+
);
9395
}
94-
else
95-
method.invoke(strongRefObserver, state);
96+
else {
97+
try {
98+
method.invoke(strongRefObserver, state);
99+
} catch (IllegalAccessException e) {
100+
e.printStackTrace();
101+
} catch (InvocationTargetException e) {
102+
e.printStackTrace();
103+
}
104+
}
105+
96106
notified = true;
97-
} catch (Throwable t) {
98-
t.printStackTrace();
107+
} catch (NoSuchMethodException e) {
108+
e.printStackTrace();
99109
}
100110
}
101111
}

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030

3131
import android.support.annotation.Nullable;
3232

33+
import org.json.JSONException;
3334
import org.json.JSONObject;
3435

3536
public class OSSubscriptionState implements Cloneable {
@@ -139,8 +140,9 @@ boolean compare(OSSubscriptionState from) {
139140
protected Object clone() {
140141
try {
141142
return super.clone();
142-
} catch (Throwable t) {}
143-
return null;
143+
} catch (CloneNotSupportedException e) {
144+
return null;
145+
}
144146
}
145147

146148
public JSONObject toJSONObject() {
@@ -160,8 +162,8 @@ public JSONObject toJSONObject() {
160162
mainObj.put("userSubscriptionSetting", userSubscriptionSetting);
161163
mainObj.put("subscribed", getSubscribed());
162164
}
163-
catch(Throwable t) {
164-
t.printStackTrace();
165+
catch(JSONException e) {
166+
e.printStackTrace();
165167
}
166168

167169
return mainObj;

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929

3030
import android.content.Context;
3131
import android.database.Cursor;
32+
import android.database.sqlite.SQLiteCantOpenDatabaseException;
3233
import android.database.sqlite.SQLiteDatabase;
3334
import android.database.sqlite.SQLiteException;
3435
import android.database.sqlite.SQLiteOpenHelper;
@@ -134,9 +135,9 @@ synchronized SQLiteDatabase getWritableDbWithRetries() {
134135
while(true) {
135136
try {
136137
return getWritableDatabase();
137-
} catch (Throwable t) {
138+
} catch (SQLiteCantOpenDatabaseException e) {
138139
if (++count >= DB_OPEN_RETRY_MAX)
139-
throw t;
140+
throw e;
140141
SystemClock.sleep(count * DB_OPEN_RETRY_BACKOFF);
141142
}
142143
}
@@ -147,9 +148,9 @@ synchronized SQLiteDatabase getReadableDbWithRetries() {
147148
while(true) {
148149
try {
149150
return getReadableDatabase();
150-
} catch (Throwable t) {
151+
} catch (SQLiteCantOpenDatabaseException e) {
151152
if (++count >= DB_OPEN_RETRY_MAX)
152-
throw t;
153+
throw e;
153154
SystemClock.sleep(count * DB_OPEN_RETRY_BACKOFF);
154155
}
155156
}

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.content.ContentValues;
44
import android.database.Cursor;
55
import android.database.sqlite.SQLiteDatabase;
6+
import android.database.sqlite.SQLiteException;
67
import android.support.annotation.WorkerThread;
78

89
import com.onesignal.OneSignalDbContract.OutcomeEventsTable;
@@ -28,14 +29,14 @@ synchronized static void deleteOldOutcomeEvent(OutcomeEvent event, OneSignalDbHe
2829
writableDb.delete(OutcomeEventsTable.TABLE_NAME,
2930
OutcomeEventsTable.COLUMN_NAME_TIMESTAMP + " = ?", new String[]{String.valueOf(event.getTimestamp())});
3031
writableDb.setTransactionSuccessful();
31-
} catch (Throwable t) {
32-
OneSignal.Log(OneSignal.LOG_LEVEL.ERROR, "Error deleting old outcome event records! ", t);
32+
} catch (SQLiteException e) {
33+
OneSignal.Log(OneSignal.LOG_LEVEL.ERROR, "Error deleting old outcome event records! ", e);
3334
} finally {
3435
if (writableDb != null) {
3536
try {
3637
writableDb.endTransaction(); // May throw if transaction was never opened or DB is full.
37-
} catch (Throwable t) {
38-
OneSignal.Log(OneSignal.LOG_LEVEL.ERROR, "Error closing transaction! ", t);
38+
} catch (SQLiteException e) {
39+
OneSignal.Log(OneSignal.LOG_LEVEL.ERROR, "Error closing transaction! ", e);
3940
}
4041
}
4142
}

0 commit comments

Comments
 (0)