Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e55dfb9f authored by Michael Wright's avatar Michael Wright Committed by Automerger Merge Worker
Browse files

Merge "Don't crash system_server due to bad event time stamps." into udc-dev...

Merge "Don't crash system_server due to bad event time stamps." into udc-dev am: 3588c993 am: 62ddc3e7 am: c708c681

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/22761826



Change-Id: I45f08981cf4157aa0a04f4911da4e7c80cc244f3
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 62573f2d c708c681
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -5690,8 +5690,14 @@ public final class PowerManagerService extends SystemService
            }

            if (eventTime > now) {
                Slog.e(TAG, "Event time " + eventTime + " cannot be newer than " + now);
                throw new IllegalArgumentException("event time must not be in the future");
                Slog.wtf(TAG, "Event cannot be newer than the current time ("
                        + "now=" + now
                        + ", eventTime=" + eventTime
                        + ", displayId=" + displayId
                        + ", event=" + PowerManager.userActivityEventToString(event)
                        + ", flags=" + flags
                        + ")");
                return;
            }

            final int uid = Binder.getCallingUid();
+17 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static android.app.ActivityManager.PROCESS_STATE_BOUND_TOP;
import static android.app.ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE;
import static android.app.AppOpsManager.MODE_ALLOWED;
import static android.app.AppOpsManager.MODE_ERRORED;
import static android.os.PowerManager.USER_ACTIVITY_EVENT_BUTTON;
import static android.os.PowerManagerInternal.WAKEFULNESS_ASLEEP;
import static android.os.PowerManagerInternal.WAKEFULNESS_AWAKE;
import static android.os.PowerManagerInternal.WAKEFULNESS_DOZING;
@@ -41,6 +42,7 @@ import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.ArgumentMatchers.same;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.atMost;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
@@ -112,6 +114,7 @@ import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.stubbing.Answer;

import java.time.Duration;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Executor;
@@ -2468,4 +2471,18 @@ public class PowerManagerServiceTest {
        verify(mNotifierMock).onWakeLockReleased(anyInt(), eq(tag), eq(packageName), anyInt(),
                anyInt(), any(), any(), same(callback2));
    }

    @Test
    public void testUserActivity_futureEventsAreIgnored() {
        createService();
        startSystem();
        // Starting the system triggers a user activity event, so clear that before calling
        // userActivity() directly.
        clearInvocations(mNotifierMock);
        final long eventTime = mClock.now() + Duration.ofHours(10).toMillis();
        mService.getBinderServiceInstance().userActivity(Display.DEFAULT_DISPLAY, eventTime,
                USER_ACTIVITY_EVENT_BUTTON, /* flags= */ 0);
        verify(mNotifierMock, never()).onUserActivity(anyInt(),  anyInt(), anyInt());
    }

}