11package org .openimis .imisclaims ;
22
33import android .app .Activity ;
4+ import android .app .AlertDialog ;
5+ import android .app .DownloadManager ;
46import android .app .ProgressDialog ;
57import android .content .Context ;
68import android .content .Intent ;
79import android .net .Uri ;
810import android .os .Bundle ;
911import androidx .annotation .Nullable ;
12+ import androidx .core .util .TimeUtils ;
1013
1114import android .os .Environment ;
1215import android .view .MenuItem ;
3437import org .openimis .imisclaims .domain .entity .Program ;
3538import org .openimis .imisclaims .domain .entity .Service ;
3639import org .openimis .imisclaims .domain .entity .SubServiceItem ;
40+ import org .openimis .imisclaims .network .exception .HttpException ;
3741import org .openimis .imisclaims .tools .Log ;
3842import org .openimis .imisclaims .tools .StorageManager ;
3943import org .openimis .imisclaims .usecase .FetchClaimAdmins ;
4953import org .openimis .imisclaims .util .StreamUtils ;
5054import org .openimis .imisclaims .util .UriUtils ;
5155
56+ import java .io .BufferedReader ;
5257import java .io .IOException ;
5358import java .io .InputStream ;
59+ import java .io .InputStreamReader ;
5460import java .io .OutputStream ;
61+ import java .net .HttpURLConnection ;
62+ import java .net .URL ;
63+ import java .text .DateFormat ;
64+ import java .text .SimpleDateFormat ;
65+ import java .time .Instant ;
66+ import java .time .LocalDateTime ;
67+ import java .time .format .DateTimeFormatter ;
5568import java .util .ArrayList ;
5669import java .util .Date ;
5770import java .util .List ;
71+ import java .util .Locale ;
72+ import java .util .Objects ;
5873
5974public class SynchronizeActivity extends ImisActivity {
6075 private static final String LOG_TAG = "SYNCACTIVITY" ;
@@ -64,7 +79,7 @@ public class SynchronizeActivity extends ImisActivity {
6479 ToRestApi toRestApi ;
6580
6681 TextView tvUploadClaims , tvZipClaims ;
67- RelativeLayout uploadClaims , zipClaims , importMasterData , downloadMasterData ;
82+ RelativeLayout uploadClaims , zipClaims , importMasterData , downloadMasterData , checkUpdate ;
6883
6984 ProgressDialog pd ;
7085 Uri exportUri ;
@@ -97,13 +112,15 @@ protected void onCreate(Bundle savedInstanceState) {
97112 zipClaims = findViewById (R .id .zip_claims );
98113 importMasterData = findViewById (R .id .importMasterData );
99114 downloadMasterData = findViewById (R .id .downloadMasterData );
115+ checkUpdate = findViewById (R .id .checkUpdate );
100116
101117 uploadClaims .setOnClickListener (view -> doLoggedIn (this ::confirmUploadClaims ));
102118 zipClaims .setOnClickListener (view -> confirmXMLCreation ());
103119
104120 importMasterData .setOnClickListener (view -> requestPickDatabase ());
105121 downloadMasterData .setOnClickListener (view -> DownloadMasterData ()); //TODO Not yet implemented
106122 downloadMasterData .setVisibility (View .GONE );
123+ checkUpdate .setOnClickListener (view -> CheckUpdate ());
107124
108125 }
109126
@@ -583,5 +600,106 @@ public void saveLastUpdateDate(String lastUpdateDate) {
583600 }
584601 }
585602
603+ public void CheckUpdate (){
604+ if (global .isNetworkAvailable ()) {
605+ String progress_message = getResources ().getString (R .string .Checking_For_Updates );
606+ pd = ProgressDialog .show (this , getResources ().getString (R .string .initializing ), progress_message );
607+
608+ Thread thread = new Thread (() -> {
609+ try {
610+ //get current version
611+ String currentVersion = BuildConfig .VERSION_NAME ; //
612+ boolean updateAvailable = false ;
613+
614+ //get all github releases
615+ URL url = new URL ("https://api.github.com/repos/mngoe/claims_android_app_java/releases" );
616+ HttpURLConnection connection = (HttpURLConnection ) url .openConnection ();
617+ connection .setRequestProperty ("Accept" , "application/vnd.github.v3+json" );
618+ connection .setReadTimeout (60_000 );
619+ BufferedReader reader = new BufferedReader (new InputStreamReader (connection .getInputStream ()));
620+ StringBuilder response = new StringBuilder ();
621+ String line ;
622+ while ((line = reader .readLine ()) != null ) {
623+ response .append (line );
624+ }
625+ reader .close ();
626+ connection .disconnect ();
627+
628+ //get lastest version
629+ JSONArray jsonarray = new JSONArray (response .toString ());
630+ String lastVersion = "" ;
631+ String tag_name = "" ;
632+ for (int i = 0 ; i < jsonarray .length (); i ++){
633+ JSONObject releaseObj = jsonarray .getJSONObject (i );
634+ if (releaseObj .getString ("tag_name" ).equals (getResources ().getString (R .string .release_tag ))){
635+ tag_name = releaseObj .getString ("tag_name" );
636+ String releaseName = releaseObj .getString ("name" );
637+ if (!releaseName .equals (currentVersion )){
638+ lastVersion = releaseName ;
639+ updateAvailable = true ;
640+ }
641+ }
642+ }
643+
644+ //print result
645+ boolean finalUpdateAvailable = updateAvailable ;
646+ String finalLastVersion = lastVersion ;
647+ String finalTagName = tag_name ;
648+ runOnUiThread (() -> {
649+ pd .dismiss ();
650+ if (finalUpdateAvailable ) {
651+ new AlertDialog .Builder (this )
652+ .setTitle (getResources ().getString (R .string .updateAvailable ))
653+ .setMessage (getResources ().getString (R .string .newVersion ) + " " + finalLastVersion )
654+ .setPositiveButton (getResources ().getString (R .string .download ), (dialog , which ) -> downloadUpdate (finalLastVersion , finalTagName ))
655+ .setNegativeButton (getResources ().getString (R .string .cancel ), null )
656+ .show ();
657+ } else {
658+ Toast .makeText (this ,
659+ getResources ().getString (R .string .haveLastVersion ) + " " + currentVersion ,
660+ Toast .LENGTH_LONG ).show ();
661+ }
662+ });
663+ } catch (HttpException e ){
664+ runOnUiThread (() -> {
665+ pd .dismiss ();
666+ Toast .makeText (this ,
667+ getResources ().getString (R .string .Error ),
668+ Toast .LENGTH_SHORT ).show ();
669+ });
670+ } catch (Exception e ) {
671+ runOnUiThread (() -> {
672+ pd .dismiss ();
673+ Toast .makeText (this ,
674+ e .getMessage (),
675+ Toast .LENGTH_SHORT ).show ();
676+ });
677+ }
678+ });
679+ thread .start ();
680+ } else {
681+ ErrorDialogBox (getResources ().getString (R .string .CheckInternet ));
682+ }
683+ }
684+
685+ public void downloadUpdate (String lastVersion , String tagName ) {
686+ try {
687+ String apkUrl = "https://github.com/mngoe/claims_android_app_java/releases/download/" + tagName + "/claims-" + lastVersion +".apk" ;
688+
689+ DownloadManager .Request request = new DownloadManager .Request (Uri .parse (apkUrl ))
690+ .setTitle ("Mise à jour Claims CSU" )
691+ .setDescription ("Téléchargement version " + lastVersion )
692+ .setDestinationInExternalPublicDir (Environment .DIRECTORY_DOWNLOADS , "claims_csu_" + lastVersion + ".apk" )
693+ .setNotificationVisibility (DownloadManager .Request .VISIBILITY_VISIBLE_NOTIFY_COMPLETED );
586694
695+ DownloadManager manager = (DownloadManager ) getSystemService (Context .DOWNLOAD_SERVICE );
696+ manager .enqueue (request );
697+
698+ Toast .makeText (this , getResources ().getString (R .string .downloading ), Toast .LENGTH_SHORT ).show ();
699+
700+ } catch (Exception e ) {
701+ Toast .makeText (this , getResources ().getString (R .string .downloadUpdateFail ), Toast .LENGTH_SHORT ).show ();
702+ Log .e ("DownloadUpdate" , "Erreur: " , e );
703+ }
704+ }
587705}
0 commit comments