Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c7a6f5cb authored by vince-bourgmayer's avatar vince-bourgmayer
Browse files

add ServiceExceptionHandler

parent fe849af6
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -27,7 +27,4 @@ public abstract class AppConstants {

    public static final String[] MEDIA_SYNCABLE_CATEGORIES = new String[]{"Images", "Movies", "Music", "Ringtones", "Documents", "Podcasts"};
    public static final String[] SETTINGS_SYNCABLE_CATEGORIES = new String[] {"Rom settings"};



}
+73 −0
Original line number Diff line number Diff line
/*
 * Copyright © Vincent Bourgmayer (/e/ foundation).
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Public License v3.0
 * which accompanies this distribution, and is available at
 * http://www.gnu.org/licenses/gpl.html
 */
package foundation.e.drive.utils;
import android.os.Environment;
import android.util.Log;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.Thread.UncaughtExceptionHandler;

/**
 * @author Vincent Bourgmayer
 */
public class ServiceExceptionHandler implements UncaughtExceptionHandler{
    @Override
    public void uncaughtException(Thread t, Throwable e) {
        e.printStackTrace();

        if(isExternalStorageAvailable() && !isExternalStorageReadOnly()){
            //Get TimeStamp
            Long timestamp = System.currentTimeMillis();

            //Create a new file that user can sent to us
            String fileName = "eDrive-crash-"+timestamp+".log";
            File downloadDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath());
            File logFile = new File(downloadDir, fileName);
            try {
                FileOutputStream fos = new FileOutputStream(logFile);
                fos.write(getStackTraceAsString(e).getBytes());
                fos.close();
            } catch (IOException exception) {
                exception.printStackTrace();
            }
        }
    }

    //source: https://www.journaldev.com/9400/android-external-storage-read-write-save-file
    private static boolean isExternalStorageAvailable() {
        String extStorageState = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(extStorageState)) {
            return true;
        }
        return false;
    }
    //source: https://www.journaldev.com/9400/android-external-storage-read-write-save-file
    private static boolean isExternalStorageReadOnly() {
        String extStorageState = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(extStorageState)) {
            return true;
        }
        return false;
    }

    /**
     * Return the stackTrace of the exception as a String
     * @param e the exception
     * @return the Stacktrace as a string
     */
    private String getStackTraceAsString(Throwable e){
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        e.printStackTrace(pw);
        return sw.toString();
    }
}