diff options
author | Jason Monk <jmonk@google.com> | 2017-03-23 15:40:21 -0400 |
---|---|---|
committer | gitbuildkicker <android-build@google.com> | 2017-03-23 16:36:44 -0700 |
commit | 86a48238ef8247390b93678878f2369bfcdfe05f (patch) | |
tree | 884a8ffdbb032ccc8bcc681def4753d0fdcee65f | |
parent | d9fd9ec5f8b8b0729b412654102c818617449d62 (diff) | |
download | base-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.java | 15 |
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); } }; |