Skip to content
Snippets Groups Projects
Commit 7eb46295 authored by Fabian Kozynski's avatar Fabian Kozynski Committed by Android (Google) Code Review
Browse files

Merge "Prevent removing a BR that has been removed"

parents 88b3a034 bb846712
No related branches found
No related tags found
No related merge requests found
......@@ -42,6 +42,7 @@ import com.android.systemui.broadcast.BroadcastDispatcher;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* Manages the lifecycle of a TileService.
......@@ -84,7 +85,8 @@ public class TileLifecycleManager extends BroadcastReceiver implements
private int mBindTryCount;
private int mBindRetryDelay = DEFAULT_BIND_RETRY_DELAY;
private boolean mBound;
boolean mReceiverRegistered;
private AtomicBoolean mPackageReceiverRegistered = new AtomicBoolean(false);
private AtomicBoolean mUserReceiverRegistered = new AtomicBoolean(false);
private boolean mUnbindImmediate;
private TileChangeListener mChangeListener;
// Return value from bindServiceAsUser, determines whether safe to call unbind.
......@@ -274,7 +276,7 @@ public class TileLifecycleManager extends BroadcastReceiver implements
public void handleDestroy() {
if (DEBUG) Log.d(TAG, "handleDestroy");
if (mReceiverRegistered) {
if (mPackageReceiverRegistered.get() || mUserReceiverRegistered.get()) {
stopPackageListening();
}
}
......@@ -310,17 +312,31 @@ public class TileLifecycleManager extends BroadcastReceiver implements
IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
filter.addDataScheme("package");
mContext.registerReceiverAsUser(this, mUser, filter, null, mHandler);
try {
mPackageReceiverRegistered.set(true);
mContext.registerReceiverAsUser(this, mUser, filter, null, mHandler);
} catch (Exception ex) {
mPackageReceiverRegistered.set(false);
Log.e(TAG, "Could not register package receiver", ex);
}
filter = new IntentFilter(Intent.ACTION_USER_UNLOCKED);
mBroadcastDispatcher.registerReceiver(this, filter, mHandler, mUser);
mReceiverRegistered = true;
try {
mUserReceiverRegistered.set(true);
mBroadcastDispatcher.registerReceiver(this, filter, mHandler, mUser);
} catch (Exception ex) {
mUserReceiverRegistered.set(false);
Log.e(TAG, "Could not register unlock receiver", ex);
}
}
private void stopPackageListening() {
if (DEBUG) Log.d(TAG, "stopPackageListening");
mContext.unregisterReceiver(this);
mBroadcastDispatcher.unregisterReceiver(this);
mReceiverRegistered = false;
if (mUserReceiverRegistered.compareAndSet(true, false)) {
mBroadcastDispatcher.unregisterReceiver(this);
}
if (mPackageReceiverRegistered.compareAndSet(true, false)) {
mContext.unregisterReceiver(this);
}
}
public void setTileChangeListener(TileChangeListener changeListener) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment