diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1fd924b55..cbe15faaf 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -6,18 +6,18 @@
-
-
-
-
+
+
+
+
+ android:theme="@style/AppTheme">
queuedActions;
+ private boolean subscribed;
- public PushNotificationClient(final @NonNull Context context, @NonNull String serverUri) {
+ public PushNotificationClient(final @NonNull Context applicationContext,
+ @NonNull String serverUri) {
queuedActions = new ArrayDeque<>();
// Create the MQTT client.
String clientId = MqttClient.generateClientId();
- mqttAndroidClient = new MqttAndroidClient(context, serverUri, clientId);
+ mqttAndroidClient = new MqttAndroidClient(applicationContext, serverUri, clientId);
mqttAndroidClient.setCallback(new MqttCallbackExtended() {
@Override
public void connectComplete(boolean reconnect, String serverURI) {
if (reconnect) {
flushQueuedActions();
+ if (subscribed) {
+ subscribeToTopic();
+ }
}
}
@@ -75,7 +82,7 @@ public class PushNotificationClient {
@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
- onMessageReceived(context, new String(message.getPayload()));
+ onMessageReceived(applicationContext, new String(message.getPayload()));
}
@Override
@@ -108,7 +115,6 @@ public class PushNotificationClient {
bufferOptions.setDeleteOldestMessages(false);
mqttAndroidClient.setBufferOpts(bufferOptions);
onConnectionSuccess();
- connected = true;
flushQueuedActions();
}
@@ -125,7 +131,8 @@ public class PushNotificationClient {
}
private void flushQueuedActions() {
- for (QueuedAction action : queuedActions) {
+ while (!queuedActions.isEmpty()) {
+ QueuedAction action = queuedActions.pop();
switch (action) {
case SUBSCRIBE: subscribeToTopic(); break;
case UNSUBSCRIBE: unsubscribeToTopic(); break;
@@ -136,7 +143,7 @@ public class PushNotificationClient {
/** Disconnect from the MQTT broker. */
public void disconnect() {
- if (!connected) {
+ if (!mqttAndroidClient.isConnected()) {
queuedActions.add(QueuedAction.DISCONNECT);
return;
}
@@ -154,7 +161,7 @@ public class PushNotificationClient {
/** Subscribe to the push notification topic. */
public void subscribeToTopic() {
- if (!connected) {
+ if (!mqttAndroidClient.isConnected()) {
queuedActions.add(QueuedAction.SUBSCRIBE);
return;
}
@@ -162,6 +169,7 @@ public class PushNotificationClient {
mqttAndroidClient.subscribe(TOPIC, 0, null, new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken asyncActionToken) {
+ subscribed = true;
onConnectionSuccess();
}
@@ -179,12 +187,13 @@ public class PushNotificationClient {
/** Unsubscribe from the push notification topic. */
public void unsubscribeToTopic() {
- if (!connected) {
+ if (!mqttAndroidClient.isConnected()) {
queuedActions.add(QueuedAction.UNSUBSCRIBE);
return;
}
try {
mqttAndroidClient.unsubscribe(TOPIC);
+ subscribed = false;
} catch (MqttException e) {
Log.e(TAG, "An exception occurred while unsubscribing." + e.getMessage());
onConnectionFailure();
@@ -259,7 +268,7 @@ public class PushNotificationClient {
mastodonApi = retrofit.create(MastodonAPI.class);
}
- public void clearNotifications() {
- // TODO: make it happen
+ public void clearNotifications(Context context) {
+ ((NotificationManager) (context.getSystemService(NOTIFICATION_SERVICE))).cancel(NOTIFY_ID);
}
}