From 6d21e0d8d2da2a94e47af8b8f0b93a50972ab480 Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Wed, 25 May 2016 11:37:47 -0400 Subject: [PATCH] QS API: Handle return value from bindServiceAsUser To avoid crashes better. Change-Id: I72e74729fbc0b1400c21e1ebc165b565ecd13fba Fixes: 28721139 --- .../systemui/qs/external/TileLifecycleManager.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java b/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java index 212f1790fd2d0..16b11580a176d 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java +++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java @@ -81,6 +81,8 @@ public class TileLifecycleManager extends BroadcastReceiver implements private IQSService mService; private boolean mUnbindImmediate; private TileChangeListener mChangeListener; + // Return value from bindServiceAsUser, determines whether safe to call unbind. + private boolean mIsBound; public TileLifecycleManager(Handler handler, Context context, Intent intent, UserHandle user) { mContext = context; @@ -132,7 +134,7 @@ public class TileLifecycleManager extends BroadcastReceiver implements } if (DEBUG) Log.d(TAG, "Binding service " + mIntent + " " + mUser); mBindTryCount++; - mContext.bindServiceAsUser(mIntent, this, + mIsBound = mContext.bindServiceAsUser(mIntent, this, Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE_WHILE_AWAKE, mUser); } else { @@ -140,7 +142,10 @@ public class TileLifecycleManager extends BroadcastReceiver implements // Give it another chance next time it needs to be bound, out of kindness. mBindTryCount = 0; mWrapper = null; - mContext.unbindService(this); + if (mIsBound) { + mContext.unbindService(this); + mIsBound = false; + } } }