diff --git a/app/build.gradle b/app/build.gradle index 3650c24ff9fc56bb97ea2804b0a8468403b6f700..3c64ccb82c67c752fa5dbe8724d9a843e1189517 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,7 +10,7 @@ android { minSdkVersion 19 targetSdkVersion 29 versionCode 4 - versionName "1.1.0" + versionName "1.1.2" multiDexEnabled true testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/java/fr/nitorac/aurionweb/update/UpdateManager.java b/app/src/main/java/fr/nitorac/aurionweb/update/UpdateManager.java index abc3f46fee1809bfa0fca19cfbfe8ac9487b1bb6..fb834b029eac7d6df1d2527028992c91c9ec027f 100644 --- a/app/src/main/java/fr/nitorac/aurionweb/update/UpdateManager.java +++ b/app/src/main/java/fr/nitorac/aurionweb/update/UpdateManager.java @@ -1,9 +1,13 @@ package fr.nitorac.aurionweb.update; +import android.app.AlertDialog; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.PowerManager; +import android.text.SpannableString; +import android.text.method.LinkMovementMethod; +import android.text.util.Linkify; import android.widget.TextView; import android.widget.Toast; @@ -120,13 +124,32 @@ public class UpdateManager { context.getApplicationContext() .getPackageName() + ".provider", file); - Intent intent = new Intent(Intent.ACTION_VIEW, apkURI); - intent.setDataAndType(apkURI, "application/vnd.android.package-archive"); - intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); - intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true); - dialog.dismiss(); - context.getApplicationContext().startActivity(intent); + try{ + Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE, apkURI); + intent.setDataAndType(apkURI, "application/vnd.android.package-archive"); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true); + dialog.dismiss(); + throw new Exception(); + //context.getApplicationContext().startActivity(intent); + }catch (Exception e){ + dialog.dismiss(); + // Linkify the message + final SpannableString s = new SpannableString("Impossible d'installer l'application, veuillez aller sur " + url + " pour installer la mise à jour"); // msg should have url to enable clicking + Linkify.addLinks(s, Linkify.ALL); + + final AlertDialog d = new AlertDialog.Builder(context) + .setPositiveButton(android.R.string.ok, null) + .setIcon(R.drawable.ic_danger) + .setMessage(s) + .create(); + + d.show(); + + // Make the textview clickable. Must be called after show() + ((TextView)d.findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance()); + } } wakeLock.release(); } @@ -149,29 +172,34 @@ public class UpdateManager { Context c = weakContext.get(); StringBuilder changelogs = new StringBuilder(); - for(JsonElement el : remote.get("changelogs").getAsJsonArray()){ - JsonObject obj = el.getAsJsonObject(); - changelogs.append(obj.get("version").getAsString()).append(" :\n"); - for(JsonElement change : obj.get("msg").getAsJsonArray()){ - changelogs.append(" - ").append(change.getAsString()).append("\n"); + try{ + for(JsonElement el : remote.get("changelogs").getAsJsonArray()){ + JsonObject obj = el.getAsJsonObject(); + changelogs.append(obj.get("version").getAsString()).append(" :\n"); + for(JsonElement change : obj.get("msg").getAsJsonArray()){ + changelogs.append(" - ").append(change.getAsString()).append("\n"); + } + changelogs.append("\n"); } - changelogs.append("\n"); - } - MaterialDialog dialog = new MaterialDialog(c, MaterialDialog.getDEFAULT_BEHAVIOR()) - .title(R.string.dialog_update_title, null) - .icon(null, ContextCompat.getDrawable(c, R.drawable.ic_download)) - .message(null, String.format(c.getResources().getString(R.string.dialog_update_msg), BuildConfig.VERSION_NAME, remote.get("version").getAsString(), changelogs), null) - .cancelable(true) - .positiveButton(null, "METTRE A JOUR", materialDialog -> { - startDownload(weakContext, remote.get("url").getAsString()); - return null; - }) - .negativeButton(null, "ANNULER", materialDialog -> { - materialDialog.dismiss(); - return null; - }); - dialog.show(); + MaterialDialog dialog = new MaterialDialog(c, MaterialDialog.getDEFAULT_BEHAVIOR()) + .title(R.string.dialog_update_title, null) + .icon(null, ContextCompat.getDrawable(c, R.drawable.ic_download)) + .message(null, String.format(c.getResources().getString(R.string.dialog_update_msg), BuildConfig.VERSION_NAME, remote.get("version").getAsString(), changelogs), null) + .cancelable(true) + .positiveButton(null, "METTRE A JOUR", materialDialog -> { + startDownload(weakContext, remote.get("url").getAsString()); + return null; + }) + .negativeButton(null, "ANNULER", materialDialog -> { + materialDialog.dismiss(); + return null; + }); + dialog.show(); + }catch (Exception e){ + e.printStackTrace(); + Toast.makeText(weakContext.get(), "Impossible de récupérer les mises à jour (" + e.getLocalizedMessage() + ")", Toast.LENGTH_LONG).show(); + } } public static UpdateManager getInstance(){ diff --git a/app/src/main/res/drawable-anydpi/ic_danger.xml b/app/src/main/res/drawable-anydpi/ic_danger.xml new file mode 100644 index 0000000000000000000000000000000000000000..35028288db385529d5877ddda65bb08c24b7be1c --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_danger.xml @@ -0,0 +1,11 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24" + android:tint="#FFFFFF" + android:alpha="0.8"> + <path + android:fillColor="@android:color/white" + android:pathData="M1,21h22L12,2 1,21zM13,18h-2v-2h2v2zM13,14h-2v-4h2v4z"/> +</vector> diff --git a/app/src/main/res/drawable-hdpi/ic_danger.png b/app/src/main/res/drawable-hdpi/ic_danger.png new file mode 100644 index 0000000000000000000000000000000000000000..0a06df2d630bea1f0240447a7f20d32efcddf0be Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_danger.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_danger.png b/app/src/main/res/drawable-mdpi/ic_danger.png new file mode 100644 index 0000000000000000000000000000000000000000..9070172d5cdeb0fb56afbb9c6d81d2bb805e63b7 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_danger.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_danger.png b/app/src/main/res/drawable-xhdpi/ic_danger.png new file mode 100644 index 0000000000000000000000000000000000000000..292aa15d5d5d571ae441c65835c8383e3d96a5d1 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_danger.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_danger.png b/app/src/main/res/drawable-xxhdpi/ic_danger.png new file mode 100644 index 0000000000000000000000000000000000000000..649d415a59e9266e042bf7f6e0f5759f2f648ce6 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_danger.png differ