dismiss incoming call notification on crash. fixes #3701
This commit is contained in:
		
							parent
							
								
									abfa4eae08
								
							
						
					
					
						commit
						bd0234ba4d
					
				@ -426,6 +426,15 @@ public class NotificationService {
 | 
				
			|||||||
        cancel(INCOMING_CALL_NOTIFICATION_ID);
 | 
					        cancel(INCOMING_CALL_NOTIFICATION_ID);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static void cancelIncomingCallNotification(final Context context) {
 | 
				
			||||||
 | 
					        final NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            notificationManager.cancel(INCOMING_CALL_NOTIFICATION_ID);
 | 
				
			||||||
 | 
					        } catch (RuntimeException e) {
 | 
				
			||||||
 | 
					            Log.d(Config.LOGTAG, "unable to cancel incoming call notification after crash", e);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private void pushNow(final Message message) {
 | 
					    private void pushNow(final Message message) {
 | 
				
			||||||
        mXmppConnectionService.updateUnreadCountBadge();
 | 
					        mXmppConnectionService.updateUnreadCountBadge();
 | 
				
			||||||
        if (!notify(message)) {
 | 
					        if (!notify(message)) {
 | 
				
			||||||
 | 
				
			|||||||
@ -1,31 +1,35 @@
 | 
				
			|||||||
package eu.siacs.conversations.utils;
 | 
					package eu.siacs.conversations.utils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import android.content.Context;
 | 
					import android.content.Context;
 | 
				
			||||||
 | 
					import android.support.annotation.NonNull;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.io.PrintWriter;
 | 
					import java.io.PrintWriter;
 | 
				
			||||||
import java.io.StringWriter;
 | 
					import java.io.StringWriter;
 | 
				
			||||||
import java.io.Writer;
 | 
					import java.io.Writer;
 | 
				
			||||||
import java.lang.Thread.UncaughtExceptionHandler;
 | 
					import java.lang.Thread.UncaughtExceptionHandler;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import eu.siacs.conversations.services.NotificationService;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class ExceptionHandler implements UncaughtExceptionHandler {
 | 
					public class ExceptionHandler implements UncaughtExceptionHandler {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private UncaughtExceptionHandler defaultHandler;
 | 
						private final UncaughtExceptionHandler defaultHandler;
 | 
				
			||||||
	private Context context;
 | 
						private final Context context;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public ExceptionHandler(Context context) {
 | 
						ExceptionHandler(final Context context) {
 | 
				
			||||||
		this.context = context;
 | 
							this.context = context;
 | 
				
			||||||
		this.defaultHandler = Thread.getDefaultUncaughtExceptionHandler();
 | 
							this.defaultHandler = Thread.getDefaultUncaughtExceptionHandler();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public void uncaughtException(Thread thread, Throwable ex) {
 | 
						public void uncaughtException(@NonNull Thread thread, final Throwable throwable) {
 | 
				
			||||||
		Writer result = new StringWriter();
 | 
							NotificationService.cancelIncomingCallNotification(context);
 | 
				
			||||||
		PrintWriter printWriter = new PrintWriter(result);
 | 
							final Writer stringWriter = new StringWriter();
 | 
				
			||||||
		ex.printStackTrace(printWriter);
 | 
							final PrintWriter printWriter = new PrintWriter(stringWriter);
 | 
				
			||||||
		String stacktrace = result.toString();
 | 
							throwable.printStackTrace(printWriter);
 | 
				
			||||||
 | 
							final String stacktrace = stringWriter.toString();
 | 
				
			||||||
		printWriter.close();
 | 
							printWriter.close();
 | 
				
			||||||
		ExceptionHelper.writeToStacktraceFile(context, stacktrace);
 | 
							ExceptionHelper.writeToStacktraceFile(context, stacktrace);
 | 
				
			||||||
		this.defaultHandler.uncaughtException(thread, ex);
 | 
							this.defaultHandler.uncaughtException(thread, throwable);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,12 +1,12 @@
 | 
				
			|||||||
package eu.siacs.conversations.utils;
 | 
					package eu.siacs.conversations.utils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import android.support.v7.app.AlertDialog;
 | 
					 | 
				
			||||||
import android.content.Context;
 | 
					import android.content.Context;
 | 
				
			||||||
import android.content.SharedPreferences;
 | 
					import android.content.SharedPreferences;
 | 
				
			||||||
import android.content.pm.PackageInfo;
 | 
					import android.content.pm.PackageInfo;
 | 
				
			||||||
import android.content.pm.PackageManager;
 | 
					import android.content.pm.PackageManager;
 | 
				
			||||||
import android.content.pm.Signature;
 | 
					import android.content.pm.Signature;
 | 
				
			||||||
import android.preference.PreferenceManager;
 | 
					import android.preference.PreferenceManager;
 | 
				
			||||||
 | 
					import android.support.v7.app.AlertDialog;
 | 
				
			||||||
import android.util.Log;
 | 
					import android.util.Log;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.io.BufferedReader;
 | 
					import java.io.BufferedReader;
 | 
				
			||||||
@ -16,7 +16,6 @@ import java.io.InputStreamReader;
 | 
				
			|||||||
import java.io.OutputStream;
 | 
					import java.io.OutputStream;
 | 
				
			||||||
import java.text.SimpleDateFormat;
 | 
					import java.text.SimpleDateFormat;
 | 
				
			||||||
import java.util.Date;
 | 
					import java.util.Date;
 | 
				
			||||||
import java.util.List;
 | 
					 | 
				
			||||||
import java.util.Locale;
 | 
					import java.util.Locale;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import eu.siacs.conversations.Config;
 | 
					import eu.siacs.conversations.Config;
 | 
				
			||||||
@ -33,10 +32,10 @@ public class ExceptionHelper {
 | 
				
			|||||||
    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
 | 
					    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static void init(Context context) {
 | 
					    public static void init(Context context) {
 | 
				
			||||||
        if (!(Thread.getDefaultUncaughtExceptionHandler() instanceof ExceptionHandler)) {
 | 
					        if (Thread.getDefaultUncaughtExceptionHandler() instanceof ExceptionHandler) {
 | 
				
			||||||
            Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(
 | 
					            return;
 | 
				
			||||||
                    context));
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(context));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static boolean checkForCrash(XmppActivity activity) {
 | 
					    public static boolean checkForCrash(XmppActivity activity) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user