diff --git a/lib/src/main/java/io/ably/lib/realtime/ChannelBase.java b/lib/src/main/java/io/ably/lib/realtime/ChannelBase.java
index 2769893fa..7ab35e167 100644
--- a/lib/src/main/java/io/ably/lib/realtime/ChannelBase.java
+++ b/lib/src/main/java/io/ably/lib/realtime/ChannelBase.java
@@ -211,6 +211,7 @@ private void setState(ChannelState newState, ErrorInfo reason, boolean resumed,
* Spec: RTL4d
* @throws AblyException
*/
+ @NonBlocking
public void attach() throws AblyException {
attach(null);
}
@@ -229,6 +230,7 @@ public void attach() throws AblyException {
* This listener is invoked on a background thread.
* @throws AblyException
*/
+ @NonBlocking
public void attach(CompletionListener listener) throws AblyException {
this.attach(false, listener);
}
@@ -334,6 +336,7 @@ private void attachImpl(final boolean forceReattach, final CompletionListener li
* Spec: RTL5e
* @throws AblyException
*/
+ @NonBlocking
public void detach() throws AblyException {
detach(null);
}
@@ -357,6 +360,7 @@ public void markAsReleased() {
* This listener is invoked on a background thread.
* @throws AblyException
*/
+ @NonBlocking
public void detach(CompletionListener listener) throws AblyException {
clearAttachTimers();
detachWithTimeout(listener);
@@ -776,6 +780,7 @@ public interface MessageListener {
*
* Spec: RTL8a, RTE5
*/
+ @NonBlocking
public synchronized void unsubscribe() {
Log.v(TAG, "unsubscribe(); channel = " + this.name);
listeners.clear();
@@ -804,6 +809,7 @@ protected boolean attachOnSubscribeEnabled() {
* This listener is invoked on a background thread.
* @throws AblyException
*/
+ @NonBlocking
public synchronized void subscribe(MessageListener listener) throws AblyException {
Log.v(TAG, "subscribe(); channel = " + this.name);
listeners.add(listener);
@@ -821,6 +827,7 @@ public synchronized void subscribe(MessageListener listener) throws AblyExceptio
*
* This listener is invoked on a background thread.
*/
+ @NonBlocking
public synchronized void unsubscribe(MessageListener listener) {
Log.v(TAG, "unsubscribe(); channel = " + this.name);
listeners.remove(listener);
@@ -841,6 +848,7 @@ public synchronized void unsubscribe(MessageListener listener) {
* This listener is invoked on a background thread.
* @throws AblyException
*/
+ @NonBlocking
public synchronized void subscribe(String name, MessageListener listener) throws AblyException {
Log.v(TAG, "subscribe(); channel = " + this.name + "; event = " + name);
subscribeImpl(name, listener);
@@ -859,6 +867,7 @@ public synchronized void subscribe(String name, MessageListener listener) throws
*
* This listener is invoked on a background thread.
*/
+ @NonBlocking
public synchronized void unsubscribe(String name, MessageListener listener) {
Log.v(TAG, "unsubscribe(); channel = " + this.name + "; event = " + name);
unsubscribeImpl(name, listener);
@@ -876,6 +885,7 @@ public synchronized void unsubscribe(String name, MessageListener listener) {
* This listener is invoked on a background thread.
* @throws AblyException
*/
+ @NonBlocking
public synchronized void subscribe(String[] names, MessageListener listener) throws AblyException {
Log.v(TAG, "subscribe(); channel = " + this.name + "; (multiple events)");
for(String name : names)
@@ -894,6 +904,7 @@ public synchronized void subscribe(String[] names, MessageListener listener) thr
*
* This listener is invoked on a background thread.
*/
+ @NonBlocking
public synchronized void unsubscribe(String[] names, MessageListener listener) {
Log.v(TAG, "unsubscribe(); channel = " + this.name + "; (multiple events)");
for(String name : names)
@@ -1546,6 +1557,7 @@ public void getMessageVersionsAsync(String serial, Param[] params, Callback history(Param[] params) throws AblyException {
return historyImpl(ably.http, params).sync();
}
@@ -1579,6 +1591,7 @@ PaginatedResult history(Http http, Param[] params) throws AblyException
* @param callback Callback with {@link AsyncPaginatedResult} object containing an array of {@link Message} objects.
* @throws AblyException
*/
+ @NonBlocking
public void historyAsync(Param[] params, Callback> callback) {
historyAsync(ably.http, params, callback);
}
@@ -1609,6 +1622,7 @@ private BasePaginatedQuery.ResultRequest historyImpl(Http http, Param[]
* @param options A {@link ChannelOptions} object.
* @throws AblyException
*/
+ @NonBlocking
public void setOptions(ChannelOptions options) throws AblyException {
this.setOptions(options, null);
}
@@ -1621,6 +1635,7 @@ public void setOptions(ChannelOptions options) throws AblyException {
* @param listener An optional listener may be provided to notify of the success or failure of the operation.
* @throws AblyException
*/
+ @NonBlocking
public void setOptions(ChannelOptions options, CompletionListener listener) throws AblyException {
this.options = options;
this.messageEditsMixin = new MessageEditsMixin(basePath, ably.options, options, ably.auth);
diff --git a/lib/src/main/java/io/ably/lib/rest/Auth.java b/lib/src/main/java/io/ably/lib/rest/Auth.java
index 4abc7c68b..8c6c08567 100644
--- a/lib/src/main/java/io/ably/lib/rest/Auth.java
+++ b/lib/src/main/java/io/ably/lib/rest/Auth.java
@@ -29,6 +29,8 @@
import io.ably.lib.util.Base64Coder;
import io.ably.lib.util.Log;
import io.ably.lib.util.Serialisation;
+import org.jetbrains.annotations.Blocking;
+import org.jetbrains.annotations.NonBlocking;
/**
* Token-generation and authentication operations for the Ably API.
@@ -663,6 +665,7 @@ public interface TokenCallback {
* @return A {@link TokenDetails} object.
* @throws AblyException
*/
+ @Blocking
public TokenDetails authorize(TokenParams params, AuthOptions options) throws AblyException {
/* Spec: RSA10g */
if (options != null)
@@ -700,6 +703,7 @@ public TokenDetails authorize(TokenParams params, AuthOptions options) throws Ab
* Alias of authorize() (0.9 RSA10l)
*/
@Deprecated
+ @Blocking
public TokenDetails authorise(TokenParams params, AuthOptions options) throws AblyException {
Log.w(TAG, "authorise() is deprecated and will be removed in 1.0. Please use authorize() instead");
return authorize(params, options);
@@ -722,6 +726,7 @@ public TokenDetails authorise(TokenParams params, AuthOptions options) throws Ab
* @return A {@link TokenDetails} object.
* @throws AblyException
*/
+ @Blocking
public TokenDetails requestToken(TokenParams params, AuthOptions tokenOptions) throws AblyException {
/* Spec: RSA8e */
tokenOptions = (tokenOptions == null) ? this.authOptions : tokenOptions.copy();
@@ -885,6 +890,7 @@ public TokenDetails handleResponse(HttpCore.Response response, ErrorInfo error)
* @return A {@link TokenRequest} object.
* @throws AblyException
*/
+ @Blocking
public TokenRequest createTokenRequest(TokenParams params, AuthOptions options) throws AblyException {
/* Spec: RSA9h */
options = (options == null) ? this.authOptions : options.copy();
@@ -1010,6 +1016,7 @@ public AuthOptions getAuthOptions() {
* Please use {@link Auth#renewAuth} instead
*/
@Deprecated
+ @NonBlocking
public TokenDetails renew() throws AblyException {
TokenDetails tokenDetails = assertValidToken(this.tokenParams, this.authOptions, true);
ably.onAuthUpdated(tokenDetails.token, false);
@@ -1024,6 +1031,7 @@ public TokenDetails renew() throws AblyException {
* Please note that completion callback {@link RenewAuthResult#onCompletion(boolean, TokenDetails, ErrorInfo)}
* is called on a background thread.
*/
+ @NonBlocking
public void renewAuth(RenewAuthResult result) throws AblyException {
final TokenDetails tokenDetails = assertValidToken(this.tokenParams, this.authOptions, true);
diff --git a/lib/src/main/java/io/ably/lib/rest/ChannelBase.java b/lib/src/main/java/io/ably/lib/rest/ChannelBase.java
index ce2aaa573..105573d8d 100644
--- a/lib/src/main/java/io/ably/lib/rest/ChannelBase.java
+++ b/lib/src/main/java/io/ably/lib/rest/ChannelBase.java
@@ -103,6 +103,7 @@ PublishResult publishWithResult(Http http, String name, Object data) throws Ably
* @deprecated Use {@link #publishAsync(String, Object, Callback)} instead.
*/
@Deprecated
+ @NonBlocking
public void publishAsync(String name, Object data, CompletionListener listener) {
publishAsync(ably.http, name, data, listener);
}
@@ -247,6 +248,7 @@ public void execute(HttpScheduler http, final Callback callback)
* @return an array of Messages for this Channel.
* @throws AblyException
*/
+ @Blocking
public PaginatedResult history(Param[] params) throws AblyException {
return history(ably.http, params);
}
@@ -261,6 +263,7 @@ PaginatedResult history(Http http, Param[] params) throws AblyException
* @param callback
* @return
*/
+ @NonBlocking
public void historyAsync(Param[] params, Callback> callback) {
historyAsync(ably.http, params, callback);
}
@@ -296,6 +299,7 @@ public class Presence {
* @return A {@link PaginatedResult} object containing an array of {@link PresenceMessage} objects.
* @throws AblyException
*/
+ @Blocking
public PaginatedResult get(Param[] params) throws AblyException {
return get(ably.http, params);
}
@@ -321,10 +325,12 @@ PaginatedResult get(Http http, Param[] params) throws AblyExcep
*
* This callback is invoked on a background thread.
*/
+ @NonBlocking
public void getAsync(Param[] params, Callback> callback) {
getAsync(ably.http, params, callback);
}
+ @NonBlocking
void getAsync(Http http, Param[] params, Callback> callback) {
getImpl(http, params).async(callback);
}
@@ -356,6 +362,7 @@ private BasePaginatedQuery.ResultRequest getImpl(Http http, Par
* @return A {@link PaginatedResult} object containing an array of {@link PresenceMessage} objects.
* @throws AblyException
*/
+ @Blocking
public PaginatedResult history(Param[] params) throws AblyException {
return history(ably.http, params);
}
@@ -387,6 +394,7 @@ PaginatedResult history(Http http, Param[] params) throws AblyE
* This callback is invoked on a background thread.
* @throws AblyException
*/
+ @NonBlocking
public void historyAsync(Param[] params, Callback> callback) {
historyAsync(ably.http, params, callback);
}