4
4
import io .objectbox .annotation .apihint .Experimental ;
5
5
import io .objectbox .annotation .apihint .Internal ;
6
6
import io .objectbox .sync .SyncBuilder .RequestUpdatesMode ;
7
+ import io .objectbox .sync .listener .SyncChangeListener ;
8
+ import io .objectbox .sync .listener .SyncCompletedListener ;
9
+ import io .objectbox .sync .listener .SyncConnectionListener ;
10
+ import io .objectbox .sync .listener .SyncListener ;
11
+ import io .objectbox .sync .listener .SyncLoginListener ;
7
12
8
13
import javax .annotation .Nullable ;
9
14
import java .util .concurrent .CountDownLatch ;
17
22
public class SyncClientImpl implements SyncClient {
18
23
19
24
private final String serverUrl ;
20
- private final InternalListener internalListener ;
25
+ private final InternalSyncClientListener internalListener ;
21
26
@ Nullable
22
27
private final ConnectivityMonitor connectivityMonitor ;
23
28
24
29
private volatile long handle ;
25
30
@ Nullable
26
- private volatile SyncClientListener listener ;
31
+ private volatile SyncLoginListener loginListener ;
32
+ @ Nullable
33
+ private volatile SyncCompletedListener completedListener ;
34
+ @ Nullable
35
+ private volatile SyncConnectionListener connectionListener ;
27
36
private volatile long lastLoginCode ;
28
37
private volatile boolean started ;
29
38
@@ -47,15 +56,20 @@ public class SyncClientImpl implements SyncClient {
47
56
nativeSetUncommittedAcks (handle , true );
48
57
}
49
58
50
- this .listener = builder .listener ;
59
+ if (builder .listener != null ) {
60
+ setSyncListener (builder .listener );
61
+ } else {
62
+ this .loginListener = builder .loginListener ;
63
+ this .completedListener = builder .completedListener ;
64
+ if (builder .changeListener != null ) {
65
+ setSyncChangeListener (builder .changeListener );
66
+ }
67
+ this .connectionListener = builder .connectionListener ;
68
+ }
51
69
52
- this .internalListener = new InternalListener ();
70
+ this .internalListener = new InternalSyncClientListener ();
53
71
nativeSetListener (handle , internalListener );
54
72
55
- if (builder .changesListener != null ) {
56
- setSyncChangesListener (builder .changesListener );
57
- }
58
-
59
73
setLoginCredentials (builder .credentials );
60
74
}
61
75
@@ -82,25 +96,31 @@ public SyncClientState getSyncState() {
82
96
}
83
97
84
98
@ Override
85
- public void setSyncListener (SyncClientListener listener ) {
86
- checkNotNull (listener , "Listener must not be null. Use removeSyncListener to remove existing listener." );
87
- this .listener = listener ;
99
+ public void setSyncLoginListener (@ Nullable SyncLoginListener listener ) {
100
+ this .loginListener = listener ;
88
101
}
89
102
90
103
@ Override
91
- public void removeSyncListener ( ) {
92
- this .listener = null ;
104
+ public void setSyncCompletedListener ( @ Nullable SyncCompletedListener listener ) {
105
+ this .completedListener = listener ;
93
106
}
94
107
95
108
@ Override
96
- public void setSyncChangesListener (SyncChangesListener changesListener ) {
97
- checkNotNull (changesListener , "Listener must not be null. Use removeSyncChangesListener to remove existing listener." );
109
+ public void setSyncChangeListener (@ Nullable SyncChangeListener changesListener ) {
98
110
nativeSetSyncChangesListener (handle , changesListener );
99
111
}
100
112
101
113
@ Override
102
- public void removeSyncChangesListener () {
103
- nativeSetSyncChangesListener (handle , null );
114
+ public void setSyncConnectionListener (@ Nullable SyncConnectionListener listener ) {
115
+ this .connectionListener = listener ;
116
+ }
117
+
118
+ @ Override
119
+ public void setSyncListener (@ Nullable SyncListener listener ) {
120
+ this .loginListener = listener ;
121
+ this .completedListener = listener ;
122
+ this .connectionListener = listener ;
123
+ setSyncChangeListener (listener );
104
124
}
105
125
106
126
@ Override
@@ -203,13 +223,6 @@ public void notifyConnectionAvailable() {
203
223
nativeTriggerReconnect (handle );
204
224
}
205
225
206
- private void checkNotNull (Object object , String message ) {
207
- //noinspection ConstantConditions Non-null annotation does not enforce, so check for null.
208
- if (object == null ) {
209
- throw new IllegalArgumentException (message );
210
- }
211
- }
212
-
213
226
/**
214
227
* Creates a native sync client for the given store handle ready to connect to the server at the given URI.
215
228
* Uses certificate authorities trusted by the host if no trusted certificate paths are passed.
@@ -224,9 +237,9 @@ private void checkNotNull(Object object, String message) {
224
237
225
238
private native void nativeSetLoginInfo (long handle , long credentialsType , @ Nullable byte [] credentials );
226
239
227
- private native void nativeSetListener (long handle , @ Nullable SyncClientListener listener );
240
+ private native void nativeSetListener (long handle , @ Nullable InternalSyncClientListener listener );
228
241
229
- private native void nativeSetSyncChangesListener (long handle , @ Nullable SyncChangesListener advancedListener );
242
+ private native void nativeSetSyncChangesListener (long handle , @ Nullable SyncChangeListener advancedListener );
230
243
231
244
/** @param subscribeForPushes Pass true to automatically receive updates for future changes. */
232
245
private native void nativeSetRequestUpdatesMode (long handle , boolean autoRequestUpdates , boolean subscribeForPushes );
@@ -253,44 +266,44 @@ private void checkNotNull(Object object, String message) {
253
266
/** Hints to the native client that an active network connection is available. */
254
267
private native void nativeTriggerReconnect (long handle );
255
268
256
- private class InternalListener implements SyncClientListener {
269
+ /**
270
+ * Methods on this class must match those expected by JNI implementation.
271
+ */
272
+ @ SuppressWarnings ("unused" ) // Methods called from native code.
273
+ private class InternalSyncClientListener {
257
274
private final CountDownLatch firstLoginLatch = new CountDownLatch (1 );
258
275
259
- @ Override
260
276
public void onLogin () {
261
277
lastLoginCode = SyncLoginCodes .OK ;
262
278
firstLoginLatch .countDown ();
263
279
264
- SyncClientListener listenerToFire = listener ;
280
+ SyncLoginListener listenerToFire = loginListener ;
265
281
if (listenerToFire != null ) {
266
- listenerToFire .onLogin ();
282
+ listenerToFire .onLoggedIn ();
267
283
}
268
284
}
269
285
270
- @ Override
271
286
public void onLoginFailure (long errorCode ) {
272
287
lastLoginCode = errorCode ;
273
288
firstLoginLatch .countDown ();
274
289
275
- SyncClientListener listenerToFire = listener ;
290
+ SyncLoginListener listenerToFire = loginListener ;
276
291
if (listenerToFire != null ) {
277
- listenerToFire .onLoginFailure (errorCode );
292
+ listenerToFire .onLoginFailed (errorCode );
278
293
}
279
294
}
280
295
281
- @ Override
282
296
public void onSyncComplete () {
283
- SyncClientListener listenerToFire = listener ;
297
+ SyncCompletedListener listenerToFire = completedListener ;
284
298
if (listenerToFire != null ) {
285
- listenerToFire .onSyncComplete ();
299
+ listenerToFire .onUpdatesCompleted ();
286
300
}
287
301
}
288
302
289
- @ Override
290
303
public void onDisconnect () {
291
- SyncClientListener listenerToFire = listener ;
304
+ SyncConnectionListener listenerToFire = connectionListener ;
292
305
if (listenerToFire != null ) {
293
- listenerToFire .onDisconnect ();
306
+ listenerToFire .onDisconnected ();
294
307
}
295
308
}
296
309
0 commit comments