summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api/system-current.txt18
-rw-r--r--core/java/android/app/StatusBarManager.java191
-rw-r--r--services/core/java/com/android/server/statusbar/StatusBarShellCommand.java56
3 files changed, 246 insertions, 19 deletions
diff --git a/api/system-current.txt b/api/system-current.txt
index c9b8c3867e59..4b7451cea54e 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -544,15 +544,17 @@ package android.app {
}
public class StatusBarManager {
- method public android.util.Pair<java.lang.Integer,java.lang.Integer> getDisableFlags();
+ method public android.app.StatusBarManager.DisableInfo getDisableInfo();
method public void setDisabledForSetup(boolean);
- field public static final int DISABLE2_NONE = 0; // 0x0
- field public static final int DISABLE_EXPAND = 65536; // 0x10000
- field public static final int DISABLE_HOME = 2097152; // 0x200000
- field public static final int DISABLE_NONE = 0; // 0x0
- field public static final int DISABLE_NOTIFICATION_ALERTS = 262144; // 0x40000
- field public static final int DISABLE_RECENT = 16777216; // 0x1000000
- field public static final int DISABLE_SEARCH = 33554432; // 0x2000000
+ }
+
+ public static final class StatusBarManager.DisableInfo {
+ method public boolean areNoComponentsDisabled();
+ method public boolean isNavigateToHomeDisabled();
+ method public boolean isNotificationPeekingDisabled();
+ method public boolean isRecentsDisabled();
+ method public boolean isSearchDisabled();
+ method public boolean isStatusBarExpansionDisabled();
}
public final class Vr2dDisplayProperties implements android.os.Parcelable {
diff --git a/core/java/android/app/StatusBarManager.java b/core/java/android/app/StatusBarManager.java
index 1878d8407738..077652cacc2d 100644
--- a/core/java/android/app/StatusBarManager.java
+++ b/core/java/android/app/StatusBarManager.java
@@ -42,12 +42,10 @@ import java.lang.annotation.RetentionPolicy;
public class StatusBarManager {
/** @hide */
- @SystemApi
public static final int DISABLE_EXPAND = View.STATUS_BAR_DISABLE_EXPAND;
/** @hide */
public static final int DISABLE_NOTIFICATION_ICONS = View.STATUS_BAR_DISABLE_NOTIFICATION_ICONS;
/** @hide */
- @SystemApi
public static final int DISABLE_NOTIFICATION_ALERTS
= View.STATUS_BAR_DISABLE_NOTIFICATION_ALERTS;
@@ -59,17 +57,14 @@ public class StatusBarManager {
/** @hide */
public static final int DISABLE_SYSTEM_INFO = View.STATUS_BAR_DISABLE_SYSTEM_INFO;
/** @hide */
- @SystemApi
public static final int DISABLE_HOME = View.STATUS_BAR_DISABLE_HOME;
/** @hide */
- @SystemApi
public static final int DISABLE_RECENT = View.STATUS_BAR_DISABLE_RECENT;
/** @hide */
public static final int DISABLE_BACK = View.STATUS_BAR_DISABLE_BACK;
/** @hide */
public static final int DISABLE_CLOCK = View.STATUS_BAR_DISABLE_CLOCK;
/** @hide */
- @SystemApi
public static final int DISABLE_SEARCH = View.STATUS_BAR_DISABLE_SEARCH;
/** @hide */
@@ -78,7 +73,6 @@ public class StatusBarManager {
View.STATUS_BAR_DISABLE_HOME | View.STATUS_BAR_DISABLE_RECENT;
/** @hide */
- @SystemApi
public static final int DISABLE_NONE = 0x00000000;
/** @hide */
@@ -122,7 +116,6 @@ public class StatusBarManager {
public static final int DISABLE2_ROTATE_SUGGESTIONS = 1 << 4;
/** @hide */
- @SystemApi
public static final int DISABLE2_NONE = 0x00000000;
/** @hide */
@@ -387,14 +380,14 @@ public class StatusBarManager {
}
/**
- * Get the currently applied StatusBar disable flags
+ * Get this app's currently requested disabled components
*
- * @return a pair of Integers in the form of (disable, disable2)
+ * @return a new DisableInfo
*
* @hide
*/
@SystemApi
- public Pair<Integer, Integer> getDisableFlags() {
+ public DisableInfo getDisableInfo() {
try {
final int userId = Binder.getCallingUserHandle().getIdentifier();
final IStatusBarService svc = getService();
@@ -403,7 +396,7 @@ public class StatusBarManager {
flags = svc.getDisableFlags(mToken, userId);
}
- return new Pair<Integer, Integer>(flags[0], flags[1]);
+ return new DisableInfo(flags[0], flags[1]);
} catch (RemoteException ex) {
throw ex.rethrowFromSystemServer();
}
@@ -416,4 +409,180 @@ public class StatusBarManager {
if (state == WINDOW_STATE_SHOWING) return "WINDOW_STATE_SHOWING";
return "WINDOW_STATE_UNKNOWN";
}
+
+ /**
+ * DisableInfo describes this app's requested state of the StatusBar with regards to which
+ * components are enabled/disabled
+ *
+ * @hide
+ */
+ @SystemApi
+ public static final class DisableInfo {
+
+ private boolean mStatusBarExpansion;
+ private boolean mNavigateHome;
+ private boolean mNotificationPeeking;
+ private boolean mRecents;
+ private boolean mSearch;
+
+ /** @hide */
+ public DisableInfo(int flags1, int flags2) {
+ mStatusBarExpansion = (flags1 & DISABLE_EXPAND) != 0;
+ mNavigateHome = (flags1 & DISABLE_HOME) != 0;
+ mNotificationPeeking = (flags1 & DISABLE_NOTIFICATION_ALERTS) != 0;
+ mRecents = (flags1 & DISABLE_RECENT) != 0;
+ mSearch = (flags1 & DISABLE_SEARCH) != 0;
+ }
+
+ /** @hide */
+ public DisableInfo() {}
+
+ /**
+ * @return {@code true} if expanding the notification shade is disabled
+ *
+ * @hide
+ */
+ @SystemApi
+ public boolean isStatusBarExpansionDisabled() {
+ return mStatusBarExpansion;
+ }
+
+ /** * @hide */
+ public void setStatusBarExpansionDisabled(boolean disabled) {
+ mStatusBarExpansion = disabled;
+ }
+
+ /**
+ * @return {@code true} if navigation home is disabled
+ *
+ * @hide
+ */
+ @SystemApi
+ public boolean isNavigateToHomeDisabled() {
+ return mNavigateHome;
+ }
+
+ /** * @hide */
+ public void setNagivationHomeDisabled(boolean disabled) {
+ mNavigateHome = disabled;
+ }
+
+ /**
+ * @return {@code true} if notification peeking (heads-up notification) is disabled
+ *
+ * @hide
+ */
+ @SystemApi
+ public boolean isNotificationPeekingDisabled() {
+ return mNotificationPeeking;
+ }
+
+ /** @hide */
+ public void setNotificationPeekingDisabled(boolean disabled) {
+ mNotificationPeeking = disabled;
+ }
+
+ /**
+ * @return {@code true} if mRecents/overview is disabled
+ *
+ * @hide
+ */
+ @SystemApi
+ public boolean isRecentsDisabled() {
+ return mRecents;
+ }
+
+ /** @hide */
+ public void setRecentsDisabled(boolean disabled) {
+ mRecents = disabled;
+ }
+
+ /**
+ * @return {@code true} if mSearch is disabled
+ *
+ * @hide
+ */
+ @SystemApi
+ public boolean isSearchDisabled() {
+ return mSearch;
+ }
+
+ /** @hide */
+ public void setSearchDisabled(boolean disabled) {
+ mSearch = disabled;
+ }
+
+ /**
+ * @return {@code true} if no components are disabled (default state)
+ *
+ * @hide
+ */
+ @SystemApi
+ public boolean areNoComponentsDisabled() {
+ return !mStatusBarExpansion && !mNavigateHome && !mNotificationPeeking && !mRecents
+ && !mSearch;
+ }
+
+ /** @hide */
+ public void setEnableAll() {
+ mStatusBarExpansion = false;
+ mNavigateHome = false;
+ mNotificationPeeking = false;
+ mRecents = false;
+ mSearch = false;
+ }
+
+ /**
+ * @return {@code true} if all status bar components are disabled
+ *
+ * @hide
+ */
+ public boolean areAllComponentsDisabled() {
+ return mStatusBarExpansion && mNavigateHome && mNotificationPeeking
+ && mRecents && mSearch;
+ }
+
+ /** @hide */
+ public void setDisableAll() {
+ mStatusBarExpansion = true;
+ mNavigateHome = true;
+ mNotificationPeeking = true;
+ mRecents = true;
+ mSearch = true;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("DisableInfo: ");
+ sb.append(" mStatusBarExpansion=").append(mStatusBarExpansion ? "disabled" : "enabled");
+ sb.append(" mNavigateHome=").append(mNavigateHome ? "disabled" : "enabled");
+ sb.append(" mNotificationPeeking=")
+ .append(mNotificationPeeking ? "disabled" : "enabled");
+ sb.append(" mRecents=").append(mRecents ? "disabled" : "enabled");
+ sb.append(" mSearch=").append(mSearch ? "disabled" : "enabled");
+
+ return sb.toString();
+
+ }
+
+ /**
+ * Convert a DisableInfo to equivalent flags
+ * @return a pair of equivalent disable flags
+ *
+ * @hide
+ */
+ public Pair<Integer, Integer> toFlags() {
+ int disable1 = DISABLE_NONE;
+ int disable2 = DISABLE2_NONE;
+
+ if (mStatusBarExpansion) disable1 |= DISABLE_EXPAND;
+ if (mNavigateHome) disable1 |= DISABLE_HOME;
+ if (mNotificationPeeking) disable1 |= DISABLE_NOTIFICATION_ALERTS;
+ if (mRecents) disable1 |= DISABLE_RECENT;
+ if (mSearch) disable1 |= DISABLE_SEARCH;
+
+ return new Pair<Integer, Integer>(disable1, disable2);
+ }
+ }
}
diff --git a/services/core/java/com/android/server/statusbar/StatusBarShellCommand.java b/services/core/java/com/android/server/statusbar/StatusBarShellCommand.java
index ff01d46e6909..b12129835ca1 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarShellCommand.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarShellCommand.java
@@ -19,6 +19,7 @@ import static android.app.StatusBarManager.DEFAULT_SETUP_DISABLE_FLAGS;
import static android.app.StatusBarManager.DISABLE2_NONE;
import static android.app.StatusBarManager.DISABLE_NONE;
+import android.app.StatusBarManager.DisableInfo;
import android.content.ComponentName;
import android.content.Context;
import android.os.Binder;
@@ -26,6 +27,7 @@ import android.os.IBinder;
import android.os.RemoteException;
import android.os.ShellCommand;
import android.service.quicksettings.TileService;
+import android.util.Pair;
import java.io.PrintWriter;
@@ -68,6 +70,8 @@ public class StatusBarShellCommand extends ShellCommand {
return runGetStatusIcons();
case "disable-for-setup":
return runDisableForSetup();
+ case "send-disable-flag":
+ return runSendDisableFlag();
default:
return handleDefaultCommands(cmd);
}
@@ -132,6 +136,47 @@ public class StatusBarShellCommand extends ShellCommand {
return 0;
}
+ private int runSendDisableFlag() {
+ String pkg = mContext.getPackageName();
+ int disable1 = DISABLE_NONE;
+ int disable2 = DISABLE2_NONE;
+
+ DisableInfo info = new DisableInfo();
+
+ String arg = getNextArg();
+ while (arg != null) {
+ switch (arg) {
+ case "search":
+ info.setSearchDisabled(true);
+ break;
+ case "home":
+ info.setNagivationHomeDisabled(true);
+ break;
+ case "recents":
+ info.setRecentsDisabled(true);
+ break;
+ case "notification-alerts":
+ info.setNotificationPeekingDisabled(true);
+ break;
+ case "statusbar-expansion":
+ info.setStatusBarExpansionDisabled(true);
+ break;
+
+ default:
+ break;
+ }
+
+ arg = getNextArg();
+ }
+
+ Pair<Integer, Integer> flagPair = info.toFlags();
+
+ mInterface.disable(flagPair.first, sToken, pkg);
+ mInterface.disable2(flagPair.second, sToken, pkg);
+
+ return 0;
+ }
+
@Override
public void onHelp() {
final PrintWriter pw = getOutPrintWriter();
@@ -166,6 +211,17 @@ public class StatusBarShellCommand extends ShellCommand {
pw.println(" disable-for-setup DISABLE");
pw.println(" If true, disable status bar components unsuitable for device setup");
pw.println("");
+ pw.println(" send-disable-flag FLAG...");
+ pw.println(" Send zero or more disable flags (parsed individually) to StatusBarManager");
+ pw.println(" Valid options:");
+ pw.println(" <blank> - equivalent to \"none\"");
+ pw.println(" none - re-enables all components");
+ pw.println(" search - disable search");
+ pw.println(" home - disable naviagation home");
+ pw.println(" recents - disable recents/overview");
+ pw.println(" notification-peek - disable notification peeking");
+ pw.println(" statusbar-expansion - disable status bar expansion");
+ pw.println("");
}
/**