Skip to content

Commit c57c618

Browse files
committed
refactor: update reset logic to queue device ID reset in timeline
1 parent 8b5f5ec commit c57c618

File tree

2 files changed

+17
-14
lines changed

2 files changed

+17
-14
lines changed

android/src/main/java/com/amplitude/android/Amplitude.kt

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import kotlinx.coroutines.CoroutineScope
1919
import kotlinx.coroutines.Deferred
2020
import kotlinx.coroutines.SupervisorJob
2121
import kotlinx.coroutines.asCoroutineDispatcher
22-
import kotlinx.coroutines.launch
2322
import java.util.concurrent.Executors
2423
import com.amplitude.core.Amplitude as CoreAmplitude
2524

@@ -40,7 +39,7 @@ open class Amplitude internal constructor(
4039
) {
4140
constructor(configuration: Configuration) : this(configuration, State())
4241

43-
private lateinit var androidContextPlugin: AndroidContextPlugin
42+
internal lateinit var androidContextPlugin: AndroidContextPlugin
4443

4544
val sessionId: Long
4645
get() {
@@ -113,11 +112,7 @@ open class Amplitude internal constructor(
113112
*/
114113
override fun reset(): Amplitude {
115114
this.setUserId(null)
116-
amplitudeScope.launch(amplitudeDispatcher) {
117-
isBuilt.await()
118-
idContainer.identityManager.editIdentity().setDeviceId(null).commit()
119-
androidContextPlugin.initializeDeviceId(configuration as Configuration)
120-
}
115+
(timeline as Timeline).queueSetIdentity(IdentityField.ResetDeviceId)
121116
return this
122117
}
123118

android/src/main/java/com/amplitude/android/Timeline.kt

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ import com.amplitude.android.EventQueueMessage.EnterForeground
66
import com.amplitude.android.EventQueueMessage.Event
77
import com.amplitude.android.EventQueueMessage.ExitForeground
88
import com.amplitude.android.EventQueueMessage.SetIdentity
9+
import com.amplitude.android.IdentityField.DeviceId
10+
import com.amplitude.android.IdentityField.ResetDeviceId
11+
import com.amplitude.android.IdentityField.UserId
912
import com.amplitude.core.Storage
1013
import com.amplitude.core.Storage.Constants
1114
import com.amplitude.core.Storage.Constants.LAST_EVENT_ID
@@ -18,6 +21,7 @@ import kotlinx.coroutines.channels.onFailure
1821
import kotlinx.coroutines.launch
1922
import java.util.concurrent.atomic.AtomicBoolean
2023
import java.util.concurrent.atomic.AtomicLong
24+
import com.amplitude.android.Amplitude as AndroidAmplitude
2125

2226
private const val DEFAULT_SESSION_ID = -1L
2327
private const val DEFAULT_EVENT_ID_OR_TIME = 0L
@@ -107,14 +111,16 @@ class Timeline(
107111
refreshSessionTime(message.timestamp)
108112
}
109113
is SetIdentity -> {
114+
val editIdentity = amplitude.idContainer.identityManager.editIdentity()
115+
110116
when (val field = message.field) {
111-
is IdentityField.UserId -> {
112-
amplitude.idContainer.identityManager.editIdentity()
113-
.setUserId(field.value).commit()
114-
}
115-
is IdentityField.DeviceId -> {
116-
amplitude.idContainer.identityManager.editIdentity()
117-
.setDeviceId(field.value).commit()
117+
is UserId -> editIdentity.setUserId(field.value).commit()
118+
is DeviceId -> editIdentity.setDeviceId(field.value).commit()
119+
is ResetDeviceId -> {
120+
editIdentity.setDeviceId(null).commit()
121+
(amplitude as AndroidAmplitude).androidContextPlugin.initializeDeviceId(
122+
amplitude.configuration as Configuration,
123+
)
118124
}
119125
}
120126
}
@@ -242,6 +248,8 @@ sealed class IdentityField {
242248
data class UserId(val value: String?) : IdentityField()
243249

244250
data class DeviceId(val value: String) : IdentityField()
251+
252+
data object ResetDeviceId : IdentityField()
245253
}
246254

247255
sealed class EventQueueMessage {

0 commit comments

Comments
 (0)