forked from Ivasoft/mattermost-mobile
* iOS switch from file cache to memory cache and use last_picture_update to update the avatar if needed * Android switch from file cache to memory cache and use last_picture_update to update the avatar if needed, split function to multiple files and catch potential exceptions
80 lines
2.8 KiB
Java
80 lines
2.8 KiB
Java
package com.mattermost.rnbeta;
|
|
|
|
import android.app.Notification;
|
|
import android.content.Context;
|
|
import android.os.Bundle;
|
|
import android.service.notification.StatusBarNotification;
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
import com.facebook.react.bridge.Arguments;
|
|
import com.facebook.react.bridge.ReactApplicationContext;
|
|
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
|
import com.facebook.react.bridge.ReactMethod;
|
|
import com.facebook.react.bridge.Promise;
|
|
import com.facebook.react.bridge.WritableArray;
|
|
import com.facebook.react.bridge.WritableMap;
|
|
import com.mattermost.helpers.NotificationHelper;
|
|
|
|
import java.util.Set;
|
|
|
|
public class NotificationsModule extends ReactContextBaseJavaModule {
|
|
private static NotificationsModule instance;
|
|
private final MainApplication mApplication;
|
|
|
|
private NotificationsModule(MainApplication application, ReactApplicationContext reactContext) {
|
|
super(reactContext);
|
|
mApplication = application;
|
|
}
|
|
|
|
public static NotificationsModule getInstance(MainApplication application, ReactApplicationContext reactContext) {
|
|
if (instance == null) {
|
|
instance = new NotificationsModule(application, reactContext);
|
|
}
|
|
|
|
return instance;
|
|
}
|
|
|
|
@NonNull
|
|
@Override
|
|
public String getName() {
|
|
return "Notifications";
|
|
}
|
|
|
|
@ReactMethod
|
|
public void getDeliveredNotifications(final Promise promise) {
|
|
Context context = mApplication.getApplicationContext();
|
|
StatusBarNotification[] notifications = NotificationHelper.getDeliveredNotifications(context);
|
|
WritableArray result = Arguments.createArray();
|
|
for (StatusBarNotification sbn:notifications) {
|
|
WritableMap map = Arguments.createMap();
|
|
Notification n = sbn.getNotification();
|
|
Bundle bundle = n.extras;
|
|
Set<String> keys = bundle.keySet();
|
|
for (String key: keys) {
|
|
map.putString(key, bundle.getString(key));
|
|
}
|
|
result.pushMap(map);
|
|
}
|
|
promise.resolve(result);
|
|
}
|
|
|
|
@ReactMethod
|
|
public void removeChannelNotifications(String serverUrl, String channelId) {
|
|
Context context = mApplication.getApplicationContext();
|
|
NotificationHelper.removeChannelNotifications(context, serverUrl, channelId);
|
|
}
|
|
|
|
@ReactMethod
|
|
public void removeThreadNotifications(String serverUrl, String threadId) {
|
|
Context context = mApplication.getApplicationContext();
|
|
NotificationHelper.removeThreadNotifications(context, serverUrl, threadId);
|
|
}
|
|
|
|
@ReactMethod
|
|
public void removeServerNotifications(String serverUrl) {
|
|
Context context = mApplication.getApplicationContext();
|
|
NotificationHelper.removeServerNotifications(context, serverUrl);
|
|
}
|
|
}
|