Allow setting alarm to the same time as an earlier one

With alarm deferring, we may end up rescheduling an alarm to the exact
time we set the previous kernel alarm to. Removing the optimization to
prevent duplicate sets, as otherwise we may end up being in a bad state
of no kernel alarm set. Also added the field maxWhenElapsed to the alarm
dump for more details in the bugreports.

Test: Builds. Boots. Existing tests pass:
atest CtsAlarmManagerTestCases

Bug: 73069486
Change-Id: Iade4549b399def57902b644b1d50945722e60c28
diff --git a/services/core/java/com/android/server/AlarmManagerService.java b/services/core/java/com/android/server/AlarmManagerService.java
index 10fad62..a422b7c 100644
--- a/services/core/java/com/android/server/AlarmManagerService.java
+++ b/services/core/java/com/android/server/AlarmManagerService.java
@@ -2584,7 +2584,7 @@
         if (mAlarmBatches.size() > 0) {
             final Batch firstWakeup = findFirstWakeupBatchLocked();
             final Batch firstBatch = mAlarmBatches.get(0);
-            if (firstWakeup != null && mNextWakeup != firstWakeup.start) {
+            if (firstWakeup != null) {
                 mNextWakeup = firstWakeup.start;
                 mLastWakeupSet = SystemClock.elapsedRealtime();
                 setLocked(ELAPSED_REALTIME_WAKEUP, firstWakeup.start);
@@ -2598,7 +2598,7 @@
                 nextNonWakeup = mNextNonWakeupDeliveryTime;
             }
         }
-        if (nextNonWakeup != 0 && mNextNonWakeup != nextNonWakeup) {
+        if (nextNonWakeup != 0) {
             mNextNonWakeup = nextNonWakeup;
             setLocked(ELAPSED_REALTIME, nextNonWakeup);
         }
@@ -3229,6 +3229,8 @@
                     expectedMaxWhenElapsed, nowELAPSED, pw);
                     pw.print(" whenElapsed="); TimeUtils.formatDuration(whenElapsed,
                             nowELAPSED, pw);
+                    pw.print(" maxWhenElapsed="); TimeUtils.formatDuration(maxWhenElapsed,
+                            nowELAPSED, pw);
                     pw.print(" when=");
                     if (isRtc) {
                         pw.print(sdf.format(new Date(when)));