summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/api/system-current.txt2
-rw-r--r--core/java/android/accounts/AccountManager.java10
-rw-r--r--packages/CompanionDeviceManager/res/layout/activity_confirmation.xml4
-rw-r--r--packages/SettingsLib/Graph/Android.bp16
-rw-r--r--packages/SettingsLib/Graph/src/com/android/settingslib/graph/ExtApiMetricsLogger.kt65
-rw-r--r--packages/SettingsLib/Graph/src/com/android/settingslib/graph/GetPreferenceGraphApiHandler.kt5
-rw-r--r--packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGetterApi.kt26
-rw-r--r--packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceSetterApi.kt41
-rw-r--r--services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java2
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java2
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java2
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java107
12 files changed, 176 insertions, 106 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index 0e833bdba1e1..22af517900d2 100644
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -581,7 +581,7 @@ package android.accessibilityservice {
package android.accounts {
public class AccountManager {
- method @FlaggedApi("android.app.admin.flags.split_create_managed_profile_enabled") @NonNull @RequiresPermission(anyOf={android.Manifest.permission.COPY_ACCOUNTS, android.Manifest.permission.INTERACT_ACROSS_USERS_FULL}) public android.accounts.AccountManagerFuture<java.lang.Boolean> copyAccountToUser(@NonNull android.accounts.Account, @NonNull android.os.UserHandle, @NonNull android.os.UserHandle, @Nullable android.accounts.AccountManagerCallback<java.lang.Boolean>, @Nullable android.os.Handler);
+ method @FlaggedApi("android.app.admin.flags.split_create_managed_profile_enabled") @NonNull @RequiresPermission(anyOf={android.Manifest.permission.COPY_ACCOUNTS, android.Manifest.permission.INTERACT_ACROSS_USERS_FULL}) public android.accounts.AccountManagerFuture<java.lang.Boolean> copyAccountToUser(@NonNull android.accounts.Account, @NonNull android.os.UserHandle, @NonNull android.os.UserHandle, @Nullable android.os.Handler, @Nullable android.accounts.AccountManagerCallback<java.lang.Boolean>);
method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public android.accounts.AccountManagerFuture<android.os.Bundle> finishSessionAsUser(android.os.Bundle, android.app.Activity, android.os.UserHandle, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
}
diff --git a/core/java/android/accounts/AccountManager.java b/core/java/android/accounts/AccountManager.java
index 72450999993d..ddc1ae29f6df 100644
--- a/core/java/android/accounts/AccountManager.java
+++ b/core/java/android/accounts/AccountManager.java
@@ -30,7 +30,6 @@ import android.annotation.RequiresPermission;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
import android.annotation.Size;
-import android.annotation.SuppressLint;
import android.annotation.SystemApi;
import android.annotation.SystemService;
import android.annotation.UserHandleAware;
@@ -2019,23 +2018,22 @@ public class AccountManager {
* @param account the account to copy
* @param fromUser the user to copy the account from
* @param toUser the target user
- * @param callback Callback to invoke when the request completes,
- * null for no callback
* @param handler {@link Handler} identifying the callback thread,
* null for the main thread
+ * @param callback Callback to invoke when the request completes,
+ * null for no callback
* @return An {@link AccountManagerFuture} which resolves to a Boolean indicated whether it
* succeeded.
* @hide
*/
- @SuppressLint("SamShouldBeLast")
@NonNull
@SystemApi
@RequiresPermission(anyOf = {COPY_ACCOUNTS, INTERACT_ACROSS_USERS_FULL})
@FlaggedApi(FLAG_SPLIT_CREATE_MANAGED_PROFILE_ENABLED)
public AccountManagerFuture<Boolean> copyAccountToUser(
@NonNull final Account account, @NonNull final UserHandle fromUser,
- @NonNull final UserHandle toUser, @Nullable AccountManagerCallback<Boolean> callback,
- @Nullable Handler handler) {
+ @NonNull final UserHandle toUser, @Nullable Handler handler,
+ @Nullable AccountManagerCallback<Boolean> callback) {
if (account == null) throw new IllegalArgumentException("account is null");
if (toUser == null || fromUser == null) {
throw new IllegalArgumentException("fromUser and toUser cannot be null");
diff --git a/packages/CompanionDeviceManager/res/layout/activity_confirmation.xml b/packages/CompanionDeviceManager/res/layout/activity_confirmation.xml
index afece5fac0fb..40a786ed560b 100644
--- a/packages/CompanionDeviceManager/res/layout/activity_confirmation.xml
+++ b/packages/CompanionDeviceManager/res/layout/activity_confirmation.xml
@@ -81,7 +81,9 @@
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/device_list"
android:layout_width="match_parent"
- android:layout_height="200dp"
+ android:layout_height="wrap_content"
+ app:layout_constraintHeight_max="220dp"
+ app:layout_constraintHeight_min="200dp"
android:scrollbars="vertical"
android:visibility="gone" />
diff --git a/packages/SettingsLib/Graph/Android.bp b/packages/SettingsLib/Graph/Android.bp
index 163b689d800b..0114ac5b1426 100644
--- a/packages/SettingsLib/Graph/Android.bp
+++ b/packages/SettingsLib/Graph/Android.bp
@@ -21,6 +21,7 @@ android_library {
"androidx.annotation_annotation",
"androidx.fragment_fragment",
"androidx.preference_preference",
+ "statslog-settingslib",
],
kotlincflags: ["-Xjvm-default=all"],
}
@@ -35,3 +36,18 @@ java_library {
sdk_version: "core_current",
static_libs: ["libprotobuf-java-lite"],
}
+
+genrule {
+ name: "statslog-settingslib-java-gen",
+ tools: ["stats-log-api-gen"],
+ cmd: "$(location stats-log-api-gen) --java $(out) --module settings" +
+ " --javaPackage com.android.settingslib.graph.instrumentation --javaClass SettingslibStatsLog",
+ out: ["com/android/settingslib/graph/instrumentation/SettingslibStatsLog.java"],
+}
+
+java_library {
+ name: "statslog-settingslib",
+ srcs: [
+ ":statslog-settingslib-java-gen",
+ ],
+}
diff --git a/packages/SettingsLib/Graph/src/com/android/settingslib/graph/ExtApiMetricsLogger.kt b/packages/SettingsLib/Graph/src/com/android/settingslib/graph/ExtApiMetricsLogger.kt
new file mode 100644
index 000000000000..639f46cd90f3
--- /dev/null
+++ b/packages/SettingsLib/Graph/src/com/android/settingslib/graph/ExtApiMetricsLogger.kt
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settingslib.graph
+
+import com.android.settingslib.graph.instrumentation.SettingslibStatsLog
+
+interface ExtApiMetricsLogger {
+ fun logReadPreference(caller: String?, preferenceCoordinate: PreferenceCoordinate, result: Int)
+ fun logWritePreference(caller: String?, preferenceCoordinate: PreferenceCoordinate, result: Int)
+ fun logGetPreferenceMetadata(caller: String?, result: Int)
+}
+
+object MetricsLogger : ExtApiMetricsLogger {
+ override fun logReadPreference(caller: String?, preferenceCoordinate: PreferenceCoordinate, result: Int) {
+ if (caller == null) return
+ SettingslibStatsLog.write(
+ SettingslibStatsLog.SETTINGS_EXTAPI_REPORTED,
+ caller,
+ preferenceCoordinate.loggingId(),
+ SettingslibStatsLog.SETTINGS_EXT_API_REPORTED__TYPE__ACTION_READ,
+ result,
+ 0,
+ )
+ }
+
+ override fun logWritePreference(caller: String?, preferenceCoordinate: PreferenceCoordinate, result: Int) {
+ if (caller == null) return
+ SettingslibStatsLog.write(
+ SettingslibStatsLog.SETTINGS_EXTAPI_REPORTED,
+ caller,
+ preferenceCoordinate.loggingId(),
+ SettingslibStatsLog.SETTINGS_EXT_API_REPORTED__TYPE__ACTION_WRITE,
+ result,
+ 0,
+ )
+ }
+
+ override fun logGetPreferenceMetadata(caller: String?, result: Int) {
+ if (caller == null) return
+ SettingslibStatsLog.write(
+ SettingslibStatsLog.SETTINGS_EXTAPI_REPORTED,
+ caller,
+ null,
+ SettingslibStatsLog.SETTINGS_EXT_API_REPORTED__TYPE__ACTION_GET_METADATA,
+ result,
+ 0,
+ )
+ }
+}
+
+fun PreferenceCoordinate.loggingId() = "$screenKey/$key"
diff --git a/packages/SettingsLib/Graph/src/com/android/settingslib/graph/GetPreferenceGraphApiHandler.kt b/packages/SettingsLib/Graph/src/com/android/settingslib/graph/GetPreferenceGraphApiHandler.kt
index 51813a1c9aab..c6e6c465f25f 100644
--- a/packages/SettingsLib/Graph/src/com/android/settingslib/graph/GetPreferenceGraphApiHandler.kt
+++ b/packages/SettingsLib/Graph/src/com/android/settingslib/graph/GetPreferenceGraphApiHandler.kt
@@ -18,6 +18,7 @@ package com.android.settingslib.graph
import android.app.Application
import android.os.Bundle
+import com.android.settingslib.graph.instrumentation.SettingslibStatsLog
import com.android.settingslib.graph.proto.PreferenceGraphProto
import com.android.settingslib.ipc.ApiHandler
import com.android.settingslib.ipc.MessageCodec
@@ -42,6 +43,10 @@ abstract class GetPreferenceGraphApiHandler(
callingUid: Int,
request: GetPreferenceGraphRequest,
): PreferenceGraphProto {
+ MetricsLogger.logGetPreferenceMetadata(
+ application.packageManager.getNameForUid(callingUid),
+ SettingslibStatsLog.SETTINGS_EXT_API_REPORTED__RESULT__RESULT_OK
+ )
val builder = PreferenceGraphBuilder.of(application, callingPid, callingUid, request)
if (request.screenKeys.isEmpty()) {
PreferenceScreenRegistry.preferenceScreenMetadataFactories.forEachKeyAsync {
diff --git a/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGetterApi.kt b/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGetterApi.kt
index 2fac54557bef..85c5c9d8415c 100644
--- a/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGetterApi.kt
+++ b/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGetterApi.kt
@@ -18,6 +18,7 @@ package com.android.settingslib.graph
import android.app.Application
import androidx.annotation.IntDef
+import com.android.settingslib.graph.instrumentation.SettingslibStatsLog
import com.android.settingslib.graph.proto.PreferenceProto
import com.android.settingslib.ipc.ApiDescriptor
import com.android.settingslib.ipc.ApiHandler
@@ -97,6 +98,7 @@ class PreferenceGetterApiHandler(
val errors = mutableMapOf<PreferenceCoordinate, Int>()
val preferences = mutableMapOf<PreferenceCoordinate, PreferenceProto>()
val flags = request.flags
+ val callerPackage = application.packageManager.getNameForUid(callingUid)
for ((screenKey, coordinates) in request.preferences.groupBy { it.screenKey }) {
val screenMetadata = PreferenceScreenRegistry.create(application, screenKey)
if (screenMetadata == null) {
@@ -116,6 +118,12 @@ class PreferenceGetterApiHandler(
val node = nodes[coordinate.key]
if (node == null) {
errors[coordinate] = PreferenceGetterErrorCode.NOT_FOUND
+ MetricsLogger.logReadPreference(
+ callerPackage,
+ coordinate,
+ SettingslibStatsLog
+ .SETTINGS_EXT_API_REPORTED__RESULT__RESULT_FAILURE_UNAVAILABLE,
+ )
continue
}
val metadata = node.metadata
@@ -131,11 +139,29 @@ class PreferenceGetterApiHandler(
)
if (flags == PreferenceGetterFlags.VALUE && !preferenceProto.hasValue()) {
errors[coordinate] = PreferenceGetterErrorCode.DISALLOW
+ MetricsLogger.logReadPreference(
+ callerPackage,
+ coordinate,
+ SettingslibStatsLog
+ .SETTINGS_EXT_API_REPORTED__RESULT__RESULT_FAILURE_DISALLOW,
+ )
} else {
preferences[coordinate] = preferenceProto
+ MetricsLogger.logReadPreference(
+ callerPackage,
+ coordinate,
+ SettingslibStatsLog
+ .SETTINGS_EXT_API_REPORTED__RESULT__RESULT_OK,
+ )
}
} catch (e: Exception) {
errors[coordinate] = PreferenceGetterErrorCode.INTERNAL_ERROR
+ MetricsLogger.logReadPreference(
+ callerPackage,
+ coordinate,
+ SettingslibStatsLog
+ .SETTINGS_EXT_API_REPORTED__RESULT__RESULT_FAILURE_INTERNAL_ERROR,
+ )
}
}
}
diff --git a/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceSetterApi.kt b/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceSetterApi.kt
index 3c870acf2291..84b875b548fc 100644
--- a/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceSetterApi.kt
+++ b/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceSetterApi.kt
@@ -20,6 +20,7 @@ import android.app.Application
import android.content.Context
import android.os.Bundle
import androidx.annotation.IntDef
+import com.android.settingslib.graph.instrumentation.SettingslibStatsLog
import com.android.settingslib.graph.proto.PreferenceValueProto
import com.android.settingslib.ipc.ApiDescriptor
import com.android.settingslib.ipc.ApiHandler
@@ -115,15 +116,45 @@ class PreferenceSetterApiHandler(
PreferenceScreenRegistry.create(application, request.screenKey)
?: return PreferenceSetterResult.UNSUPPORTED
val key = request.key
- val metadata =
- screenMetadata.getPreferenceHierarchy(application).find(key)
- ?: return PreferenceSetterResult.UNSUPPORTED
- if (metadata !is PersistentPreference<*>) return PreferenceSetterResult.UNSUPPORTED
- if (!metadata.isEnabled(application)) return PreferenceSetterResult.DISABLED
+ val callerPackage = application.packageManager.getNameForUid(callingUid)
+ val preferenceCoordinate = with(request) {
+ PreferenceCoordinate(screenKey = screenKey, key = key)
+ }
+ val metadata = screenMetadata.getPreferenceHierarchy(application).find(key)
+ if (metadata == null || metadata !is PersistentPreference<*>) {
+ MetricsLogger.logWritePreference(
+ callerPackage,
+ preferenceCoordinate,
+ SettingslibStatsLog
+ .SETTINGS_EXT_API_REPORTED__RESULT__RESULT_FAILURE_UNSUPPORTED,
+ )
+ return PreferenceSetterResult.UNSUPPORTED
+ }
+ if (!metadata.isEnabled(application)) {
+ MetricsLogger.logWritePreference(
+ callerPackage,
+ preferenceCoordinate,
+ SettingslibStatsLog
+ .SETTINGS_EXT_API_REPORTED__RESULT__RESULT_FAILURE_DISABLED,
+ )
+ return PreferenceSetterResult.DISABLED
+ }
if (metadata is PreferenceRestrictionProvider && metadata.isRestricted(application)) {
+ MetricsLogger.logWritePreference(
+ callerPackage,
+ preferenceCoordinate,
+ SettingslibStatsLog
+ .SETTINGS_EXT_API_REPORTED__RESULT__RESULT_FAILURE_RESTRICTED,
+ )
return PreferenceSetterResult.RESTRICTED
}
if (metadata is PreferenceAvailabilityProvider && !metadata.isAvailable(application)) {
+ MetricsLogger.logWritePreference(
+ callerPackage,
+ preferenceCoordinate,
+ SettingslibStatsLog
+ .SETTINGS_EXT_API_REPORTED__RESULT__RESULT_FAILURE_UNAVAILABLE,
+ )
return PreferenceSetterResult.UNAVAILABLE
}
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 2627895b8c63..e69a7414dd76 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -21907,7 +21907,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
accountToMigrate,
sourceUser,
targetUser,
- /* callback= */ null, /* handler= */ null)
+ /* handler= */ null, /* callback= */ null)
.getResult(60 * 3, TimeUnit.SECONDS);
if (copySucceeded) {
logCopyAccountStatus(COPY_ACCOUNT_SUCCEEDED, callerPackage);
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
index c9cbe0fa08c5..6fad82b26808 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
@@ -210,7 +210,7 @@ public class ActivityRecordTests extends WindowTestsBase {
}
private TestStartingWindowOrganizer registerTestStartingWindowOrganizer() {
- return new TestStartingWindowOrganizer(mAtm);
+ return new TestStartingWindowOrganizer(mAtm, mDisplayContent);
}
@Test
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java
index ea925c019b77..4854f0d948b4 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java
@@ -88,7 +88,7 @@ public class DisplayPolicyTests extends WindowTestsBase {
}
private WindowState createDreamWindow() {
- final WindowState win = createDreamWindow(null, TYPE_BASE_APPLICATION, "dream");
+ final WindowState win = createDreamWindow("dream", TYPE_BASE_APPLICATION);
final WindowManager.LayoutParams attrs = win.mAttrs;
attrs.width = MATCH_PARENT;
attrs.height = MATCH_PARENT;
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java
index ce0d91264063..37d2a7511d98 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java
@@ -478,7 +478,7 @@ public class WindowTestsBase extends SystemServiceTestsBase {
}
private WindowState createCommonWindow(WindowState parent, int type, String name) {
- final WindowState win = createWindow(parent, type, name);
+ final WindowState win = newWindowBuilder(name, type).setParent(parent).build();
// Prevent common windows from been IME targets.
win.mAttrs.flags |= FLAG_NOT_FOCUSABLE;
return win;
@@ -502,7 +502,8 @@ public class WindowTestsBase extends SystemServiceTestsBase {
}
WindowState createNavBarWithProvidedInsets(DisplayContent dc) {
- final WindowState navbar = createWindow(null, TYPE_NAVIGATION_BAR, dc, "navbar");
+ final WindowState navbar = newWindowBuilder("navbar", TYPE_NAVIGATION_BAR).setDisplay(
+ dc).build();
final Binder owner = new Binder();
navbar.mAttrs.providedInsets = new InsetsFrameProvider[] {
new InsetsFrameProvider(owner, 0, WindowInsets.Type.navigationBars())
@@ -513,7 +514,8 @@ public class WindowTestsBase extends SystemServiceTestsBase {
}
WindowState createStatusBarWithProvidedInsets(DisplayContent dc) {
- final WindowState statusBar = createWindow(null, TYPE_STATUS_BAR, dc, "statusBar");
+ final WindowState statusBar = newWindowBuilder("statusBar", TYPE_STATUS_BAR).setDisplay(
+ dc).build();
final Binder owner = new Binder();
statusBar.mAttrs.providedInsets = new InsetsFrameProvider[] {
new InsetsFrameProvider(owner, 0, WindowInsets.Type.statusBars())
@@ -575,92 +577,13 @@ public class WindowTestsBase extends SystemServiceTestsBase {
WindowState createAppWindow(Task task, int type, String name) {
final ActivityRecord activity = createNonAttachedActivityRecord(task.getDisplayContent());
task.addChild(activity, 0);
- return createWindow(null, type, activity, name);
+ return newWindowBuilder(name, type).setWindowToken(activity).build();
}
- WindowState createDreamWindow(WindowState parent, int type, String name) {
+ WindowState createDreamWindow(String name, int type) {
final WindowToken token = createWindowToken(
mDisplayContent, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_DREAM, type);
- return createWindow(parent, type, token, name);
- }
-
- // TODO: Move these calls to a builder?
- WindowState createWindow(WindowState parent, int type, String name) {
- return (parent == null)
- ? createWindow(parent, type, mDisplayContent, name)
- : createWindow(parent, type, parent.mToken, name);
- }
-
- WindowState createWindow(WindowState parent, int type, String name, int ownerId) {
- return (parent == null)
- ? createWindow(parent, type, mDisplayContent, name, ownerId)
- : createWindow(parent, type, parent.mToken, name, ownerId);
- }
-
- WindowState createWindow(WindowState parent, int windowingMode, int activityType,
- int type, DisplayContent dc, String name) {
- final WindowToken token = createWindowToken(dc, windowingMode, activityType, type);
- return createWindow(parent, type, token, name);
- }
-
- WindowState createWindow(WindowState parent, int type, DisplayContent dc, String name) {
- return createWindow(
- parent, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, type, dc, name);
- }
-
- WindowState createWindow(WindowState parent, int type, DisplayContent dc, String name,
- int ownerId) {
- final WindowToken token = createWindowToken(
- dc, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, type);
- return createWindow(parent, type, token, name, ownerId);
- }
-
- WindowState createWindow(WindowState parent, int type, DisplayContent dc, String name,
- boolean ownerCanAddInternalSystemWindow) {
- final WindowToken token = createWindowToken(
- dc, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, type);
- return createWindow(parent, type, token, name, 0 /* ownerId */,
- ownerCanAddInternalSystemWindow);
- }
-
- WindowState createWindow(WindowState parent, int type, WindowToken token, String name) {
- return createWindow(parent, type, token, name, 0 /* ownerId */,
- false /* ownerCanAddInternalSystemWindow */);
- }
-
- WindowState createWindow(WindowState parent, int type, WindowToken token, String name,
- int ownerId) {
- return createWindow(parent, type, token, name, ownerId,
- false /* ownerCanAddInternalSystemWindow */);
- }
-
- WindowState createWindow(WindowState parent, int type, WindowToken token, String name,
- int ownerId, boolean ownerCanAddInternalSystemWindow) {
- return createWindow(parent, type, token, name, ownerId, ownerCanAddInternalSystemWindow,
- mIWindow);
- }
-
- WindowState createWindow(WindowState parent, int type, WindowToken token, String name,
- int ownerId, boolean ownerCanAddInternalSystemWindow, IWindow iwindow) {
- return createWindow(parent, type, token, name, ownerId, UserHandle.getUserId(ownerId),
- ownerCanAddInternalSystemWindow, mWm, getTestSession(token), iwindow);
- }
-
- static WindowState createWindow(WindowState parent, int type, WindowToken token,
- String name, int ownerId, int userId, boolean ownerCanAddInternalSystemWindow,
- WindowManagerService service, Session session, IWindow iWindow) {
- SystemServicesTestRule.checkHoldsLock(service.mGlobalLock);
-
- final WindowManager.LayoutParams attrs = new WindowManager.LayoutParams(type);
- attrs.setTitle(name);
- attrs.packageName = "test";
-
- final WindowState w = new WindowState(service, session, iWindow, token, parent,
- OP_NONE, attrs, VISIBLE, ownerId, userId, ownerCanAddInternalSystemWindow);
- // TODO: Probably better to make this call in the WindowState ctor to avoid errors with
- // adding it to the token...
- token.addWindow(w);
- return w;
+ return newWindowBuilder(name, type).setWindowToken(token).build();
}
static void makeWindowVisible(WindowState... windows) {
@@ -1920,11 +1843,14 @@ public class WindowTestsBase extends SystemServiceTestsBase {
private final WindowManagerService mWMService;
private final SparseArray<IBinder> mTaskAppMap = new SparseArray<>();
private final HashMap<IBinder, WindowState> mAppWindowMap = new HashMap<>();
+ private final DisplayContent mDisplayContent;
- TestStartingWindowOrganizer(ActivityTaskManagerService service) {
+ TestStartingWindowOrganizer(ActivityTaskManagerService service,
+ DisplayContent displayContent) {
mAtm = service;
mWMService = mAtm.mWindowManager;
mAtm.mTaskOrganizerController.registerTaskOrganizer(this);
+ mDisplayContent = displayContent;
}
@Override
@@ -1933,10 +1859,11 @@ public class WindowTestsBase extends SystemServiceTestsBase {
final ActivityRecord activity = ActivityRecord.forTokenLocked(info.appToken);
IWindow iWindow = mock(IWindow.class);
doReturn(mock(IBinder.class)).when(iWindow).asBinder();
- final WindowState window = WindowTestsBase.createWindow(null,
- TYPE_APPLICATION_STARTING, activity,
- "Starting window", 0 /* ownerId */, 0 /* userId*/,
- false /* internalWindows */, mWMService, createTestSession(mAtm), iWindow);
+ // WindowToken is already passed, windowTokenCreator is not needed here.
+ final WindowState window = new WindowTestsBase.WindowStateBuilder("Starting window",
+ TYPE_APPLICATION_STARTING, mWMService, mDisplayContent, iWindow,
+ (unused) -> createTestSession(mAtm),
+ null /* windowTokenCreator */).setWindowToken(activity).build();
activity.mStartingWindow = window;
mAppWindowMap.put(info.appToken, window);
mTaskAppMap.put(info.taskInfo.taskId, info.appToken);