EnabledSessionAnalyticsManagerStrategy.java 12.6 KB
package com.crashlytics.android.answers;

import android.content.Context;
import io.fabric.sdk.android.Fabric;
import io.fabric.sdk.android.Kit;
import io.fabric.sdk.android.Logger;
import io.fabric.sdk.android.services.common.ApiKey;
import io.fabric.sdk.android.services.common.CommonUtils;
import io.fabric.sdk.android.services.events.FilesSender;
import io.fabric.sdk.android.services.events.TimeBasedFileRollOverRunnable;
import io.fabric.sdk.android.services.network.HttpRequestFactory;
import io.fabric.sdk.android.services.settings.AnalyticsSettingsData;
import java.io.IOException;
import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;

class EnabledSessionAnalyticsManagerStrategy
  implements SessionAnalyticsManagerStrategy
{
  static final int UNDEFINED_ROLLOVER_INTERVAL_SECONDS = -1;
  ApiKey apiKey = new ApiKey();
  private final Context context;
  boolean customEventsEnabled = true;
  EventFilter eventFilter = new KeepAllEventFilter();
  private final ScheduledExecutorService executorService;
  private final SessionAnalyticsFilesManager filesManager;
  FilesSender filesSender;
  private final HttpRequestFactory httpRequestFactory;
  private final Kit kit;
  final SessionEventMetadata metadata;
  boolean predefinedEventsEnabled = true;
  private final AtomicReference<ScheduledFuture<?>> rolloverFutureRef = new AtomicReference();
  volatile int rolloverIntervalSeconds = -1;
  
  public EnabledSessionAnalyticsManagerStrategy(Kit paramKit, Context paramContext, ScheduledExecutorService paramScheduledExecutorService, SessionAnalyticsFilesManager paramSessionAnalyticsFilesManager, HttpRequestFactory paramHttpRequestFactory, SessionEventMetadata paramSessionEventMetadata)
  {
    this.kit = paramKit;
    this.context = paramContext;
    this.executorService = paramScheduledExecutorService;
    this.filesManager = paramSessionAnalyticsFilesManager;
    this.httpRequestFactory = paramHttpRequestFactory;
    this.metadata = paramSessionEventMetadata;
  }
  
  public void cancelTimeBasedFileRollOver()
  {
    if (this.rolloverFutureRef.get() != null)
    {
      CommonUtils.logControlled(this.context, "Cancelling time-based rollover because no events are currently being generated.");
      ((ScheduledFuture)this.rolloverFutureRef.get()).cancel(false);
      this.rolloverFutureRef.set(null);
    }
  }
  
  public void deleteAllEvents()
  {
    this.filesManager.deleteAllEventsFiles();
  }
  
  public void processEvent(SessionEvent.Builder paramBuilder)
  {
    paramBuilder = paramBuilder.build(this.metadata);
    if ((!this.customEventsEnabled) && (SessionEvent.Type.CUSTOM.equals(paramBuilder.type)))
    {
      Fabric.getLogger().d("Answers", "Custom events tracking disabled - skipping event: " + paramBuilder);
      return;
    }
    if ((!this.predefinedEventsEnabled) && (SessionEvent.Type.PREDEFINED.equals(paramBuilder.type)))
    {
      Fabric.getLogger().d("Answers", "Predefined events tracking disabled - skipping event: " + paramBuilder);
      return;
    }
    if (this.eventFilter.skipEvent(paramBuilder))
    {
      Fabric.getLogger().d("Answers", "Skipping filtered event: " + paramBuilder);
      return;
    }
    try
    {
      this.filesManager.writeEvent(paramBuilder);
      scheduleTimeBasedRollOverIfNeeded();
      return;
    }
    catch (IOException localIOException)
    {
      for (;;)
      {
        Fabric.getLogger().e("Answers", "Failed to write event: " + paramBuilder, localIOException);
      }
    }
  }
  
  public boolean rollFileOver()
  {
    try
    {
      boolean bool = this.filesManager.rollFileOver();
      return bool;
    }
    catch (IOException localIOException)
    {
      CommonUtils.logControlledError(this.context, "Failed to roll file over.", localIOException);
    }
    return false;
  }
  
  void scheduleTimeBasedFileRollOver(long paramLong1, long paramLong2)
  {
    if (this.rolloverFutureRef.get() == null) {}
    for (int i = 1;; i = 0)
    {
      TimeBasedFileRollOverRunnable localTimeBasedFileRollOverRunnable;
      if (i != 0)
      {
        localTimeBasedFileRollOverRunnable = new TimeBasedFileRollOverRunnable(this.context, this);
        CommonUtils.logControlled(this.context, "Scheduling time based file roll over every " + paramLong2 + " seconds");
      }
      try
      {
        this.rolloverFutureRef.set(this.executorService.scheduleAtFixedRate(localTimeBasedFileRollOverRunnable, paramLong1, paramLong2, TimeUnit.SECONDS));
        return;
      }
      catch (RejectedExecutionException localRejectedExecutionException)
      {
        CommonUtils.logControlledError(this.context, "Failed to schedule time based file roll over", localRejectedExecutionException);
      }
    }
  }
  
  public void scheduleTimeBasedRollOverIfNeeded()
  {
    if (this.rolloverIntervalSeconds != -1) {}
    for (int i = 1;; i = 0)
    {
      if (i != 0) {
        scheduleTimeBasedFileRollOver(this.rolloverIntervalSeconds, this.rolloverIntervalSeconds);
      }
      return;
    }
  }
  
  /* Error */
  public void sendEvents()
  {
    // Byte code:
    //   0: aload_0
    //   1: getfield 231	com/crashlytics/android/answers/EnabledSessionAnalyticsManagerStrategy:filesSender	Lio/fabric/sdk/android/services/events/FilesSender;
    //   4: ifnonnull +13 -> 17
    //   7: aload_0
    //   8: getfield 64	com/crashlytics/android/answers/EnabledSessionAnalyticsManagerStrategy:context	Landroid/content/Context;
    //   11: ldc -23
    //   13: invokestatic 86	io/fabric/sdk/android/services/common/CommonUtils:logControlled	(Landroid/content/Context;Ljava/lang/String;)V
    //   16: return
    //   17: aload_0
    //   18: getfield 64	com/crashlytics/android/answers/EnabledSessionAnalyticsManagerStrategy:context	Landroid/content/Context;
    //   21: ldc -21
    //   23: invokestatic 86	io/fabric/sdk/android/services/common/CommonUtils:logControlled	(Landroid/content/Context;Ljava/lang/String;)V
    //   26: aload_0
    //   27: getfield 68	com/crashlytics/android/answers/EnabledSessionAnalyticsManagerStrategy:filesManager	Lcom/crashlytics/android/answers/SessionAnalyticsFilesManager;
    //   30: invokevirtual 239	com/crashlytics/android/answers/SessionAnalyticsFilesManager:getBatchOfFilesToSend	()Ljava/util/List;
    //   33: astore 6
    //   35: iconst_0
    //   36: istore_1
    //   37: iload_1
    //   38: istore_3
    //   39: iload_1
    //   40: istore 4
    //   42: aload 6
    //   44: invokeinterface 245 1 0
    //   49: ifle +145 -> 194
    //   52: iload_1
    //   53: istore_3
    //   54: aload_0
    //   55: getfield 64	com/crashlytics/android/answers/EnabledSessionAnalyticsManagerStrategy:context	Landroid/content/Context;
    //   58: getstatic 251	java/util/Locale:US	Ljava/util/Locale;
    //   61: ldc -3
    //   63: iconst_1
    //   64: anewarray 4	java/lang/Object
    //   67: dup
    //   68: iconst_0
    //   69: aload 6
    //   71: invokeinterface 245 1 0
    //   76: invokestatic 259	java/lang/Integer:valueOf	(I)Ljava/lang/Integer;
    //   79: aastore
    //   80: invokestatic 265	java/lang/String:format	(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
    //   83: invokestatic 86	io/fabric/sdk/android/services/common/CommonUtils:logControlled	(Landroid/content/Context;Ljava/lang/String;)V
    //   86: iload_1
    //   87: istore_3
    //   88: aload_0
    //   89: getfield 231	com/crashlytics/android/answers/EnabledSessionAnalyticsManagerStrategy:filesSender	Lio/fabric/sdk/android/services/events/FilesSender;
    //   92: aload 6
    //   94: invokeinterface 271 2 0
    //   99: istore 5
    //   101: iload_1
    //   102: istore_2
    //   103: iload 5
    //   105: ifeq +28 -> 133
    //   108: iload_1
    //   109: istore_3
    //   110: aload 6
    //   112: invokeinterface 245 1 0
    //   117: istore_2
    //   118: iload_2
    //   119: iload_1
    //   120: iadd
    //   121: istore_1
    //   122: aload_0
    //   123: getfield 68	com/crashlytics/android/answers/EnabledSessionAnalyticsManagerStrategy:filesManager	Lcom/crashlytics/android/answers/SessionAnalyticsFilesManager;
    //   126: aload 6
    //   128: invokevirtual 275	com/crashlytics/android/answers/SessionAnalyticsFilesManager:deleteSentFiles	(Ljava/util/List;)V
    //   131: iload_1
    //   132: istore_2
    //   133: iload_2
    //   134: istore 4
    //   136: iload 5
    //   138: ifeq +56 -> 194
    //   141: iload_2
    //   142: istore_3
    //   143: aload_0
    //   144: getfield 68	com/crashlytics/android/answers/EnabledSessionAnalyticsManagerStrategy:filesManager	Lcom/crashlytics/android/answers/SessionAnalyticsFilesManager;
    //   147: invokevirtual 239	com/crashlytics/android/answers/SessionAnalyticsFilesManager:getBatchOfFilesToSend	()Ljava/util/List;
    //   150: astore 6
    //   152: iload_2
    //   153: istore_1
    //   154: goto -117 -> 37
    //   157: astore 6
    //   159: iload_3
    //   160: istore_1
    //   161: aload_0
    //   162: getfield 64	com/crashlytics/android/answers/EnabledSessionAnalyticsManagerStrategy:context	Landroid/content/Context;
    //   165: new 137	java/lang/StringBuilder
    //   168: dup
    //   169: ldc_w 277
    //   172: invokespecial 142	java/lang/StringBuilder:<init>	(Ljava/lang/String;)V
    //   175: aload 6
    //   177: invokevirtual 280	java/lang/Exception:getMessage	()Ljava/lang/String;
    //   180: invokevirtual 210	java/lang/StringBuilder:append	(Ljava/lang/String;)Ljava/lang/StringBuilder;
    //   183: invokevirtual 150	java/lang/StringBuilder:toString	()Ljava/lang/String;
    //   186: aload 6
    //   188: invokestatic 191	io/fabric/sdk/android/services/common/CommonUtils:logControlledError	(Landroid/content/Context;Ljava/lang/String;Ljava/lang/Throwable;)V
    //   191: iload_1
    //   192: istore 4
    //   194: iload 4
    //   196: ifne -180 -> 16
    //   199: aload_0
    //   200: getfield 68	com/crashlytics/android/answers/EnabledSessionAnalyticsManagerStrategy:filesManager	Lcom/crashlytics/android/answers/SessionAnalyticsFilesManager;
    //   203: invokevirtual 283	com/crashlytics/android/answers/SessionAnalyticsFilesManager:deleteOldestInRollOverIfOverMax	()V
    //   206: return
    //   207: astore 6
    //   209: goto -48 -> 161
    // Local variable table:
    //   start	length	slot	name	signature
    //   0	212	0	this	EnabledSessionAnalyticsManagerStrategy
    //   36	156	1	i	int
    //   102	51	2	j	int
    //   38	122	3	k	int
    //   40	155	4	m	int
    //   99	38	5	bool	boolean
    //   33	118	6	localList	java.util.List
    //   157	30	6	localException1	Exception
    //   207	1	6	localException2	Exception
    // Exception table:
    //   from	to	target	type
    //   42	52	157	java/lang/Exception
    //   54	86	157	java/lang/Exception
    //   88	101	157	java/lang/Exception
    //   110	118	157	java/lang/Exception
    //   143	152	157	java/lang/Exception
    //   122	131	207	java/lang/Exception
  }
  
  public void setAnalyticsSettingsData(AnalyticsSettingsData paramAnalyticsSettingsData, String paramString)
  {
    this.filesSender = AnswersRetryFilesSender.build(new SessionAnalyticsFilesSender(this.kit, paramString, paramAnalyticsSettingsData.analyticsURL, this.httpRequestFactory, this.apiKey.getValue(this.context)));
    this.filesManager.setAnalyticsSettingsData(paramAnalyticsSettingsData);
    this.customEventsEnabled = paramAnalyticsSettingsData.trackCustomEvents;
    Logger localLogger = Fabric.getLogger();
    StringBuilder localStringBuilder = new StringBuilder("Custom event tracking ");
    if (this.customEventsEnabled)
    {
      paramString = "enabled";
      localLogger.d("Answers", paramString);
      this.predefinedEventsEnabled = paramAnalyticsSettingsData.trackPredefinedEvents;
      localLogger = Fabric.getLogger();
      localStringBuilder = new StringBuilder("Predefined event tracking ");
      if (!this.predefinedEventsEnabled) {
        break label212;
      }
    }
    label212:
    for (paramString = "enabled";; paramString = "disabled")
    {
      localLogger.d("Answers", paramString);
      if (paramAnalyticsSettingsData.samplingRate > 1)
      {
        Fabric.getLogger().d("Answers", "Event sampling enabled");
        this.eventFilter = new SamplingEventFilter(paramAnalyticsSettingsData.samplingRate);
      }
      this.rolloverIntervalSeconds = paramAnalyticsSettingsData.flushIntervalSeconds;
      scheduleTimeBasedFileRollOver(0L, this.rolloverIntervalSeconds);
      return;
      paramString = "disabled";
      break;
    }
  }
}


/* Location:              /home/merong/decompile/hackery-dex2jar.jar!/com/crashlytics/android/answers/EnabledSessionAnalyticsManagerStrategy.class
 * Java compiler version: 6 (50.0)
 * JD-Core Version:       0.7.1
 */