package android.support.v4.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 java.util.ArrayList; import java.util.HashMap; import java.util.Set; public 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 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<IntentFilter>> mReceivers = new HashMap(); private LocalBroadcastManager(Context paramContext) { this.mAppContext = paramContext; this.mHandler = new Handler(paramContext.getMainLooper()) { public void handleMessage(Message paramAnonymousMessage) { switch (paramAnonymousMessage.what) { default: super.handleMessage(paramAnonymousMessage); } for (;;) { return; LocalBroadcastManager.this.executePendingBroadcasts(); } } }; } private void executePendingBroadcasts() { for (;;) { int j; synchronized (this.mReceivers) { int i = this.mPendingBroadcasts.size(); if (i <= 0) { return; } BroadcastRecord[] arrayOfBroadcastRecord = new BroadcastRecord[i]; this.mPendingBroadcasts.toArray(arrayOfBroadcastRecord); this.mPendingBroadcasts.clear(); j = 0; if (j >= arrayOfBroadcastRecord.length) { continue; } BroadcastRecord localBroadcastRecord = arrayOfBroadcastRecord[j]; int k = 0; if (k < localBroadcastRecord.receivers.size()) { ((ReceiverRecord)localBroadcastRecord.receivers.get(k)).receiver.onReceive(this.mAppContext, localBroadcastRecord.intent); k++; } } j++; } } public static LocalBroadcastManager getInstance(Context paramContext) { synchronized (mLock) { if (mInstance == null) { mInstance = new LocalBroadcastManager(paramContext.getApplicationContext()); } LocalBroadcastManager localLocalBroadcastManager = mInstance; return localLocalBroadcastManager; } } public void registerReceiver(BroadcastReceiver paramBroadcastReceiver, IntentFilter paramIntentFilter) { synchronized (this.mReceivers) { ReceiverRecord localReceiverRecord = new ReceiverRecord(paramIntentFilter, paramBroadcastReceiver); ArrayList localArrayList1 = (ArrayList)this.mReceivers.get(paramBroadcastReceiver); if (localArrayList1 == null) { localArrayList1 = new ArrayList(1); this.mReceivers.put(paramBroadcastReceiver, localArrayList1); } localArrayList1.add(paramIntentFilter); for (int i = 0; i < paramIntentFilter.countActions(); i++) { String str = paramIntentFilter.getAction(i); ArrayList localArrayList2 = (ArrayList)this.mActions.get(str); if (localArrayList2 == null) { localArrayList2 = new ArrayList(1); this.mActions.put(str, localArrayList2); } localArrayList2.add(localReceiverRecord); } return; } } public boolean sendBroadcast(Intent paramIntent) { boolean bool; for (;;) { int j; int m; ArrayList localArrayList2; int k; synchronized (this.mReceivers) { String str1 = paramIntent.getAction(); String str2 = paramIntent.resolveTypeIfNeeded(this.mAppContext.getContentResolver()); Uri localUri = paramIntent.getData(); String str3 = paramIntent.getScheme(); Set localSet = paramIntent.getCategories(); if ((0x8 & paramIntent.getFlags()) == 0) { break label508; } i = 1; if (i != 0) { Log.v("LocalBroadcastManager", "Resolving type " + str2 + " scheme " + str3 + " of intent " + paramIntent); } ArrayList localArrayList1 = (ArrayList)this.mActions.get(paramIntent.getAction()); if (localArrayList1 != null) { if (i == 0) { continue; } Log.v("LocalBroadcastManager", "Action list: " + localArrayList1); continue; if (j >= localArrayList1.size()) { break label542; } ReceiverRecord localReceiverRecord = (ReceiverRecord)localArrayList1.get(j); if (i != 0) { Log.v("LocalBroadcastManager", "Matching against filter " + localReceiverRecord.filter); } if (localReceiverRecord.broadcasting) { if (i != 0) { Log.v("LocalBroadcastManager", " Filter's target already added"); } } else { m = localReceiverRecord.filter.match(str1, str2, str3, localUri, localSet, "LocalBroadcastManager"); if (m >= 0) { if (i != 0) { Log.v("LocalBroadcastManager", " Filter matched! match=0x" + Integer.toHexString(m)); } if (localArrayList2 == null) { localArrayList2 = new ArrayList(); } localArrayList2.add(localReceiverRecord); localReceiverRecord.broadcasting = true; } } } } continue; label508: int i = 0; continue; String str4 = "action"; continue; str4 = "category"; continue; str4 = "data"; continue; str4 = "type"; continue; label542: if (localArrayList2 != null) { k = 0; } } return bool; } public void sendBroadcastSync(Intent paramIntent) { if (sendBroadcast(paramIntent)) { executePendingBroadcasts(); } } public void unregisterReceiver(BroadcastReceiver paramBroadcastReceiver) { for (;;) { int j; int k; synchronized (this.mReceivers) { ArrayList localArrayList1 = (ArrayList)this.mReceivers.remove(paramBroadcastReceiver); if (localArrayList1 != null) { break label169; } break label168; if (i < localArrayList1.size()) { IntentFilter localIntentFilter = (IntentFilter)localArrayList1.get(i); j = 0; if (j >= localIntentFilter.countActions()) { break label187; } String str = localIntentFilter.getAction(j); ArrayList localArrayList2 = (ArrayList)this.mActions.get(str); if (localArrayList2 == null) { break label181; } k = 0; if (k < localArrayList2.size()) { if (((ReceiverRecord)localArrayList2.get(k)).receiver != paramBroadcastReceiver) { break label175; } localArrayList2.remove(k); k--; break label175; } if (localArrayList2.size() > 0) { break label181; } this.mActions.remove(str); break label181; } } label168: return; label169: int i = 0; continue; label175: k++; continue; label181: j++; continue; label187: i++; } } private static class BroadcastRecord { final Intent intent; final ArrayList<LocalBroadcastManager.ReceiverRecord> receivers; BroadcastRecord(Intent paramIntent, ArrayList<LocalBroadcastManager.ReceiverRecord> paramArrayList) { this.intent = paramIntent; this.receivers = paramArrayList; } } private static class ReceiverRecord { boolean broadcasting; final IntentFilter filter; final BroadcastReceiver receiver; ReceiverRecord(IntentFilter paramIntentFilter, BroadcastReceiver paramBroadcastReceiver) { this.filter = paramIntentFilter; this.receiver = paramBroadcastReceiver; } public String toString() { StringBuilder localStringBuilder = new StringBuilder(128); localStringBuilder.append("Receiver{"); localStringBuilder.append(this.receiver); localStringBuilder.append(" filter="); localStringBuilder.append(this.filter); localStringBuilder.append("}"); return localStringBuilder.toString(); } } } /* Location: F:\neembuu\Research\android_apps\output_jar.jar * Qualified Name: android.support.v4.content.LocalBroadcastManager * JD-Core Version: 0.7.0.1 */