summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Monk <jmonk@google.com>2017-03-23 15:40:21 -0400
committergitbuildkicker <android-build@google.com>2017-03-23 16:36:44 -0700
commit86a48238ef8247390b93678878f2369bfcdfe05f (patch)
tree884a8ffdbb032ccc8bcc681def4753d0fdcee65f
parentd9fd9ec5f8b8b0729b412654102c818617449d62 (diff)
downloadbase-studio-3.0.tar.gz
Don't inflate LegacyGlobalActions until its shownstudio-3.0gradle_3.0.0
It has some buggy code that depends on it being shown directly after being instantiated, so make sure we don't instantiate it until we need it. Test: See bug, its complicated Change-Id: Ic4863f53abaeb2d2070258a7f65b214376fb2889 Fixes: 36556777 (cherry picked from commit ed507a3f10255c3d130412b915cde84d62191665)
-rw-r--r--services/core/java/com/android/server/policy/GlobalActions.java15
1 files changed, 12 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/policy/GlobalActions.java b/services/core/java/com/android/server/policy/GlobalActions.java
index 17e5e9f0fe69..7e0c8e300737 100644
--- a/services/core/java/com/android/server/policy/GlobalActions.java
+++ b/services/core/java/com/android/server/policy/GlobalActions.java
@@ -29,9 +29,10 @@ class GlobalActions implements GlobalActionsListener {
private static final boolean DEBUG = false;
private final Context mContext;
- private final LegacyGlobalActions mLegacyGlobalActions;
private final StatusBarManagerInternal mStatusBarInternal;
private final Handler mHandler;
+ private final WindowManagerFuncs mWindowManagerFuncs;
+ private LegacyGlobalActions mLegacyGlobalActions;
private boolean mKeyguardShowing;
private boolean mDeviceProvisioned;
private boolean mStatusBarConnected;
@@ -40,12 +41,17 @@ class GlobalActions implements GlobalActionsListener {
public GlobalActions(Context context, WindowManagerFuncs windowManagerFuncs) {
mContext = context;
mHandler = new Handler();
- mLegacyGlobalActions = new LegacyGlobalActions(context, windowManagerFuncs,
- this::onGlobalActionsDismissed);
+ mWindowManagerFuncs = windowManagerFuncs;
mStatusBarInternal = LocalServices.getService(StatusBarManagerInternal.class);
mStatusBarInternal.setGlobalActionsListener(this);
}
+ private void ensureLegacyCreated() {
+ if (mLegacyGlobalActions != null) return;
+ mLegacyGlobalActions = new LegacyGlobalActions(mContext, mWindowManagerFuncs,
+ this::onGlobalActionsDismissed);
+ }
+
public void showDialog(boolean keyguardShowing, boolean deviceProvisioned) {
if (DEBUG) Slog.d(TAG, "showDialog " + keyguardShowing + " " + deviceProvisioned);
mKeyguardShowing = keyguardShowing;
@@ -56,6 +62,7 @@ class GlobalActions implements GlobalActionsListener {
mHandler.postDelayed(mShowTimeout, 5000);
} else {
// SysUI isn't alive, show legacy menu.
+ ensureLegacyCreated();
mLegacyGlobalActions.showDialog(mKeyguardShowing, mDeviceProvisioned);
}
}
@@ -79,6 +86,7 @@ class GlobalActions implements GlobalActionsListener {
mStatusBarConnected = connected;
if (mShowing && !mStatusBarConnected) {
// Status bar died but we need to be showing global actions still, show the legacy.
+ ensureLegacyCreated();
mLegacyGlobalActions.showDialog(mKeyguardShowing, mDeviceProvisioned);
}
}
@@ -88,6 +96,7 @@ class GlobalActions implements GlobalActionsListener {
public void run() {
if (DEBUG) Slog.d(TAG, "Global actions timeout");
// We haven't heard from sysui, show the legacy dialog.
+ ensureLegacyCreated();
mLegacyGlobalActions.showDialog(mKeyguardShowing, mDeviceProvisioned);
}
};