Merge "Add guards around unbind" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
e2b3bf94c5
@@ -40,6 +40,7 @@ import androidx.annotation.VisibleForTesting;
|
||||
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
|
||||
import java.util.NoSuchElementException;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
@@ -204,9 +205,14 @@ public class TileLifecycleManager extends BroadcastReceiver implements
|
||||
if (DEBUG) Log.d(TAG, "Unbinding service " + mIntent + " " + mUser);
|
||||
// Give it another chance next time it needs to be bound, out of kindness.
|
||||
mBindTryCount = 0;
|
||||
mWrapper = null;
|
||||
freeWrapper();
|
||||
if (mIsBound) {
|
||||
mContext.unbindService(this);
|
||||
try {
|
||||
mContext.unbindService(this);
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Failed to unbind service "
|
||||
+ mIntent.getComponent().flattenToShortString(), e);
|
||||
}
|
||||
mIsBound = false;
|
||||
}
|
||||
}
|
||||
@@ -290,7 +296,9 @@ public class TileLifecycleManager extends BroadcastReceiver implements
|
||||
|
||||
private void handleDeath() {
|
||||
if (mWrapper == null) return;
|
||||
mWrapper = null;
|
||||
freeWrapper();
|
||||
// Clearly not bound anymore
|
||||
mIsBound = false;
|
||||
if (!mBound) return;
|
||||
if (DEBUG) Log.d(TAG, "handleDeath");
|
||||
if (checkComponentState()) {
|
||||
@@ -472,6 +480,18 @@ public class TileLifecycleManager extends BroadcastReceiver implements
|
||||
return mToken;
|
||||
}
|
||||
|
||||
private void freeWrapper() {
|
||||
if (mWrapper != null) {
|
||||
try {
|
||||
mWrapper.asBinder().unlinkToDeath(this, 0);
|
||||
} catch (NoSuchElementException e) {
|
||||
Log.w(TAG, "Trying to unlink not linked recipient for component"
|
||||
+ mIntent.getComponent().flattenToShortString());
|
||||
}
|
||||
mWrapper = null;
|
||||
}
|
||||
}
|
||||
|
||||
public interface TileChangeListener {
|
||||
void onTileChanged(ComponentName tile);
|
||||
}
|
||||
|
||||
@@ -77,10 +77,10 @@ public class TileLifecycleManagerTest extends SysuiTestCase {
|
||||
|
||||
// Stub.asInterface will just return itself.
|
||||
when(mMockTileService.queryLocalInterface(anyString())).thenReturn(mMockTileService);
|
||||
when(mMockTileService.asBinder()).thenReturn(mMockTileService);
|
||||
|
||||
mContext.addMockService(mTileServiceComponentName, mMockTileService);
|
||||
|
||||
|
||||
mTileServiceIntent = new Intent().setComponent(mTileServiceComponentName);
|
||||
mUser = new UserHandle(UserHandle.myUserId());
|
||||
mThread = new HandlerThread("TestThread");
|
||||
|
||||
Reference in New Issue
Block a user