Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9851a8da authored by Charles He's avatar Charles He
Browse files

StatusBar: add DISABLE2_GLOBAL_ACTIONS.

We add a new StatusBarManager flag to disable the global actions dialog
(a.k.a. the power button menu), which is required in certain kiosk mode
scenarios.

Bug: 65813398
Test: runtest systemui
Test: manual, by using a modified version of TestDPC and
      DevicePolicyManagerService

Change-Id: Ib7da2f4837281e98e558afcc30be8bae6f2e179a
parent 93d703a4
Loading
Loading
Loading
Loading
+3 −2
Original line number Original line Diff line number Diff line
@@ -73,15 +73,16 @@ public class StatusBarManager {
    public static final int DISABLE2_QUICK_SETTINGS = 1;
    public static final int DISABLE2_QUICK_SETTINGS = 1;
    public static final int DISABLE2_SYSTEM_ICONS = 1 << 1;
    public static final int DISABLE2_SYSTEM_ICONS = 1 << 1;
    public static final int DISABLE2_NOTIFICATION_SHADE = 1 << 2;
    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_NONE = 0x00000000;


    public static final int DISABLE2_MASK = DISABLE2_QUICK_SETTINGS | DISABLE2_SYSTEM_ICONS
    public static final int DISABLE2_MASK = DISABLE2_QUICK_SETTINGS | DISABLE2_SYSTEM_ICONS
            | DISABLE2_NOTIFICATION_SHADE;
            | DISABLE2_NOTIFICATION_SHADE | DISABLE2_GLOBAL_ACTIONS;


    @IntDef(flag = true,
    @IntDef(flag = true,
            value = {DISABLE2_NONE, DISABLE2_MASK, DISABLE2_QUICK_SETTINGS, DISABLE2_SYSTEM_ICONS,
            value = {DISABLE2_NONE, DISABLE2_MASK, DISABLE2_QUICK_SETTINGS, DISABLE2_SYSTEM_ICONS,
                    DISABLE2_NOTIFICATION_SHADE})
                    DISABLE2_NOTIFICATION_SHADE, DISABLE2_GLOBAL_ACTIONS})
    @Retention(RetentionPolicy.SOURCE)
    @Retention(RetentionPolicy.SOURCE)
    public @interface Disable2Flags {}
    public @interface Disable2Flags {}


+3 −0
Original line number Original line Diff line number Diff line
@@ -29,6 +29,9 @@ public interface GlobalActions extends Plugin {
    default void showShutdownUi(boolean isReboot, String reason) {
    default void showShutdownUi(boolean isReboot, String reason) {
    }
    }


    default void destroy() {
    }

    @ProvidesInterface(version = GlobalActionsManager.VERSION)
    @ProvidesInterface(version = GlobalActionsManager.VERSION)
    public interface GlobalActionsManager {
    public interface GlobalActionsManager {
        int VERSION = 1;
        int VERSION = 1;
+10 −0
Original line number Original line Diff line number Diff line
@@ -31,6 +31,7 @@ import android.os.ServiceManager;


public class GlobalActionsComponent extends SystemUI implements Callbacks, GlobalActionsManager {
public class GlobalActionsComponent extends SystemUI implements Callbacks, GlobalActionsManager {


    private GlobalActions mPlugin;
    private Extension<GlobalActions> mExtension;
    private Extension<GlobalActions> mExtension;
    private IStatusBarService mBarService;
    private IStatusBarService mBarService;


@@ -41,10 +42,19 @@ public class GlobalActionsComponent extends SystemUI implements Callbacks, Globa
        mExtension = Dependency.get(ExtensionController.class).newExtension(GlobalActions.class)
        mExtension = Dependency.get(ExtensionController.class).newExtension(GlobalActions.class)
                .withPlugin(GlobalActions.class)
                .withPlugin(GlobalActions.class)
                .withDefault(() -> new GlobalActionsImpl(mContext))
                .withDefault(() -> new GlobalActionsImpl(mContext))
                .withCallback(this::onExtensionCallback)
                .build();
                .build();
        mPlugin = mExtension.get();
        SysUiServiceProvider.getComponent(mContext, CommandQueue.class).addCallbacks(this);
        SysUiServiceProvider.getComponent(mContext, CommandQueue.class).addCallbacks(this);
    }
    }


    private void onExtensionCallback(GlobalActions newPlugin) {
        if (mPlugin != null) {
            mPlugin.destroy();
        }
        mPlugin = newPlugin;
    }

    @Override
    @Override
    public void handleShowShutdownUi(boolean isReboot, String reason) {
    public void handleShowShutdownUi(boolean isReboot, String reason) {
        mExtension.get().showShutdownUi(isReboot, reason);
        mExtension.get().showShutdownUi(isReboot, reason);
+26 −23
Original line number Original line Diff line number Diff line
@@ -16,27 +16,6 @@ package com.android.systemui.globalactions;


import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN;
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.ActivityManager;
import android.app.Dialog;
import android.app.Dialog;
import android.app.WallpaperManager;
import android.app.WallpaperManager;
@@ -69,7 +48,6 @@ import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.text.TextUtils;
import android.util.ArraySet;
import android.util.ArraySet;
import android.util.Log;
import android.util.Log;
import android.util.MathUtils;
import android.view.ContextThemeWrapper;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View;
@@ -86,7 +64,23 @@ import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.LinearLayout;
import android.widget.TextView;
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.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.ArrayList;
import java.util.List;
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
 * may show depending on whether the keyguard is showing, and whether the device
 * is provisioned.
 * 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_KEY = "reason";
    static public final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";
    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() {
    private void awakenIfNecessary() {
        if (mDreamManager != null) {
        if (mDreamManager != null) {
            try {
            try {
+23 −3
Original line number Original line Diff line number Diff line
@@ -14,12 +14,12 @@


package com.android.systemui.globalactions;
package com.android.systemui.globalactions;


import static android.app.StatusBarManager.DISABLE2_GLOBAL_ACTIONS;

import android.app.Dialog;
import android.app.Dialog;
import android.app.KeyguardManager;
import android.app.KeyguardManager;
import android.app.WallpaperColors;
import android.app.WallpaperManager;
import android.app.WallpaperManager;
import android.content.Context;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Point;
import android.graphics.Point;
import android.view.ViewGroup;
import android.view.ViewGroup;
import android.view.Window;
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.internal.colorextraction.drawable.GradientDrawable;
import com.android.settingslib.Utils;
import com.android.settingslib.Utils;
import com.android.systemui.Dependency;
import com.android.systemui.Dependency;
import com.android.systemui.SysUiServiceProvider;
import com.android.systemui.colorextraction.SysuiColorExtractor;
import com.android.systemui.colorextraction.SysuiColorExtractor;
import com.android.systemui.plugins.GlobalActions;
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.DeviceProvisionedController;
import com.android.systemui.statusbar.policy.KeyguardMonitor;
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;
    private static final float SHUTDOWN_SCRIM_ALPHA = 0.95f;


@@ -45,15 +47,23 @@ public class GlobalActionsImpl implements GlobalActions {
    private final KeyguardMonitor mKeyguardMonitor;
    private final KeyguardMonitor mKeyguardMonitor;
    private final DeviceProvisionedController mDeviceProvisionedController;
    private final DeviceProvisionedController mDeviceProvisionedController;
    private GlobalActionsDialog mGlobalActions;
    private GlobalActionsDialog mGlobalActions;
    private boolean mDisabled;


    public GlobalActionsImpl(Context context) {
    public GlobalActionsImpl(Context context) {
        mContext = context;
        mContext = context;
        mKeyguardMonitor = Dependency.get(KeyguardMonitor.class);
        mKeyguardMonitor = Dependency.get(KeyguardMonitor.class);
        mDeviceProvisionedController = Dependency.get(DeviceProvisionedController.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
    @Override
    public void showGlobalActions(GlobalActionsManager manager) {
    public void showGlobalActions(GlobalActionsManager manager) {
        if (mDisabled) return;
        if (mGlobalActions == null) {
        if (mGlobalActions == null) {
            mGlobalActions = new GlobalActionsDialog(mContext, manager);
            mGlobalActions = new GlobalActionsDialog(mContext, manager);
        }
        }
@@ -107,4 +117,14 @@ public class GlobalActionsImpl implements GlobalActions {


        d.show();
        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();
        }
    }
}
}
Loading