.class public Lcom/singular/sdk/internal/SessionManager; .super Ljava/lang/Object; .source "SourceFile" # static fields .field public static final logger:Lcom/singular/sdk/internal/SingularLog; # instance fields .field public inForeground:Z .field public lastSessionPauseTime:J .field public final networkChangeReceiver:Lcom/singular/sdk/internal/BroadcastReceivers$NetworkChange; .field public sequence:J .field public sessionId:J .field public final singular:Lcom/singular/sdk/internal/SingularInstance; .field public usingForegroundTracking:Z # direct methods .method static constructor ()V .locals 1 const-string v0, "Session" .line 28 invoke-static {v0}, Lcom/singular/sdk/internal/SingularLog;->getLogger(Ljava/lang/String;)Lcom/singular/sdk/internal/SingularLog; move-result-object v0 sput-object v0, Lcom/singular/sdk/internal/SessionManager;->logger:Lcom/singular/sdk/internal/SingularLog; return-void .end method .method public constructor (Lcom/singular/sdk/internal/SingularInstance;)V .locals 2 .line 41 invoke-direct {p0}, Ljava/lang/Object;->()V const/4 v0, 0x0 iput-boolean v0, p0, Lcom/singular/sdk/internal/SessionManager;->usingForegroundTracking:Z const-wide/16 v0, -0x1 iput-wide v0, p0, Lcom/singular/sdk/internal/SessionManager;->sessionId:J iput-wide v0, p0, Lcom/singular/sdk/internal/SessionManager;->lastSessionPauseTime:J const-wide/16 v0, 0x0 iput-wide v0, p0, Lcom/singular/sdk/internal/SessionManager;->sequence:J const/4 v0, 0x1 iput-boolean v0, p0, Lcom/singular/sdk/internal/SessionManager;->inForeground:Z iput-object p1, p0, Lcom/singular/sdk/internal/SessionManager;->singular:Lcom/singular/sdk/internal/SingularInstance; .line 43 new-instance v0, Lcom/singular/sdk/internal/BroadcastReceivers$NetworkChange; invoke-direct {v0, p1}, Lcom/singular/sdk/internal/BroadcastReceivers$NetworkChange;->(Lcom/singular/sdk/internal/SingularInstance;)V iput-object v0, p0, Lcom/singular/sdk/internal/SessionManager;->networkChangeReceiver:Lcom/singular/sdk/internal/BroadcastReceivers$NetworkChange; .line 46 invoke-virtual {p0}, Lcom/singular/sdk/internal/SessionManager;->load()V .line 49 invoke-static {}, Lcom/singular/sdk/internal/Utils;->getCurrentTimeMillis()J move-result-wide v0 invoke-virtual {p0, v0, v1}, Lcom/singular/sdk/internal/SessionManager;->startNewSessionIfNeeded(J)Z .line 52 invoke-virtual {p1}, Lcom/singular/sdk/internal/SingularInstance;->getContext()Landroid/content/Context; move-result-object p1 check-cast p1, Landroid/app/Application; invoke-virtual {p0, p1}, Lcom/singular/sdk/internal/SessionManager;->enableForegroundTracking(Landroid/app/Application;)V .line 55 invoke-virtual {p0}, Lcom/singular/sdk/internal/SessionManager;->registerNetworkChangeReceiver()V return-void .end method .method public static synthetic access$000(Lcom/singular/sdk/internal/SessionManager;J)V .locals 0 .line 26 invoke-virtual {p0, p1, p2}, Lcom/singular/sdk/internal/SessionManager;->setLastSessionPauseTime(J)V return-void .end method .method public static synthetic access$102(Lcom/singular/sdk/internal/SessionManager;Z)Z .locals 0 .line 26 iput-boolean p1, p0, Lcom/singular/sdk/internal/SessionManager;->inForeground:Z return p1 .end method .method public static synthetic access$200(Lcom/singular/sdk/internal/SessionManager;J)Z .locals 0 .line 26 invoke-virtual {p0, p1, p2}, Lcom/singular/sdk/internal/SessionManager;->startNewSessionIfNeeded(J)Z move-result p0 return p0 .end method # virtual methods .method public final enableForegroundTracking(Landroid/app/Application;)V .locals 1 iget-boolean v0, p0, Lcom/singular/sdk/internal/SessionManager;->usingForegroundTracking:Z if-eqz v0, :cond_0 return-void .line 70 :cond_0 new-instance v0, Lcom/singular/sdk/internal/SingularLifecycleCallbacks; invoke-direct {v0, p0}, Lcom/singular/sdk/internal/SingularLifecycleCallbacks;->(Lcom/singular/sdk/internal/SessionManager;)V invoke-virtual {v0, p1}, Lcom/singular/sdk/internal/SingularLifecycleCallbacks;->registerSelf(Landroid/app/Application;)V return-void .end method .method public getNextSequenceNumber()J .locals 4 iget-wide v0, p0, Lcom/singular/sdk/internal/SessionManager;->sequence:J const-wide/16 v2, 0x1 add-long/2addr v0, v2 iput-wide v0, p0, Lcom/singular/sdk/internal/SessionManager;->sequence:J return-wide v0 .end method .method public getSessionId()J .locals 2 iget-wide v0, p0, Lcom/singular/sdk/internal/SessionManager;->sessionId:J return-wide v0 .end method .method public final inSession()Z .locals 4 iget-wide v0, p0, Lcom/singular/sdk/internal/SessionManager;->sessionId:J const-wide/16 v2, 0x0 cmp-long v0, v0, v2 if-lez v0, :cond_0 const/4 v0, 0x1 goto :goto_0 :cond_0 const/4 v0, 0x0 :goto_0 return v0 .end method .method public final isWithinMinTimeBetweenSessions(J)Z .locals 4 iget-object v0, p0, Lcom/singular/sdk/internal/SessionManager;->singular:Lcom/singular/sdk/internal/SingularInstance; .line 224 invoke-virtual {v0}, Lcom/singular/sdk/internal/SingularInstance;->getSingularConfig()Lcom/singular/sdk/SingularConfig; move-result-object v0 iget-wide v0, v0, Lcom/singular/sdk/SingularConfig;->sessionTimeoutSec:J const-wide/16 v2, 0x3e8 mul-long/2addr v0, v2 iget-wide v2, p0, Lcom/singular/sdk/internal/SessionManager;->lastSessionPauseTime:J sub-long/2addr p1, v2 cmp-long p1, p1, v0 if-gez p1, :cond_0 const/4 p1, 0x1 goto :goto_0 :cond_0 const/4 p1, 0x0 :goto_0 return p1 .end method .method public final load()V .locals 8 iget-object v0, p0, Lcom/singular/sdk/internal/SessionManager;->singular:Lcom/singular/sdk/internal/SingularInstance; .line 86 invoke-virtual {v0}, Lcom/singular/sdk/internal/SingularInstance;->getContext()Landroid/content/Context; move-result-object v0 const-string v1, "singular-pref-session" const/4 v2, 0x0 invoke-virtual {v0, v1, v2}, Landroid/content/Context;->getSharedPreferences(Ljava/lang/String;I)Landroid/content/SharedPreferences; move-result-object v0 const-string v1, "id" const-wide/16 v2, -0x1 .line 88 invoke-interface {v0, v1, v2, v3}, Landroid/content/SharedPreferences;->getLong(Ljava/lang/String;J)J move-result-wide v4 iput-wide v4, p0, Lcom/singular/sdk/internal/SessionManager;->sessionId:J const-string v1, "lastSessionPauseTime" .line 90 invoke-interface {v0, v1, v2, v3}, Landroid/content/SharedPreferences;->getLong(Ljava/lang/String;J)J move-result-wide v4 iput-wide v4, p0, Lcom/singular/sdk/internal/SessionManager;->lastSessionPauseTime:J const-wide/16 v6, 0x0 cmp-long v1, v4, v6 if-gez v1, :cond_0 const-string v1, "lastEvent" .line 94 invoke-interface {v0, v1, v2, v3}, Landroid/content/SharedPreferences;->getLong(Ljava/lang/String;J)J move-result-wide v1 iput-wide v1, p0, Lcom/singular/sdk/internal/SessionManager;->lastSessionPauseTime:J :cond_0 const-string v1, "seq" .line 97 invoke-interface {v0, v1, v6, v7}, Landroid/content/SharedPreferences;->getLong(Ljava/lang/String;J)J move-result-wide v0 iput-wide v0, p0, Lcom/singular/sdk/internal/SessionManager;->sequence:J sget-object v0, Lcom/singular/sdk/internal/SessionManager;->logger:Lcom/singular/sdk/internal/SingularLog; .line 100 invoke-virtual {p0}, Lcom/singular/sdk/internal/SessionManager;->toString()Ljava/lang/String; move-result-object v1 filled-new-array {v1}, [Ljava/lang/Object; move-result-object v1 const-string v2, "load() <= %s" invoke-virtual {v0, v2, v1}, Lcom/singular/sdk/internal/SingularLog;->debug(Ljava/lang/String;[Ljava/lang/Object;)I return-void .end method .method public onEnterForeground(J)V .locals 3 .line 285 invoke-static {}, Lcom/singular/sdk/internal/Utils;->isOpenedWithDeeplink()Z move-result v0 if-nez v0, :cond_0 sget-object v0, Lcom/singular/sdk/internal/SessionManager;->logger:Lcom/singular/sdk/internal/SingularLog; .line 286 invoke-static {p1, p2}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v1 filled-new-array {v1}, [Ljava/lang/Object; move-result-object v1 const-string v2, "onEnterForeground() At %d" invoke-virtual {v0, v2, v1}, Lcom/singular/sdk/internal/SingularLog;->debug(Ljava/lang/String;[Ljava/lang/Object;)I iget-object v0, p0, Lcom/singular/sdk/internal/SessionManager;->singular:Lcom/singular/sdk/internal/SingularInstance; .line 287 new-instance v1, Lcom/singular/sdk/internal/SessionManager$2; invoke-direct {v1, p0, p1, p2}, Lcom/singular/sdk/internal/SessionManager$2;->(Lcom/singular/sdk/internal/SessionManager;J)V invoke-virtual {v0, v1}, Lcom/singular/sdk/internal/SingularInstance;->runOnWorker(Ljava/lang/Runnable;)V :cond_0 return-void .end method .method public onExitForeground(J)V .locals 3 sget-object v0, Lcom/singular/sdk/internal/SessionManager;->logger:Lcom/singular/sdk/internal/SingularLog; .line 262 invoke-static {p1, p2}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v1 filled-new-array {v1}, [Ljava/lang/Object; move-result-object v1 const-string v2, "onExitForeground() At %d" invoke-virtual {v0, v2, v1}, Lcom/singular/sdk/internal/SingularLog;->debug(Ljava/lang/String;[Ljava/lang/Object;)I iget-object v0, p0, Lcom/singular/sdk/internal/SessionManager;->singular:Lcom/singular/sdk/internal/SingularInstance; .line 263 new-instance v1, Lcom/singular/sdk/internal/SessionManager$1; invoke-direct {v1, p0, p1, p2}, Lcom/singular/sdk/internal/SessionManager$1;->(Lcom/singular/sdk/internal/SessionManager;J)V invoke-virtual {v0, v1}, Lcom/singular/sdk/internal/SingularInstance;->runOnWorker(Ljava/lang/Runnable;)V return-void .end method .method public final persist()V .locals 4 iget-object v0, p0, Lcom/singular/sdk/internal/SessionManager;->singular:Lcom/singular/sdk/internal/SingularInstance; .line 110 invoke-virtual {v0}, Lcom/singular/sdk/internal/SingularInstance;->getContext()Landroid/content/Context; move-result-object v0 const-string v1, "singular-pref-session" const/4 v2, 0x0 invoke-virtual {v0, v1, v2}, Landroid/content/Context;->getSharedPreferences(Ljava/lang/String;I)Landroid/content/SharedPreferences; move-result-object v0 .line 111 invoke-interface {v0}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor; move-result-object v0 const-string v1, "id" iget-wide v2, p0, Lcom/singular/sdk/internal/SessionManager;->sessionId:J .line 113 invoke-interface {v0, v1, v2, v3}, Landroid/content/SharedPreferences$Editor;->putLong(Ljava/lang/String;J)Landroid/content/SharedPreferences$Editor; const-string v1, "lastSessionPauseTime" iget-wide v2, p0, Lcom/singular/sdk/internal/SessionManager;->lastSessionPauseTime:J .line 114 invoke-interface {v0, v1, v2, v3}, Landroid/content/SharedPreferences$Editor;->putLong(Ljava/lang/String;J)Landroid/content/SharedPreferences$Editor; const-string v1, "seq" iget-wide v2, p0, Lcom/singular/sdk/internal/SessionManager;->sequence:J .line 115 invoke-interface {v0, v1, v2, v3}, Landroid/content/SharedPreferences$Editor;->putLong(Ljava/lang/String;J)Landroid/content/SharedPreferences$Editor; .line 117 invoke-interface {v0}, Landroid/content/SharedPreferences$Editor;->commit()Z return-void .end method .method public registerNetworkChangeReceiver()V .locals 3 iget-boolean v0, p0, Lcom/singular/sdk/internal/SessionManager;->inForeground:Z if-nez v0, :cond_0 iget-boolean v0, p0, Lcom/singular/sdk/internal/SessionManager;->usingForegroundTracking:Z if-eqz v0, :cond_0 return-void .line 305 :cond_0 new-instance v0, Landroid/content/IntentFilter; invoke-direct {v0}, Landroid/content/IntentFilter;->()V const-string v1, "android.net.conn.CONNECTIVITY_CHANGE" .line 306 invoke-virtual {v0, v1}, Landroid/content/IntentFilter;->addAction(Ljava/lang/String;)V iget-object v1, p0, Lcom/singular/sdk/internal/SessionManager;->singular:Lcom/singular/sdk/internal/SingularInstance; .line 307 invoke-virtual {v1}, Lcom/singular/sdk/internal/SingularInstance;->getContext()Landroid/content/Context; move-result-object v1 iget-object v2, p0, Lcom/singular/sdk/internal/SessionManager;->networkChangeReceiver:Lcom/singular/sdk/internal/BroadcastReceivers$NetworkChange; invoke-virtual {v1, v2, v0}, Landroid/content/Context;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)Landroid/content/Intent; sget-object v0, Lcom/singular/sdk/internal/SessionManager;->logger:Lcom/singular/sdk/internal/SingularLog; const-string v1, "registerNetworkChangeReceiver()" .line 308 invoke-virtual {v0, v1}, Lcom/singular/sdk/internal/SingularLog;->debug(Ljava/lang/String;)I return-void .end method .method public final resetSequence()V .locals 2 const-wide/16 v0, 0x0 iput-wide v0, p0, Lcom/singular/sdk/internal/SessionManager;->sequence:J return-void .end method .method public final sendSessionStartEvent()V .locals 3 .line 249 invoke-virtual {p0}, Lcom/singular/sdk/internal/SessionManager;->inSession()Z move-result v0 if-nez v0, :cond_0 return-void :cond_0 iget-object v0, p0, Lcom/singular/sdk/internal/SessionManager;->singular:Lcom/singular/sdk/internal/SingularInstance; iget-wide v1, p0, Lcom/singular/sdk/internal/SessionManager;->sessionId:J .line 253 invoke-virtual {v0, v1, v2}, Lcom/singular/sdk/internal/SingularInstance;->logSessionStart(J)V return-void .end method .method public final setLastSessionPauseTime(J)V .locals 0 iput-wide p1, p0, Lcom/singular/sdk/internal/SessionManager;->lastSessionPauseTime:J .line 165 invoke-virtual {p0}, Lcom/singular/sdk/internal/SessionManager;->persist()V return-void .end method .method public final setSessionId(J)V .locals 0 iput-wide p1, p0, Lcom/singular/sdk/internal/SessionManager;->sessionId:J return-void .end method .method public startNewSession(J)V .locals 3 sget-object v0, Lcom/singular/sdk/internal/SessionManager;->logger:Lcom/singular/sdk/internal/SingularLog; .line 210 invoke-static {p1, p2}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v1 filled-new-array {v1}, [Ljava/lang/Object; move-result-object v1 const-string v2, "startNewSession() At %d" invoke-virtual {v0, v2, v1}, Lcom/singular/sdk/internal/SingularLog;->debug(Ljava/lang/String;[Ljava/lang/Object;)I .line 212 invoke-virtual {p0, p1, p2}, Lcom/singular/sdk/internal/SessionManager;->setSessionId(J)V .line 213 invoke-virtual {p0}, Lcom/singular/sdk/internal/SessionManager;->resetSequence()V .line 214 invoke-virtual {p0}, Lcom/singular/sdk/internal/SessionManager;->sendSessionStartEvent()V return-void .end method .method public final startNewSessionIfNeeded(J)Z .locals 2 .line 180 invoke-static {}, Lcom/singular/sdk/internal/SingularInstance;->getInstance()Lcom/singular/sdk/internal/SingularInstance; move-result-object v0 invoke-virtual {v0}, Lcom/singular/sdk/internal/SingularInstance;->getSingularConfig()Lcom/singular/sdk/SingularConfig; move-result-object v0 iget-object v0, v0, Lcom/singular/sdk/SingularConfig;->singularLink:Landroid/net/Uri; const/4 v1, 0x1 if-eqz v0, :cond_0 .line 181 invoke-virtual {p0, p1, p2}, Lcom/singular/sdk/internal/SessionManager;->startNewSession(J)V return v1 .line 186 :cond_0 invoke-virtual {p0}, Lcom/singular/sdk/internal/SessionManager;->inSession()Z move-result v0 if-eqz v0, :cond_1 .line 187 invoke-virtual {p0, p1, p2}, Lcom/singular/sdk/internal/SessionManager;->isWithinMinTimeBetweenSessions(J)Z move-result v0 if-eqz v0, :cond_1 const/4 p1, 0x0 return p1 .line 198 :cond_1 invoke-virtual {p0, p1, p2}, Lcom/singular/sdk/internal/SessionManager;->startNewSession(J)V return v1 .end method .method public toString()Ljava/lang/String; .locals 3 .line 326 new-instance v0, Ljava/lang/StringBuilder; const-string v1, "{" invoke-direct {v0, v1}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V const-string v1, "id=" .line 327 invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; iget-wide v1, p0, Lcom/singular/sdk/internal/SessionManager;->sessionId:J invoke-virtual {v0, v1, v2}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder; const-string v1, ", lastSessionPauseTime=" .line 328 invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; iget-wide v1, p0, Lcom/singular/sdk/internal/SessionManager;->lastSessionPauseTime:J invoke-virtual {v0, v1, v2}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder; const-string v1, ", seq=" .line 329 invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; iget-wide v1, p0, Lcom/singular/sdk/internal/SessionManager;->sequence:J invoke-virtual {v0, v1, v2}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder; const/16 v1, 0x7d .line 330 invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder; .line 331 invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v0 return-object v0 .end method .method public unregisterNetworkChangeReceiver()V .locals 2 iget-object v0, p0, Lcom/singular/sdk/internal/SessionManager;->networkChangeReceiver:Lcom/singular/sdk/internal/BroadcastReceivers$NetworkChange; if-eqz v0, :cond_0 :try_start_0 iget-object v0, p0, Lcom/singular/sdk/internal/SessionManager;->singular:Lcom/singular/sdk/internal/SingularInstance; .line 317 invoke-virtual {v0}, Lcom/singular/sdk/internal/SingularInstance;->getContext()Landroid/content/Context; move-result-object v0 iget-object v1, p0, Lcom/singular/sdk/internal/SessionManager;->networkChangeReceiver:Lcom/singular/sdk/internal/BroadcastReceivers$NetworkChange; invoke-virtual {v0, v1}, Landroid/content/Context;->unregisterReceiver(Landroid/content/BroadcastReceiver;)V sget-object v0, Lcom/singular/sdk/internal/SessionManager;->logger:Lcom/singular/sdk/internal/SingularLog; const-string v1, "unregisterNetworkChangeReceiver()" .line 318 invoke-virtual {v0, v1}, Lcom/singular/sdk/internal/SingularLog;->debug(Ljava/lang/String;)I :try_end_0 .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 :catch_0 :cond_0 return-void .end method .method public useForegroundTracking()V .locals 1 const/4 v0, 0x1 iput-boolean v0, p0, Lcom/singular/sdk/internal/SessionManager;->usingForegroundTracking:Z return-void .end method