ExceptionHandler.java 9.95 KB
package net.hockeyapp.android;

import android.os.Process;
import android.text.TextUtils;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Date;
import java.util.UUID;
import net.hockeyapp.android.objects.CrashDetails;
import net.hockeyapp.android.utils.HockeyLog;

public class ExceptionHandler
  implements Thread.UncaughtExceptionHandler
{
  private boolean a = false;
  private CrashManagerListener b;
  private Thread.UncaughtExceptionHandler c;
  
  public ExceptionHandler(Thread.UncaughtExceptionHandler paramUncaughtExceptionHandler, CrashManagerListener paramCrashManagerListener, boolean paramBoolean)
  {
    this.c = paramUncaughtExceptionHandler;
    this.a = paramBoolean;
    this.b = paramCrashManagerListener;
  }
  
  private static String a(String paramString)
  {
    String str = paramString;
    if (!TextUtils.isEmpty(paramString))
    {
      str = paramString;
      if (paramString.length() > 255) {
        str = paramString.substring(0, 255);
      }
    }
    return str;
  }
  
  /* Error */
  private static void a(String paramString1, String paramString2)
    throws IOException
  {
    // Byte code:
    //   0: aload_0
    //   1: invokestatic 31	android/text/TextUtils:isEmpty	(Ljava/lang/CharSequence;)Z
    //   4: ifeq +4 -> 8
    //   7: return
    //   8: aconst_null
    //   9: astore_2
    //   10: aconst_null
    //   11: astore_3
    //   12: new 46	java/lang/StringBuilder
    //   15: dup
    //   16: invokespecial 47	java/lang/StringBuilder:<init>	()V
    //   19: getstatic 53	net/hockeyapp/android/Constants:FILES_PATH	Ljava/lang/String;
    //   22: invokevirtual 57	java/lang/StringBuilder:append	(Ljava/lang/String;)Ljava/lang/StringBuilder;
    //   25: ldc 59
    //   27: invokevirtual 57	java/lang/StringBuilder:append	(Ljava/lang/String;)Ljava/lang/StringBuilder;
    //   30: aload_1
    //   31: invokevirtual 57	java/lang/StringBuilder:append	(Ljava/lang/String;)Ljava/lang/StringBuilder;
    //   34: invokevirtual 63	java/lang/StringBuilder:toString	()Ljava/lang/String;
    //   37: astore 4
    //   39: aload_3
    //   40: astore_1
    //   41: aload_0
    //   42: invokestatic 31	android/text/TextUtils:isEmpty	(Ljava/lang/CharSequence;)Z
    //   45: ifne +38 -> 83
    //   48: aload_3
    //   49: astore_1
    //   50: aload_0
    //   51: invokestatic 67	android/text/TextUtils:getTrimmedLength	(Ljava/lang/CharSequence;)I
    //   54: ifle +29 -> 83
    //   57: new 69	java/io/BufferedWriter
    //   60: dup
    //   61: new 71	java/io/FileWriter
    //   64: dup
    //   65: aload 4
    //   67: invokespecial 74	java/io/FileWriter:<init>	(Ljava/lang/String;)V
    //   70: invokespecial 77	java/io/BufferedWriter:<init>	(Ljava/io/Writer;)V
    //   73: astore_1
    //   74: aload_1
    //   75: aload_0
    //   76: invokevirtual 80	java/io/BufferedWriter:write	(Ljava/lang/String;)V
    //   79: aload_1
    //   80: invokevirtual 83	java/io/BufferedWriter:flush	()V
    //   83: aload_1
    //   84: ifnull -77 -> 7
    //   87: aload_1
    //   88: invokevirtual 86	java/io/BufferedWriter:close	()V
    //   91: return
    //   92: astore_0
    //   93: aconst_null
    //   94: astore_1
    //   95: aload_1
    //   96: ifnull -89 -> 7
    //   99: aload_1
    //   100: invokevirtual 86	java/io/BufferedWriter:close	()V
    //   103: return
    //   104: astore_0
    //   105: aload_2
    //   106: astore_1
    //   107: aload_1
    //   108: ifnull +7 -> 115
    //   111: aload_1
    //   112: invokevirtual 86	java/io/BufferedWriter:close	()V
    //   115: aload_0
    //   116: athrow
    //   117: astore_0
    //   118: goto -11 -> 107
    //   121: astore_0
    //   122: goto -27 -> 95
    // Local variable table:
    //   start	length	slot	name	signature
    //   0	125	0	paramString1	String
    //   0	125	1	paramString2	String
    //   9	97	2	localObject1	Object
    //   11	38	3	localObject2	Object
    //   37	29	4	str	String
    // Exception table:
    //   from	to	target	type
    //   12	39	92	java/io/IOException
    //   41	48	92	java/io/IOException
    //   50	74	92	java/io/IOException
    //   12	39	104	finally
    //   41	48	104	finally
    //   50	74	104	finally
    //   74	83	117	finally
    //   74	83	121	java/io/IOException
  }
  
  private static void a(Throwable paramThrowable, Thread paramThread, String paramString, Boolean paramBoolean, CrashManagerListener paramCrashManagerListener)
  {
    Date localDate1 = new Date(CrashManager.getInitializeTimestamp());
    String str = UUID.randomUUID().toString();
    Date localDate2 = new Date();
    PrintWriter localPrintWriter = new PrintWriter(new StringWriter());
    if (paramThrowable != null) {
      paramThrowable.printStackTrace(localPrintWriter);
    }
    paramThrowable = new CrashDetails(str, paramThrowable, paramString, paramBoolean);
    paramThrowable.setAppPackage(Constants.APP_PACKAGE);
    paramThrowable.setAppVersionCode(Constants.APP_VERSION);
    paramThrowable.setAppVersionName(Constants.APP_VERSION_NAME);
    paramThrowable.setAppStartDate(localDate1);
    paramThrowable.setAppCrashDate(localDate2);
    if ((paramCrashManagerListener == null) || (paramCrashManagerListener.includeDeviceData()))
    {
      paramThrowable.setOsVersion(Constants.ANDROID_VERSION);
      paramThrowable.setOsBuild(Constants.ANDROID_BUILD);
      paramThrowable.setDeviceManufacturer(Constants.PHONE_MANUFACTURER);
      paramThrowable.setDeviceModel(Constants.PHONE_MODEL);
    }
    if ((paramThread != null) && ((paramCrashManagerListener == null) || (paramCrashManagerListener.includeThreadDetails()))) {
      paramThrowable.setThreadName(paramThread.getName() + "-" + paramThread.getId());
    }
    if ((Constants.CRASH_IDENTIFIER != null) && ((paramCrashManagerListener == null) || (paramCrashManagerListener.includeDeviceIdentifier()))) {
      paramThrowable.setReporterKey(Constants.CRASH_IDENTIFIER);
    }
    paramThrowable.writeCrashReport();
    if (paramCrashManagerListener != null) {}
    try
    {
      a(a(paramCrashManagerListener.getUserID()), str + ".user");
      a(a(paramCrashManagerListener.getContact()), str + ".contact");
      a(paramCrashManagerListener.getDescription(), str + ".description");
      return;
    }
    catch (IOException paramThrowable)
    {
      HockeyLog.error("Error saving crash meta data!", paramThrowable);
    }
  }
  
  public static void saveException(Throwable paramThrowable, Thread paramThread, CrashManagerListener paramCrashManagerListener)
  {
    Date localDate1 = new Date();
    Date localDate2 = new Date(CrashManager.getInitializeTimestamp());
    paramThrowable.printStackTrace(new PrintWriter(new StringWriter()));
    String str = UUID.randomUUID().toString();
    paramThrowable = new CrashDetails(str, paramThrowable);
    paramThrowable.setAppPackage(Constants.APP_PACKAGE);
    paramThrowable.setAppVersionCode(Constants.APP_VERSION);
    paramThrowable.setAppVersionName(Constants.APP_VERSION_NAME);
    paramThrowable.setAppStartDate(localDate2);
    paramThrowable.setAppCrashDate(localDate1);
    if ((paramCrashManagerListener == null) || (paramCrashManagerListener.includeDeviceData()))
    {
      paramThrowable.setOsVersion(Constants.ANDROID_VERSION);
      paramThrowable.setOsBuild(Constants.ANDROID_BUILD);
      paramThrowable.setDeviceManufacturer(Constants.PHONE_MANUFACTURER);
      paramThrowable.setDeviceModel(Constants.PHONE_MODEL);
    }
    if ((paramThread != null) && ((paramCrashManagerListener == null) || (paramCrashManagerListener.includeThreadDetails()))) {
      paramThrowable.setThreadName(paramThread.getName() + "-" + paramThread.getId());
    }
    if ((Constants.CRASH_IDENTIFIER != null) && ((paramCrashManagerListener == null) || (paramCrashManagerListener.includeDeviceIdentifier()))) {
      paramThrowable.setReporterKey(Constants.CRASH_IDENTIFIER);
    }
    paramThrowable.writeCrashReport();
    if (paramCrashManagerListener != null) {}
    try
    {
      a(a(paramCrashManagerListener.getUserID()), str + ".user");
      a(a(paramCrashManagerListener.getContact()), str + ".contact");
      a(paramCrashManagerListener.getDescription(), str + ".description");
      return;
    }
    catch (IOException paramThrowable)
    {
      HockeyLog.error("Error saving crash meta data!", paramThrowable);
    }
  }
  
  @Deprecated
  public static void saveException(Throwable paramThrowable, CrashManagerListener paramCrashManagerListener)
  {
    saveException(paramThrowable, null, paramCrashManagerListener);
  }
  
  public static void saveManagedException(Throwable paramThrowable, Thread paramThread, CrashManagerListener paramCrashManagerListener)
  {
    a(paramThrowable, paramThread, null, Boolean.valueOf(true), paramCrashManagerListener);
  }
  
  public static void saveNativeException(Throwable paramThrowable, String paramString, Thread paramThread, CrashManagerListener paramCrashManagerListener)
  {
    String str = paramString;
    if (!TextUtils.isEmpty(paramString))
    {
      String[] arrayOfString = paramString.split("--- End of managed exception stack trace ---", 2);
      str = paramString;
      if (arrayOfString != null)
      {
        str = paramString;
        if (arrayOfString.length > 0) {
          str = arrayOfString[0];
        }
      }
    }
    a(paramThrowable, paramThread, str, Boolean.valueOf(false), paramCrashManagerListener);
  }
  
  public void setListener(CrashManagerListener paramCrashManagerListener)
  {
    this.b = paramCrashManagerListener;
  }
  
  public void uncaughtException(Thread paramThread, Throwable paramThrowable)
  {
    if (Constants.FILES_PATH == null)
    {
      this.c.uncaughtException(paramThread, paramThrowable);
      return;
    }
    saveException(paramThrowable, paramThread, this.b);
    if (!this.a)
    {
      this.c.uncaughtException(paramThread, paramThrowable);
      return;
    }
    Process.killProcess(Process.myPid());
    System.exit(10);
  }
}


/* Location:              /home/merong/decompile/hackery-dex2jar.jar!/net/hockeyapp/android/ExceptionHandler.class
 * Java compiler version: 6 (50.0)
 * JD-Core Version:       0.7.1
 */