From 7555f335f4a96ac667786b206a1da1dbfd4e1ca8 Mon Sep 17 00:00:00 2001 From: Winson Date: Wed, 15 Jun 2016 12:31:03 -0700 Subject: [PATCH] Fixing issue with screen pinning screen not showing for secondary users. - Catch the exception when removing a view that is not yet attached. This is not an issue because we are in the process of attaching it for the first time anyways. - Ensure that we post the calls from the secondary user in the main thread for the system user. Especially since this calls through to add the view for the new screen pinning window. Bug: 29341417 Change-Id: If0e29a77ddb67426115f1d5d9f1adb580a1f07df --- .../com/android/systemui/recents/RecentsSystemUser.java | 9 +++++++-- .../android/systemui/recents/ScreenPinningRequest.java | 7 ++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsSystemUser.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsSystemUser.java index 913da185c40d3..3921a20cffd17 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsSystemUser.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsSystemUser.java @@ -30,6 +30,7 @@ import com.android.systemui.recents.events.EventBus; import com.android.systemui.recents.events.activity.DockedTopTaskEvent; import com.android.systemui.recents.events.activity.RecentsActivityStartingEvent; import com.android.systemui.recents.events.ui.RecentsDrawnEvent; +import com.android.systemui.recents.misc.ForegroundThread; /** * An implementation of the system user's Recents interface to be called remotely by secondary @@ -78,12 +79,16 @@ public class RecentsSystemUser extends IRecentsSystemUserCallbacks.Stub { @Override public void updateRecentsVisibility(boolean visible) { - mImpl.onVisibilityChanged(mContext, visible); + ForegroundThread.getHandler().post(() -> { + mImpl.onVisibilityChanged(mContext, visible); + }); } @Override public void startScreenPinning(int taskId) { - mImpl.onStartScreenPinning(mContext, taskId); + ForegroundThread.getHandler().post(() -> { + mImpl.onStartScreenPinning(mContext, taskId); + }); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java b/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java index 992b13fbfc242..b961055c6fed0 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java +++ b/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java @@ -72,7 +72,12 @@ public class ScreenPinningRequest implements View.OnClickListener { } public void showPrompt(int taskId, boolean allowCancel) { - clearPrompt(); + try { + clearPrompt(); + } catch (IllegalArgumentException e) { + // If the call to show the prompt fails due to the request window not already being + // attached, then just ignore the error since we will be re-adding it below. + } this.taskId = taskId;