From 27cf146361125d1233c487ec215d5d794f5dde17 Mon Sep 17 00:00:00 2001 From: Benjamin Franz Date: Thu, 23 Apr 2015 19:36:42 +0100 Subject: Add status bar flag to disable quick settings Bug: 20331928 Change-Id: I79dc7f2c9e64245bdeeea3916d339985a8b17f92 --- core/java/android/app/StatusBarManager.java | 12 +++++++++-- .../systemui/statusbar/phone/PhoneStatusBar.java | 24 +++++++++++++++++----- .../devicepolicy/DevicePolicyManagerService.java | 9 ++++++-- 3 files changed, 36 insertions(+), 9 deletions(-) diff --git a/core/java/android/app/StatusBarManager.java b/core/java/android/app/StatusBarManager.java index 207519c4325d..31d1ab7b92ac 100644 --- a/core/java/android/app/StatusBarManager.java +++ b/core/java/android/app/StatusBarManager.java @@ -63,12 +63,20 @@ public class StatusBarManager { | DISABLE_SYSTEM_INFO | DISABLE_RECENT | DISABLE_HOME | DISABLE_BACK | DISABLE_CLOCK | DISABLE_SEARCH; + /** + * Flag to disable quick settings. + * + * Setting this flag disables quick settings completely, but does not disable expanding the + * notification shade. + */ + public static final int DISABLE2_QUICK_SETTINGS = 0x00000001; + public static final int DISABLE2_NONE = 0x00000000; - public static final int DISABLE2_MASK = 0x00000000; + public static final int DISABLE2_MASK = DISABLE2_QUICK_SETTINGS; @IntDef(flag = true, - value = {DISABLE2_NONE, DISABLE2_MASK}) + value = {DISABLE2_NONE, DISABLE2_MASK, DISABLE2_QUICK_SETTINGS}) @Retention(RetentionPolicy.SOURCE) public @interface Disable2Flags {} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index 6b1758951ee7..0f421ba07b19 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -1293,13 +1293,20 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, updateClearAll(); updateEmptyShadeView(); - // Disable QS if device not provisioned. - // If the user switcher is simple then disable QS during setup because - // the user intends to use the lock screen user switcher, QS in not needed. + updateQsExpansionEnabled(); + mShadeUpdates.check(); + } + + /** + * Disable QS if device not provisioned. + * If the user switcher is simple then disable QS during setup because + * the user intends to use the lock screen user switcher, QS in not needed. + */ + private void updateQsExpansionEnabled() { mNotificationPanel.setQsExpansionEnabled(isDeviceProvisioned() && (mUserSetup || mUserSwitcherController == null - || !mUserSwitcherController.isSimpleUserSwitcher())); - mShadeUpdates.check(); + || !mUserSwitcherController.isSimpleUserSwitcher()) + && ((mDisabled2 & StatusBarManager.DISABLE2_QUICK_SETTINGS) == 0)); } private void updateNotificationShadeForChildren() { @@ -1732,6 +1739,9 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, flagdbg.append(((diff1 & StatusBarManager.DISABLE_CLOCK) != 0) ? "* " : " "); flagdbg.append(((state1 & StatusBarManager.DISABLE_SEARCH) != 0) ? "SEARCH" : "search"); flagdbg.append(((diff1 & StatusBarManager.DISABLE_SEARCH) != 0) ? "* " : " "); + flagdbg.append(((state2 & StatusBarManager.DISABLE2_QUICK_SETTINGS) != 0) ? "QUICK_SETTINGS" + : "quick_settings"); + flagdbg.append(((diff2 & StatusBarManager.DISABLE2_QUICK_SETTINGS) != 0) ? "* " : " "); flagdbg.append(">"); Log.d(TAG, flagdbg.toString()); @@ -1780,6 +1790,10 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, (state1 & StatusBarManager.DISABLE_NOTIFICATION_ALERTS) != 0; mHeadsUpObserver.onChange(true); } + + if ((diff2 & StatusBarManager.DISABLE2_QUICK_SETTINGS) != 0) { + updateQsExpansionEnabled(); + } } @Override diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 31d7f7444cfd..bdfe3bb54702 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -191,6 +191,9 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { StatusBarManager.DISABLE_NOTIFICATION_ALERTS | StatusBarManager.DISABLE_SEARCH; + private static final int STATUS_BAR_DISABLE2_MASK = + StatusBarManager.DISABLE2_QUICK_SETTINGS; + private static final Set DEVICE_OWNER_USER_RESTRICTIONS; static { DEVICE_OWNER_USER_RESTRICTIONS = new HashSet(); @@ -6022,8 +6025,10 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { IStatusBarService statusBarService = IStatusBarService.Stub.asInterface( ServiceManager.checkService(Context.STATUS_BAR_SERVICE)); if (statusBarService != null) { - int flags = enabled ? StatusBarManager.DISABLE_NONE : STATUS_BAR_DISABLE_MASK; - statusBarService.disableForUser(flags, mToken, mContext.getPackageName(), userId); + int flags1 = enabled ? StatusBarManager.DISABLE_NONE : STATUS_BAR_DISABLE_MASK; + int flags2 = enabled ? StatusBarManager.DISABLE2_NONE : STATUS_BAR_DISABLE2_MASK; + statusBarService.disableForUser(flags1, mToken, mContext.getPackageName(), userId); + statusBarService.disable2ForUser(flags2, mToken, mContext.getPackageName(), userId); } } catch (RemoteException e) { Slog.e(LOG_TAG, "Failed to disable the status bar", e); -- cgit v1.2.3-59-g8ed1b