Skip to content

Commit 8f5bbfc

Browse files
committed
add update process
1 parent a73eef9 commit 8f5bbfc

6 files changed

Lines changed: 190 additions & 15 deletions

File tree

claimManagement/build.gradle

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ android {
2727
minSdkVersion 23
2828
targetSdkVersion 32
2929
versionCode 4
30-
versionName "1.1.6"
30+
versionName "1.1.7"
3131
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
3232
}
3333
buildTypes {
@@ -80,9 +80,10 @@ android {
8080

8181
comoresDev{
8282
applicationIdSuffix ".comoresDev"
83-
resValue "string", "app_name_claims", "Claims Comores"
83+
resValue "string", "app_name_claims", "Claims Comores Dev"
8484
buildConfigField "String", "API_BASE_URL", '"https://dev.amg.km/"'
8585
dimension 'std'
86+
resValue "string", "release_tag", "comores-dev"
8687
}
8788

8889
chfDev {

claimManagement/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
<uses-permission
2222
android:name="android.permission.READ_CONTACTS"
2323
tools:node="remove" />
24+
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
2425

2526
<application
2627
android:name=".Global"

claimManagement/src/main/java/org/openimis/imisclaims/SynchronizeActivity.java

Lines changed: 117 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,38 @@
11
package org.openimis.imisclaims;
22

33
import android.app.Activity;
4+
import android.app.AlertDialog;
5+
import android.app.DownloadManager;
46
import android.app.ProgressDialog;
57
import android.content.Context;
68
import android.content.Intent;
79
import android.net.Uri;
810
import android.os.Bundle;
911
import androidx.annotation.Nullable;
12+
13+
import android.os.Environment;
1014
import android.view.MenuItem;
1115
import android.view.View;
1216
import android.widget.RelativeLayout;
1317
import android.widget.TextView;
18+
import android.widget.Toast;
1419

1520
import org.json.JSONArray;
1621
import org.json.JSONException;
22+
import org.json.JSONObject;
23+
import org.openimis.imisclaims.network.exception.HttpException;
1724
import org.openimis.imisclaims.tools.Log;
1825
import org.openimis.imisclaims.tools.StorageManager;
1926
import org.openimis.imisclaims.util.StreamUtils;
2027
import org.openimis.imisclaims.util.UriUtils;
2128

29+
import java.io.BufferedReader;
2230
import java.io.IOException;
2331
import java.io.InputStream;
32+
import java.io.InputStreamReader;
2433
import java.io.OutputStream;
34+
import java.net.HttpURLConnection;
35+
import java.net.URL;
2536
import java.util.ArrayList;
2637

2738
public class SynchronizeActivity extends ImisActivity {
@@ -31,7 +42,7 @@ public class SynchronizeActivity extends ImisActivity {
3142
ArrayList<String> broadcastList;
3243

3344
TextView tvUploadClaims, tvZipClaims;
34-
RelativeLayout uploadClaims, zipClaims, importMasterData, downloadMasterData;
45+
RelativeLayout uploadClaims, zipClaims, importMasterData, downloadMasterData, checkUpdate;
3546

3647
ProgressDialog pd;
3748
Uri exportUri;
@@ -64,6 +75,7 @@ protected void onCreate(Bundle savedInstanceState) {
6475
zipClaims = findViewById(R.id.zip_claims);
6576
importMasterData = findViewById(R.id.importMasterData);
6677
downloadMasterData = findViewById(R.id.downloadMasterData);
78+
checkUpdate = findViewById(R.id.checkUpdate);
6779

6880
uploadClaims.setOnClickListener(view -> doLoggedIn(this::confirmUploadClaims));
6981
zipClaims.setOnClickListener(view -> confirmXMLCreation());
@@ -72,6 +84,7 @@ protected void onCreate(Bundle savedInstanceState) {
7284
downloadMasterData.setOnClickListener(view -> {
7385
}); //TODO Not yet implemented
7486
downloadMasterData.setVisibility(View.GONE);
87+
checkUpdate.setOnClickListener(view -> CheckUpdate());
7588

7689
}
7790

@@ -205,4 +218,107 @@ public void exportClaims() {
205218
pd = ProgressDialog.show(this, "", getResources().getString(R.string.Processing));
206219
SynchronizeService.exportClaims(this);
207220
}
221+
222+
public void CheckUpdate(){
223+
if (global.isNetworkAvailable()) {
224+
String progress_message = getResources().getString(R.string.Checking_For_Updates);
225+
pd = ProgressDialog.show(this, getResources().getString(R.string.initializing), progress_message);
226+
227+
Thread thread = new Thread(() -> {
228+
try {
229+
//get current version
230+
String currentVersion = BuildConfig.VERSION_NAME; //
231+
boolean updateAvailable = false;
232+
233+
//get all github releases
234+
URL url = new URL("https://api.github.com/repos/mngoe/claims_android_app_java/releases");
235+
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
236+
connection.setRequestProperty("Accept", "application/vnd.github.v3+json");
237+
connection.setReadTimeout(60_000);
238+
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
239+
StringBuilder response = new StringBuilder();
240+
String line;
241+
while ((line = reader.readLine()) != null) {
242+
response.append(line);
243+
}
244+
reader.close();
245+
connection.disconnect();
246+
247+
//get lastest version
248+
JSONArray jsonarray = new JSONArray(response.toString());
249+
String lastVersion = "";
250+
String tag_name = "";
251+
for (int i = 0; i < jsonarray.length(); i++){
252+
JSONObject releaseObj = jsonarray.getJSONObject(i);
253+
if(releaseObj.getString("tag_name").equals(getResources().getString(R.string.release_tag))){
254+
tag_name = releaseObj.getString("tag_name");
255+
String releaseName = releaseObj.getString("name");
256+
if(!releaseName.equals(currentVersion)){
257+
lastVersion = releaseName;
258+
updateAvailable = true;
259+
}
260+
}
261+
}
262+
263+
//print result
264+
boolean finalUpdateAvailable = updateAvailable;
265+
String finalLastVersion = lastVersion;
266+
String finalTagName = tag_name;
267+
runOnUiThread(() -> {
268+
pd.dismiss();
269+
if (finalUpdateAvailable) {
270+
new AlertDialog.Builder(this)
271+
.setTitle(getResources().getString(R.string.updateAvailable))
272+
.setMessage(getResources().getString(R.string.newVersion) + " " + finalLastVersion )
273+
.setPositiveButton(getResources().getString(R.string.download), (dialog, which) -> downloadUpdate(finalLastVersion, finalTagName))
274+
.setNegativeButton(getResources().getString(R.string.cancel), null)
275+
.show();
276+
} else {
277+
Toast.makeText(this,
278+
getResources().getString(R.string.haveLastVersion) + " " + currentVersion,
279+
Toast.LENGTH_LONG).show();
280+
}
281+
});
282+
} catch (HttpException e){
283+
runOnUiThread(() -> {
284+
pd.dismiss();
285+
Toast.makeText(this,
286+
getResources().getString(R.string.Error),
287+
Toast.LENGTH_SHORT).show();
288+
});
289+
} catch (Exception e) {
290+
runOnUiThread(() -> {
291+
pd.dismiss();
292+
Toast.makeText(this,
293+
e.getMessage(),
294+
Toast.LENGTH_SHORT).show();
295+
});
296+
}
297+
});
298+
thread.start();
299+
} else {
300+
showDialog(getResources().getString(R.string.CheckInternet));
301+
}
302+
}
303+
304+
public void downloadUpdate(String lastVersion, String tagName) {
305+
try {
306+
String apkUrl = "https://github.com/mngoe/claims_android_app_java/releases/download/" + tagName + "/claims-" + tagName +".apk";
307+
308+
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(apkUrl))
309+
.setTitle(getResources().getString(R.string.Update)+ " " + getResources().getString(R.string.app_name_claims))
310+
.setDescription("Version " + lastVersion)
311+
.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, getResources().getString(R.string.app_name_claims) + "_" + lastVersion + ".apk")
312+
.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
313+
314+
DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
315+
manager.enqueue(request);
316+
317+
Toast.makeText(this, getResources().getString(R.string.downloading), Toast.LENGTH_SHORT).show();
318+
319+
} catch (Exception e) {
320+
Toast.makeText(this, getResources().getString(R.string.downloadUpdateFail), Toast.LENGTH_SHORT).show();
321+
Log.e("DownloadUpdate", "Erreur: ", e);
322+
}
323+
}
208324
}

claimManagement/src/main/res/layout/activity_synchronize.xml

Lines changed: 48 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
android:layout_height="wrap_content"
1818
android:typeface="monospace"
1919
android:fontFamily="sans-serif-light"
20-
android:textSize="25dp"
21-
android:layout_marginLeft="3dp"
20+
android:textSize="25sp"
21+
android:layout_marginStart="3dp"
2222
android:layout_marginBottom="30dp"
2323
android:textColor="@color/Black"
2424
android:text="@string/synchronize"/>
@@ -43,20 +43,20 @@
4343
android:text="@string/UploadAllClaims"
4444
android:textAlignment="center"
4545
android:textColor="@color/white"
46-
android:textSize="15dp"
46+
android:textSize="15sp"
4747
android:typeface="monospace" />
4848

4949
<TextView
5050
android:id="@+id/tvUploadClaims"
5151
android:layout_width="80dp"
5252
android:layout_height="40dp"
53-
android:layout_toRightOf="@+id/lableUploadAllClaims"
53+
android:layout_toEndOf="@+id/lableUploadAllClaims"
5454
android:background="@drawable/side_nav_bar"
5555
android:fontFamily="sans-serif-light"
5656
android:gravity="center"
5757
android:text="0"
5858
android:textColor="@color/white"
59-
android:textSize="20dp" />
59+
android:textSize="20sp" />
6060

6161

6262
</RelativeLayout>
@@ -81,20 +81,20 @@
8181
android:text="@string/ZipAllClaims"
8282
android:textAlignment="center"
8383
android:textColor="@color/white"
84-
android:textSize="15dp"
84+
android:textSize="15sp"
8585
android:typeface="monospace" />
8686

8787
<TextView
8888
android:id="@+id/tvZipClaims"
8989
android:layout_width="80dp"
9090
android:layout_height="40dp"
91-
android:layout_toRightOf="@+id/lableZipAllClaims"
91+
android:layout_toEndOf="@+id/lableZipAllClaims"
9292
android:background="@drawable/side_nav_bar"
9393
android:fontFamily="sans-serif-light"
9494
android:gravity="center"
9595
android:text="0"
9696
android:textColor="@color/white"
97-
android:textSize="20dp" />
97+
android:textSize="20sp" />
9898

9999
</RelativeLayout>
100100

@@ -103,8 +103,8 @@
103103
android:layout_height="wrap_content"
104104
android:typeface="monospace"
105105
android:fontFamily="sans-serif-light"
106-
android:textSize="25dp"
107-
android:layout_marginLeft="3dp"
106+
android:textSize="25sp"
107+
android:layout_marginStart="3dp"
108108
android:layout_marginTop="30dp"
109109
android:textColor="@color/Black"
110110
android:text="@string/masterData"/>
@@ -129,7 +129,7 @@
129129
android:text="@string/downloadMasterData"
130130
android:textAlignment="center"
131131
android:textColor="@color/white"
132-
android:textSize="15dp"
132+
android:textSize="15sp"
133133
android:typeface="monospace" />
134134

135135
</RelativeLayout>
@@ -154,10 +154,46 @@
154154
android:text="@string/importMasterData"
155155
android:textAlignment="center"
156156
android:textColor="@color/white"
157-
android:textSize="15dp"
157+
android:textSize="15sp"
158158
android:typeface="monospace" />
159159

160160
</RelativeLayout>
161161

162+
<TextView
163+
android:layout_width="match_parent"
164+
android:layout_height="wrap_content"
165+
android:typeface="monospace"
166+
android:fontFamily="sans-serif-light"
167+
android:textSize="25sp"
168+
android:layout_marginLeft="3dp"
169+
android:layout_marginTop="30dp"
170+
android:textColor="@color/Black"
171+
android:text="@string/Update"/>
172+
173+
<RelativeLayout
174+
android:id="@+id/checkUpdate"
175+
android:layout_width="match_parent"
176+
android:layout_height="wrap_content"
177+
android:background="@drawable/orange_corner"
178+
android:orientation="vertical"
179+
android:paddingLeft="6dp"
180+
android:paddingRight="6dp"
181+
android:layout_marginTop="30dp">
182+
183+
<TextView
184+
android:id="@+id/checkUpdateLabel"
185+
android:layout_width="match_parent"
186+
android:layout_height="40dp"
187+
android:background="@drawable/side_nav_bar"
188+
android:fontFamily="sans-serif-light"
189+
android:gravity="center"
190+
android:text="@string/checkUpdate"
191+
android:textAlignment="center"
192+
android:textColor="@color/white"
193+
android:textSize="15sp"
194+
android:typeface="monospace" />
195+
196+
</RelativeLayout>
197+
162198
</LinearLayout>
163199
</LinearLayout>

claimManagement/src/main/res/values-fr/strings.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,4 +200,14 @@
200200
<string name="InvalidReferalHf">Code de formation sanitaire de référence invalide</string>
201201
<string name="InvalidHealthFacility">Formation sanitaire de l\'administrateur invalide</string>
202202
<string name="checkHfValidity">Vérification de la formation sanitaire</string>
203+
<string name="Update">Mise à jour</string>
204+
<string name="checkUpdate">Vérifier la mise à jour</string>
205+
<string name="Error">Une erreur s\'est produite</string>
206+
<string name="downloading">Téléchargement en cours</string>
207+
<string name="downloadUpdateFail">Echec de la mise à jour</string>
208+
<string name="download">Télécharger</string>
209+
<string name="cancel">Annuler</string>
210+
<string name="updateAvailable">Mise à jour disponible</string>
211+
<string name="haveLastVersion">Vous avez la dernière version </string>
212+
<string name="newVersion">Nouvelle version </string>
203213
</resources>

claimManagement/src/main/res/values/strings.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,4 +245,15 @@
245245
<string name="InvalidReferalHf">Please enter a valid referral healthFacility code</string>
246246
<string name="InvalidHealthFacility">Invalid healthfacility for this claim admin</string>
247247
<string name="checkHfValidity">Check healthFacility validity</string>
248+
<string name="Update">Update</string>
249+
<string name="checkUpdate">Check update</string>
250+
<string name="check">Vérification</string>
251+
<string name="Error">Error occurred</string>
252+
<string name="downloading">Downloading</string>
253+
<string name="downloadUpdateFail">Download update failed</string>
254+
<string name="download">Download</string>
255+
<string name="cancel">Cancel</string>
256+
<string name="updateAvailable">Update available</string>
257+
<string name="haveLastVersion">You have the last version </string>
258+
<string name="newVersion">New version </string>
248259
</resources>

0 commit comments

Comments
 (0)