Initial import of ADIF API reverse-engineering toolkit
This commit is contained in:
@@ -0,0 +1,180 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user