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