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