Loading packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java +24 −8 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -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. Loading Loading @@ -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(); } } Loading Loading @@ -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"); 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); try { mUserReceiverRegistered.set(true); mBroadcastDispatcher.registerReceiver(this, filter, mHandler, mUser); mReceiverRegistered = true; } 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); if (mUserReceiverRegistered.compareAndSet(true, false)) { mBroadcastDispatcher.unregisterReceiver(this); mReceiverRegistered = false; } if (mPackageReceiverRegistered.compareAndSet(true, false)) { mContext.unregisterReceiver(this); } } public void setTileChangeListener(TileChangeListener changeListener) { Loading Loading
packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java +24 −8 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -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. Loading Loading @@ -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(); } } Loading Loading @@ -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"); 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); try { mUserReceiverRegistered.set(true); mBroadcastDispatcher.registerReceiver(this, filter, mHandler, mUser); mReceiverRegistered = true; } 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); if (mUserReceiverRegistered.compareAndSet(true, false)) { mBroadcastDispatcher.unregisterReceiver(this); mReceiverRegistered = false; } if (mPackageReceiverRegistered.compareAndSet(true, false)) { mContext.unregisterReceiver(this); } } public void setTileChangeListener(TileChangeListener changeListener) { Loading