From c673fbc2c2eb37037dae9a8c55b1588ab398a116 Mon Sep 17 00:00:00 2001 From: Yoshinori Hirano Date: Fri, 14 Apr 2017 11:29:38 +0900 Subject: [PATCH] Collapse QS panel forcibly after dismissing Keyguard The Quick Settings panel is not collapsed when the screen lock is unlocked by using TileService APIs (unlockAndRun() and startActivityAndCollapse()). To fix this issue, the QS panel should be collapsed forcibly when startActivityAndCollapse() is called. Bug: 38252721 Test: manual - install an app which calls startActivityAndCollapse() inside the runnable passed to unlockAndRun(). Author: Yuta Yamada Change-Id: I82d1df368d5024283f58ee5cc2d42559aac28467 --- .../SystemUI/src/com/android/systemui/qs/QSHost.java | 1 + .../SystemUI/src/com/android/systemui/qs/QSTileHost.java | 5 +++++ .../com/android/systemui/qs/external/TileServices.java | 4 ++-- .../com/android/systemui/statusbar/phone/StatusBar.java | 9 +++++++++ 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSHost.java b/packages/SystemUI/src/com/android/systemui/qs/QSHost.java index 8596b578f0307..84524a62adfa9 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSHost.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSHost.java @@ -24,6 +24,7 @@ import java.util.Collection; public interface QSHost { void warn(String message, Throwable t); void collapsePanels(); + void forceCollapsePanels(); void openPanels(); Context getContext(); Collection getTiles(); diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java b/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java index 933054138a8ad..02937d8457bc4 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java @@ -142,6 +142,11 @@ public class QSTileHost implements QSHost, Tunable, PluginListener { mStatusBar.postAnimateCollapsePanels(); } + @Override + public void forceCollapsePanels() { + mStatusBar.postAnimateForceCollapsePanels(); + } + @Override public void openPanels() { mStatusBar.postAnimateOpenPanels(); diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java b/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java index d2f3bb6030776..943a17644b55b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java +++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java @@ -204,7 +204,7 @@ public class TileServices extends IQSService.Stub { if (customTile != null) { verifyCaller(customTile); customTile.onDialogShown(); - mHost.collapsePanels(); + mHost.forceCollapsePanels(); mServices.get(customTile).setShowingDialog(true); } } @@ -224,7 +224,7 @@ public class TileServices extends IQSService.Stub { CustomTile customTile = getTileForToken(token); if (customTile != null) { verifyCaller(customTile); - mHost.collapsePanels(); + mHost.forceCollapsePanels(); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index d2ab823be674f..ccb6438fec84a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -2878,6 +2878,15 @@ public class StatusBar extends SystemUI implements DemoMode, mHandler.post(mAnimateCollapsePanels); } + public void postAnimateForceCollapsePanels() { + mHandler.post(new Runnable() { + @Override + public void run() { + animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE, true /* force */); + } + }); + } + public void postAnimateOpenPanels() { mHandler.sendEmptyMessage(MSG_OPEN_SETTINGS_PANEL); }