Skip to content
Extraits de code Groupes Projets
Valider d86bbbc7 rédigé par Tony 'Nitorac' RANINI's avatar Tony 'Nitorac' RANINI :speech_balloon:
Parcourir les fichiers

Fixed crash on Intent package install

parent 8ecc40f1
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -10,7 +10,7 @@ android { ...@@ -10,7 +10,7 @@ android {
minSdkVersion 19 minSdkVersion 19
targetSdkVersion 29 targetSdkVersion 29
versionCode 4 versionCode 4
versionName "1.1.0" versionName "1.1.2"
multiDexEnabled true multiDexEnabled true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
......
package fr.nitorac.aurionweb.update; package fr.nitorac.aurionweb.update;
import android.app.AlertDialog;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.PowerManager; 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.TextView;
import android.widget.Toast; import android.widget.Toast;
...@@ -120,13 +124,32 @@ public class UpdateManager { ...@@ -120,13 +124,32 @@ public class UpdateManager {
context.getApplicationContext() context.getApplicationContext()
.getPackageName() + ".provider", file); .getPackageName() + ".provider", file);
Intent intent = new Intent(Intent.ACTION_VIEW, apkURI); try{
intent.setDataAndType(apkURI, "application/vnd.android.package-archive"); Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE, apkURI);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); intent.setDataAndType(apkURI, "application/vnd.android.package-archive");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
dialog.dismiss(); intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true);
context.getApplicationContext().startActivity(intent); 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(); wakeLock.release();
} }
...@@ -149,29 +172,34 @@ public class UpdateManager { ...@@ -149,29 +172,34 @@ public class UpdateManager {
Context c = weakContext.get(); Context c = weakContext.get();
StringBuilder changelogs = new StringBuilder(); StringBuilder changelogs = new StringBuilder();
for(JsonElement el : remote.get("changelogs").getAsJsonArray()){ try{
JsonObject obj = el.getAsJsonObject(); for(JsonElement el : remote.get("changelogs").getAsJsonArray()){
changelogs.append(obj.get("version").getAsString()).append(" :\n"); JsonObject obj = el.getAsJsonObject();
for(JsonElement change : obj.get("msg").getAsJsonArray()){ changelogs.append(obj.get("version").getAsString()).append(" :\n");
changelogs.append(" - ").append(change.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()) MaterialDialog dialog = new MaterialDialog(c, MaterialDialog.getDEFAULT_BEHAVIOR())
.title(R.string.dialog_update_title, null) .title(R.string.dialog_update_title, null)
.icon(null, ContextCompat.getDrawable(c, R.drawable.ic_download)) .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) .message(null, String.format(c.getResources().getString(R.string.dialog_update_msg), BuildConfig.VERSION_NAME, remote.get("version").getAsString(), changelogs), null)
.cancelable(true) .cancelable(true)
.positiveButton(null, "METTRE A JOUR", materialDialog -> { .positiveButton(null, "METTRE A JOUR", materialDialog -> {
startDownload(weakContext, remote.get("url").getAsString()); startDownload(weakContext, remote.get("url").getAsString());
return null; return null;
}) })
.negativeButton(null, "ANNULER", materialDialog -> { .negativeButton(null, "ANNULER", materialDialog -> {
materialDialog.dismiss(); materialDialog.dismiss();
return null; return null;
}); });
dialog.show(); 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(){ public static UpdateManager getInstance(){
......
<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>
app/src/main/res/drawable-hdpi/ic_danger.png

308 octets

app/src/main/res/drawable-mdpi/ic_danger.png

234 octets

app/src/main/res/drawable-xhdpi/ic_danger.png

376 octets

app/src/main/res/drawable-xxhdpi/ic_danger.png

566 octets

0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter