discord-jadx/app/src/main/java/androidx/localbroadcastmanager/content/LocalBroadcastManager.java

258 lines
10 KiB
Java

package androidx.localbroadcastmanager.content;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import androidx.annotation.NonNull;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
public final class LocalBroadcastManager {
private static final boolean DEBUG = false;
public static final int MSG_EXEC_PENDING_BROADCASTS = 1;
private static final String TAG = "LocalBroadcastManager";
private static LocalBroadcastManager mInstance;
private static final Object mLock = new Object();
private final HashMap<String, ArrayList<ReceiverRecord>> mActions = new HashMap<>();
private final Context mAppContext;
private final Handler mHandler;
private final ArrayList<BroadcastRecord> mPendingBroadcasts = new ArrayList<>();
private final HashMap<BroadcastReceiver, ArrayList<ReceiverRecord>> mReceivers = new HashMap<>();
/* renamed from: androidx.localbroadcastmanager.content.LocalBroadcastManager$1 reason: invalid class name */
public class AnonymousClass1 extends Handler {
public AnonymousClass1(Looper looper) {
super(looper);
}
@Override // android.os.Handler
public void handleMessage(Message message) {
if (message.what != 1) {
super.handleMessage(message);
} else {
LocalBroadcastManager.this.executePendingBroadcasts();
}
}
}
public static final class BroadcastRecord {
public final Intent intent;
public final ArrayList<ReceiverRecord> receivers;
public BroadcastRecord(Intent intent, ArrayList<ReceiverRecord> arrayList) {
this.intent = intent;
this.receivers = arrayList;
}
}
public static final class ReceiverRecord {
public boolean broadcasting;
public boolean dead;
public final IntentFilter filter;
public final BroadcastReceiver receiver;
public ReceiverRecord(IntentFilter intentFilter, BroadcastReceiver broadcastReceiver) {
this.filter = intentFilter;
this.receiver = broadcastReceiver;
}
public String toString() {
StringBuilder sb = new StringBuilder(128);
sb.append("Receiver{");
sb.append(this.receiver);
sb.append(" filter=");
sb.append(this.filter);
if (this.dead) {
sb.append(" DEAD");
}
sb.append("}");
return sb.toString();
}
}
private LocalBroadcastManager(Context context) {
this.mAppContext = context;
this.mHandler = new AnonymousClass1(context.getMainLooper());
}
@NonNull
public static LocalBroadcastManager getInstance(@NonNull Context context) {
LocalBroadcastManager localBroadcastManager;
synchronized (mLock) {
if (mInstance == null) {
mInstance = new LocalBroadcastManager(context.getApplicationContext());
}
localBroadcastManager = mInstance;
}
return localBroadcastManager;
}
public void executePendingBroadcasts() {
int size;
BroadcastRecord[] broadcastRecordArr;
while (true) {
synchronized (this.mReceivers) {
size = this.mPendingBroadcasts.size();
if (size > 0) {
broadcastRecordArr = new BroadcastRecord[size];
this.mPendingBroadcasts.toArray(broadcastRecordArr);
this.mPendingBroadcasts.clear();
} else {
return;
}
}
for (int i = 0; i < size; i++) {
BroadcastRecord broadcastRecord = broadcastRecordArr[i];
int size2 = broadcastRecord.receivers.size();
for (int i2 = 0; i2 < size2; i2++) {
ReceiverRecord receiverRecord = broadcastRecord.receivers.get(i2);
if (!receiverRecord.dead) {
receiverRecord.receiver.onReceive(this.mAppContext, broadcastRecord.intent);
}
}
}
}
}
public void registerReceiver(@NonNull BroadcastReceiver broadcastReceiver, @NonNull IntentFilter intentFilter) {
synchronized (this.mReceivers) {
ReceiverRecord receiverRecord = new ReceiverRecord(intentFilter, broadcastReceiver);
ArrayList<ReceiverRecord> arrayList = this.mReceivers.get(broadcastReceiver);
if (arrayList == null) {
arrayList = new ArrayList<>(1);
this.mReceivers.put(broadcastReceiver, arrayList);
}
arrayList.add(receiverRecord);
for (int i = 0; i < intentFilter.countActions(); i++) {
String action = intentFilter.getAction(i);
ArrayList<ReceiverRecord> arrayList2 = this.mActions.get(action);
if (arrayList2 == null) {
arrayList2 = new ArrayList<>(1);
this.mActions.put(action, arrayList2);
}
arrayList2.add(receiverRecord);
}
}
}
public boolean sendBroadcast(@NonNull Intent intent) {
String str;
ArrayList<ReceiverRecord> arrayList;
String str2;
int i;
ArrayList arrayList2;
synchronized (this.mReceivers) {
String action = intent.getAction();
String resolveTypeIfNeeded = intent.resolveTypeIfNeeded(this.mAppContext.getContentResolver());
Uri data = intent.getData();
String scheme = intent.getScheme();
Set<String> categories = intent.getCategories();
boolean z2 = (intent.getFlags() & 8) != 0;
if (z2) {
Log.v(TAG, "Resolving type " + resolveTypeIfNeeded + " scheme " + scheme + " of intent " + intent);
}
ArrayList<ReceiverRecord> arrayList3 = this.mActions.get(intent.getAction());
if (arrayList3 != null) {
if (z2) {
Log.v(TAG, "Action list: " + arrayList3);
}
ArrayList arrayList4 = null;
int i2 = 0;
while (i2 < arrayList3.size()) {
ReceiverRecord receiverRecord = arrayList3.get(i2);
if (z2) {
Log.v(TAG, "Matching against filter " + receiverRecord.filter);
}
if (receiverRecord.broadcasting) {
if (z2) {
Log.v(TAG, " Filter's target already added");
}
i = i2;
arrayList = arrayList3;
str2 = action;
str = resolveTypeIfNeeded;
arrayList2 = arrayList4;
} else {
i = i2;
str2 = action;
arrayList2 = arrayList4;
arrayList = arrayList3;
str = resolveTypeIfNeeded;
int match = receiverRecord.filter.match(action, resolveTypeIfNeeded, scheme, data, categories, TAG);
if (match >= 0) {
if (z2) {
Log.v(TAG, " Filter matched! match=0x" + Integer.toHexString(match));
}
arrayList4 = arrayList2 == null ? new ArrayList() : arrayList2;
arrayList4.add(receiverRecord);
receiverRecord.broadcasting = true;
i2 = i + 1;
action = str2;
arrayList3 = arrayList;
resolveTypeIfNeeded = str;
} else if (z2) {
Log.v(TAG, " Filter did not match: " + (match != -4 ? match != -3 ? match != -2 ? match != -1 ? "unknown reason" : "type" : "data" : "action" : "category"));
}
}
arrayList4 = arrayList2;
i2 = i + 1;
action = str2;
arrayList3 = arrayList;
resolveTypeIfNeeded = str;
}
if (arrayList4 != null) {
for (int i3 = 0; i3 < arrayList4.size(); i3++) {
((ReceiverRecord) arrayList4.get(i3)).broadcasting = false;
}
this.mPendingBroadcasts.add(new BroadcastRecord(intent, arrayList4));
if (!this.mHandler.hasMessages(1)) {
this.mHandler.sendEmptyMessage(1);
}
return true;
}
}
return false;
}
}
public void sendBroadcastSync(@NonNull Intent intent) {
if (sendBroadcast(intent)) {
executePendingBroadcasts();
}
}
public void unregisterReceiver(@NonNull BroadcastReceiver broadcastReceiver) {
synchronized (this.mReceivers) {
ArrayList<ReceiverRecord> remove = this.mReceivers.remove(broadcastReceiver);
if (remove != null) {
for (int size = remove.size() - 1; size >= 0; size--) {
ReceiverRecord receiverRecord = remove.get(size);
receiverRecord.dead = true;
for (int i = 0; i < receiverRecord.filter.countActions(); i++) {
String action = receiverRecord.filter.getAction(i);
ArrayList<ReceiverRecord> arrayList = this.mActions.get(action);
if (arrayList != null) {
for (int size2 = arrayList.size() - 1; size2 >= 0; size2--) {
ReceiverRecord receiverRecord2 = arrayList.get(size2);
if (receiverRecord2.receiver == broadcastReceiver) {
receiverRecord2.dead = true;
arrayList.remove(size2);
}
}
if (arrayList.size() <= 0) {
this.mActions.remove(action);
}
}
}
}
}
}
}
}