From d86bbbc728224c67fd27d96621f38c3780d6c192 Mon Sep 17 00:00:00 2001 From: Nitorac <nitorac.r@gmail.com> Date: Wed, 14 Oct 2020 23:50:51 +0200 Subject: [PATCH] Fixed crash on Intent package install --- app/build.gradle | 2 +- .../aurionweb/update/UpdateManager.java | 84 ++++++++++++------ .../main/res/drawable-anydpi/ic_danger.xml | 11 +++ app/src/main/res/drawable-hdpi/ic_danger.png | Bin 0 -> 308 bytes app/src/main/res/drawable-mdpi/ic_danger.png | Bin 0 -> 234 bytes app/src/main/res/drawable-xhdpi/ic_danger.png | Bin 0 -> 376 bytes .../main/res/drawable-xxhdpi/ic_danger.png | Bin 0 -> 566 bytes 7 files changed, 68 insertions(+), 29 deletions(-) create mode 100644 app/src/main/res/drawable-anydpi/ic_danger.xml create mode 100644 app/src/main/res/drawable-hdpi/ic_danger.png create mode 100644 app/src/main/res/drawable-mdpi/ic_danger.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_danger.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_danger.png diff --git a/app/build.gradle b/app/build.gradle index 3650c24..3c64ccb 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 abc3f46..fb834b0 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 0000000..3502828 --- /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 GIT binary patch literal 308 zcmV-40n7f0P)<h;3K|Lk000e1NJLTq001Na001Ni1^@s6;Q*MJ0002{Nkl<Zc-rlk zVGV>Z3`Q}40SrvQ3}65Q2$+F0fPgbF0T`G849wGxC0oLgyRD42BX=x$2|s|mgnn&l zn*03Yan4E4m4uAvDl%%t2FBVl?aHzd^4D!mp=l!%nQF<14>A!^Lr5otG`Gx<kcsr1 zg=_#qhNZxFG0&l>Wx8F=bNG8ZN}=Zg8QL}w=2h~uBtEC45SmX2&73h;z=9vB=2fW> z&YW9c@_<Gg&=M3z%q^mjJ=F#>^Qsh$9dit1iI5=_GA#4z;BzBZ%&~-EZQ#pVN+Fb= zbD6c23c(%ovNix*OR4Bf*HW@J@K)fVc2s5ff1U30ljj9bcSFG{oy8si0000<MNUMn GLSTYVhJmU8 literal 0 HcmV?d00001 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 GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj8$DedLn>}1CrAW7`2YX^F$EuQ zZZqbOYEhE&*p8$xu;{wg_L=EpoeH-@PFz;hg@zOh9`k_H1*JM|hc{T6>dfdo-ZXQH z)VuEE1rlWoRFcdUrQ1~6a}KI)Qj*b)e6*RN<+6uq43}=C&?bf@VO=8JRU2E)<+wZi zw_W)3jA!PJ84}#n0uv4fbxl%jRA@?!PdY7Kq<bLFkCC-olSAsyNwHZv=L00Y1*7jx g=uS84VM+qJ_<`QsxZT2*K*uw9y85}Sb4q9e0AayZF8}}l literal 0 HcmV?d00001 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 GIT binary patch literal 376 zcmV-;0f+vHP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm0003$Nkl<Zc-rlk zQ4NGJ5JWM60Sq7j17`pOCjbLy00C#90x(bm7^tTnO&}qJYw2zmc9Y%YCHFycGasGI zRF$5d9@%;CyMSZ^HXv2}u;5nS(!|#b^Ugr{T}v`B?!<45QpC3>;x}3e228|&;V!<9 zh~Ic|ez^960n741A7V4bz)gH}h|Lt?+lG^YZ-#hYvAXsh2c+X*U_uy}B*bQlo=e|> z@=Q-!{`3<QcJe)+SY2b&6*S;(jnzcoff_KZViRECo>;xucc2C=wfM_@2WWt9e&)s| z!T?RI{+Wps2FmxO#7v~3y)`xoFr~!z4~Q=_KQm?`6}b7CITK4hVth{m%tR^!u=xp` zi4+F%V--0QDGcQGB;-t_Vv-P>xcOOdCQ=daNvWC0gaJGg8PRa*JJ0qcJv}`=^!)(1 W<}l}iT$-Q&0000<MNUMnLSTX_r=3Os literal 0 HcmV?d00001 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 GIT binary patch literal 566 zcmV-60?GY}P)<h;3K|Lk000e1NJLTq002k;002k`1^@s6RqeA!0005~Nkl<Zc-rmS zuW!OY7{+k~7!(4DM%7o$ql>P`SJ&6~KfqMaE}5EHmTdo1xy!hWABFXPJlA{g-Zyy? zLP*8OK)zu%<KyGw<KyFVaDCsu$g#vQ&Rp#Eyg7^91C?Sw=anpSjk6N_xB!x`S1j`f zRA1nz)hzRivlaUu0Fv)*8L01%12}5O)NyuCaMX6G;w;48MgYmrEK&qIjKEPlq=vH= z`_urEpIxT})M((SHL2ia1~_V23P7C&P!~JS-U3H$A1lsM?A-y7e8w_HpvnP`S`{14 zM(oQWkbKrACZN_Kj#?WFP7c6P%c<k2jEVxHoo8<{DrzNFoZF0w8qGZWAfuvIQ^R?b zQ3v<rIb(rn<=KBSDgua3o*kJ{5kTSRS&fW}0t!3NYGzafP`G*4Afuvy!pyUV85IE( zUY@ngs0g62@~mY>MFDl8;1ssMgh4=ZMHCqo2sCY;b(K+pK-1+}Kt@Gvnmh~2sHnBR zadJX9e)Ft{j7mGtddjFY^Q^~=N;A)*GAj6M-cO#@&8PtbVe+hQMhzIqeV#SRsDT5y z%d@5#l>m^NJZqX!2>{vWS(}VXWOjMhCZiHsV~Ud{fMcF#Z8Ivdb-Fl3LO6PP*5SWV zscl@Ib^LEsYO7+&sMF+GVi`4#Jj=(&$H&LV$HzzWPUQg@lKv!3)c^nh07*qoM6N<$ Eg1zhpf&c&j literal 0 HcmV?d00001 -- GitLab