- Added realracing3-community.apk (71.57 MB) - Removed 32-bit support (armeabi-v7a) - Only includes arm64-v8a libraries - Decompiled source code included - Added README-community.md with analysis
295 lines
12 KiB
Java
295 lines
12 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.Message;
|
|
import androidx.annotation.NonNull;
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
import java.util.Set;
|
|
|
|
@Deprecated
|
|
/* loaded from: classes.dex */
|
|
public final class LocalBroadcastManager {
|
|
private static final boolean DEBUG = false;
|
|
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 Context mAppContext;
|
|
private final Handler mHandler;
|
|
private final HashMap<BroadcastReceiver, ArrayList<ReceiverRecord>> mReceivers = new HashMap<>();
|
|
private final HashMap<String, ArrayList<ReceiverRecord>> mActions = new HashMap<>();
|
|
private final ArrayList<BroadcastRecord> mPendingBroadcasts = new ArrayList<>();
|
|
|
|
public static final class ReceiverRecord {
|
|
boolean broadcasting;
|
|
boolean dead;
|
|
final IntentFilter filter;
|
|
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();
|
|
}
|
|
}
|
|
|
|
public static final class BroadcastRecord {
|
|
final Intent intent;
|
|
final ArrayList<ReceiverRecord> receivers;
|
|
|
|
public BroadcastRecord(Intent intent, ArrayList<ReceiverRecord> arrayList) {
|
|
this.intent = intent;
|
|
this.receivers = arrayList;
|
|
}
|
|
}
|
|
|
|
@NonNull
|
|
public static LocalBroadcastManager getInstance(@NonNull Context context) {
|
|
LocalBroadcastManager localBroadcastManager;
|
|
synchronized (mLock) {
|
|
try {
|
|
if (mInstance == null) {
|
|
mInstance = new LocalBroadcastManager(context.getApplicationContext());
|
|
}
|
|
localBroadcastManager = mInstance;
|
|
} catch (Throwable th) {
|
|
throw th;
|
|
}
|
|
}
|
|
return localBroadcastManager;
|
|
}
|
|
|
|
private LocalBroadcastManager(Context context) {
|
|
this.mAppContext = context;
|
|
this.mHandler = new Handler(context.getMainLooper()) { // from class: androidx.localbroadcastmanager.content.LocalBroadcastManager.1
|
|
@Override // android.os.Handler
|
|
public void handleMessage(Message message) {
|
|
if (message.what == 1) {
|
|
LocalBroadcastManager.this.executePendingBroadcasts();
|
|
} else {
|
|
super.handleMessage(message);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
public void registerReceiver(@NonNull BroadcastReceiver broadcastReceiver, @NonNull IntentFilter intentFilter) {
|
|
synchronized (this.mReceivers) {
|
|
try {
|
|
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);
|
|
}
|
|
} catch (Throwable th) {
|
|
throw th;
|
|
}
|
|
}
|
|
}
|
|
|
|
public void unregisterReceiver(@NonNull BroadcastReceiver broadcastReceiver) {
|
|
synchronized (this.mReceivers) {
|
|
try {
|
|
ArrayList<ReceiverRecord> remove = this.mReceivers.remove(broadcastReceiver);
|
|
if (remove == null) {
|
|
return;
|
|
}
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} catch (Throwable th) {
|
|
throw th;
|
|
}
|
|
}
|
|
}
|
|
|
|
public boolean sendBroadcast(@NonNull Intent intent) {
|
|
int i;
|
|
String str;
|
|
ArrayList arrayList;
|
|
ArrayList<ReceiverRecord> arrayList2;
|
|
String str2;
|
|
boolean z;
|
|
synchronized (this.mReceivers) {
|
|
try {
|
|
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 = true;
|
|
boolean z3 = (intent.getFlags() & 8) != 0;
|
|
if (z3) {
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.append("Resolving type ");
|
|
sb.append(resolveTypeIfNeeded);
|
|
sb.append(" scheme ");
|
|
sb.append(scheme);
|
|
sb.append(" of intent ");
|
|
sb.append(intent);
|
|
}
|
|
ArrayList<ReceiverRecord> arrayList3 = this.mActions.get(intent.getAction());
|
|
if (arrayList3 != null) {
|
|
if (z3) {
|
|
StringBuilder sb2 = new StringBuilder();
|
|
sb2.append("Action list: ");
|
|
sb2.append(arrayList3);
|
|
}
|
|
ArrayList arrayList4 = null;
|
|
int i2 = 0;
|
|
while (i2 < arrayList3.size()) {
|
|
ReceiverRecord receiverRecord = arrayList3.get(i2);
|
|
if (z3) {
|
|
StringBuilder sb3 = new StringBuilder();
|
|
sb3.append("Matching against filter ");
|
|
sb3.append(receiverRecord.filter);
|
|
}
|
|
if (receiverRecord.broadcasting) {
|
|
i = i2;
|
|
arrayList2 = arrayList3;
|
|
str = action;
|
|
str2 = resolveTypeIfNeeded;
|
|
arrayList = arrayList4;
|
|
z = z2;
|
|
} else {
|
|
IntentFilter intentFilter = receiverRecord.filter;
|
|
String str3 = action;
|
|
String str4 = resolveTypeIfNeeded;
|
|
i = i2;
|
|
str = action;
|
|
arrayList = arrayList4;
|
|
arrayList2 = arrayList3;
|
|
str2 = resolveTypeIfNeeded;
|
|
z = z2;
|
|
int match = intentFilter.match(str3, str4, scheme, data, categories, TAG);
|
|
if (match >= 0) {
|
|
if (z3) {
|
|
StringBuilder sb4 = new StringBuilder();
|
|
sb4.append(" Filter matched! match=0x");
|
|
sb4.append(Integer.toHexString(match));
|
|
}
|
|
arrayList4 = arrayList == null ? new ArrayList() : arrayList;
|
|
arrayList4.add(receiverRecord);
|
|
receiverRecord.broadcasting = z;
|
|
i2 = i + 1;
|
|
z2 = z;
|
|
action = str;
|
|
arrayList3 = arrayList2;
|
|
resolveTypeIfNeeded = str2;
|
|
} else if (z3) {
|
|
String str5 = match != -4 ? match != -3 ? match != -2 ? match != -1 ? "unknown reason" : "type" : "data" : "action" : "category";
|
|
StringBuilder sb5 = new StringBuilder();
|
|
sb5.append(" Filter did not match: ");
|
|
sb5.append(str5);
|
|
}
|
|
}
|
|
arrayList4 = arrayList;
|
|
i2 = i + 1;
|
|
z2 = z;
|
|
action = str;
|
|
arrayList3 = arrayList2;
|
|
resolveTypeIfNeeded = str2;
|
|
}
|
|
ArrayList arrayList5 = arrayList4;
|
|
boolean z4 = z2;
|
|
if (arrayList5 != null) {
|
|
for (int i3 = 0; i3 < arrayList5.size(); i3++) {
|
|
((ReceiverRecord) arrayList5.get(i3)).broadcasting = false;
|
|
}
|
|
this.mPendingBroadcasts.add(new BroadcastRecord(intent, arrayList5));
|
|
if (!this.mHandler.hasMessages(z4 ? 1 : 0)) {
|
|
this.mHandler.sendEmptyMessage(z4 ? 1 : 0);
|
|
}
|
|
return z4;
|
|
}
|
|
}
|
|
return false;
|
|
} catch (Throwable th) {
|
|
throw th;
|
|
}
|
|
}
|
|
}
|
|
|
|
public void sendBroadcastSync(@NonNull Intent intent) {
|
|
if (sendBroadcast(intent)) {
|
|
executePendingBroadcasts();
|
|
}
|
|
}
|
|
|
|
public void executePendingBroadcasts() {
|
|
int size;
|
|
BroadcastRecord[] broadcastRecordArr;
|
|
while (true) {
|
|
synchronized (this.mReceivers) {
|
|
try {
|
|
size = this.mPendingBroadcasts.size();
|
|
if (size <= 0) {
|
|
return;
|
|
}
|
|
broadcastRecordArr = new BroadcastRecord[size];
|
|
this.mPendingBroadcasts.toArray(broadcastRecordArr);
|
|
this.mPendingBroadcasts.clear();
|
|
} catch (Throwable th) {
|
|
throw th;
|
|
}
|
|
}
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|