react-native-mparticle 2.7.13 → 2.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SECURITY.md +9 -0
- package/android/build.gradle +65 -10
- package/android/src/main/AndroidManifestNew.xml +3 -0
- package/android/src/main/java/com/mparticle/react/MParticleModule.kt +976 -0
- package/android/src/main/java/com/mparticle/react/MParticlePackage.kt +68 -0
- package/android/src/main/java/com/mparticle/react/rokt/MPRoktModuleImpl.kt +251 -0
- package/android/src/main/java/com/mparticle/react/rokt/RoktLayoutViewManagerImpl.kt +79 -0
- package/android/src/newarch/java/com/mparticle/react/rokt/MPRoktModule.kt +130 -0
- package/android/src/newarch/java/com/mparticle/react/rokt/RoktLayoutViewManager.kt +22 -0
- package/android/src/oldarch/java/com/mparticle/react/NativeMPRoktSpec.kt +29 -0
- package/android/src/oldarch/java/com/mparticle/react/NativeMParticleSpec.kt +153 -0
- package/android/src/oldarch/java/com/mparticle/react/rokt/MPRoktModule.kt +79 -0
- package/android/src/oldarch/java/com/mparticle/react/rokt/RoktLayoutViewManager.kt +34 -0
- package/ios/RNMParticle/RNMPRokt.h +15 -0
- package/ios/RNMParticle/RNMPRokt.mm +247 -0
- package/ios/RNMParticle/RNMParticle.h +6 -1
- package/ios/RNMParticle/RNMParticle.mm +1208 -0
- package/ios/RNMParticle/RoktEventManager.h +16 -0
- package/ios/RNMParticle/RoktEventManager.m +174 -0
- package/ios/RNMParticle/RoktLayoutManager.m +22 -0
- package/ios/RNMParticle/RoktNativeLayoutComponentView.h +18 -0
- package/ios/RNMParticle/RoktNativeLayoutComponentView.mm +50 -0
- package/ios/RNMParticle.xcodeproj/project.pbxproj +29 -6
- package/js/codegenSpecs/NativeMParticle.ts +214 -0
- package/js/codegenSpecs/rokt/NativeMPRokt.ts +32 -0
- package/js/codegenSpecs/rokt/RoktLayoutNativeComponent.ts +29 -0
- package/js/index.tsx +940 -0
- package/js/rokt/rokt-layout-view.android.tsx +133 -0
- package/js/rokt/rokt-layout-view.ios.tsx +121 -0
- package/js/rokt/rokt-layout-view.tsx +15 -0
- package/js/rokt/rokt.ts +87 -0
- package/js/utils/architecture.ts +22 -0
- package/lib/codegenSpecs/NativeMParticle.d.ts +148 -0
- package/lib/codegenSpecs/NativeMParticle.js +5 -0
- package/lib/codegenSpecs/NativeMParticle.js.map +1 -0
- package/lib/codegenSpecs/rokt/NativeMPRokt.d.ts +24 -0
- package/lib/codegenSpecs/rokt/NativeMPRokt.js +5 -0
- package/lib/codegenSpecs/rokt/NativeMPRokt.js.map +1 -0
- package/lib/codegenSpecs/rokt/RoktLayoutNativeComponent.d.ts +18 -0
- package/lib/codegenSpecs/rokt/RoktLayoutNativeComponent.js +8 -0
- package/lib/codegenSpecs/rokt/RoktLayoutNativeComponent.js.map +1 -0
- package/lib/index.d.ts +410 -0
- package/lib/index.js +645 -0
- package/lib/index.js.map +1 -0
- package/lib/rokt/rokt-layout-view.android.d.ts +39 -0
- package/lib/rokt/rokt-layout-view.android.js +109 -0
- package/lib/rokt/rokt-layout-view.android.js.map +1 -0
- package/lib/rokt/rokt-layout-view.d.ts +5 -0
- package/lib/rokt/rokt-layout-view.ios.d.ts +32 -0
- package/lib/rokt/rokt-layout-view.ios.js +84 -0
- package/lib/rokt/rokt-layout-view.ios.js.map +1 -0
- package/lib/rokt/rokt-layout-view.js +12 -0
- package/lib/rokt/rokt-layout-view.js.map +1 -0
- package/lib/rokt/rokt.d.ts +40 -0
- package/lib/rokt/rokt.js +54 -0
- package/lib/rokt/rokt.js.map +1 -0
- package/lib/utils/architecture.d.ts +9 -0
- package/lib/utils/architecture.js +19 -0
- package/lib/utils/architecture.js.map +1 -0
- package/package.json +32 -10
- package/react-native-mparticle.podspec +7 -6
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -8
- package/.github/dependabot.yml +0 -12
- package/.github/workflows/daily.yml +0 -19
- package/.github/workflows/dependabot-automerge.yml +0 -12
- package/.github/workflows/pull-request.yml +0 -60
- package/.github/workflows/release.yml +0 -60
- package/.github/workflows/sonarcloud.yml +0 -16
- package/android/.gradle/7.5.1/checksums/checksums.lock +0 -0
- package/android/.gradle/7.5.1/checksums/md5-checksums.bin +0 -0
- package/android/.gradle/7.5.1/checksums/sha1-checksums.bin +0 -0
- package/android/.gradle/7.5.1/dependencies-accessors/dependencies-accessors.lock +0 -0
- package/android/.gradle/7.5.1/dependencies-accessors/gc.properties +0 -0
- package/android/.gradle/7.5.1/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/7.5.1/fileChanges/last-build.bin +0 -0
- package/android/.gradle/7.5.1/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/7.5.1/gc.properties +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
- package/android/.gradle/vcs-1/gc.properties +0 -0
- package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +0 -6
- package/android/gradle.properties +0 -53
- package/android/gradlew +0 -160
- package/android/gradlew.bat +0 -90
- package/android/libs/java-json.jar +0 -0
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5-debug-sources.jar +0 -0
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5-debug-sources.jar.md5 +0 -1
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5-debug-sources.jar.sha1 +0 -1
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5-debug-sources.jar.sha256 +0 -1
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5-debug-sources.jar.sha512 +0 -1
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5-debug.aar +0 -0
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5-debug.aar.md5 +0 -1
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5-debug.aar.sha1 +0 -1
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5-debug.aar.sha256 +0 -1
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5-debug.aar.sha512 +0 -1
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5-release-sources.jar +0 -0
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5-release-sources.jar.md5 +0 -1
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5-release-sources.jar.sha1 +0 -1
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5-release-sources.jar.sha256 +0 -1
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5-release-sources.jar.sha512 +0 -1
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5-release.aar +0 -0
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5-release.aar.md5 +0 -1
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5-release.aar.sha1 +0 -1
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5-release.aar.sha256 +0 -1
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5-release.aar.sha512 +0 -1
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5.module +0 -204
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5.module.md5 +0 -1
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5.module.sha1 +0 -1
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5.module.sha256 +0 -1
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5.module.sha512 +0 -1
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5.pom +0 -44
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5.pom.md5 +0 -1
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5.pom.sha1 +0 -1
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5.pom.sha256 +0 -1
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/0.70.5/hermes-engine-0.70.5.pom.sha512 +0 -1
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/maven-metadata.xml +0 -13
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/maven-metadata.xml.md5 +0 -1
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/maven-metadata.xml.sha1 +0 -1
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/maven-metadata.xml.sha256 +0 -1
- package/android/libs/react-native-android/com/facebook/react/hermes-engine/maven-metadata.xml.sha512 +0 -1
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5-debug-sources.jar +0 -0
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5-debug-sources.jar.md5 +0 -1
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5-debug-sources.jar.sha1 +0 -1
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5-debug-sources.jar.sha256 +0 -1
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5-debug-sources.jar.sha512 +0 -1
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5-debug.aar +0 -0
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5-debug.aar.md5 +0 -1
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5-debug.aar.sha1 +0 -1
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5-debug.aar.sha256 +0 -1
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5-debug.aar.sha512 +0 -1
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5-release-sources.jar +0 -0
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5-release-sources.jar.md5 +0 -1
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5-release-sources.jar.sha1 +0 -1
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5-release-sources.jar.sha256 +0 -1
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5-release-sources.jar.sha512 +0 -1
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5-release.aar +0 -0
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5-release.aar.md5 +0 -1
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5-release.aar.sha1 +0 -1
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5-release.aar.sha256 +0 -1
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5-release.aar.sha512 +0 -1
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5.module +0 -628
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5.module.md5 +0 -1
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5.module.sha1 +0 -1
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5.module.sha256 +0 -1
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5.module.sha512 +0 -1
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5.pom +0 -156
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5.pom.md5 +0 -1
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5.pom.sha1 +0 -1
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5.pom.sha256 +0 -1
- package/android/libs/react-native-android/com/facebook/react/react-native/0.70.5/react-native-0.70.5.pom.sha512 +0 -1
- package/android/libs/react-native-android/com/facebook/react/react-native/maven-metadata.xml +0 -13
- package/android/libs/react-native-android/com/facebook/react/react-native/maven-metadata.xml.md5 +0 -1
- package/android/libs/react-native-android/com/facebook/react/react-native/maven-metadata.xml.sha1 +0 -1
- package/android/libs/react-native-android/com/facebook/react/react-native/maven-metadata.xml.sha256 +0 -1
- package/android/libs/react-native-android/com/facebook/react/react-native/maven-metadata.xml.sha512 +0 -1
- package/android/src/main/java/com/mparticle/react/MParticleModule.java +0 -987
- package/android/src/main/java/com/mparticle/react/MParticlePackage.java +0 -34
- package/android/src/test/java/com/mparticle/react/IdentityApiTest.java +0 -230
- package/android/src/test/java/com/mparticle/react/MParticleUserTest.java +0 -233
- package/android/src/test/java/com/mparticle/react/testutils/MockMParticleUser.java +0 -103
- package/android/src/test/java/com/mparticle/react/testutils/MockMap.java +0 -169
- package/android/src/test/java/com/mparticle/react/testutils/MockReadableArray.java +0 -53
- package/android/src/test/java/com/mparticle/react/testutils/MockWritableMap.java +0 -4
- package/android/src/test/java/com/mparticle/react/testutils/Mutable.java +0 -13
- package/ios/RNMParticle/RNMParticle.m +0 -678
- package/ios/RNMParticle.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- package/ios/RNMParticle.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- package/ios/RNMParticle.xcodeproj/project.xcworkspace/xcuserdata/bstalnaker.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/RNMParticle.xcodeproj/xcuserdata/bstalnaker.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
- package/js/index.js +0 -697
- package/release.sh +0 -6
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
package com.mparticle.react;
|
|
2
|
-
|
|
3
|
-
import com.facebook.react.ReactPackage;
|
|
4
|
-
import com.facebook.react.bridge.JavaScriptModule;
|
|
5
|
-
import com.facebook.react.bridge.NativeModule;
|
|
6
|
-
import com.facebook.react.bridge.ReactApplicationContext;
|
|
7
|
-
import com.facebook.react.uimanager.ViewManager;
|
|
8
|
-
|
|
9
|
-
import java.util.ArrayList;
|
|
10
|
-
import java.util.Collections;
|
|
11
|
-
import java.util.List;
|
|
12
|
-
|
|
13
|
-
public class MParticlePackage implements ReactPackage {
|
|
14
|
-
@Override
|
|
15
|
-
public List<NativeModule> createNativeModules(
|
|
16
|
-
ReactApplicationContext reactContext) {
|
|
17
|
-
List<NativeModule> modules = new ArrayList<>();
|
|
18
|
-
|
|
19
|
-
modules.add(new MParticleModule(reactContext));
|
|
20
|
-
|
|
21
|
-
return modules;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
// Deprecated RN 0.47
|
|
25
|
-
public List<Class<? extends JavaScriptModule>> createJSModules() {
|
|
26
|
-
return Collections.emptyList();
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
@Override
|
|
30
|
-
public List<ViewManager> createViewManagers(
|
|
31
|
-
ReactApplicationContext reactContext) {
|
|
32
|
-
return Collections.emptyList();
|
|
33
|
-
}
|
|
34
|
-
}
|
|
@@ -1,230 +0,0 @@
|
|
|
1
|
-
package com.mparticle.react;
|
|
2
|
-
|
|
3
|
-
import androidx.annotation.NonNull;
|
|
4
|
-
|
|
5
|
-
import com.facebook.react.bridge.Callback;
|
|
6
|
-
import com.facebook.react.bridge.ReactApplicationContext;
|
|
7
|
-
import com.facebook.react.bridge.ReadableMap;
|
|
8
|
-
import com.mparticle.MParticle;
|
|
9
|
-
import com.mparticle.identity.AliasRequest;
|
|
10
|
-
import com.mparticle.identity.IdentityApi;
|
|
11
|
-
import com.mparticle.identity.MParticleUser;
|
|
12
|
-
import com.mparticle.react.testutils.MockMParticleUser;
|
|
13
|
-
import com.mparticle.react.testutils.MockMap;
|
|
14
|
-
import com.mparticle.react.testutils.Mutable;
|
|
15
|
-
|
|
16
|
-
import org.json.JSONException;
|
|
17
|
-
import org.json.JSONObject;
|
|
18
|
-
import org.junit.Before;
|
|
19
|
-
import org.junit.Test;
|
|
20
|
-
import org.junit.runner.RunWith;
|
|
21
|
-
import org.mockito.ArgumentCaptor;
|
|
22
|
-
import org.mockito.Mockito;
|
|
23
|
-
import org.mockito.MockitoAnnotations;
|
|
24
|
-
import org.mockito.junit.MockitoJUnitRunner;
|
|
25
|
-
|
|
26
|
-
import java.util.Random;
|
|
27
|
-
|
|
28
|
-
import static junit.framework.TestCase.assertEquals;
|
|
29
|
-
import static org.junit.Assert.assertNull;
|
|
30
|
-
import static org.junit.Assert.assertTrue;
|
|
31
|
-
|
|
32
|
-
@RunWith(MockitoJUnitRunner.class)
|
|
33
|
-
public class IdentityApiTest {
|
|
34
|
-
MParticleModule identityApi;
|
|
35
|
-
Random random = new Random();
|
|
36
|
-
|
|
37
|
-
@Before
|
|
38
|
-
public void before() {
|
|
39
|
-
MockitoAnnotations.openMocks(this);
|
|
40
|
-
MParticle.setInstance(Mockito.mock(MParticle.class));
|
|
41
|
-
Mockito.when(MParticle.getInstance().Identity()).thenReturn(Mockito.mock(IdentityApi.class));
|
|
42
|
-
Mockito.lenient().when(MParticle.getInstance().Identity().getUser(0L)).thenReturn(null);
|
|
43
|
-
identityApi = new MParticleModule(Mockito.mock(ReactApplicationContext.class));
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
@Test
|
|
48
|
-
public void testGetCurrentUser() {
|
|
49
|
-
final Mutable<Boolean> callbackCalled = new Mutable<>(false);
|
|
50
|
-
final Long mockId = random.nextLong();
|
|
51
|
-
|
|
52
|
-
MParticleUser mockUser = new MockMParticleUser() {
|
|
53
|
-
@NonNull
|
|
54
|
-
@Override
|
|
55
|
-
public long getId() {
|
|
56
|
-
return mockId;
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
Mockito.when(MParticle.getInstance().Identity().getCurrentUser()).thenReturn(mockUser);
|
|
60
|
-
identityApi.getCurrentUserWithCompletion(new Callback() {
|
|
61
|
-
@Override
|
|
62
|
-
public void invoke(Object... args) {
|
|
63
|
-
assertNull(args[0]);
|
|
64
|
-
assertEquals(mockId.toString(), args[1]);
|
|
65
|
-
callbackCalled.value = true;
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
assertTrue(callbackCalled.value);
|
|
70
|
-
callbackCalled.value = false;
|
|
71
|
-
|
|
72
|
-
Mockito.when(MParticle.getInstance().Identity().getCurrentUser()).thenReturn(null);
|
|
73
|
-
identityApi.getCurrentUserWithCompletion(new Callback() {
|
|
74
|
-
@Override
|
|
75
|
-
public void invoke(Object... args) {
|
|
76
|
-
assertNull(args[0]);
|
|
77
|
-
assertNull(args[1]);
|
|
78
|
-
callbackCalled.value = true;
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
assertTrue(callbackCalled.value);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
@Test
|
|
86
|
-
public void testAliasRequest() throws JSONException {
|
|
87
|
-
ArgumentCaptor<AliasRequest> aliasCaptor = ArgumentCaptor.forClass(AliasRequest.class);
|
|
88
|
-
final Mutable<Object[]> callbackResult = new Mutable<>();
|
|
89
|
-
|
|
90
|
-
Mockito.when(MParticle.getInstance().Identity().aliasUsers(Mockito.any(AliasRequest.class))).thenReturn(true);
|
|
91
|
-
|
|
92
|
-
JSONObject aliasJson = new JSONObject()
|
|
93
|
-
.put("sourceMpid", "1")
|
|
94
|
-
.put("destinationMpid", "2")
|
|
95
|
-
.put("startTime", "3")
|
|
96
|
-
.put("endTime", "4");
|
|
97
|
-
ReadableMap map = new MockMap(aliasJson);
|
|
98
|
-
|
|
99
|
-
identityApi.aliasUsers(map, new Callback() {
|
|
100
|
-
@Override
|
|
101
|
-
public void invoke(Object... args) {
|
|
102
|
-
callbackResult.value = args;
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
Mockito.verify(MParticle.getInstance().Identity()).aliasUsers(aliasCaptor.capture());
|
|
107
|
-
assertEquals(1, callbackResult.value.length);
|
|
108
|
-
assertEquals(true, callbackResult.value[0]);
|
|
109
|
-
|
|
110
|
-
assertEquals(1, aliasCaptor.getValue().getSourceMpid());
|
|
111
|
-
assertEquals(2, aliasCaptor.getValue().getDestinationMpid());
|
|
112
|
-
assertEquals(3, aliasCaptor.getValue().getStartTime());
|
|
113
|
-
assertEquals(4, aliasCaptor.getValue().getEndTime());
|
|
114
|
-
|
|
115
|
-
//start time and end time can be longs
|
|
116
|
-
aliasJson
|
|
117
|
-
.put("startTime", 3)
|
|
118
|
-
.put("endTime", 4);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
@Test
|
|
122
|
-
public void testAliasRequestPartial() throws JSONException {
|
|
123
|
-
ArgumentCaptor<AliasRequest> aliasCaptor = ArgumentCaptor.forClass(AliasRequest.class);
|
|
124
|
-
final Mutable<Object[]> callbackResult = new Mutable<>();
|
|
125
|
-
Long startTime = System.currentTimeMillis();
|
|
126
|
-
|
|
127
|
-
MParticleUser sourceUser = Mockito.mock(MParticleUser.class);
|
|
128
|
-
Mockito.when(sourceUser.getId()).thenReturn(1L);
|
|
129
|
-
Mockito.when(sourceUser.getFirstSeenTime()).thenReturn(startTime - 200);
|
|
130
|
-
Mockito.when(sourceUser.getLastSeenTime()).thenReturn(startTime - 100L);
|
|
131
|
-
|
|
132
|
-
MParticleUser destinationUser = Mockito.mock(MParticleUser.class);
|
|
133
|
-
Mockito.when(destinationUser.getId()).thenReturn(2L);
|
|
134
|
-
|
|
135
|
-
Mockito.when(MParticle.getInstance().Identity().getUser(1L)).thenReturn(sourceUser);
|
|
136
|
-
Mockito.when(MParticle.getInstance().Identity().getUser(2L)).thenReturn(destinationUser);
|
|
137
|
-
|
|
138
|
-
Mockito.when(MParticle.getInstance().Identity().aliasUsers(Mockito.any(AliasRequest.class))).thenReturn(true);
|
|
139
|
-
|
|
140
|
-
JSONObject aliasJson = new JSONObject()
|
|
141
|
-
.put("sourceMpid", "1")
|
|
142
|
-
.put("destinationMpid", "2");
|
|
143
|
-
ReadableMap map = new MockMap(aliasJson);
|
|
144
|
-
|
|
145
|
-
identityApi.aliasUsers(map, new Callback() {
|
|
146
|
-
@Override
|
|
147
|
-
public void invoke(Object... args) {
|
|
148
|
-
callbackResult.value = args;
|
|
149
|
-
}
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
Mockito.verify(MParticle.getInstance().Identity()).aliasUsers(aliasCaptor.capture());
|
|
153
|
-
assertEquals(1, callbackResult.value.length);
|
|
154
|
-
assertEquals(true, callbackResult.value[0]);
|
|
155
|
-
|
|
156
|
-
assertEquals(1, aliasCaptor.getValue().getSourceMpid());
|
|
157
|
-
assertEquals(2, aliasCaptor.getValue().getDestinationMpid());
|
|
158
|
-
assertEquals(startTime - 200, aliasCaptor.getValue().getStartTime());
|
|
159
|
-
assertEquals(startTime - 100, aliasCaptor.getValue().getEndTime());
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
@Test
|
|
163
|
-
public void testAliasRejectedReactNative() throws JSONException {
|
|
164
|
-
final Mutable<Object[]> callbackResult = new Mutable<>();
|
|
165
|
-
Callback callback = new Callback() {
|
|
166
|
-
@Override
|
|
167
|
-
public void invoke(Object... args) {
|
|
168
|
-
callbackResult.value = args;
|
|
169
|
-
}
|
|
170
|
-
};
|
|
171
|
-
|
|
172
|
-
//MPIDs need to be Strings, this will fail
|
|
173
|
-
JSONObject aliasJson = new JSONObject()
|
|
174
|
-
.put("sourceMpid", 1)
|
|
175
|
-
.put("destinationMpid", "2")
|
|
176
|
-
.put("startTime", "3")
|
|
177
|
-
.put("endTime", "4");
|
|
178
|
-
|
|
179
|
-
identityApi.aliasUsers(new MockMap(aliasJson), callback);
|
|
180
|
-
|
|
181
|
-
Mockito.lenient().when(MParticle.getInstance().Identity().aliasUsers(Mockito.any(AliasRequest.class))).thenThrow(new RuntimeException("aliasUsers() should not be called"));
|
|
182
|
-
assertEquals(2, callbackResult.value.length);
|
|
183
|
-
assertEquals(false, callbackResult.value[0]);
|
|
184
|
-
assertTrue(((String)callbackResult.value[1]).length() > 5);
|
|
185
|
-
callbackResult.value = null;
|
|
186
|
-
|
|
187
|
-
aliasJson
|
|
188
|
-
.put("sourceMpid", "1")
|
|
189
|
-
.put("destinationMpid", 2);
|
|
190
|
-
|
|
191
|
-
identityApi.aliasUsers(new MockMap(aliasJson), callback);
|
|
192
|
-
|
|
193
|
-
Mockito.lenient().when(MParticle.getInstance().Identity().aliasUsers(Mockito.any(AliasRequest.class))).thenThrow(new RuntimeException("aliasUsers() should not be called"));
|
|
194
|
-
assertEquals(2, callbackResult.value.length);
|
|
195
|
-
assertEquals(false, callbackResult.value[0]);
|
|
196
|
-
assertTrue(((String)callbackResult.value[1]).length() > 5);
|
|
197
|
-
callbackResult.value = null;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
@Test
|
|
201
|
-
public void testAliasRejectedNativeSdk() throws JSONException {
|
|
202
|
-
ArgumentCaptor<AliasRequest> aliasCaptor = ArgumentCaptor.forClass(AliasRequest.class);
|
|
203
|
-
final Mutable<Object[]> callbackResult = new Mutable<>();
|
|
204
|
-
|
|
205
|
-
Mockito.when(MParticle.getInstance().Identity().aliasUsers(Mockito.any(AliasRequest.class))).thenReturn(false);
|
|
206
|
-
|
|
207
|
-
JSONObject aliasJson = new JSONObject()
|
|
208
|
-
.put("sourceMpid", "1")
|
|
209
|
-
.put("destinationMpid", "2")
|
|
210
|
-
.put("startTime", "3")
|
|
211
|
-
.put("endTime", "4");
|
|
212
|
-
ReadableMap map = new MockMap(aliasJson);
|
|
213
|
-
|
|
214
|
-
identityApi.aliasUsers(map, new Callback() {
|
|
215
|
-
@Override
|
|
216
|
-
public void invoke(Object... args) {
|
|
217
|
-
callbackResult.value = args;
|
|
218
|
-
}
|
|
219
|
-
});
|
|
220
|
-
|
|
221
|
-
Mockito.verify(MParticle.getInstance().Identity()).aliasUsers(aliasCaptor.capture());
|
|
222
|
-
assertEquals(1, callbackResult.value.length);
|
|
223
|
-
assertEquals(false, callbackResult.value[0]);
|
|
224
|
-
|
|
225
|
-
assertEquals(1, aliasCaptor.getValue().getSourceMpid());
|
|
226
|
-
assertEquals(2, aliasCaptor.getValue().getDestinationMpid());
|
|
227
|
-
assertEquals(3, aliasCaptor.getValue().getStartTime());
|
|
228
|
-
assertEquals(4, aliasCaptor.getValue().getEndTime());
|
|
229
|
-
}
|
|
230
|
-
}
|
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
package com.mparticle.react;
|
|
2
|
-
|
|
3
|
-
import androidx.annotation.NonNull;
|
|
4
|
-
|
|
5
|
-
import com.facebook.react.bridge.Callback;
|
|
6
|
-
import com.facebook.react.bridge.ReactApplicationContext;
|
|
7
|
-
import com.facebook.react.bridge.WritableMap;
|
|
8
|
-
import com.mparticle.MParticle;
|
|
9
|
-
import com.mparticle.identity.IdentityApi;
|
|
10
|
-
import com.mparticle.identity.MParticleUser;
|
|
11
|
-
import com.mparticle.react.testutils.MockMParticleUser;
|
|
12
|
-
import com.mparticle.react.testutils.MockMap;
|
|
13
|
-
import com.mparticle.react.testutils.MockReadableArray;
|
|
14
|
-
import com.mparticle.react.testutils.Mutable;
|
|
15
|
-
|
|
16
|
-
import org.junit.Before;
|
|
17
|
-
import org.junit.Test;
|
|
18
|
-
import org.junit.runner.RunWith;
|
|
19
|
-
import org.mockito.Mockito;
|
|
20
|
-
import org.mockito.MockitoAnnotations;
|
|
21
|
-
import org.mockito.junit.MockitoJUnitRunner;
|
|
22
|
-
|
|
23
|
-
import java.util.HashMap;
|
|
24
|
-
import java.util.Map;
|
|
25
|
-
import java.util.Random;
|
|
26
|
-
|
|
27
|
-
import static junit.framework.TestCase.assertEquals;
|
|
28
|
-
import static org.junit.Assert.assertNotNull;
|
|
29
|
-
import static org.junit.Assert.assertNull;
|
|
30
|
-
import static org.junit.Assert.assertTrue;
|
|
31
|
-
|
|
32
|
-
@RunWith(MockitoJUnitRunner.class)
|
|
33
|
-
public class MParticleUserTest {
|
|
34
|
-
MParticleModule mParticleUser;
|
|
35
|
-
Random random = new Random();
|
|
36
|
-
|
|
37
|
-
@Before
|
|
38
|
-
public void before() {
|
|
39
|
-
MockitoAnnotations.openMocks(this);
|
|
40
|
-
MParticle.setInstance(Mockito.mock(MParticle.class));
|
|
41
|
-
Mockito.when(MParticle.getInstance().Identity()).thenReturn(Mockito.mock(IdentityApi.class));
|
|
42
|
-
Mockito.lenient().when(MParticle.getInstance().Identity().getUser(0L)).thenReturn(null);
|
|
43
|
-
mParticleUser = new MParticleModule(Mockito.mock(ReactApplicationContext.class)) {
|
|
44
|
-
@Override
|
|
45
|
-
public WritableMap getWritableMap() {
|
|
46
|
-
return new MockMap();
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
@Test
|
|
52
|
-
public void tesNullMParticleUserSetters() {
|
|
53
|
-
Exception exception = null;
|
|
54
|
-
try {
|
|
55
|
-
mParticleUser.setUserAttribute(null, "key", "values");
|
|
56
|
-
mParticleUser.setUserTag(null, "test");
|
|
57
|
-
mParticleUser.setUserAttributeArray(null, "keuy", new MockReadableArray());
|
|
58
|
-
} catch (Exception e) {
|
|
59
|
-
exception = e;
|
|
60
|
-
}
|
|
61
|
-
assertNull(exception);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
@Test
|
|
65
|
-
public void testSetUserAttribute() {
|
|
66
|
-
String testKey = "test key";
|
|
67
|
-
String testValue = "test value";
|
|
68
|
-
|
|
69
|
-
final Mutable<String> uaKey = new Mutable<>();
|
|
70
|
-
final Mutable<Object> uaValue = new Mutable<>();
|
|
71
|
-
MParticleUser mockUser = new MockMParticleUser() {
|
|
72
|
-
@Override
|
|
73
|
-
public boolean setUserAttribute(@NonNull String s, @NonNull Object o) {
|
|
74
|
-
uaKey.value = s;
|
|
75
|
-
uaValue.value = o;
|
|
76
|
-
return true;
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
Mockito.when(MParticle.getInstance().Identity().getUser(Mockito.anyLong())).thenReturn(mockUser);
|
|
80
|
-
|
|
81
|
-
mParticleUser.setUserAttribute("1", testKey, testValue);
|
|
82
|
-
|
|
83
|
-
assertEquals(testKey, uaKey.value);
|
|
84
|
-
assertEquals(testValue, uaValue.value);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
@Test
|
|
88
|
-
public void getUserIdentitiesTest() {
|
|
89
|
-
final Map<MParticle.IdentityType, String> identities = new HashMap<>();
|
|
90
|
-
for (MParticle.IdentityType identityType: MParticle.IdentityType.values()) {
|
|
91
|
-
identities.put(identityType, random.nextInt() + "");
|
|
92
|
-
}
|
|
93
|
-
MParticleUser mockUser = new MockMParticleUser() {
|
|
94
|
-
@NonNull
|
|
95
|
-
@Override
|
|
96
|
-
public Map<MParticle.IdentityType, String> getUserIdentities() {
|
|
97
|
-
return identities;
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
Mockito.when(MParticle.getInstance().Identity().getUser(Mockito.anyLong())).thenReturn(mockUser);
|
|
102
|
-
|
|
103
|
-
final Mutable<WritableMap> callbackResult = new Mutable<>();
|
|
104
|
-
mParticleUser.getUserIdentities("1", new Callback() {
|
|
105
|
-
@Override
|
|
106
|
-
public void invoke(Object... args) {
|
|
107
|
-
assertEquals(2, args.length);
|
|
108
|
-
assertNull(args[0]);
|
|
109
|
-
callbackResult.value = (WritableMap)args[1];
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
assertNotNull(callbackResult.value);
|
|
114
|
-
for (Map.Entry<MParticle.IdentityType, String> entry: identities.entrySet()) {
|
|
115
|
-
assertEquals(entry.getValue(), callbackResult.value.getString(String.valueOf(entry.getKey().getValue())));
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
@Test
|
|
120
|
-
public void testGetUserIdentitiesNullUser() {
|
|
121
|
-
final Mutable<Boolean> callbackInvoked = new Mutable<>(false);
|
|
122
|
-
|
|
123
|
-
mParticleUser.getUserIdentities(null, new Callback() {
|
|
124
|
-
@Override
|
|
125
|
-
public void invoke(Object... args) {
|
|
126
|
-
assertEquals(0, args.length);
|
|
127
|
-
callbackInvoked.value = true;
|
|
128
|
-
}
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
assertTrue(callbackInvoked.value);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
@Test
|
|
135
|
-
public void testSetUserTag() {
|
|
136
|
-
final Mutable<String> tag = new Mutable<>();
|
|
137
|
-
String testTag = "testTag";
|
|
138
|
-
|
|
139
|
-
MParticleUser mockUser = new MockMParticleUser() {
|
|
140
|
-
@Override
|
|
141
|
-
public boolean setUserTag(@NonNull String s) {
|
|
142
|
-
tag.value = s;
|
|
143
|
-
return true;
|
|
144
|
-
}
|
|
145
|
-
};
|
|
146
|
-
|
|
147
|
-
Mockito.when(MParticle.getInstance().Identity().getUser(Mockito.anyLong())).thenReturn(mockUser);
|
|
148
|
-
|
|
149
|
-
mParticleUser.setUserTag("1", testTag);
|
|
150
|
-
|
|
151
|
-
assertEquals(testTag, tag.value);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
@Test
|
|
157
|
-
public void getFirstSeenTime() {
|
|
158
|
-
final Mutable<Boolean> callbackInvoked = new Mutable<>(false);
|
|
159
|
-
|
|
160
|
-
MParticleUser mockUser = new MockMParticleUser() {
|
|
161
|
-
@Override
|
|
162
|
-
public long getFirstSeenTime() {
|
|
163
|
-
return 2;
|
|
164
|
-
}
|
|
165
|
-
};
|
|
166
|
-
Mockito.when(MParticle.getInstance().Identity().getUser(Mockito.anyLong())).thenReturn(mockUser);
|
|
167
|
-
|
|
168
|
-
mParticleUser.getFirstSeen("1", new Callback() {
|
|
169
|
-
@Override
|
|
170
|
-
public void invoke(Object... args) {
|
|
171
|
-
assertEquals(1, args.length);
|
|
172
|
-
assertEquals("2", args[0]);
|
|
173
|
-
callbackInvoked.value = true;
|
|
174
|
-
}
|
|
175
|
-
});
|
|
176
|
-
|
|
177
|
-
assertTrue(callbackInvoked.value);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
@Test
|
|
181
|
-
public void getFirstSeenTimeNullUser() {
|
|
182
|
-
final Mutable<Boolean> callbackInvoked = new Mutable<>(false);
|
|
183
|
-
|
|
184
|
-
mParticleUser.getFirstSeen(null, new Callback() {
|
|
185
|
-
@Override
|
|
186
|
-
public void invoke(Object... args) {
|
|
187
|
-
assertEquals(0, args.length);
|
|
188
|
-
callbackInvoked.value = true;
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
|
|
192
|
-
assertTrue(callbackInvoked.value);
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
@Test
|
|
196
|
-
public void getLastSeenTime() {
|
|
197
|
-
final Mutable<Boolean> callbackInvoked = new Mutable<>(false);
|
|
198
|
-
|
|
199
|
-
MParticleUser mockUser = new MockMParticleUser() {
|
|
200
|
-
@Override
|
|
201
|
-
public long getLastSeenTime() {
|
|
202
|
-
return 2;
|
|
203
|
-
}
|
|
204
|
-
};
|
|
205
|
-
Mockito.when(MParticle.getInstance().Identity().getUser(Mockito.anyLong())).thenReturn(mockUser);
|
|
206
|
-
|
|
207
|
-
mParticleUser.getLastSeen("1", new Callback() {
|
|
208
|
-
@Override
|
|
209
|
-
public void invoke(Object... args) {
|
|
210
|
-
assertEquals(1, args.length);
|
|
211
|
-
assertEquals("2", args[0]);
|
|
212
|
-
callbackInvoked.value = true;
|
|
213
|
-
}
|
|
214
|
-
});
|
|
215
|
-
|
|
216
|
-
assertTrue(callbackInvoked.value);
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
@Test
|
|
220
|
-
public void getLastSeenTimeNullUser() {
|
|
221
|
-
final Mutable<Boolean> callbackInvoked = new Mutable<>(false);
|
|
222
|
-
|
|
223
|
-
mParticleUser.getLastSeen(null , new Callback() {
|
|
224
|
-
@Override
|
|
225
|
-
public void invoke(Object... args) {
|
|
226
|
-
assertEquals(0, args.length);
|
|
227
|
-
callbackInvoked.value = true;
|
|
228
|
-
}
|
|
229
|
-
});
|
|
230
|
-
|
|
231
|
-
assertTrue(callbackInvoked.value);
|
|
232
|
-
}
|
|
233
|
-
}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
package com.mparticle.react.testutils;
|
|
2
|
-
|
|
3
|
-
import androidx.annotation.NonNull;
|
|
4
|
-
import androidx.annotation.Nullable;
|
|
5
|
-
|
|
6
|
-
import com.mparticle.MParticle;
|
|
7
|
-
import com.mparticle.UserAttributeListener;
|
|
8
|
-
import com.mparticle.UserAttributeListenerType;
|
|
9
|
-
import com.mparticle.consent.ConsentState;
|
|
10
|
-
import com.mparticle.identity.MParticleUser;
|
|
11
|
-
|
|
12
|
-
import java.util.Map;
|
|
13
|
-
|
|
14
|
-
public class MockMParticleUser implements MParticleUser {
|
|
15
|
-
Long mpid = 0L;
|
|
16
|
-
|
|
17
|
-
public MockMParticleUser() {}
|
|
18
|
-
|
|
19
|
-
public MockMParticleUser(Long mpid) {
|
|
20
|
-
this.mpid = mpid;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
@NonNull
|
|
24
|
-
@Override
|
|
25
|
-
public long getId() {
|
|
26
|
-
return mpid;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
@NonNull
|
|
30
|
-
@Override
|
|
31
|
-
public Map<String, Object> getUserAttributes() {
|
|
32
|
-
return null;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
@Nullable
|
|
36
|
-
@Override
|
|
37
|
-
public Map<String, Object> getUserAttributes(@Nullable UserAttributeListenerType userAttributeListener) {
|
|
38
|
-
return null;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
@Override
|
|
42
|
-
public boolean setUserAttributes(@NonNull Map<String, Object> map) {
|
|
43
|
-
return false;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
@NonNull
|
|
47
|
-
@Override
|
|
48
|
-
public Map<MParticle.IdentityType, String> getUserIdentities() {
|
|
49
|
-
return null;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
@Override
|
|
53
|
-
public boolean setUserAttribute(@NonNull String s, @NonNull Object o) {
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
@Override
|
|
58
|
-
public boolean setUserAttributeList(@NonNull String s, @NonNull Object o) {
|
|
59
|
-
return false;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
@Override
|
|
63
|
-
public boolean incrementUserAttribute(@NonNull String s, Number i) {
|
|
64
|
-
return false;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
@Override
|
|
68
|
-
public boolean removeUserAttribute(@NonNull String s) {
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
@Override
|
|
73
|
-
public boolean setUserTag(@NonNull String s) {
|
|
74
|
-
return false;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
@NonNull
|
|
78
|
-
@Override
|
|
79
|
-
public ConsentState getConsentState() {
|
|
80
|
-
return null;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
@Override
|
|
84
|
-
public void setConsentState(@Nullable ConsentState consentState) {
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
@Override
|
|
89
|
-
public boolean isLoggedIn() {
|
|
90
|
-
return false;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
@Override
|
|
94
|
-
public long getFirstSeenTime() {
|
|
95
|
-
return 0;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
@Override
|
|
99
|
-
public long getLastSeenTime() {
|
|
100
|
-
return 0;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|