put version code into crash report

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/utils/ExceptionHelper.java | 151 +-
1 file changed, 77 insertions(+), 74 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/utils/ExceptionHelper.java 🔗

@@ -29,82 +29,85 @@ import eu.siacs.conversations.ui.XmppActivity;
 
 public class ExceptionHelper {
 
-	private static final String FILENAME = "stacktrace.txt";
-	private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
+    private static final String FILENAME = "stacktrace.txt";
+    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
 
-	public static void init(Context context) {
-		if (!(Thread.getDefaultUncaughtExceptionHandler() instanceof ExceptionHandler)) {
-			Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(
-					context));
-		}
-	}
+    public static void init(Context context) {
+        if (!(Thread.getDefaultUncaughtExceptionHandler() instanceof ExceptionHandler)) {
+            Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(
+                    context));
+        }
+    }
 
-	public static boolean checkForCrash(XmppActivity activity) {
-		try {
-			final XmppConnectionService service = activity == null ? null : activity.xmppConnectionService;
-			if (service == null) {
-				return false;
-			}
-			final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(activity);
-			boolean neverSend = preferences.getBoolean("never_send", false);
-			if (neverSend || Config.BUG_REPORTS == null) {
-				return false;
-			}
-			final Account account = AccountUtils.getFirstEnabled(service);
-			if (account == null) {
-				return false;
-			}
-			FileInputStream file = activity.openFileInput(FILENAME);
-			InputStreamReader inputStreamReader = new InputStreamReader(file);
-			BufferedReader stacktrace = new BufferedReader(inputStreamReader);
-			final StringBuilder report = new StringBuilder();
-			PackageManager pm = activity.getPackageManager();
-			PackageInfo packageInfo;
-			try {
-				packageInfo = pm.getPackageInfo(activity.getPackageName(), PackageManager.GET_SIGNATURES);
-				report.append("Version: ").append(packageInfo.versionName).append('\n');
-				report.append("Last Update: ").append(DATE_FORMAT.format(new Date(packageInfo.lastUpdateTime))).append('\n');
-				Signature[] signatures = packageInfo.signatures;
-				if (signatures != null && signatures.length >= 1) {
-					report.append("SHA-1: ").append(CryptoHelper.getFingerprintCert(packageInfo.signatures[0].toByteArray())).append('\n');
-				}
-				report.append('\n');
-			} catch (Exception e) {
-				e.printStackTrace();
-				return false;
-			}
-			String line;
-			while ((line = stacktrace.readLine()) != null) {
-				report.append(line);
-				report.append('\n');
-			}
-			file.close();
-			activity.deleteFile(FILENAME);
-			AlertDialog.Builder builder = new AlertDialog.Builder(activity);
-			builder.setTitle(activity.getString(R.string.crash_report_title));
-			builder.setMessage(activity.getText(R.string.crash_report_message));
-			builder.setPositiveButton(activity.getText(R.string.send_now), (dialog, which) -> {
+    public static boolean checkForCrash(XmppActivity activity) {
+        try {
+            final XmppConnectionService service = activity == null ? null : activity.xmppConnectionService;
+            if (service == null) {
+                return false;
+            }
+            final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(activity);
+            boolean neverSend = preferences.getBoolean("never_send", false);
+            if (neverSend || Config.BUG_REPORTS == null) {
+                return false;
+            }
+            final Account account = AccountUtils.getFirstEnabled(service);
+            if (account == null) {
+                return false;
+            }
+            FileInputStream file = activity.openFileInput(FILENAME);
+            InputStreamReader inputStreamReader = new InputStreamReader(file);
+            BufferedReader stacktrace = new BufferedReader(inputStreamReader);
+            final StringBuilder report = new StringBuilder();
+            PackageManager pm = activity.getPackageManager();
+            PackageInfo packageInfo;
+            try {
+                packageInfo = pm.getPackageInfo(activity.getPackageName(), PackageManager.GET_SIGNATURES);
+                final String versionName = packageInfo.versionName;
+                final int versionCode = packageInfo.versionCode;
+                final int version = versionCode > 10000 ? (versionCode / 100) : versionCode;
+                report.append(String.format(Locale.ROOT, "Version: %s(%d)", versionName, version)).append('\n');
+                report.append("Last Update: ").append(DATE_FORMAT.format(new Date(packageInfo.lastUpdateTime))).append('\n');
+                Signature[] signatures = packageInfo.signatures;
+                if (signatures != null && signatures.length >= 1) {
+                    report.append("SHA-1: ").append(CryptoHelper.getFingerprintCert(packageInfo.signatures[0].toByteArray())).append('\n');
+                }
+                report.append('\n');
+            } catch (Exception e) {
+                e.printStackTrace();
+                return false;
+            }
+            String line;
+            while ((line = stacktrace.readLine()) != null) {
+                report.append(line);
+                report.append('\n');
+            }
+            file.close();
+            activity.deleteFile(FILENAME);
+            AlertDialog.Builder builder = new AlertDialog.Builder(activity);
+            builder.setTitle(activity.getString(R.string.crash_report_title));
+            builder.setMessage(activity.getText(R.string.crash_report_message));
+            builder.setPositiveButton(activity.getText(R.string.send_now), (dialog, which) -> {
 
-				Log.d(Config.LOGTAG, "using account=" + account.getJid().asBareJid() + " to send in stack trace");
-				Conversation conversation = service.findOrCreateConversation(account, Config.BUG_REPORTS, false, true);
-				Message message = new Message(conversation, report.toString(), Message.ENCRYPTION_NONE);
-				service.sendMessage(message);
-			});
-			builder.setNegativeButton(activity.getText(R.string.send_never), (dialog, which) -> preferences.edit().putBoolean("never_send", true).apply());
-			builder.create().show();
-			return true;
-		} catch (final IOException ignored) {
-			return false;
-		}
-	}
+                Log.d(Config.LOGTAG, "using account=" + account.getJid().asBareJid() + " to send in stack trace");
+                Conversation conversation = service.findOrCreateConversation(account, Config.BUG_REPORTS, false, true);
+                Message message = new Message(conversation, report.toString(), Message.ENCRYPTION_NONE);
+                service.sendMessage(message);
+            });
+            builder.setNegativeButton(activity.getText(R.string.send_never), (dialog, which) -> preferences.edit().putBoolean("never_send", true).apply());
+            builder.create().show();
+            return true;
+        } catch (final IOException ignored) {
+            return false;
+        }
+    }
 
-	static void writeToStacktraceFile(Context context, String msg) {
-		try {
-			OutputStream os = context.openFileOutput(FILENAME, Context.MODE_PRIVATE);
-			os.write(msg.getBytes());
-			os.flush();
-			os.close();
-		} catch (IOException ignored) {
-		}
-	}
+    static void writeToStacktraceFile(Context context, String msg) {
+        try {
+            OutputStream os = context.openFileOutput(FILENAME, Context.MODE_PRIVATE);
+            os.write(msg.getBytes());
+            os.flush();
+            os.close();
+        } catch (IOException ignored) {
+        }
+    }
 }