44import io .objectbox .annotation .apihint .Experimental ;
55import io .objectbox .annotation .apihint .Internal ;
66import 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 ;
712
813import javax .annotation .Nullable ;
914import java .util .concurrent .CountDownLatch ;
1722public class SyncClientImpl implements SyncClient {
1823
1924 private final String serverUrl ;
20- private final InternalListener internalListener ;
25+ private final InternalSyncClientListener internalListener ;
2126 @ Nullable
2227 private final ConnectivityMonitor connectivityMonitor ;
2328
2429 private volatile long handle ;
2530 @ 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 ;
2736 private volatile long lastLoginCode ;
2837 private volatile boolean started ;
2938
@@ -47,15 +56,20 @@ public class SyncClientImpl implements SyncClient {
4756 nativeSetUncommittedAcks (handle , true );
4857 }
4958
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+ }
5169
52- this .internalListener = new InternalListener ();
70+ this .internalListener = new InternalSyncClientListener ();
5371 nativeSetListener (handle , internalListener );
5472
55- if (builder .changesListener != null ) {
56- setSyncChangesListener (builder .changesListener );
57- }
58-
5973 setLoginCredentials (builder .credentials );
6074 }
6175
@@ -82,25 +96,31 @@ public SyncClientState getSyncState() {
8296 }
8397
8498 @ 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 ;
88101 }
89102
90103 @ Override
91- public void removeSyncListener ( ) {
92- this .listener = null ;
104+ public void setSyncCompletedListener ( @ Nullable SyncCompletedListener listener ) {
105+ this .completedListener = listener ;
93106 }
94107
95108 @ 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 ) {
98110 nativeSetSyncChangesListener (handle , changesListener );
99111 }
100112
101113 @ 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 );
104124 }
105125
106126 @ Override
@@ -203,13 +223,6 @@ public void notifyConnectionAvailable() {
203223 nativeTriggerReconnect (handle );
204224 }
205225
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-
213226 /**
214227 * Creates a native sync client for the given store handle ready to connect to the server at the given URI.
215228 * 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) {
224237
225238 private native void nativeSetLoginInfo (long handle , long credentialsType , @ Nullable byte [] credentials );
226239
227- private native void nativeSetListener (long handle , @ Nullable SyncClientListener listener );
240+ private native void nativeSetListener (long handle , @ Nullable InternalSyncClientListener listener );
228241
229- private native void nativeSetSyncChangesListener (long handle , @ Nullable SyncChangesListener advancedListener );
242+ private native void nativeSetSyncChangesListener (long handle , @ Nullable SyncChangeListener advancedListener );
230243
231244 /** @param subscribeForPushes Pass true to automatically receive updates for future changes. */
232245 private native void nativeSetRequestUpdatesMode (long handle , boolean autoRequestUpdates , boolean subscribeForPushes );
@@ -253,44 +266,44 @@ private void checkNotNull(Object object, String message) {
253266 /** Hints to the native client that an active network connection is available. */
254267 private native void nativeTriggerReconnect (long handle );
255268
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 {
257274 private final CountDownLatch firstLoginLatch = new CountDownLatch (1 );
258275
259- @ Override
260276 public void onLogin () {
261277 lastLoginCode = SyncLoginCodes .OK ;
262278 firstLoginLatch .countDown ();
263279
264- SyncClientListener listenerToFire = listener ;
280+ SyncLoginListener listenerToFire = loginListener ;
265281 if (listenerToFire != null ) {
266- listenerToFire .onLogin ();
282+ listenerToFire .onLoggedIn ();
267283 }
268284 }
269285
270- @ Override
271286 public void onLoginFailure (long errorCode ) {
272287 lastLoginCode = errorCode ;
273288 firstLoginLatch .countDown ();
274289
275- SyncClientListener listenerToFire = listener ;
290+ SyncLoginListener listenerToFire = loginListener ;
276291 if (listenerToFire != null ) {
277- listenerToFire .onLoginFailure (errorCode );
292+ listenerToFire .onLoginFailed (errorCode );
278293 }
279294 }
280295
281- @ Override
282296 public void onSyncComplete () {
283- SyncClientListener listenerToFire = listener ;
297+ SyncCompletedListener listenerToFire = completedListener ;
284298 if (listenerToFire != null ) {
285- listenerToFire .onSyncComplete ();
299+ listenerToFire .onUpdatesCompleted ();
286300 }
287301 }
288302
289- @ Override
290303 public void onDisconnect () {
291- SyncClientListener listenerToFire = listener ;
304+ SyncConnectionListener listenerToFire = connectionListener ;
292305 if (listenerToFire != null ) {
293- listenerToFire .onDisconnect ();
306+ listenerToFire .onDisconnected ();
294307 }
295308 }
296309
0 commit comments