5
5
import io .objectbox .BoxStore ;
6
6
import io .objectbox .annotation .apihint .Experimental ;
7
7
import io .objectbox .sync .internal .Platform ;
8
+ import io .objectbox .sync .listener .SyncChangeListener ;
9
+ import io .objectbox .sync .listener .SyncCompletedListener ;
10
+ import io .objectbox .sync .listener .SyncConnectionListener ;
11
+ import io .objectbox .sync .listener .SyncListener ;
12
+ import io .objectbox .sync .listener .SyncLoginListener ;
8
13
9
14
/**
10
15
* A builder to create a {@link SyncClient}; the builder itself should be created via
@@ -19,13 +24,15 @@ public class SyncBuilder {
19
24
final String url ;
20
25
final SyncCredentials credentials ;
21
26
22
- SyncClientListener listener ;
23
- SyncChangesListener changesListener ;
27
+ @ Nullable SyncLoginListener loginListener ;
28
+ @ Nullable SyncCompletedListener completedListener ;
29
+ @ Nullable SyncChangeListener changeListener ;
30
+ @ Nullable SyncConnectionListener connectionListener ;
31
+ @ Nullable SyncListener listener ;
24
32
25
33
@ Nullable
26
34
String [] trustedCertPaths ;
27
35
boolean uncommittedAcks ;
28
- boolean manualStart ;
29
36
30
37
RequestUpdatesMode requestUpdatesMode = RequestUpdatesMode .AUTO ;
31
38
@@ -103,50 +110,82 @@ public SyncBuilder uncommittedAcks() {
103
110
return this ;
104
111
}
105
112
106
-
107
113
/**
108
- * Prevents the client from starting (connecting, logging in, syncing) automatically .
109
- * It will need to be started manually later.
110
- *
111
- * @see SyncClient#start()
114
+ * Sets a listener to only observe Sync login events .
115
+ * <p>
116
+ * This listener can also be {@link SyncClient#setSyncLoginListener(SyncLoginListener) set or removed}
117
+ * on the Sync client directly.
112
118
*/
113
- public SyncBuilder manualStart ( ) {
114
- manualStart = true ;
119
+ public SyncBuilder loginListener ( SyncLoginListener loginListener ) {
120
+ this . loginListener = loginListener ;
115
121
return this ;
116
122
}
117
123
118
124
/**
119
- * Sets a listener to observe sync events like login or sync completion .
120
- * This listener can also be set (or removed) on the sync client directly.
121
- *
122
- * @see SyncClient#setSyncListener(SyncClientListener)
125
+ * Sets a listener to only observe Sync completed events .
126
+ * <p>
127
+ * This listener can also be {@link SyncClient#setSyncCompletedListener(SyncCompletedListener) set or removed}
128
+ * on the Sync client directly.
123
129
*/
124
- public SyncBuilder listener ( SyncClientListener listener ) {
125
- this .listener = listener ;
130
+ public SyncBuilder completedListener ( SyncCompletedListener completedListener ) {
131
+ this .completedListener = completedListener ;
126
132
return this ;
127
133
}
128
134
129
135
/**
130
136
* Sets a listener to observe fine granular changes happening during sync.
131
- * This listener can also be set (or removed) on the sync client directly.
132
- *
133
- * @see SyncClient#setSyncChangesListener(SyncChangesListener)
137
+ * <p>
138
+ * This listener can also be {@link SyncClient#setSyncChangeListener(SyncChangeListener) set or removed}
139
+ * on the Sync client directly.
134
140
*/
135
- public SyncBuilder changesListener ( SyncChangesListener changesListener ) {
136
- this .changesListener = changesListener ;
141
+ public SyncBuilder changeListener ( SyncChangeListener changeListener ) {
142
+ this .changeListener = changeListener ;
137
143
return this ;
138
144
}
139
145
146
+ /**
147
+ * Sets a listener to only observe Sync connection events.
148
+ * <p>
149
+ * This listener can also be {@link SyncClient#setSyncConnectionListener(SyncConnectionListener) set or removed}
150
+ * on the Sync client directly.
151
+ */
152
+ public SyncBuilder connectionListener (SyncConnectionListener connectionListener ) {
153
+ this .connectionListener = connectionListener ;
154
+ return this ;
155
+ }
156
+
157
+ /**
158
+ * Sets a listener to observe all Sync events like login or sync completion.
159
+ * <p>
160
+ * Note: this will replace any login, completed or connection listener.
161
+ * <p>
162
+ * This listener can also be {@link SyncClient#setSyncListener(SyncListener) set or removed}
163
+ * on the Sync client directly.
164
+ */
165
+ public SyncBuilder listener (SyncListener listener ) {
166
+ this .listener = listener ;
167
+ return this ;
168
+ }
169
+
170
+ /**
171
+ * Builds and returns a Sync client ready to {@link SyncClient#start()}.
172
+ */
140
173
public SyncClient build () {
141
- if (credentials == null ) {
142
- throw new IllegalStateException ("Credentials are required." );
143
- }
144
174
if (boxStore .getSyncClient () != null ) {
145
175
throw new IllegalStateException ("The given store is already associated with a Sync client, close it first." );
146
176
}
147
177
return new SyncClientImpl (this );
148
178
}
149
179
180
+ /**
181
+ * Builds, {@link SyncClient#start() starts} and returns a Sync client.
182
+ */
183
+ public SyncClient buildAndStart () {
184
+ SyncClient syncClient = build ();
185
+ syncClient .start ();
186
+ return syncClient ;
187
+ }
188
+
150
189
private void checkNotNull (Object object , String message ) {
151
190
//noinspection ConstantConditions Non-null annotation does not enforce, so check for null.
152
191
if (object == null ) {
0 commit comments