1212import android .content .pm .PackageManager ;
1313import android .os .Build ;
1414import android .preference .PreferenceManager ;
15- import android .support . v4 . app . NotificationCompat ;
15+ import android .text . TextUtils ;
1616import android .widget .Toast ;
1717
1818import com .google .gson .JsonArray ;
1919import com .google .gson .JsonElement ;
20+ import com .google .gson .JsonNull ;
2021import com .google .gson .JsonObject ;
2122import com .google .gson .JsonParser ;
2223import com .loopj .android .http .AsyncHttpClient ;
2930import java .util .Collections ;
3031import java .util .Comparator ;
3132import java .util .Date ;
32- import java .util .concurrent .TimeUnit ;
3333import java .util .regex .Matcher ;
3434import java .util .regex .Pattern ;
3535
36+ import androidx .core .app .NotificationCompat ;
3637import cz .msebera .android .httpclient .Header ;
3738
3839import static android .preference .PreferenceManager .getDefaultSharedPreferences ;
@@ -67,6 +68,29 @@ public static class Version implements Serializable
6768
6869 public static Version parse (String version )
6970 {
71+ if (version .equalsIgnoreCase ("alpha" ))
72+ {
73+ Version v = new Version ();
74+ v .major = -1 ;
75+ v .minor = -1 ;
76+ v .hot = -1 ;
77+
78+ v .type = "alpha" ;
79+ v .iteration = 1 ;
80+ return v ;
81+ }
82+ else if (version .equalsIgnoreCase ("beta" ))
83+ {
84+ Version v = new Version ();
85+ v .major = -1 ;
86+ v .minor = -1 ;
87+ v .hot = -1 ;
88+
89+ v .type = "beta" ;
90+ v .iteration = 1 ;
91+ return v ;
92+ }
93+
7094 Pattern regex = Pattern .compile ("v?([0-9]{1,2})(.?)([0-9]{1,2})((.?)([0-9]{1,2}))?(-([a-zA-Z]+)([0-9]+))?" );
7195 Matcher matcher = regex .matcher (version );
7296
@@ -112,6 +136,8 @@ public boolean newerThan(Version otherVersion)
112136 return false ;
113137 }
114138
139+ if (this .major == -1 && this .minor == -1 && this .hot == -1 ) return this .releaseDate > otherVersion .releaseDate ;
140+
115141 if (this .major > otherVersion .major )
116142 {
117143 return true ;
@@ -164,6 +190,11 @@ private boolean checkPreReleaseNewer(Version otherVersion)
164190
165191 @ Override public String toString ()
166192 {
193+ if (major == -1 && minor == -1 && hot == -1 )
194+ {
195+ return type + " Nightly build" ;
196+ }
197+
167198 String additional = "" ;
168199
169200 if (hot > 0 )
@@ -198,9 +229,19 @@ private boolean checkPreReleaseNewer(Version otherVersion)
198229 @ Override public void onReceive (final Context context , Intent intent )
199230 {
200231 long lastChecked = getDefaultSharedPreferences (context ).getLong ("last_checked" , 0 );
201- long oneDay = TimeUnit .DAYS .toMillis (1 );
232+ String frequency = getDefaultSharedPreferences (context ).getString ("check_frequency" , "3600000" );
233+ long freqInt = 0 ;
234+ try
235+ {
236+ freqInt = Long .parseLong (frequency );
237+ }
238+ catch (NumberFormatException e )
239+ {
240+ e .printStackTrace ();
241+ }
242+
202243 final boolean force = intent .getExtras () != null && intent .getExtras ().containsKey ("force" );
203- if (System .currentTimeMillis () - lastChecked > oneDay || force )
244+ if (System .currentTimeMillis () - lastChecked > freqInt || force )
204245 {
205246 getDefaultSharedPreferences (context ).edit ()
206247 .putLong ("last_checked" , System .currentTimeMillis ())
@@ -219,7 +260,6 @@ private boolean checkPreReleaseNewer(Version otherVersion)
219260 packageInfo = packageManager .getPackageInfo ("me.anon.grow" , 0 );
220261 }
221262 catch (Exception e ){}
222-
223263 final int versionCode = packageInfo == null ? 0 : packageInfo .versionCode ;
224264 final String versionName = packageInfo == null ? "0.0" : packageInfo .versionName ;
225265 final Version currentVersion = Version .parse (versionName );
@@ -236,6 +276,7 @@ private boolean checkPreReleaseNewer(Version otherVersion)
236276 if (ai .metaData != null )
237277 {
238278 currentVersion .appType = ai .metaData .getString ("me.anon.grow.APP_TYPE" , "original" );
279+ currentVersion .releaseDate = Long .parseLong (ai .metaData .getString ("me.anon.grow.VERSION_DATE" , "0" ));
239280 }
240281 }
241282 catch (PackageManager .NameNotFoundException e )
@@ -261,7 +302,18 @@ private boolean checkPreReleaseNewer(Version otherVersion)
261302 for (JsonElement element : jsonArray )
262303 {
263304 JsonObject jsonObject = element .getAsJsonObject ();
264- Version releaseVersion = Version .parse (jsonObject .get ("name" ).getAsString ());
305+ String name = "" ;
306+
307+ if (jsonObject .get ("name" ) != JsonNull .INSTANCE && !TextUtils .isEmpty (jsonObject .get ("name" ).getAsString ()))
308+ {
309+ name = jsonObject .get ("name" ).getAsString ();
310+ }
311+ else
312+ {
313+ name = jsonObject .get ("tag_name" ).getAsString ();
314+ }
315+
316+ Version releaseVersion = Version .parse (name );
265317
266318 if (releaseVersion != null )
267319 {
@@ -275,7 +327,11 @@ private boolean checkPreReleaseNewer(Version otherVersion)
275327 e .printStackTrace ();
276328 }
277329
278- releaseVersion .releaseNotes = jsonObject .get ("body" ).getAsString ();
330+ releaseVersion .releaseNotes = "" ;
331+ if (jsonObject .get ("body" ) != JsonNull .INSTANCE )
332+ {
333+ releaseVersion .releaseNotes = jsonObject .get ("body" ).getAsString ();
334+ }
279335
280336 for (JsonElement assets : jsonObject .get ("assets" ).getAsJsonArray ())
281337 {
@@ -303,27 +359,42 @@ private boolean checkPreReleaseNewer(Version otherVersion)
303359 }
304360 });
305361
306- Version latest = releases .get (0 );
307- Version latestStable = releases .get (0 );
362+ Version latest = null ;
363+ Version latestBeta = null ;
364+ Version latestStable = null ;
308365
309366 for (Version release : releases )
310367 {
311- if (release .type .equals ("" ))
368+ if (release .type .equals ("" ) && latestStable == null )
312369 {
313370 latestStable = release ;
314- break ;
371+ }
372+ else if (release .type .equals ("alpha" ) && latest == null )
373+ {
374+ latest = release ;
375+ }
376+ else if (release .type .equals ("beta" ) && latestBeta == null )
377+ {
378+ latestBeta = release ;
315379 }
316380 }
317381
318382 boolean experimental = PreferenceManager .getDefaultSharedPreferences (context ).getBoolean ("experimental" , false );
319- if ((!latest .type .equals ("" ) && experimental && latest .newerThan (currentVersion ))
320- || latestStable .newerThan (currentVersion ))
383+ boolean beta = PreferenceManager .getDefaultSharedPreferences (context ).getBoolean ("beta" , false );
384+
385+ if (context == null ) return ;
386+
387+ if (experimental && latest .newerThan (currentVersion ))
321388 {
322- // send notification
323- if (context != null )
324- {
325- sendUpdateNotification (context , experimental ? latest : latestStable );
326- }
389+ sendUpdateNotification (context , latest );
390+ }
391+ else if (beta && latest .newerThan (currentVersion ))
392+ {
393+ sendUpdateNotification (context , latestBeta );
394+ }
395+ else if (latest != null && latest .newerThan (currentVersion ))
396+ {
397+ sendUpdateNotification (context , latest );
327398 }
328399 else
329400 {
0 commit comments