diff options
8 files changed, 76 insertions, 28 deletions
diff --git a/core/java/android/app/StatusBarManager.java b/core/java/android/app/StatusBarManager.java index 8987bc0289b7..23c4166da104 100644 --- a/core/java/android/app/StatusBarManager.java +++ b/core/java/android/app/StatusBarManager.java @@ -73,15 +73,16 @@ public class StatusBarManager {      public static final int DISABLE2_QUICK_SETTINGS = 1;      public static final int DISABLE2_SYSTEM_ICONS = 1 << 1;      public static final int DISABLE2_NOTIFICATION_SHADE = 1 << 2; +    public static final int DISABLE2_GLOBAL_ACTIONS = 1 << 3;      public static final int DISABLE2_NONE = 0x00000000;      public static final int DISABLE2_MASK = DISABLE2_QUICK_SETTINGS | DISABLE2_SYSTEM_ICONS -            | DISABLE2_NOTIFICATION_SHADE; +            | DISABLE2_NOTIFICATION_SHADE | DISABLE2_GLOBAL_ACTIONS;      @IntDef(flag = true,              value = {DISABLE2_NONE, DISABLE2_MASK, DISABLE2_QUICK_SETTINGS, DISABLE2_SYSTEM_ICONS, -                    DISABLE2_NOTIFICATION_SHADE}) +                    DISABLE2_NOTIFICATION_SHADE, DISABLE2_GLOBAL_ACTIONS})      @Retention(RetentionPolicy.SOURCE)      public @interface Disable2Flags {} diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/GlobalActions.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/GlobalActions.java index 1f633da4644a..95ff13b45fb9 100644 --- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/GlobalActions.java +++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/GlobalActions.java @@ -29,6 +29,9 @@ public interface GlobalActions extends Plugin {      default void showShutdownUi(boolean isReboot, String reason) {      } +    default void destroy() { +    } +      @ProvidesInterface(version = GlobalActionsManager.VERSION)      public interface GlobalActionsManager {          int VERSION = 1; diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsComponent.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsComponent.java index 09a08f09fc9a..f06cda0f787a 100644 --- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsComponent.java +++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsComponent.java @@ -31,6 +31,7 @@ import android.os.ServiceManager;  public class GlobalActionsComponent extends SystemUI implements Callbacks, GlobalActionsManager { +    private GlobalActions mPlugin;      private Extension<GlobalActions> mExtension;      private IStatusBarService mBarService; @@ -41,10 +42,19 @@ public class GlobalActionsComponent extends SystemUI implements Callbacks, Globa          mExtension = Dependency.get(ExtensionController.class).newExtension(GlobalActions.class)                  .withPlugin(GlobalActions.class)                  .withDefault(() -> new GlobalActionsImpl(mContext)) +                .withCallback(this::onExtensionCallback)                  .build(); +        mPlugin = mExtension.get();          SysUiServiceProvider.getComponent(mContext, CommandQueue.class).addCallbacks(this);      } +    private void onExtensionCallback(GlobalActions newPlugin) { +        if (mPlugin != null) { +            mPlugin.destroy(); +        } +        mPlugin = newPlugin; +    } +      @Override      public void handleShowShutdownUi(boolean isReboot, String reason) {          mExtension.get().showShutdownUi(isReboot, reason); diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java index 189badfc42fc..d82f9cd44e4a 100644 --- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java +++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java @@ -16,27 +16,6 @@ package com.android.systemui.globalactions;  import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN; -import com.android.internal.R; -import com.android.internal.colorextraction.ColorExtractor; -import com.android.internal.colorextraction.ColorExtractor.GradientColors; -import com.android.internal.logging.MetricsLogger; -import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.internal.util.EmergencyAffordanceManager; -import com.android.internal.telephony.TelephonyIntents; -import com.android.internal.telephony.TelephonyProperties; -import com.android.internal.widget.LockPatternUtils; -import com.android.systemui.Dependency; -import com.android.systemui.HardwareUiLayout; -import com.android.systemui.Interpolators; -import com.android.systemui.colorextraction.SysuiColorExtractor; -import com.android.systemui.plugins.GlobalActions.GlobalActionsManager; -import com.android.systemui.statusbar.notification.NotificationUtils; -import com.android.systemui.statusbar.phone.ScrimController; -import com.android.systemui.volume.VolumeDialogMotion.LogAccelerateInterpolator; -import com.android.systemui.volume.VolumeDialogMotion.LogDecelerateInterpolator; - -import android.animation.ValueAnimator; -import android.animation.ValueAnimator.AnimatorUpdateListener;  import android.app.ActivityManager;  import android.app.Dialog;  import android.app.WallpaperManager; @@ -69,7 +48,6 @@ import android.telephony.TelephonyManager;  import android.text.TextUtils;  import android.util.ArraySet;  import android.util.Log; -import android.util.MathUtils;  import android.view.ContextThemeWrapper;  import android.view.LayoutInflater;  import android.view.View; @@ -86,7 +64,23 @@ import android.widget.ImageView.ScaleType;  import android.widget.LinearLayout;  import android.widget.TextView; +import com.android.internal.R; +import com.android.internal.colorextraction.ColorExtractor; +import com.android.internal.colorextraction.ColorExtractor.GradientColors;  import com.android.internal.colorextraction.drawable.GradientDrawable; +import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.nano.MetricsProto.MetricsEvent; +import com.android.internal.telephony.TelephonyIntents; +import com.android.internal.telephony.TelephonyProperties; +import com.android.internal.util.EmergencyAffordanceManager; +import com.android.internal.widget.LockPatternUtils; +import com.android.systemui.Dependency; +import com.android.systemui.HardwareUiLayout; +import com.android.systemui.Interpolators; +import com.android.systemui.colorextraction.SysuiColorExtractor; +import com.android.systemui.plugins.GlobalActions.GlobalActionsManager; +import com.android.systemui.statusbar.phone.ScrimController; +import com.android.systemui.volume.VolumeDialogMotion.LogAccelerateInterpolator;  import java.util.ArrayList;  import java.util.List; @@ -96,7 +90,8 @@ import java.util.List;   * may show depending on whether the keyguard is showing, and whether the device   * is provisioned.   */ -class GlobalActionsDialog implements DialogInterface.OnDismissListener, DialogInterface.OnClickListener { +class GlobalActionsDialog implements DialogInterface.OnDismissListener, +        DialogInterface.OnClickListener {      static public final String SYSTEM_DIALOG_REASON_KEY = "reason";      static public final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions"; @@ -195,6 +190,14 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener, DialogIn          }      } +    /** +     * Dismiss the global actions dialog, if it's currently shown +     */ +    public void dismissDialog() { +        mHandler.removeMessages(MESSAGE_DISMISS); +        mHandler.sendEmptyMessage(MESSAGE_DISMISS); +    } +      private void awakenIfNecessary() {          if (mDreamManager != null) {              try { diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java index 2cf230c8e12d..35634374d5dd 100644 --- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java +++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java @@ -14,12 +14,12 @@  package com.android.systemui.globalactions; +import static android.app.StatusBarManager.DISABLE2_GLOBAL_ACTIONS; +  import android.app.Dialog;  import android.app.KeyguardManager; -import android.app.WallpaperColors;  import android.app.WallpaperManager;  import android.content.Context; -import android.graphics.Color;  import android.graphics.Point;  import android.view.ViewGroup;  import android.view.Window; @@ -32,12 +32,14 @@ import com.android.internal.colorextraction.ColorExtractor.GradientColors;  import com.android.internal.colorextraction.drawable.GradientDrawable;  import com.android.settingslib.Utils;  import com.android.systemui.Dependency; +import com.android.systemui.SysUiServiceProvider;  import com.android.systemui.colorextraction.SysuiColorExtractor;  import com.android.systemui.plugins.GlobalActions; +import com.android.systemui.statusbar.CommandQueue;  import com.android.systemui.statusbar.policy.DeviceProvisionedController;  import com.android.systemui.statusbar.policy.KeyguardMonitor; -public class GlobalActionsImpl implements GlobalActions { +public class GlobalActionsImpl implements GlobalActions, CommandQueue.Callbacks {      private static final float SHUTDOWN_SCRIM_ALPHA = 0.95f; @@ -45,15 +47,23 @@ public class GlobalActionsImpl implements GlobalActions {      private final KeyguardMonitor mKeyguardMonitor;      private final DeviceProvisionedController mDeviceProvisionedController;      private GlobalActionsDialog mGlobalActions; +    private boolean mDisabled;      public GlobalActionsImpl(Context context) {          mContext = context;          mKeyguardMonitor = Dependency.get(KeyguardMonitor.class);          mDeviceProvisionedController = Dependency.get(DeviceProvisionedController.class); +        SysUiServiceProvider.getComponent(context, CommandQueue.class).addCallbacks(this); +    } + +    @Override +    public void destroy() { +        SysUiServiceProvider.getComponent(mContext, CommandQueue.class).removeCallbacks(this);      }      @Override      public void showGlobalActions(GlobalActionsManager manager) { +        if (mDisabled) return;          if (mGlobalActions == null) {              mGlobalActions = new GlobalActionsDialog(mContext, manager);          } @@ -107,4 +117,14 @@ public class GlobalActionsImpl implements GlobalActions {          d.show();      } + +    @Override +    public void disable(int state1, int state2, boolean animate) { +        final boolean disabled = (state2 & DISABLE2_GLOBAL_ACTIONS) != 0; +        if (disabled == mDisabled) return; +        mDisabled = disabled; +        if (disabled && mGlobalActions != null) { +            mGlobalActions.dismissDialog(); +        } +    }  } diff --git a/services/core/java/com/android/server/policy/GlobalActions.java b/services/core/java/com/android/server/policy/GlobalActions.java index 342ec4b79fed..7a2e630cfdac 100644 --- a/services/core/java/com/android/server/policy/GlobalActions.java +++ b/services/core/java/com/android/server/policy/GlobalActions.java @@ -58,6 +58,9 @@ class GlobalActions implements GlobalActionsListener {      public void showDialog(boolean keyguardShowing, boolean deviceProvisioned) {          if (DEBUG) Slog.d(TAG, "showDialog " + keyguardShowing + " " + deviceProvisioned); +        if (mStatusBarInternal.isGlobalActionsDisabled()) { +            return; +        }          mKeyguardShowing = keyguardShowing;          mDeviceProvisioned = deviceProvisioned;          mShowing = true; diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java index 0884678478f6..b07fe98d806e 100644 --- a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java +++ b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java @@ -77,6 +77,7 @@ public interface StatusBarManagerInternal {      void setCurrentUser(int newUserId); +    boolean isGlobalActionsDisabled();      void setGlobalActionsListener(GlobalActionsListener listener);      void showGlobalActions(); diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java index 83fd54952efc..b10d5e92cec9 100644 --- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java +++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java @@ -16,6 +16,8 @@  package com.android.server.statusbar; +import static android.app.StatusBarManager.DISABLE2_GLOBAL_ACTIONS; +  import android.app.ActivityThread;  import android.app.StatusBarManager;  import android.content.ComponentName; @@ -362,6 +364,11 @@ public class StatusBarManagerService extends IStatusBarService.Stub {          }          @Override +        public boolean isGlobalActionsDisabled() { +            return (mDisabled2 & DISABLE2_GLOBAL_ACTIONS) != 0; +        } + +        @Override          public void setGlobalActionsListener(GlobalActionsListener listener) {              mGlobalActionListener = listener;              mGlobalActionListener.onStatusBarConnectedChanged(mBar != null);  |