Crash Handler Klassen umbenannt
authorpk910 <philipp@pk910.de>
Fri, 11 Mar 2016 14:51:43 +0000 (15:51 +0100)
committerpk910 <philipp@pk910.de>
Fri, 11 Mar 2016 14:51:43 +0000 (15:51 +0100)
app/src/main/AndroidManifest.xml
app/src/main/java/de/dhbwloe/campusapp/CampusApp.java
app/src/main/java/de/dhbwloe/campusapp/CampusAppContext.java
app/src/main/java/de/dhbwloe/campusapp/CampusAppCrashActivity.java [new file with mode: 0644]
app/src/main/java/de/dhbwloe/campusapp/CampusAppCrashHandler.java
app/src/main/java/de/dhbwloe/campusapp/CampusAppExceptionHandler.java [deleted file]

index 035e1a30053924a1af253d8e15baf0904a563927..5bf23f0f748a03b248f7d0c4fd0e9a526ecbf743 100644 (file)
@@ -30,7 +30,7 @@
             </intent-filter>
         </activity>
         <activity
-            android:name=".CampusAppCrashHandler"
+            android:name=".CampusAppCrashActivity"
             android:theme="@style/AppTheme"
             android:windowSoftInputMode="stateHidden">
             <intent-filter>
index ba3d60445d45b3c232ec51d48e33336b2f2fea3b..9c3542be9204ea974c032aec2a093f9660568f21 100644 (file)
@@ -17,11 +17,8 @@ package de.dhbwloe.campusapp;
 
 import android.content.Context;
 import android.content.Intent;
-import android.content.res.TypedArray;
 import android.nfc.NfcAdapter;
 import android.os.Bundle;
-import android.support.design.widget.FloatingActionButton;
-import android.support.design.widget.Snackbar;
 import android.support.v4.app.FragmentActivity;
 import android.util.Log;
 import android.view.KeyEvent;
@@ -30,7 +27,6 @@ import android.support.design.widget.NavigationView;
 import android.support.v4.view.GravityCompat;
 import android.support.v4.widget.DrawerLayout;
 import android.support.v7.app.ActionBarDrawerToggle;
-import android.support.v7.app.AppCompatActivity;
 import android.support.v7.widget.Toolbar;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -43,8 +39,6 @@ import android.widget.TextView;
 
 import java.util.Date;
 
-import de.dhbwloe.campusapp.nfcreader.NfcCardListener;
-
 public class CampusApp extends FragmentActivity {
     private boolean bSearchActive = false;
     private CampusAppContext AppContext = null;
@@ -69,7 +63,7 @@ public class CampusApp extends FragmentActivity {
 
         if(CampusAppContext.DEBUG) {
             final Thread.UncaughtExceptionHandler systemExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
-            final CampusAppExceptionHandler oExceptionHandler = new CampusAppExceptionHandler();
+            final CampusAppCrashHandler oExceptionHandler = new CampusAppCrashHandler();
             Thread.setDefaultUncaughtExceptionHandler (new Thread.UncaughtExceptionHandler() {
                 @Override
                 public void uncaughtException(Thread thread, Throwable e) {
index 6f0b57865bd541ec994e4baf18b7cb4fbadab904..a775ad63830bf4c57580ce5aaab9e7ea1d3e03e3 100644 (file)
@@ -16,7 +16,6 @@
 package de.dhbwloe.campusapp;
 
 import android.app.Activity;
-import android.content.Intent;
 import android.os.Bundle;
 import android.util.Log;
 import android.widget.TextView;
@@ -133,7 +132,7 @@ public class CampusAppContext {
     private DatabaseManager oDatabaseManager;
     private NfcCardListener oNfcCardListener;
     private Bundle oContextVariables;
-    private CampusAppExceptionHandler oExceptionHandler;
+    private CampusAppCrashHandler oExceptionHandler;
 
     public CampusAppContext(CampusApp mainActivity, int fragmentContainerId, int navigationViewId) {
         final CampusAppContext AppContext = this;
diff --git a/app/src/main/java/de/dhbwloe/campusapp/CampusAppCrashActivity.java b/app/src/main/java/de/dhbwloe/campusapp/CampusAppCrashActivity.java
new file mode 100644 (file)
index 0000000..b5efaed
--- /dev/null
@@ -0,0 +1,74 @@
+package de.dhbwloe.campusapp;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.View;
+import android.view.Window;
+import android.webkit.WebView;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ProgressBar;
+
+/**
+ * Created by pk910 on 11.03.2016.
+ */
+public class CampusAppCrashActivity extends Activity {
+    private static boolean crashLogWindowOpened = false;
+    private static final Object crashWindowLock = new Object();
+
+    private String crashdate, stacktrace;
+    private CampusAppCrashHandler exceptionHandler;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState)
+    {
+        super.onCreate(savedInstanceState);
+
+        synchronized (crashWindowLock) {
+            if(crashLogWindowOpened) {
+                int p = android.os.Process.myPid();
+                android.os.Process.killProcess(p);
+                return;
+            }
+            crashLogWindowOpened = true;
+        }
+
+        requestWindowFeature(Window.FEATURE_NO_TITLE); // make a window without a titlebar
+        setContentView(R.layout.crash_log);
+        final Activity that = this;
+
+        Bundle extras = getIntent().getExtras();
+        crashdate = (extras != null ? extras.getString("crashdate") : null);
+
+        EditText crashLog = (EditText) findViewById(R.id.crashLog);
+        exceptionHandler = new CampusAppCrashHandler();
+        stacktrace = exceptionHandler.getCrashStacktrace(that, crashdate);
+        crashLog.setText(stacktrace);
+
+        Button sendButton = (Button) findViewById(R.id.sendCrashLog);
+        sendButton.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                Button sendButton = (Button) v;
+                ProgressBar sendProgress = (ProgressBar) findViewById(R.id.sendProgressBar);
+
+
+                sendButton.setEnabled(false);
+                sendProgress.setVisibility(View.VISIBLE);
+
+
+                exceptionHandler.postprocessException(crashdate, stacktrace, new CampusAppCrashHandler.PostProcessingCallback() {
+                    @Override
+                    public void onPostProcessFinished(String response) {
+                        ProgressBar sendProgress = (ProgressBar) findViewById(R.id.sendProgressBar);
+                        WebView reportResponse = (WebView) findViewById(R.id.crashReportResponse);
+
+                        sendProgress.setVisibility(View.GONE);
+                        reportResponse.setVisibility(View.VISIBLE);
+                        reportResponse.loadData(response, "text/html", null);
+                    }
+                });
+            }
+        });
+    }
+}
index 3d1b8c53e63a0cfe3157b4af049cc169f3344f83..c5153040e47bc2bf4d42592ff0fb46f7987bd37f 100644 (file)
 package de.dhbwloe.campusapp;
 
 import android.app.Activity;
-import android.os.Bundle;
-import android.view.View;
-import android.view.Window;
-import android.webkit.WebView;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.ProgressBar;
+import android.content.Intent;
+import android.util.Log;
+
+import com.loopj.android.http.AsyncHttpClient;
+import com.loopj.android.http.AsyncHttpResponseHandler;
+import com.loopj.android.http.RequestParams;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import cz.msebera.android.httpclient.Header;
 
 /**
  * Created by pk910 on 11.03.2016.
  */
-public class CampusAppCrashHandler extends Activity {
+public class CampusAppCrashHandler {
+    private static String CRASHLOG_UPLOAD = "http://dev.pk910.de/DHBWCampusCourses";
+    private String localPath;
+
     private static boolean crashLogWindowOpened = false;
     private static final Object crashWindowLock = new Object();
 
-    private String crashdate, stacktrace;
-    private CampusAppExceptionHandler exceptionHandler;
-
-    @Override
-    public void onCreate(Bundle savedInstanceState)
-    {
-        super.onCreate(savedInstanceState);
+    public void handleUncaughtException(Thread thread, Throwable e) {
+        // automatically send crash log to my server for debuggging.
+        // disable this for productive use! (CampusAppContext.DEBUG)
 
         synchronized (crashWindowLock) {
-            if(crashLogWindowOpened) {
-                int p = android.os.Process.myPid();
-                android.os.Process.killProcess(p);
+            if(crashLogWindowOpened)
                 return;
-            }
             crashLogWindowOpened = true;
         }
 
-        requestWindowFeature(Window.FEATURE_NO_TITLE); // make a window without a titlebar
-        setContentView(R.layout.crash_log);
-        final Activity that = this;
+        final Writer result = new StringWriter();
+        final PrintWriter printWriter = new PrintWriter(result);
+        e.printStackTrace(printWriter);
+        String stacktrace = result.toString();
+        printWriter.close();
 
-        Bundle extras = getIntent().getExtras();
-        crashdate = (extras != null ? extras.getString("crashdate") : null);
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd-HHmmss");
+        String crashdate = dateFormat.format(new Date());
+        String filename = crashdate + ".stacktrace";
 
-        EditText crashLog = (EditText) findViewById(R.id.crashLog);
-        exceptionHandler = new CampusAppExceptionHandler();
-        stacktrace = exceptionHandler.getCrashStacktrace(that, crashdate);
-        crashLog.setText(stacktrace);
+        CampusAppContext context;
+        Activity mainActivity = null;
+        try {
+            /*Wir greifen nun auf einen Code zurück, aus welchem die unbehandelte Exception stammt.
+            * Dies ist womöglich keine gute Idee, daher müssen wir sämmtliche Exceptions abfangen und verwerfen (Exception inception :D)
+            * und hoffen, dass die App noch so weit "funktioniert" ;)
+            */
+            context = CampusAppContext.getInstance();
 
-        Button sendButton = (Button) findViewById(R.id.sendCrashLog);
-        sendButton.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                Button sendButton = (Button) v;
-                ProgressBar sendProgress = (ProgressBar) findViewById(R.id.sendProgressBar);
+            if(context != null) {
+                mainActivity = context.getMainActivity();
+            }
+            if(mainActivity != null) {
+                localPath = mainActivity.getApplicationContext().getFilesDir().getAbsolutePath();
+            }
+        } catch (Exception ex) {}
+
+        if(localPath != null)
+            writeToFile(stacktrace, filename);
+
+        // start crash screen
+        try {
+            Intent intent = new Intent();
+            intent.setAction("de.dhbw.campusapp.CRASH_LOG");
+            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // required when starting from Application
+            intent.putExtra("crashdate", crashdate);
+            mainActivity.startActivity(intent);
+        } catch (Exception ex) {
+        }
+    }
 
+    private void writeToFile(String stacktrace, String filename) {
+        try {
+            BufferedWriter bos = new BufferedWriter(new FileWriter(
+                    localPath + "/" + filename));
+            bos.write(stacktrace);
+            bos.flush();
+            bos.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
 
-                sendButton.setEnabled(false);
-                sendProgress.setVisibility(View.VISIBLE);
 
+    public interface PostProcessingCallback {
+        public void onPostProcessFinished(String response);
+    }
 
-                exceptionHandler.postprocessException(crashdate, stacktrace, new CampusAppExceptionHandler.PostProcessingCallback() {
-                    @Override
-                    public void onPostProcessFinished(String response) {
-                        ProgressBar sendProgress = (ProgressBar) findViewById(R.id.sendProgressBar);
-                        WebView reportResponse = (WebView) findViewById(R.id.crashReportResponse);
+    public String getCrashStacktrace(Activity crashLogScreen, String crashdate) {
+        localPath = crashLogScreen.getApplicationContext().getFilesDir().getAbsolutePath();
+        String fileName = localPath + "/" + crashdate + ".stacktrace";
+        StringBuilder stackTrace = new StringBuilder();
 
-                        sendProgress.setVisibility(View.GONE);
-                        reportResponse.setVisibility(View.VISIBLE);
-                        reportResponse.loadData(response, "text/html", null);
-                    }
-                });
+        try {
+            BufferedReader br = new BufferedReader(new FileReader(fileName));
+            String line;
+
+            while ((line = br.readLine()) != null) {
+                stackTrace.append(line);
+                stackTrace.append('\n');
+            }
+            br.close();
+        }
+        catch (IOException e) {
+            //You'll need to add proper error handling here
+        }
+        return stackTrace.toString();
+    }
+
+    public void postprocessException(String crashdate, String stacktrace, PostProcessingCallback callback) {
+        sendToServer(CRASHLOG_UPLOAD, stacktrace, crashdate, callback);
+    }
+
+    private void sendToServer(String url, String stacktrace, String crashdate, final PostProcessingCallback callback) {
+        AsyncHttpClient client = new AsyncHttpClient();
+        RequestParams params = new RequestParams();
+        params.add("stacktrace", stacktrace);
+        params.add("crashdate", crashdate);
+
+        client.post(url, params, new AsyncHttpResponseHandler() {
+
+            @Override
+            public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
+                callback.onPostProcessFinished((responseBody != null ? new String(responseBody) : null));
+            }
+
+            @Override
+            public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
+                callback.onPostProcessFinished("Failed: "+(responseBody != null ? new String(responseBody) : null));
             }
         });
     }
+
 }
diff --git a/app/src/main/java/de/dhbwloe/campusapp/CampusAppExceptionHandler.java b/app/src/main/java/de/dhbwloe/campusapp/CampusAppExceptionHandler.java
deleted file mode 100644 (file)
index 00cca75..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-package de.dhbwloe.campusapp;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.util.Log;
-
-import com.loopj.android.http.AsyncHttpClient;
-import com.loopj.android.http.AsyncHttpResponseHandler;
-import com.loopj.android.http.RequestParams;
-
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-import cz.msebera.android.httpclient.Header;
-
-/**
- * Created by pk910 on 11.03.2016.
- */
-public class CampusAppExceptionHandler {
-    private static String CRASHLOG_UPLOAD = "http://dev.pk910.de/DHBWCampusCourses";
-    private String localPath;
-
-    private static boolean crashLogWindowOpened = false;
-    private static final Object crashWindowLock = new Object();
-
-    public void handleUncaughtException(Thread thread, Throwable e) {
-        // automatically send crash log to my server for debuggging.
-        // disable this for productive use! (CampusAppContext.DEBUG)
-
-        synchronized (crashWindowLock) {
-            if(crashLogWindowOpened)
-                return;
-            crashLogWindowOpened = true;
-        }
-
-        final Writer result = new StringWriter();
-        final PrintWriter printWriter = new PrintWriter(result);
-        e.printStackTrace(printWriter);
-        String stacktrace = result.toString();
-        printWriter.close();
-
-        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd-HHmmss");
-        String crashdate = dateFormat.format(new Date());
-        String filename = crashdate + ".stacktrace";
-
-        CampusAppContext context;
-        Activity mainActivity = null;
-        try {
-            /*Wir greifen nun auf einen Code zurück, aus welchem die unbehandelte Exception stammt.
-            * Dies ist womöglich keine gute Idee, daher müssen wir sämmtliche Exceptions abfangen und verwerfen (Exception inception :D)
-            * und hoffen, dass die App noch so weit "funktioniert" ;)
-            */
-            context = CampusAppContext.getInstance();
-
-            if(context != null) {
-                mainActivity = context.getMainActivity();
-            }
-            if(mainActivity != null) {
-                localPath = mainActivity.getApplicationContext().getFilesDir().getAbsolutePath();
-            }
-        } catch (Exception ex) {}
-
-        if(localPath != null)
-            writeToFile(stacktrace, filename);
-
-        // start crash screen
-        try {
-            Intent intent = new Intent();
-            intent.setAction("de.dhbw.campusapp.CRASH_LOG");
-            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // required when starting from Application
-            intent.putExtra("crashdate", crashdate);
-            mainActivity.startActivity(intent);
-        } catch (Exception ex) {
-        }
-    }
-
-    private void writeToFile(String stacktrace, String filename) {
-        try {
-            BufferedWriter bos = new BufferedWriter(new FileWriter(
-                    localPath + "/" + filename));
-            bos.write(stacktrace);
-            bos.flush();
-            bos.close();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-
-    public interface PostProcessingCallback {
-        public void onPostProcessFinished(String response);
-    }
-
-    public String getCrashStacktrace(Activity crashLogScreen, String crashdate) {
-        localPath = crashLogScreen.getApplicationContext().getFilesDir().getAbsolutePath();
-        String fileName = localPath + "/" + crashdate + ".stacktrace";
-        StringBuilder stackTrace = new StringBuilder();
-
-        try {
-            BufferedReader br = new BufferedReader(new FileReader(fileName));
-            String line;
-
-            while ((line = br.readLine()) != null) {
-                stackTrace.append(line);
-                stackTrace.append('\n');
-            }
-            br.close();
-        }
-        catch (IOException e) {
-            //You'll need to add proper error handling here
-        }
-        return stackTrace.toString();
-    }
-
-    public void postprocessException(String crashdate, String stacktrace, PostProcessingCallback callback) {
-        sendToServer(CRASHLOG_UPLOAD, stacktrace, crashdate, callback);
-    }
-
-    private void sendToServer(String url, String stacktrace, String crashdate, final PostProcessingCallback callback) {
-        AsyncHttpClient client = new AsyncHttpClient();
-        RequestParams params = new RequestParams();
-        params.add("stacktrace", stacktrace);
-        params.add("crashdate", crashdate);
-
-        client.post(url, params, new AsyncHttpResponseHandler() {
-
-            @Override
-            public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
-                callback.onPostProcessFinished((responseBody != null ? new String(responseBody) : null));
-            }
-
-            @Override
-            public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
-                callback.onPostProcessFinished("Failed: "+(responseBody != null ? new String(responseBody) : null));
-            }
-        });
-    }
-
-}