181 lines
6.3 KiB
Java
181 lines
6.3 KiB
Java
package com.google.firebase.messaging;
|
|
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.os.Bundle;
|
|
import android.text.TextUtils;
|
|
import android.util.Log;
|
|
import com.google.android.gms.cloudmessaging.CloudMessage;
|
|
import com.google.android.gms.cloudmessaging.Rpc;
|
|
import com.google.firebase.messaging.Constants;
|
|
import java.util.ArrayDeque;
|
|
import java.util.Queue;
|
|
import java.util.concurrent.ExecutorService;
|
|
|
|
/* loaded from: classes3.dex */
|
|
public class FirebaseMessagingService extends EnhancedIntentService {
|
|
public static final String ACTION_DIRECT_BOOT_REMOTE_INTENT = "com.google.firebase.messaging.RECEIVE_DIRECT_BOOT";
|
|
static final String ACTION_NEW_TOKEN = "com.google.firebase.messaging.NEW_TOKEN";
|
|
static final String ACTION_REMOTE_INTENT = "com.google.android.c2dm.intent.RECEIVE";
|
|
static final String EXTRA_TOKEN = "token";
|
|
private static final int RECENTLY_RECEIVED_MESSAGE_IDS_MAX_SIZE = 10;
|
|
private static final Queue<String> recentlyReceivedMessageIds = new ArrayDeque(10);
|
|
private Rpc rpc;
|
|
|
|
private boolean alreadyReceivedMessage(String str) {
|
|
if (TextUtils.isEmpty(str)) {
|
|
return false;
|
|
}
|
|
Queue<String> queue = recentlyReceivedMessageIds;
|
|
if (!queue.contains(str)) {
|
|
if (queue.size() >= 10) {
|
|
queue.remove();
|
|
}
|
|
queue.add(str);
|
|
return false;
|
|
}
|
|
if (!Log.isLoggable(Constants.TAG, 3)) {
|
|
return true;
|
|
}
|
|
Log.d(Constants.TAG, "Received duplicate message: " + str);
|
|
return true;
|
|
}
|
|
|
|
private void dispatchMessage(Intent intent) {
|
|
Bundle extras = intent.getExtras();
|
|
if (extras == null) {
|
|
extras = new Bundle();
|
|
}
|
|
extras.remove("androidx.content.wakelockid");
|
|
if (NotificationParams.isNotification(extras)) {
|
|
NotificationParams notificationParams = new NotificationParams(extras);
|
|
ExecutorService newNetworkIOExecutor = FcmExecutors.newNetworkIOExecutor();
|
|
try {
|
|
if (new DisplayNotification(this, notificationParams, newNetworkIOExecutor).handleNotification()) {
|
|
return;
|
|
}
|
|
newNetworkIOExecutor.shutdown();
|
|
if (MessagingAnalytics.shouldUploadScionMetrics(intent)) {
|
|
MessagingAnalytics.logNotificationForeground(intent);
|
|
}
|
|
} finally {
|
|
newNetworkIOExecutor.shutdown();
|
|
}
|
|
}
|
|
onMessageReceived(new RemoteMessage(extras));
|
|
}
|
|
|
|
private String getMessageId(Intent intent) {
|
|
String stringExtra = intent.getStringExtra(Constants.MessagePayloadKeys.MSGID);
|
|
return stringExtra == null ? intent.getStringExtra(Constants.MessagePayloadKeys.MSGID_SERVER) : stringExtra;
|
|
}
|
|
|
|
private Rpc getRpc(Context context) {
|
|
if (this.rpc == null) {
|
|
this.rpc = new Rpc(context.getApplicationContext());
|
|
}
|
|
return this.rpc;
|
|
}
|
|
|
|
private void handleMessageIntent(Intent intent) {
|
|
if (!alreadyReceivedMessage(intent.getStringExtra(Constants.MessagePayloadKeys.MSGID))) {
|
|
passMessageIntentToSdk(intent);
|
|
}
|
|
getRpc(this).messageHandled(new CloudMessage(intent));
|
|
}
|
|
|
|
private void passMessageIntentToSdk(Intent intent) {
|
|
String stringExtra = intent.getStringExtra(Constants.MessagePayloadKeys.MESSAGE_TYPE);
|
|
if (stringExtra == null) {
|
|
stringExtra = Constants.MessageTypes.MESSAGE;
|
|
}
|
|
char c4 = 65535;
|
|
switch (stringExtra.hashCode()) {
|
|
case -2062414158:
|
|
if (stringExtra.equals(Constants.MessageTypes.DELETED)) {
|
|
c4 = 0;
|
|
break;
|
|
}
|
|
break;
|
|
case 102161:
|
|
if (stringExtra.equals(Constants.MessageTypes.MESSAGE)) {
|
|
c4 = 1;
|
|
break;
|
|
}
|
|
break;
|
|
case 814694033:
|
|
if (stringExtra.equals(Constants.MessageTypes.SEND_ERROR)) {
|
|
c4 = 2;
|
|
break;
|
|
}
|
|
break;
|
|
case 814800675:
|
|
if (stringExtra.equals(Constants.MessageTypes.SEND_EVENT)) {
|
|
c4 = 3;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
switch (c4) {
|
|
case 0:
|
|
onDeletedMessages();
|
|
return;
|
|
case 1:
|
|
MessagingAnalytics.logNotificationReceived(intent);
|
|
dispatchMessage(intent);
|
|
return;
|
|
case 2:
|
|
onSendError(getMessageId(intent), new SendException(intent.getStringExtra(Constants.IPC_BUNDLE_KEY_SEND_ERROR)));
|
|
return;
|
|
case 3:
|
|
onMessageSent(intent.getStringExtra(Constants.MessagePayloadKeys.MSGID));
|
|
return;
|
|
default:
|
|
Log.w(Constants.TAG, "Received message with unknown type: ".concat(stringExtra));
|
|
return;
|
|
}
|
|
}
|
|
|
|
public static void resetForTesting() {
|
|
recentlyReceivedMessageIds.clear();
|
|
}
|
|
|
|
@Override // com.google.firebase.messaging.EnhancedIntentService
|
|
public Intent getStartCommandIntent(Intent intent) {
|
|
return ServiceStarter.getInstance().getMessagingEvent();
|
|
}
|
|
|
|
@Override // com.google.firebase.messaging.EnhancedIntentService
|
|
public void handleIntent(Intent intent) {
|
|
String action = intent.getAction();
|
|
if (ACTION_REMOTE_INTENT.equals(action) || ACTION_DIRECT_BOOT_REMOTE_INTENT.equals(action)) {
|
|
handleMessageIntent(intent);
|
|
} else {
|
|
if (ACTION_NEW_TOKEN.equals(action)) {
|
|
onNewToken(intent.getStringExtra("token"));
|
|
return;
|
|
}
|
|
Log.d(Constants.TAG, "Unknown intent action: " + intent.getAction());
|
|
}
|
|
}
|
|
|
|
public void onDeletedMessages() {
|
|
}
|
|
|
|
public void onMessageReceived(RemoteMessage remoteMessage) {
|
|
}
|
|
|
|
public void onMessageSent(String str) {
|
|
}
|
|
|
|
public void onNewToken(String str) {
|
|
}
|
|
|
|
public void onSendError(String str, Exception exc) {
|
|
}
|
|
|
|
public void setRpcForTesting(Rpc rpc) {
|
|
this.rpc = rpc;
|
|
}
|
|
}
|