@@ -49,6 +49,11 @@ public class SharedPreferencesManager {
4949 */
5050 private static final int INDEX_IS_SENDING = 2 ;
5151
52+ /**
53+ * Number of persisted referrers.
54+ */
55+ private static final int REFERRERS_COUNT = 10 ;
56+
5257 /**
5358 * Shared preferences of the app.
5459 */
@@ -71,14 +76,18 @@ public SharedPreferencesManager(final Context context) {
7176 */
7277 public synchronized void saveRawReferrer (final String rawReferrer , final long clickTime ) {
7378 try {
79+ if (getRawReferrer (rawReferrer , clickTime ) != null ) {
80+ return ;
81+ }
82+
7483 JSONArray rawReferrerArray = getRawReferrerArray ();
7584
76- if (getRawReferrer (rawReferrer , clickTime ) != null ) {
85+ // There are exactly REFERRERS_COUNT saved referrers, do nothing.
86+ if (rawReferrerArray .length () == REFERRERS_COUNT ) {
7787 return ;
7888 }
7989
8090 JSONArray newRawReferrer = new JSONArray ();
81-
8291 newRawReferrer .put (INDEX_RAW_REFERRER , rawReferrer );
8392 newRawReferrer .put (INDEX_CLICK_TIME , clickTime );
8493 newRawReferrer .put (INDEX_IS_SENDING , 0 );
@@ -95,7 +104,11 @@ public synchronized void saveRawReferrer(final String rawReferrer, final long cl
95104 * @param rawReferrerArray Array of referrers to be saved
96105 */
97106 public synchronized void saveRawReferrerArray (final JSONArray rawReferrerArray ) {
98- saveString (PREFS_KEY_RAW_REFERRERS , rawReferrerArray .toString ());
107+ try {
108+ saveString (PREFS_KEY_RAW_REFERRERS , rawReferrerArray .toString ());
109+ } catch (Throwable t ) {
110+ remove (PREFS_KEY_RAW_REFERRERS );
111+ }
99112 }
100113
101114 /**
@@ -160,13 +173,27 @@ public synchronized JSONArray getRawReferrer(final String rawReferrer, final lon
160173 * @return JSONArray of saved referrers. Defaults to empty JSONArray if none found.
161174 */
162175 public synchronized JSONArray getRawReferrerArray () {
163- try {
164- String referrerQueueString = getString (PREFS_KEY_RAW_REFERRERS );
176+ String referrerQueueString = getString (PREFS_KEY_RAW_REFERRERS );
177+
178+ if (referrerQueueString != null ) {
179+ try {
180+ JSONArray rawReferrerArray = new JSONArray (referrerQueueString );
181+
182+ // Initial move for those who have more than REFERRERS_COUNT stored already.
183+ // Cut the array and leave it with only REFERRERS_COUNT elements.
184+ if (rawReferrerArray .length () > REFERRERS_COUNT ) {
185+ JSONArray tempReferrerArray = new JSONArray ();
186+ for (int i = 0 ; i < REFERRERS_COUNT ; i += 1 ) {
187+ tempReferrerArray .put (rawReferrerArray .get (i ));
188+ }
189+ saveRawReferrerArray (tempReferrerArray );
190+ return tempReferrerArray ;
191+ }
165192
166- if (referrerQueueString != null ) {
167193 return new JSONArray (referrerQueueString );
194+ } catch (JSONException e ) {
195+ } catch (Throwable t ) {
168196 }
169- } catch (JSONException e ) {
170197 }
171198
172199 return new JSONArray ();
@@ -306,6 +333,11 @@ private synchronized String getString(final String key) {
306333 return this .sharedPreferences .getString (key , null );
307334 } catch (ClassCastException e ) {
308335 return null ;
336+ } catch (Throwable t ) {
337+ if (key .equals (PREFS_KEY_RAW_REFERRERS )) {
338+ remove (PREFS_KEY_RAW_REFERRERS );
339+ }
340+ return null ;
309341 }
310342 }
311343
0 commit comments