From: pk910 Date: Fri, 11 Mar 2016 13:41:55 +0000 (+0100) Subject: Crash Screen angepasst X-Git-Url: http://git-dev.pk910.de/?a=commitdiff_plain;h=1eac27409b103489518ac320b606ed3bb0fe25fe;p=DHBWCampusApp.git Crash Screen angepasst --- diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d8fce1d..035e1a3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -31,8 +31,7 @@ diff --git a/app/src/main/java/de/dhbwloe/campusapp/CampusApp.java b/app/src/main/java/de/dhbwloe/campusapp/CampusApp.java index 403c740..ba3d604 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/CampusApp.java +++ b/app/src/main/java/de/dhbwloe/campusapp/CampusApp.java @@ -308,7 +308,7 @@ public class CampusApp extends FragmentActivity { AppContext = new CampusAppContext(this, R.id.fragment_container, R.id.nav_view); else AppContext.setMainActivity(this); - + super.onResume(); Log.i("CampusApp", "onResume event"); AppContext.getNfcCardListener().resumeForefrontDispatcher(); diff --git a/app/src/main/java/de/dhbwloe/campusapp/CampusAppCrashHandler.java b/app/src/main/java/de/dhbwloe/campusapp/CampusAppCrashHandler.java index 7f66e1c..3d1b8c5 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/CampusAppCrashHandler.java +++ b/app/src/main/java/de/dhbwloe/campusapp/CampusAppCrashHandler.java @@ -2,24 +2,73 @@ 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 CampusAppCrashHandler extends Activity { + 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); - requestWindowFeature(Window.FEATURE_NO_TITLE); // make a dialog without a titlebar + + 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 CampusAppExceptionHandler(); + 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); + - Bundle extras = this.getIntent().getExtras(); - String crashdate = (extras != null ? extras.getString("crashdate") : null); + 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); - CampusAppExceptionHandler exceptionHandler = new CampusAppExceptionHandler(); - exceptionHandler.postprocessException(this, crashdate); + sendProgress.setVisibility(View.GONE); + reportResponse.setVisibility(View.VISIBLE); + reportResponse.loadData(response, "text/html", null); + } + }); + } + }); } } diff --git a/app/src/main/java/de/dhbwloe/campusapp/CampusAppExceptionHandler.java b/app/src/main/java/de/dhbwloe/campusapp/CampusAppExceptionHandler.java index 9d5a974..00cca75 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/CampusAppExceptionHandler.java +++ b/app/src/main/java/de/dhbwloe/campusapp/CampusAppExceptionHandler.java @@ -22,12 +22,6 @@ import java.util.Date; import java.util.List; import cz.msebera.android.httpclient.Header; -import cz.msebera.android.httpclient.NameValuePair; -import cz.msebera.android.httpclient.client.entity.UrlEncodedFormEntity; -import cz.msebera.android.httpclient.client.methods.HttpPost; -import cz.msebera.android.httpclient.impl.client.DefaultHttpClient; -import cz.msebera.android.httpclient.message.BasicNameValuePair; -import cz.msebera.android.httpclient.protocol.HTTP; /** * Created by pk910 on 11.03.2016. @@ -37,11 +31,18 @@ public class CampusAppExceptionHandler { 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); @@ -73,16 +74,13 @@ public class CampusAppExceptionHandler { writeToFile(stacktrace, filename); // start crash screen - if(!crashLogWindowOpened) { - 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); - crashLogWindowOpened = true; - } catch (Exception ex) { - } + 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) { } } @@ -98,7 +96,12 @@ public class CampusAppExceptionHandler { } } - public void postprocessException(Activity crashLogScreen, String crashdate) { + + 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(); @@ -116,11 +119,14 @@ public class CampusAppExceptionHandler { catch (IOException e) { //You'll need to add proper error handling here } + return stackTrace.toString(); + } - sendToServer(CRASHLOG_UPLOAD, stackTrace.toString(), crashdate); + public void postprocessException(String crashdate, String stacktrace, PostProcessingCallback callback) { + sendToServer(CRASHLOG_UPLOAD, stacktrace, crashdate, callback); } - private void sendToServer(String url, String stacktrace, String crashdate) { + private void sendToServer(String url, String stacktrace, String crashdate, final PostProcessingCallback callback) { AsyncHttpClient client = new AsyncHttpClient(); RequestParams params = new RequestParams(); params.add("stacktrace", stacktrace); @@ -130,12 +136,12 @@ public class CampusAppExceptionHandler { @Override public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { - Log.i("CrashLog", "OK: "+(responseBody != null ? new String(responseBody) : null)); + callback.onPostProcessFinished((responseBody != null ? new String(responseBody) : null)); } @Override public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) { - Log.i("CrashLog", "Failed: "+(responseBody != null ? new String(responseBody) : null)); + callback.onPostProcessFinished("Failed: "+(responseBody != null ? new String(responseBody) : null)); } }); } diff --git a/app/src/main/res/drawable/android_crash.png b/app/src/main/res/drawable/android_crash.png new file mode 100644 index 0000000..044a786 Binary files /dev/null and b/app/src/main/res/drawable/android_crash.png differ diff --git a/app/src/main/res/layout/crash_log.xml b/app/src/main/res/layout/crash_log.xml index 176d49d..8f6e4ac 100644 --- a/app/src/main/res/layout/crash_log.xml +++ b/app/src/main/res/layout/crash_log.xml @@ -1,29 +1,128 @@ - - - - - + + + + + + + + + + + + + + - + android:src="@drawable/android_crash" + android:background="#ffffff" + android:paddingTop="8dp" + android:paddingBottom="8dp" /> + + + + + + + + + + + + + + + + + + +