summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/os/Bundle.java7
-rw-r--r--services/core/java/com/android/server/pm/OWNERS1
-rw-r--r--services/core/java/com/android/server/pm/dex/OWNERS1
-rw-r--r--services/core/java/com/android/server/wm/MirrorActiveUids.java55
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java3
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java12
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java6
7 files changed, 38 insertions, 47 deletions
diff --git a/core/java/android/os/Bundle.java b/core/java/android/os/Bundle.java
index a19b51b7811b..cf28c1639fac 100644
--- a/core/java/android/os/Bundle.java
+++ b/core/java/android/os/Bundle.java
@@ -989,7 +989,7 @@ public final class Bundle extends BaseBundle implements Cloneable, Parcelable {
* Otherwise, this method might throw an exception or return {@code null}.
*
* @param key a String, or {@code null}
- * @param clazz The type of the items inside the array
+ * @param clazz The type of the items inside the array. This is only verified when unparceling.
* @return a Parcelable[] value, or {@code null}
*/
@SuppressLint({"ArrayReturn", "NullableCollection"})
@@ -1053,7 +1053,8 @@ public final class Bundle extends BaseBundle implements Cloneable, Parcelable {
* Otherwise, this method might throw an exception or return {@code null}.
*
* @param key a String, or {@code null}
- * @param clazz The type of the items inside the array list
+ * @param clazz The type of the items inside the array list. This is only verified when
+ * unparceling.
* @return an ArrayList<T> value, or {@code null}
*/
@SuppressLint("NullableCollection")
@@ -1103,6 +1104,8 @@ public final class Bundle extends BaseBundle implements Cloneable, Parcelable {
* </ul>
*
* @param key a String, or null
+ * @param clazz The type of the items inside the sparse array. This is only verified when
+ * unparceling.
* @return a SparseArray of T values, or null
*/
@SuppressWarnings("unchecked")
diff --git a/services/core/java/com/android/server/pm/OWNERS b/services/core/java/com/android/server/pm/OWNERS
index c219f80ac9c5..cba81c1f5961 100644
--- a/services/core/java/com/android/server/pm/OWNERS
+++ b/services/core/java/com/android/server/pm/OWNERS
@@ -16,6 +16,7 @@ per-file AbstractStatsBase.java = file:dex/OWNERS
per-file BackgroundDexOptService.java = file:dex/OWNERS
per-file CompilerStats.java = file:dex/OWNERS
per-file DynamicCodeLoggingService.java = file:dex/OWNERS
+per-file Installer.java = file:dex/OWNERS
per-file InstructionSets.java = file:dex/OWNERS
per-file OtaDexoptService.java = file:dex/OWNERS
per-file OtaDexoptShellCommand.java = file:dex/OWNERS
diff --git a/services/core/java/com/android/server/pm/dex/OWNERS b/services/core/java/com/android/server/pm/dex/OWNERS
index 052a4ca52afd..5ca8ddd1fe17 100644
--- a/services/core/java/com/android/server/pm/dex/OWNERS
+++ b/services/core/java/com/android/server/pm/dex/OWNERS
@@ -1,3 +1,4 @@
alanstokes@google.com
jiakaiz@google.com
ngeoffray@google.com
+mast@google.com
diff --git a/services/core/java/com/android/server/wm/MirrorActiveUids.java b/services/core/java/com/android/server/wm/MirrorActiveUids.java
index 4e7f1d4cca18..b9aa9599babe 100644
--- a/services/core/java/com/android/server/wm/MirrorActiveUids.java
+++ b/services/core/java/com/android/server/wm/MirrorActiveUids.java
@@ -19,7 +19,7 @@ package com.android.server.wm;
import static android.app.ActivityManager.PROCESS_STATE_NONEXISTENT;
import android.app.ActivityManager.ProcessState;
-import android.util.SparseArray;
+import android.util.SparseIntArray;
import java.io.PrintWriter;
@@ -29,15 +29,14 @@ import java.io.PrintWriter;
* adjustment) or getting state from window manager (background start check).
*/
class MirrorActiveUids {
- private final SparseArray<UidRecord> mUidStates = new SparseArray<>();
+ /** Uid -> process state. */
+ private final SparseIntArray mUidStates = new SparseIntArray();
+
+ /** Uid -> number of non-app visible windows belong to the uid. */
+ private final SparseIntArray mNumNonAppVisibleWindowMap = new SparseIntArray();
synchronized void onUidActive(int uid, int procState) {
- UidRecord r = mUidStates.get(uid);
- if (r == null) {
- r = new UidRecord();
- mUidStates.put(uid, r);
- }
- r.mProcState = procState;
+ mUidStates.put(uid, procState);
}
synchronized void onUidInactive(int uid) {
@@ -45,22 +44,28 @@ class MirrorActiveUids {
}
synchronized void onUidProcStateChanged(int uid, int procState) {
- final UidRecord r = mUidStates.get(uid);
- if (r != null) {
- r.mProcState = procState;
+ final int index = mUidStates.indexOfKey(uid);
+ if (index >= 0) {
+ mUidStates.setValueAt(index, procState);
}
}
synchronized @ProcessState int getUidState(int uid) {
- final UidRecord r = mUidStates.get(uid);
- return r != null ? r.mProcState : PROCESS_STATE_NONEXISTENT;
+ return mUidStates.get(uid, PROCESS_STATE_NONEXISTENT);
}
/** Called when the surface of non-application (exclude toast) window is shown or hidden. */
synchronized void onNonAppSurfaceVisibilityChanged(int uid, boolean visible) {
- final UidRecord r = mUidStates.get(uid);
- if (r != null) {
- r.mNumNonAppVisibleWindow += visible ? 1 : -1;
+ final int index = mNumNonAppVisibleWindowMap.indexOfKey(uid);
+ if (index >= 0) {
+ final int num = mNumNonAppVisibleWindowMap.valueAt(index) + (visible ? 1 : -1);
+ if (num > 0) {
+ mNumNonAppVisibleWindowMap.setValueAt(index, num);
+ } else {
+ mNumNonAppVisibleWindowMap.removeAt(index);
+ }
+ } else if (visible) {
+ mNumNonAppVisibleWindowMap.append(uid, 1);
}
}
@@ -70,23 +75,15 @@ class MirrorActiveUids {
* {@link VisibleActivityProcessTracker}.
*/
synchronized boolean hasNonAppVisibleWindow(int uid) {
- final UidRecord r = mUidStates.get(uid);
- return r != null && r.mNumNonAppVisibleWindow > 0;
+ return mNumNonAppVisibleWindowMap.get(uid) > 0;
}
synchronized void dump(PrintWriter pw, String prefix) {
- pw.print(prefix + "NumNonAppVisibleWindowByUid:[");
- for (int i = mUidStates.size() - 1; i >= 0; i--) {
- final UidRecord r = mUidStates.valueAt(i);
- if (r.mNumNonAppVisibleWindow > 0) {
- pw.print(" " + mUidStates.keyAt(i) + ":" + r.mNumNonAppVisibleWindow);
- }
+ pw.print(prefix + "NumNonAppVisibleWindowUidMap:[");
+ for (int i = mNumNonAppVisibleWindowMap.size() - 1; i >= 0; i--) {
+ pw.print(" " + mNumNonAppVisibleWindowMap.keyAt(i) + ":"
+ + mNumNonAppVisibleWindowMap.valueAt(i));
}
pw.println("]");
}
-
- private static final class UidRecord {
- @ProcessState int mProcState;
- int mNumNonAppVisibleWindow;
- }
}
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 4258e073429e..575ae691dbe8 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -3277,9 +3277,6 @@ public class WindowManagerService extends IWindowManager.Stub
if (!checkCallingPermission(permission.CONTROL_KEYGUARD, "dismissKeyguard")) {
throw new SecurityException("Requires CONTROL_KEYGUARD permission");
}
- if (mAtmInternal.isDreaming()) {
- mAtmService.mTaskSupervisor.wakeUp("dismissKeyguard");
- }
synchronized (mGlobalLock) {
mPolicy.dismissKeyguardLw(callback, message);
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
index a91298f73d08..10011fd4e6e3 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
@@ -31,7 +31,6 @@ import static android.window.DisplayAreaOrganizer.FEATURE_VENDOR_FIRST;
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.never;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
@@ -42,7 +41,6 @@ import static org.junit.Assert.assertFalse;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
@@ -158,16 +156,6 @@ public class WindowManagerServiceTests extends WindowTestsBase {
}
@Test
- public void testDismissKeyguardCanWakeUp() {
- doReturn(true).when(mWm).checkCallingPermission(anyString(), anyString());
- spyOn(mWm.mAtmInternal);
- doReturn(true).when(mWm.mAtmInternal).isDreaming();
- doNothing().when(mWm.mAtmService.mTaskSupervisor).wakeUp(anyString());
- mWm.dismissKeyguard(null, "test-dismiss-keyguard");
- verify(mWm.mAtmService.mTaskSupervisor).wakeUp(anyString());
- }
-
- @Test
public void testMoveWindowTokenToDisplay_NullToken_DoNothing() {
mWm.moveWindowTokenToDisplay(null, mDisplayContent.getDisplayId());
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java
index e6ad68aafaec..7d501356d469 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java
@@ -800,7 +800,6 @@ public class WindowStateTests extends WindowTestsBase {
@Test
public void testHasActiveVisibleWindow() {
final int uid = ActivityBuilder.DEFAULT_FAKE_UID;
- mAtm.mActiveUids.onUidActive(uid, 0 /* any proc state */);
final WindowState app = createWindow(null, TYPE_APPLICATION, "app", uid);
app.mActivityRecord.setVisible(false);
@@ -828,6 +827,11 @@ public class WindowStateTests extends WindowTestsBase {
// Make the application overlay window visible. It should be a valid active visible window.
overlay.onSurfaceShownChanged(true);
assertTrue(mAtm.hasActiveVisibleWindow(uid));
+
+ // The number of windows should be independent of the existence of uid state.
+ mAtm.mActiveUids.onUidInactive(uid);
+ mAtm.mActiveUids.onUidActive(uid, 0 /* any proc state */);
+ assertTrue(mAtm.mActiveUids.hasNonAppVisibleWindow(uid));
}
@UseTestDisplay(addWindows = W_ACTIVITY)