forked from Ivasoft/mattermost-mobile
82 lines
3.2 KiB
Java
82 lines
3.2 KiB
Java
package com.mattermost.rnbeta;
|
|
|
|
import android.app.Notification;
|
|
import android.app.NotificationChannel;
|
|
import android.app.NotificationManager;
|
|
import android.app.RemoteInput;
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.content.res.Resources;
|
|
import android.os.Build;
|
|
import android.os.Bundle;
|
|
import android.support.annotation.Nullable;
|
|
import android.util.Log;
|
|
|
|
import com.facebook.react.HeadlessJsTaskService;
|
|
import com.facebook.react.bridge.Arguments;
|
|
import com.facebook.react.jstasks.HeadlessJsTaskConfig;
|
|
|
|
|
|
import com.wix.reactnativenotifications.core.NotificationIntentAdapter;
|
|
|
|
public class NotificationReplyService extends HeadlessJsTaskService {
|
|
private Context mContext;
|
|
|
|
@Override
|
|
public void onCreate() {
|
|
super.onCreate();
|
|
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
|
|
Context mContext = this.getApplicationContext();
|
|
final Resources res = mContext.getResources();
|
|
String packageName = mContext.getPackageName();
|
|
int smallIconResId = res.getIdentifier("ic_notification", "mipmap", packageName);
|
|
String CHANNEL_ID = "Reply job";
|
|
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, CHANNEL_ID, NotificationManager.IMPORTANCE_LOW);
|
|
((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).createNotificationChannel(channel);
|
|
Notification notification =
|
|
new Notification.Builder(mContext, CHANNEL_ID)
|
|
.setContentTitle("Replying to message")
|
|
.setContentText(packageName)
|
|
.setSmallIcon(smallIconResId)
|
|
.build();
|
|
startForeground(1, notification);
|
|
}
|
|
|
|
}
|
|
|
|
@Override
|
|
protected @Nullable HeadlessJsTaskConfig getTaskConfig(Intent intent) {
|
|
mContext = getApplicationContext();
|
|
if (CustomPushNotification.KEY_TEXT_REPLY.equals(intent.getAction())) {
|
|
CharSequence message = getReplyMessage(intent);
|
|
|
|
Bundle bundle = NotificationIntentAdapter.extractPendingNotificationDataFromIntent(intent);
|
|
String channelId = bundle.getString("channel_id");
|
|
bundle.putCharSequence("text", message);
|
|
bundle.putInt("msg_count", CustomPushNotification.getMessageCountInChannel(channelId));
|
|
|
|
int notificationId = intent.getIntExtra(CustomPushNotification.NOTIFICATION_ID, -1);
|
|
CustomPushNotification.clearNotification(mContext, notificationId, channelId);
|
|
|
|
MainApplication app = (MainApplication) this.getApplication();
|
|
app.replyFromPushNotification = true;
|
|
Log.i("ReactNative", "Replying service");
|
|
return new HeadlessJsTaskConfig(
|
|
"notificationReplied",
|
|
Arguments.fromBundle(bundle),
|
|
5000);
|
|
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
private CharSequence getReplyMessage(Intent intent) {
|
|
Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
|
|
if (remoteInput != null) {
|
|
return remoteInput.getCharSequence(CustomPushNotification.KEY_TEXT_REPLY);
|
|
}
|
|
return null;
|
|
}
|
|
}
|