Add isHeadlessSystemUserMode() to UserManager
- isHeadlessSystemUserMode() returns whether the device is running with
headless system user (go/multi-user-headless-user0)
- RoSystemProperties.MULTIUSER_HEADLESS_SYSTEM_USER is replaced by
isHeadlessSystemUserMode()
Bug: 137755681
Test: Bluetooth service and Network policy manager should work fine with
headless system user. A profile user should be created with headless
system user.
Change-Id: Ic48d98426f7a5ea47dde2008ae51f78855f622e6
diff --git a/core/java/android/content/pm/UserInfo.java b/core/java/android/content/pm/UserInfo.java
index 30d87f4..7865d75 100644
--- a/core/java/android/content/pm/UserInfo.java
+++ b/core/java/android/content/pm/UserInfo.java
@@ -22,8 +22,6 @@
import android.os.UserHandle;
import android.os.UserManager;
-import com.android.internal.os.RoSystemProperties;
-
/**
* Per-user information.
* @hide
@@ -233,9 +231,7 @@
if (isManagedProfile() || isGuest() || isRestricted()) {
return false;
}
- boolean splitOrHeadlessSystemUser = UserManager.isSplitSystemUser()
- || RoSystemProperties.MULTIUSER_HEADLESS_SYSTEM_USER;
- if (splitOrHeadlessSystemUser) {
+ if (UserManager.isSplitSystemUser() || UserManager.isHeadlessSystemUserMode()) {
return id != UserHandle.USER_SYSTEM;
} else {
return id == UserHandle.USER_SYSTEM;
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index 9c9829f..a7fa96b 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -1283,6 +1283,16 @@
}
/**
+ * @hide
+ * @return Whether the device is running in a headless system user mode. It means the headless
+ * user (system user) runs system services and system UI, but is not associated with any real
+ * person. Secondary users can be created to be associated with real person.
+ */
+ public static boolean isHeadlessSystemUserMode() {
+ return RoSystemProperties.MULTIUSER_HEADLESS_SYSTEM_USER;
+ }
+
+ /**
* @deprecated use {@link #getUserSwitchability()} instead.
*
* @removed
diff --git a/services/core/java/com/android/server/BluetoothService.java b/services/core/java/com/android/server/BluetoothService.java
index 5c5b477..112cf08 100644
--- a/services/core/java/com/android/server/BluetoothService.java
+++ b/services/core/java/com/android/server/BluetoothService.java
@@ -18,8 +18,7 @@
import android.bluetooth.BluetoothAdapter;
import android.content.Context;
-
-import com.android.internal.os.RoSystemProperties;
+import android.os.UserManager;
class BluetoothService extends SystemService {
private BluetoothManagerService mBluetoothManagerService;
@@ -47,7 +46,7 @@
publishBinderService(BluetoothAdapter.BLUETOOTH_MANAGER_SERVICE,
mBluetoothManagerService);
} else if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY &&
- !RoSystemProperties.MULTIUSER_HEADLESS_SYSTEM_USER) {
+ !UserManager.isHeadlessSystemUserMode()) {
initialize();
}
}
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
index 5530b51..b4a8099 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -217,7 +217,6 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.notification.SystemNotificationChannels;
-import com.android.internal.os.RoSystemProperties;
import com.android.internal.telephony.PhoneConstants;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.ConcurrentUtils;
@@ -1354,7 +1353,7 @@
final Intent viewIntent = buildViewDataUsageIntent(res, policy.template);
// TODO: Resolve to single code path.
- if (isHeadlessSystemUserBuild()) {
+ if (UserManager.isHeadlessSystemUserMode()) {
builder.setContentIntent(PendingIntent.getActivityAsUser(
mContext, 0, viewIntent, PendingIntent.FLAG_UPDATE_CURRENT,
/* options= */ null, UserHandle.CURRENT));
@@ -1382,7 +1381,7 @@
final Intent intent = buildNetworkOverLimitIntent(res, policy.template);
// TODO: Resolve to single code path.
- if (isHeadlessSystemUserBuild()) {
+ if (UserManager.isHeadlessSystemUserMode()) {
builder.setContentIntent(PendingIntent.getActivityAsUser(
mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT,
/* options= */ null, UserHandle.CURRENT));
@@ -1413,7 +1412,7 @@
final Intent intent = buildViewDataUsageIntent(res, policy.template);
// TODO: Resolve to single code path.
- if (isHeadlessSystemUserBuild()) {
+ if (UserManager.isHeadlessSystemUserMode()) {
builder.setContentIntent(PendingIntent.getActivityAsUser(
mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT,
/* options= */ null, UserHandle.CURRENT));
@@ -1440,7 +1439,7 @@
final Intent viewIntent = buildViewDataUsageIntent(res, policy.template);
// TODO: Resolve to single code path.
- if (isHeadlessSystemUserBuild()) {
+ if (UserManager.isHeadlessSystemUserMode()) {
builder.setContentIntent(PendingIntent.getActivityAsUser(
mContext, 0, viewIntent, PendingIntent.FLAG_UPDATE_CURRENT,
/* options= */ null, UserHandle.CURRENT));
@@ -5301,10 +5300,6 @@
return (bundle != null) ? bundle.getBoolean(key, defaultValue) : defaultValue;
}
- private static boolean isHeadlessSystemUserBuild() {
- return RoSystemProperties.MULTIUSER_HEADLESS_SYSTEM_USER;
- }
-
private class NotificationId {
private final String mTag;
private final int mId;