summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/StatusBarManager.java33
-rw-r--r--core/java/com/android/internal/statusbar/IStatusBar.aidl2
-rw-r--r--core/java/com/android/internal/statusbar/IStatusBarService.aidl2
-rw-r--r--packages/SystemUI/src/com/android/systemui/EventLogTags.logtags2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java120
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java2
-rw-r--r--services/core/java/com/android/server/statusbar/StatusBarManagerService.java74
9 files changed, 163 insertions, 82 deletions
diff --git a/core/java/android/app/StatusBarManager.java b/core/java/android/app/StatusBarManager.java
index ce5306f..207519c 100644
--- a/core/java/android/app/StatusBarManager.java
+++ b/core/java/android/app/StatusBarManager.java
@@ -17,6 +17,7 @@
package android.app;
+import android.annotation.IntDef;
import android.content.Context;
import android.os.Binder;
import android.os.RemoteException;
@@ -27,6 +28,9 @@ import android.view.View;
import com.android.internal.statusbar.IStatusBarService;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
/**
* Allows an app to control the status bar.
*
@@ -59,6 +63,15 @@ public class StatusBarManager {
| DISABLE_SYSTEM_INFO | DISABLE_RECENT | DISABLE_HOME | DISABLE_BACK | DISABLE_CLOCK
| DISABLE_SEARCH;
+ public static final int DISABLE2_NONE = 0x00000000;
+
+ public static final int DISABLE2_MASK = 0x00000000;
+
+ @IntDef(flag = true,
+ value = {DISABLE2_NONE, DISABLE2_MASK})
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface Disable2Flags {}
+
public static final int NAVIGATION_HINT_BACK_ALT = 1 << 0;
public static final int NAVIGATION_HINT_IME_SHOWN = 1 << 1;
@@ -103,7 +116,25 @@ public class StatusBarManager {
throw new RuntimeException(ex);
}
}
-
+
+ /**
+ * Disable additional status bar features. Pass the bitwise-or of the DISABLE2_* flags.
+ * To re-enable everything, pass {@link #DISABLE_NONE}.
+ *
+ * Warning: Only pass DISABLE2_* flags into this function, do not use DISABLE_* flags.
+ */
+ public void disable2(@Disable2Flags int what) {
+ try {
+ final IStatusBarService svc = getService();
+ if (svc != null) {
+ svc.disable2(what, mToken, mContext.getPackageName());
+ }
+ } catch (RemoteException ex) {
+ // system process is dead anyway.
+ throw new RuntimeException(ex);
+ }
+ }
+
/**
* Expand the notifications panel.
*/
diff --git a/core/java/com/android/internal/statusbar/IStatusBar.aidl b/core/java/com/android/internal/statusbar/IStatusBar.aidl
index 2b0d244..9f99f62 100644
--- a/core/java/com/android/internal/statusbar/IStatusBar.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBar.aidl
@@ -24,7 +24,7 @@ oneway interface IStatusBar
{
void setIcon(int index, in StatusBarIcon icon);
void removeIcon(int index);
- void disable(int state);
+ void disable(int state1, int state2);
void animateExpandNotificationsPanel();
void animateExpandSettingsPanel();
void animateCollapsePanels();
diff --git a/core/java/com/android/internal/statusbar/IStatusBarService.aidl b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
index 87e0603..663c838 100644
--- a/core/java/com/android/internal/statusbar/IStatusBarService.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
@@ -28,6 +28,8 @@ interface IStatusBarService
void collapsePanels();
void disable(int what, IBinder token, String pkg);
void disableForUser(int what, IBinder token, String pkg, int userId);
+ void disable2(int what, IBinder token, String pkg);
+ void disable2ForUser(int what, IBinder token, String pkg, int userId);
void setIcon(String slot, String iconPackage, int iconId, int iconLevel, String contentDescription);
void setIconVisibility(String slot, boolean visible);
void removeIcon(String slot);
diff --git a/packages/SystemUI/src/com/android/systemui/EventLogTags.logtags b/packages/SystemUI/src/com/android/systemui/EventLogTags.logtags
index d2ce94b..a584cf6 100644
--- a/packages/SystemUI/src/com/android/systemui/EventLogTags.logtags
+++ b/packages/SystemUI/src/com/android/systemui/EventLogTags.logtags
@@ -5,7 +5,7 @@ option java_package com.android.systemui;
# ---------------------------
# PhoneStatusBar.java
# ---------------------------
-36000 sysui_statusbar_touch (type|1),(x|1),(y|1),(enabled|1)
+36000 sysui_statusbar_touch (type|1),(x|1),(y|1),(disable1|1),(disable2|1)
36001 sysui_heads_up_status (key|3),(visible|1)
36002 sysui_fullscreen_notification (key|3)
36003 sysui_heads_up_escalation (key|3)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
index e542264..7271469 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
@@ -581,7 +581,7 @@ public abstract class BaseStatusBar extends SystemUI implements
createAndAddWindows();
mSettingsObserver.onChange(false); // set up
- disable(switches[0], false /* animate */);
+ disable(switches[0], switches[6], false /* animate */);
setSystemUiVisibility(switches[1], 0xffffffff);
topAppWindowChanged(switches[2] != 0);
// StatusBarManagerService has a back up of IME token and it's restored here.
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
index 7aa9a90..4542054 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
@@ -83,7 +83,7 @@ public class CommandQueue extends IStatusBar.Stub {
public void updateIcon(String slot, int index, int viewIndex,
StatusBarIcon old, StatusBarIcon icon);
public void removeIcon(String slot, int index, int viewIndex);
- public void disable(int state, boolean animate);
+ public void disable(int state1, int state2, boolean animate);
public void animateExpandNotificationsPanel();
public void animateCollapsePanels(int flags);
public void animateExpandSettingsPanel();
@@ -127,10 +127,10 @@ public class CommandQueue extends IStatusBar.Stub {
}
}
- public void disable(int state) {
+ public void disable(int state1, int state2) {
synchronized (mList) {
mHandler.removeMessages(MSG_DISABLE);
- mHandler.obtainMessage(MSG_DISABLE, state, 0, null).sendToTarget();
+ mHandler.obtainMessage(MSG_DISABLE, state1, state2, null).sendToTarget();
}
}
@@ -304,7 +304,7 @@ public class CommandQueue extends IStatusBar.Stub {
break;
}
case MSG_DISABLE:
- mCallbacks.disable(msg.arg1, true /* animate */);
+ mCallbacks.disable(msg.arg1, msg.arg2, true /* animate */);
break;
case MSG_EXPAND_NOTIFICATIONS:
mCallbacks.animateExpandNotificationsPanel();
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 12c5589..6b17589 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -305,7 +305,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
ArrayList<Runnable> mPostCollapseRunnables = new ArrayList<>();
// for disabling the status bar
- int mDisabled = 0;
+ int mDisabled1 = 0;
+ int mDisabled2 = 0;
// tracking calls to View.setSystemUiVisibility()
int mSystemUiVisibility = View.SYSTEM_UI_FLAG_VISIBLE;
@@ -427,7 +428,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
}
};
- private int mDisabledUnmodified;
+ private int mDisabledUnmodified1;
+ private int mDisabledUnmodified2;
/** Keys of notifications currently visible to the user. */
private final ArraySet<String> mCurrentlyVisibleNotifications = new ArraySet<String>();
@@ -637,7 +639,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
mNavigationBarView =
(NavigationBarView) View.inflate(context, R.layout.navigation_bar, null);
- mNavigationBarView.setDisabledFlags(mDisabled);
+ mNavigationBarView.setDisabledFlags(mDisabled1);
mNavigationBarView.setBar(this);
mNavigationBarView.setOnVerticalChangedListener(
new NavigationBarView.OnVerticalChangedListener() {
@@ -1691,84 +1693,91 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
/**
* State is one or more of the DISABLE constants from StatusBarManager.
*/
- public void disable(int state, boolean animate) {
- mDisabledUnmodified = state;
- state = adjustDisableFlags(state);
- final int old = mDisabled;
- final int diff = state ^ old;
- mDisabled = state;
+ public void disable(int state1, int state2, boolean animate) {
+ mDisabledUnmodified1 = state1;
+ mDisabledUnmodified2 = state2;
+ state1 = adjustDisableFlags(state1);
+ final int old1 = mDisabled1;
+ final int diff1 = state1 ^ old1;
+ mDisabled1 = state1;
+
+ final int old2 = mDisabled2;
+ final int diff2 = state2 ^ old2;
+ mDisabled2 = state2;
if (DEBUG) {
- Log.d(TAG, String.format("disable: 0x%08x -> 0x%08x (diff: 0x%08x)",
- old, state, diff));
+ Log.d(TAG, String.format("disable1: 0x%08x -> 0x%08x (diff1: 0x%08x)",
+ old1, state1, diff1));
+ Log.d(TAG, String.format("disable2: 0x%08x -> 0x%08x (diff2: 0x%08x)",
+ old2, state2, diff2));
}
StringBuilder flagdbg = new StringBuilder();
flagdbg.append("disable: < ");
- flagdbg.append(((state & StatusBarManager.DISABLE_EXPAND) != 0) ? "EXPAND" : "expand");
- flagdbg.append(((diff & StatusBarManager.DISABLE_EXPAND) != 0) ? "* " : " ");
- flagdbg.append(((state & StatusBarManager.DISABLE_NOTIFICATION_ICONS) != 0) ? "ICONS" : "icons");
- flagdbg.append(((diff & StatusBarManager.DISABLE_NOTIFICATION_ICONS) != 0) ? "* " : " ");
- flagdbg.append(((state & StatusBarManager.DISABLE_NOTIFICATION_ALERTS) != 0) ? "ALERTS" : "alerts");
- flagdbg.append(((diff & StatusBarManager.DISABLE_NOTIFICATION_ALERTS) != 0) ? "* " : " ");
- flagdbg.append(((state & StatusBarManager.DISABLE_SYSTEM_INFO) != 0) ? "SYSTEM_INFO" : "system_info");
- flagdbg.append(((diff & StatusBarManager.DISABLE_SYSTEM_INFO) != 0) ? "* " : " ");
- flagdbg.append(((state & StatusBarManager.DISABLE_BACK) != 0) ? "BACK" : "back");
- flagdbg.append(((diff & StatusBarManager.DISABLE_BACK) != 0) ? "* " : " ");
- flagdbg.append(((state & StatusBarManager.DISABLE_HOME) != 0) ? "HOME" : "home");
- flagdbg.append(((diff & StatusBarManager.DISABLE_HOME) != 0) ? "* " : " ");
- flagdbg.append(((state & StatusBarManager.DISABLE_RECENT) != 0) ? "RECENT" : "recent");
- flagdbg.append(((diff & StatusBarManager.DISABLE_RECENT) != 0) ? "* " : " ");
- flagdbg.append(((state & StatusBarManager.DISABLE_CLOCK) != 0) ? "CLOCK" : "clock");
- flagdbg.append(((diff & StatusBarManager.DISABLE_CLOCK) != 0) ? "* " : " ");
- flagdbg.append(((state & StatusBarManager.DISABLE_SEARCH) != 0) ? "SEARCH" : "search");
- flagdbg.append(((diff & StatusBarManager.DISABLE_SEARCH) != 0) ? "* " : " ");
+ flagdbg.append(((state1 & StatusBarManager.DISABLE_EXPAND) != 0) ? "EXPAND" : "expand");
+ flagdbg.append(((diff1 & StatusBarManager.DISABLE_EXPAND) != 0) ? "* " : " ");
+ flagdbg.append(((state1 & StatusBarManager.DISABLE_NOTIFICATION_ICONS) != 0) ? "ICONS" : "icons");
+ flagdbg.append(((diff1 & StatusBarManager.DISABLE_NOTIFICATION_ICONS) != 0) ? "* " : " ");
+ flagdbg.append(((state1 & StatusBarManager.DISABLE_NOTIFICATION_ALERTS) != 0) ? "ALERTS" : "alerts");
+ flagdbg.append(((diff1 & StatusBarManager.DISABLE_NOTIFICATION_ALERTS) != 0) ? "* " : " ");
+ flagdbg.append(((state1 & StatusBarManager.DISABLE_SYSTEM_INFO) != 0) ? "SYSTEM_INFO" : "system_info");
+ flagdbg.append(((diff1 & StatusBarManager.DISABLE_SYSTEM_INFO) != 0) ? "* " : " ");
+ flagdbg.append(((state1 & StatusBarManager.DISABLE_BACK) != 0) ? "BACK" : "back");
+ flagdbg.append(((diff1 & StatusBarManager.DISABLE_BACK) != 0) ? "* " : " ");
+ flagdbg.append(((state1 & StatusBarManager.DISABLE_HOME) != 0) ? "HOME" : "home");
+ flagdbg.append(((diff1 & StatusBarManager.DISABLE_HOME) != 0) ? "* " : " ");
+ flagdbg.append(((state1 & StatusBarManager.DISABLE_RECENT) != 0) ? "RECENT" : "recent");
+ flagdbg.append(((diff1 & StatusBarManager.DISABLE_RECENT) != 0) ? "* " : " ");
+ flagdbg.append(((state1 & StatusBarManager.DISABLE_CLOCK) != 0) ? "CLOCK" : "clock");
+ 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(">");
Log.d(TAG, flagdbg.toString());
- if ((diff & StatusBarManager.DISABLE_SYSTEM_INFO) != 0) {
- if ((state & StatusBarManager.DISABLE_SYSTEM_INFO) != 0) {
+ if ((diff1 & StatusBarManager.DISABLE_SYSTEM_INFO) != 0) {
+ if ((state1 & StatusBarManager.DISABLE_SYSTEM_INFO) != 0) {
mIconController.hideSystemIconArea(animate);
} else {
mIconController.showSystemIconArea(animate);
}
}
- if ((diff & StatusBarManager.DISABLE_CLOCK) != 0) {
- boolean visible = (state & StatusBarManager.DISABLE_CLOCK) == 0;
+ if ((diff1 & StatusBarManager.DISABLE_CLOCK) != 0) {
+ boolean visible = (state1 & StatusBarManager.DISABLE_CLOCK) == 0;
mIconController.setClockVisibility(visible);
}
- if ((diff & StatusBarManager.DISABLE_EXPAND) != 0) {
- if ((state & StatusBarManager.DISABLE_EXPAND) != 0) {
+ if ((diff1 & StatusBarManager.DISABLE_EXPAND) != 0) {
+ if ((state1 & StatusBarManager.DISABLE_EXPAND) != 0) {
animateCollapsePanels();
}
}
- if ((diff & (StatusBarManager.DISABLE_HOME
+ if ((diff1 & (StatusBarManager.DISABLE_HOME
| StatusBarManager.DISABLE_RECENT
| StatusBarManager.DISABLE_BACK
| StatusBarManager.DISABLE_SEARCH)) != 0) {
// the nav bar will take care of these
- if (mNavigationBarView != null) mNavigationBarView.setDisabledFlags(state);
+ if (mNavigationBarView != null) mNavigationBarView.setDisabledFlags(state1);
- if ((state & StatusBarManager.DISABLE_RECENT) != 0) {
+ if ((state1 & StatusBarManager.DISABLE_RECENT) != 0) {
// close recents if it's visible
mHandler.removeMessages(MSG_HIDE_RECENT_APPS);
mHandler.sendEmptyMessage(MSG_HIDE_RECENT_APPS);
}
}
- if ((diff & StatusBarManager.DISABLE_NOTIFICATION_ICONS) != 0) {
- if ((state & StatusBarManager.DISABLE_NOTIFICATION_ICONS) != 0) {
+ if ((diff1 & StatusBarManager.DISABLE_NOTIFICATION_ICONS) != 0) {
+ if ((state1 & StatusBarManager.DISABLE_NOTIFICATION_ICONS) != 0) {
mIconController.hideNotificationIconArea(animate);
} else {
mIconController.showNotificationIconArea(animate);
}
}
- if ((diff & StatusBarManager.DISABLE_NOTIFICATION_ALERTS) != 0) {
+ if ((diff1 & StatusBarManager.DISABLE_NOTIFICATION_ALERTS) != 0) {
mDisableNotificationAlerts =
- (state & StatusBarManager.DISABLE_NOTIFICATION_ALERTS) != 0;
+ (state1 & StatusBarManager.DISABLE_NOTIFICATION_ALERTS) != 0;
mHeadsUpObserver.onChange(true);
}
}
@@ -1941,7 +1950,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
}
boolean panelsEnabled() {
- return (mDisabled & StatusBarManager.DISABLE_EXPAND) == 0;
+ return (mDisabled1 & StatusBarManager.DISABLE_EXPAND) == 0;
}
void makeExpandedVisible(boolean force) {
@@ -1961,7 +1970,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
visibilityChanged(true);
mWaitingForKeyguardExit = false;
- disable(mDisabledUnmodified, !force /* animate */);
+ disable(mDisabledUnmodified1, mDisabledUnmodified2, !force /* animate */);
setInteracting(StatusBarManager.WINDOW_STATUS_BAR, true);
}
@@ -2094,7 +2103,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
runPostCollapseRunnables();
setInteracting(StatusBarManager.WINDOW_STATUS_BAR, false);
showBouncer();
- disable(mDisabledUnmodified, true /* animate */);
+ disable(mDisabledUnmodified1, mDisabledUnmodified2, true /* animate */);
// Trimming will happen later if Keyguard is showing - doing it here might cause a jank in
// the bouncer appear animation.
@@ -2107,20 +2116,21 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
if (DEBUG_GESTURES) {
if (event.getActionMasked() != MotionEvent.ACTION_MOVE) {
EventLog.writeEvent(EventLogTags.SYSUI_STATUSBAR_TOUCH,
- event.getActionMasked(), (int) event.getX(), (int) event.getY(), mDisabled);
+ event.getActionMasked(), (int) event.getX(), (int) event.getY(),
+ mDisabled1, mDisabled2);
}
}
if (SPEW) {
- Log.d(TAG, "Touch: rawY=" + event.getRawY() + " event=" + event + " mDisabled="
- + mDisabled + " mTracking=" + mTracking);
+ Log.d(TAG, "Touch: rawY=" + event.getRawY() + " event=" + event + " mDisabled1="
+ + mDisabled1 + " mDisabled2=" + mDisabled2 + " mTracking=" + mTracking);
} else if (CHATTY) {
if (event.getAction() != MotionEvent.ACTION_MOVE) {
Log.d(TAG, String.format(
- "panel: %s at (%f, %f) mDisabled=0x%08x",
+ "panel: %s at (%f, %f) mDisabled1=0x%08x mDisabled2=0x%08x",
MotionEvent.actionToString(event.getAction()),
- event.getRawX(), event.getRawY(), mDisabled));
+ event.getRawX(), event.getRawY(), mDisabled1, mDisabled2));
}
}
@@ -2921,7 +2931,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
public boolean shouldDisableNavbarGestures() {
return !isDeviceProvisioned()
|| mExpandedVisible
- || (mDisabled & StatusBarManager.DISABLE_SEARCH) != 0;
+ || (mDisabled1 & StatusBarManager.DISABLE_SEARCH) != 0;
}
public void postStartSettingsActivity(final Intent intent, int delay) {
@@ -3235,7 +3245,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
startTime + fadeoutDuration
- StatusBarIconController.DEFAULT_TINT_ANIMATION_DURATION,
StatusBarIconController.DEFAULT_TINT_ANIMATION_DURATION);
- disable(mDisabledUnmodified, true /* animate */);
+ disable(mDisabledUnmodified1, mDisabledUnmodified2, true /* animate */);
}
public boolean isKeyguardFadingAway() {
@@ -3547,7 +3557,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
@Override
public void setBouncerShowing(boolean bouncerShowing) {
super.setBouncerShowing(bouncerShowing);
- disable(mDisabledUnmodified, true /* animate */);
+ disable(mDisabledUnmodified1, mDisabledUnmodified2, true /* animate */);
}
public void onScreenTurnedOff() {
@@ -3591,7 +3601,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
if ((time - mLastLockToAppLongPress) < LOCK_TO_APP_GESTURE_TOLERENCE) {
activityManager.stopLockTaskModeOnCurrent();
// When exiting refresh disabled flags.
- mNavigationBarView.setDisabledFlags(mDisabled, true);
+ mNavigationBarView.setDisabledFlags(mDisabled1, true);
} else if ((v.getId() == R.id.back)
&& !mNavigationBarView.getRecentsButton().isPressed()) {
// If we aren't pressing recents right now then they presses
@@ -3608,7 +3618,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
// should stop lock task.
activityManager.stopLockTaskModeOnCurrent();
// When exiting refresh disabled flags.
- mNavigationBarView.setDisabledFlags(mDisabled, true);
+ mNavigationBarView.setDisabledFlags(mDisabled1, true);
}
}
if (sendBackLongPress) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java
index dce695d..dda40d3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java
@@ -59,7 +59,7 @@ public class TvStatusBar extends BaseStatusBar {
}
@Override
- public void disable(int state, boolean animate) {
+ public void disable(int state1, int state2, boolean animate) {
}
@Override
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
index 184224b..5669f30 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
@@ -59,7 +59,8 @@ public class StatusBarManagerService extends IStatusBarService.Stub {
// for disabling the status bar
private final ArrayList<DisableRecord> mDisableRecords = new ArrayList<DisableRecord>();
private IBinder mSysUiVisToken = new Binder();
- private int mDisabled = 0;
+ private int mDisabled1 = 0;
+ private int mDisabled2 = 0;
private Object mLock = new Object();
// encompasses lights-out mode and other flags defined on View
@@ -74,12 +75,14 @@ public class StatusBarManagerService extends IStatusBarService.Stub {
private class DisableRecord implements IBinder.DeathRecipient {
int userId;
String pkg;
- int what;
+ int what1;
+ int what2;
IBinder token;
public void binderDied() {
Slog.i(TAG, "binder died for pkg=" + pkg);
disableForUser(0, token, pkg, userId);
+ disable2ForUser(0, token, pkg, userId);
token.unlinkToDeath(this, 0);
}
}
@@ -202,29 +205,57 @@ public class StatusBarManagerService extends IStatusBarService.Stub {
enforceStatusBar();
synchronized (mLock) {
- disableLocked(userId, what, token, pkg);
+ disableLocked(userId, what, token, pkg, 1);
}
}
- private void disableLocked(int userId, int what, IBinder token, String pkg) {
+ /**
+ * Disable additional status bar features. Pass the bitwise-or of the DISABLE2_* flags.
+ * To re-enable everything, pass {@link #DISABLE_NONE}.
+ *
+ * Warning: Only pass DISABLE2_* flags into this function, do not use DISABLE_* flags.
+ */
+ @Override
+ public void disable2(int what, IBinder token, String pkg) {
+ disableForUser(what, token, pkg, mCurrentUserId);
+ }
+
+ /**
+ * Disable additional status bar features for a given user. Pass the bitwise-or of the
+ * DISABLE2_* flags. To re-enable everything, pass {@link #DISABLE_NONE}.
+ *
+ * Warning: Only pass DISABLE2_* flags into this function, do not use DISABLE_* flags.
+ */
+ @Override
+ public void disable2ForUser(int what, IBinder token, String pkg, int userId) {
+ enforceStatusBar();
+
+ synchronized (mLock) {
+ disableLocked(userId, what, token, pkg, 2);
+ }
+ }
+
+ private void disableLocked(int userId, int what, IBinder token, String pkg, int whichFlag) {
// It's important that the the callback and the call to mBar get done
// in the same order when multiple threads are calling this function
// so they are paired correctly. The messages on the handler will be
// handled in the order they were enqueued, but will be outside the lock.
- manageDisableListLocked(userId, what, token, pkg);
+ manageDisableListLocked(userId, what, token, pkg, whichFlag);
// Ensure state for the current user is applied, even if passed a non-current user.
- final int net = gatherDisableActionsLocked(mCurrentUserId);
- if (net != mDisabled) {
- mDisabled = net;
+ final int net1 = gatherDisableActionsLocked(mCurrentUserId, 1);
+ final int net2 = gatherDisableActionsLocked(mCurrentUserId, 2);
+ if (net1 != mDisabled1 || net2 != mDisabled2) {
+ mDisabled1 = net1;
+ mDisabled2 = net2;
mHandler.post(new Runnable() {
public void run() {
- mNotificationDelegate.onSetDisabled(net);
+ mNotificationDelegate.onSetDisabled(net1);
}
});
if (mBar != null) {
try {
- mBar.disable(net);
+ mBar.disable(net1, net2);
} catch (RemoteException ex) {
}
}
@@ -375,7 +406,7 @@ public class StatusBarManagerService extends IStatusBarService.Stub {
mCurrentUserId,
vis & StatusBarManager.DISABLE_MASK,
mSysUiVisToken,
- cause);
+ cause, 1);
}
}
@@ -513,12 +544,13 @@ public class StatusBarManagerService extends IStatusBarService.Stub {
iconList.copyFrom(mIcons);
}
synchronized (mLock) {
- switches[0] = gatherDisableActionsLocked(mCurrentUserId);
+ switches[0] = gatherDisableActionsLocked(mCurrentUserId, 1);
switches[1] = mSystemUiVisibility;
switches[2] = mMenuVisible ? 1 : 0;
switches[3] = mImeWindowVis;
switches[4] = mImeBackDisposition;
switches[5] = mShowImeSwitcher ? 1 : 0;
+ switches[6] = gatherDisableActionsLocked(mCurrentUserId, 2);
binders.add(mImeToken);
}
}
@@ -660,7 +692,7 @@ public class StatusBarManagerService extends IStatusBarService.Stub {
// ================================================================================
// lock on mDisableRecords
- void manageDisableListLocked(int userId, int what, IBinder token, String pkg) {
+ void manageDisableListLocked(int userId, int what, IBinder token, String pkg, int which) {
if (SPEW) {
Slog.d(TAG, "manageDisableList userId=" + userId
+ " what=0x" + Integer.toHexString(what) + " pkg=" + pkg);
@@ -693,21 +725,25 @@ public class StatusBarManagerService extends IStatusBarService.Stub {
}
mDisableRecords.add(tok);
}
- tok.what = what;
+ if (which == 1) {
+ tok.what1 = what;
+ } else {
+ tok.what2 = what;
+ }
tok.token = token;
tok.pkg = pkg;
}
}
// lock on mDisableRecords
- int gatherDisableActionsLocked(int userId) {
+ int gatherDisableActionsLocked(int userId, int which) {
final int N = mDisableRecords.size();
// gather the new net flags
int net = 0;
for (int i=0; i<N; i++) {
final DisableRecord rec = mDisableRecords.get(i);
if (rec.userId == userId) {
- net |= rec.what;
+ net |= (which == 1) ? rec.what1 : rec.what2;
}
}
return net;
@@ -731,13 +767,15 @@ public class StatusBarManagerService extends IStatusBarService.Stub {
}
synchronized (mLock) {
- pw.println(" mDisabled=0x" + Integer.toHexString(mDisabled));
+ pw.println(" mDisabled1=0x" + Integer.toHexString(mDisabled1));
+ pw.println(" mDisabled2=0x" + Integer.toHexString(mDisabled2));
final int N = mDisableRecords.size();
pw.println(" mDisableRecords.size=" + N);
for (int i=0; i<N; i++) {
DisableRecord tok = mDisableRecords.get(i);
pw.println(" [" + i + "] userId=" + tok.userId
- + " what=0x" + Integer.toHexString(tok.what)
+ + " what1=0x" + Integer.toHexString(tok.what1)
+ + " what2=0x" + Integer.toHexString(tok.what2)
+ " pkg=" + tok.pkg
+ " token=" + tok.token);
}