Skip to content

[Android] Fix DatePicker dialog dismisses after the device is rotated#34980

Open
HarishwaranVijayakumar wants to merge 3 commits intodotnet:mainfrom
HarishwaranVijayakumar:fix-datepickerdialogdismiss
Open

[Android] Fix DatePicker dialog dismisses after the device is rotated#34980
HarishwaranVijayakumar wants to merge 3 commits intodotnet:mainfrom
HarishwaranVijayakumar:fix-datepickerdialogdismiss

Conversation

@HarishwaranVijayakumar
Copy link
Copy Markdown
Contributor

Note

Are you waiting for the changes in this PR to be merged?
It would be very helpful if you could test the resulting artifacts from this PR and let us know in a comment if this change resolves your issue. Thank you!

Issue Details

  • The DatePicker dialog is dismissed when the device is rotated while the dialog is open.

Root Cause of the issue

  • PR 29323 added DismissEvent subscription in CreateDatePickerDialog() and an OnDialogDismiss → HidePickerDialog() chain that sets IsOpen = false.
  • On rotation, OnMainDisplayInfoChanged unsubscribes DismissEvent and calls Dismiss().
  • ShowPickerDialog() runs synchronously after Dismiss(), enters the else branch, and re-subscribes DismissEvent on the same dialog.
  • The DismissEvent from step 2 fires after re-subscription, triggering HidePickerDialog() which dismisses the newly-shown dialog.
  • Before PR 29323: There was no DismissEvent subscription, no IsOpen property, and no OnDialogDismiss handler — so the dismiss-and-re-show flow in OnMainDisplayInfoChanged worked without interference.

Description of Change

Dialog lifecycle and event handling improvements:

  • Renamed ResetDialog() to DestroyDialog() and updated all references accordingly to clarify its purpose and ensure consistent dialog destruction and recreation.
  • Removed unnecessary subscriptions and unsubscriptions to the dialog's DismissEvent, simplifying dialog event handling in both ShowPickerDialog() and HidePickerDialog().

Display info change handling:

  • Improved the logic in OnMainDisplayInfoChanged to properly destroy and recreate the dialog with the current date, ensuring the dialog updates correctly when display information changes (such as orientation changes).

Issues Fixed

Fixes #34973

Tested the behaviour in the following platforms

  • - Windows
  • - Android
  • - iOS
  • - Mac
Before After
Before_fixdatepicker.mov
After_fixdatepicker.mov

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 15, 2026

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://github.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 34980

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://github.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 34980"

@dotnet-policy-service dotnet-policy-service Bot added the community ✨ Community Contribution label Apr 15, 2026
@dotnet-policy-service
Copy link
Copy Markdown
Contributor

Hey there @@HarishwaranVijayakumar! Thank you so much for your PR! Someone from the team will get assigned to your PR shortly and we'll get it reviewed.

@dotnet-policy-service dotnet-policy-service Bot added the partner/syncfusion Issues / PR's with Syncfusion collaboration label Apr 15, 2026
@sheiksyedm sheiksyedm marked this pull request as ready for review April 15, 2026 14:32
Copilot AI review requested due to automatic review settings April 15, 2026 14:32
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Fixes an Android regression where the DatePicker dialog immediately dismisses after device rotation by adjusting the dialog lifecycle to avoid re-triggering the dialog’s dismiss handling during the rotation re-show flow.

Changes:

  • Renamed ResetDialog() to DestroyDialog() and updated call sites to better reflect behavior (dismiss + null-out).
  • Simplified DismissEvent wiring by removing per-show/per-hide subscribe/unsubscribe and keeping it scoped to dialog creation/destruction.
  • Updated OnMainDisplayInfoChanged to capture the currently selected date, destroy the existing dialog, and recreate/show a new dialog with the captured date.

@MauiBot MauiBot added s/agent-changes-requested AI agent recommends changes - found a better alternative or issues s/agent-fix-pr-picked AI could not beat the PR fix - PR is the best among all candidates s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review) labels Apr 15, 2026
@dotnet dotnet deleted a comment from MauiBot Apr 17, 2026
@dotnet dotnet deleted a comment from MauiBot Apr 17, 2026
@kubaflo
Copy link
Copy Markdown
Contributor

kubaflo commented Apr 17, 2026

/azp run maui-pr-uitests , maui-pr-devicetests

@azure-pipelines
Copy link
Copy Markdown

Azure Pipelines successfully started running 2 pipeline(s).

@HarishwaranVijayakumar
Copy link
Copy Markdown
Contributor Author

Looks like some tests are failing - could you please verify?

I have verified the failures, and they are not related to this fix.

@dotnet dotnet deleted a comment from MauiBot Apr 21, 2026
@dotnet dotnet deleted a comment from MauiBot Apr 21, 2026
@dotnet dotnet deleted a comment from MauiBot Apr 22, 2026
@dotnet dotnet deleted a comment from MauiBot Apr 22, 2026
@dotnet dotnet deleted a comment from MauiBot Apr 22, 2026
Copy link
Copy Markdown
Contributor

@kubaflo kubaflo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you please verify the failing tests?

@dotnet dotnet deleted a comment from MauiBot Apr 26, 2026
PureWeen pushed a commit that referenced this pull request Apr 30, 2026
…ability (#35133)

<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!

> **Depends on #35136** (pipeline category detection — should merge
first)

## What this does

Two things:

### 1. UI test category detection in PR review

During the PR review workflow, Step 0.5 detects which UI test categories
the PR impacts and writes the result to the AI summary comment. This
gives reviewers visibility into which UI tests are relevant.

**Detection** reuses the 3-tier script from #35136 (test attributes →
source paths → AI reasoning).

**AI summary** shows a new 🧪 UI Tests section with detected categories
before the gate section.

### 2. Gate reliability fixes

Multiple fixes to make the gate (`verify-tests-fail.ps1`) more
deterministic:

| Fix | Problem it solves |
|-----|-------------------|
| **Absolute path resolution** | Gate scripts not found on Linux CI
agents (`Resolve-Path`, `GetFullPath`) |
| **File existence check** | Instant cryptic failure when verify script
is missing — now logs clear error |
| **3x retry on ENV ERROR** | Emulator timeouts, ADB failures, app
crashes — transient issues that pass on retry |
| **Strip bad report blocks** | Old verify script produces `Passed:
False` with empty counts — stripped instead of shown |
| **Gate log in fallback** | When report is missing, shows last 20 lines
of gate output instead of just `❌ FAILED / Platform: IOS` |

## Files

| File | Changes |
|------|---------|
| `.github/scripts/Review-PR.ps1` | Step 0.5 category detection + all 5
gate fixes |
| `.github/scripts/post-ai-summary-comment.ps1` | Add `uitests` phase to
render detected categories |
| `.github/pr-review/pr-preflight.md` | Step 7: AI identifies impacted
UI test categories |

## Validation — PR reviewer builds (Apr 26)

10 builds against real PRs — all succeeded ✅. Category detection shown
in AI summary comment.

| PR | Categories Detected | Build | AI Summary |
|----|-------------------|-------|------------|
| #35037 (WebView theme) | `ViewBaseTests,WebView` |
[13940071](https://devdiv.visualstudio.com/DevDiv/_build/results?buildId=13940071)
|
[comment](#35037 (comment))
|
| #35031 (Shell memory leak) | `Shell` |
[13940072](https://devdiv.visualstudio.com/DevDiv/_build/results?buildId=13940072)
|
[comment](#35031 (comment))
|
| #35020 (XAML Hot Reload) | _(none — XAML only)_ |
[13940073](https://devdiv.visualstudio.com/DevDiv/_build/results?buildId=13940073)
| ✅ Shows "No UI test categories" |
| #35008 (Shell SearchHandler) | `Shell` |
[13940074](https://devdiv.visualstudio.com/DevDiv/_build/results?buildId=13940074)
| ✅ |
| #34997 (RadioButton gradient) | `RadioButton,ViewBaseTests` |
[13940075](https://devdiv.visualstudio.com/DevDiv/_build/results?buildId=13940075)
| ✅ |
| #34980 (DatePicker rotation) | `ViewBaseTests` |
[13940076](https://devdiv.visualstudio.com/DevDiv/_build/results?buildId=13940076)
| ✅ |
| #34974 (Picker CharacterSpacing) | `ViewBaseTests` |
[13940077](https://devdiv.visualstudio.com/DevDiv/_build/results?buildId=13940077)
| ✅ |
| #34923 (SwipeView threshold) | `SwipeView,ViewBaseTests` |
[13940078](https://devdiv.visualstudio.com/DevDiv/_build/results?buildId=13940078)
| ✅ |
| #34907 (CollectionView ScrollTo) | `CollectionView` |
[13940079](https://devdiv.visualstudio.com/DevDiv/_build/results?buildId=13940079)
| ✅ |
| #34845 (RefreshView binding) | `RefreshView,ViewBaseTests` |
[13940080](https://devdiv.visualstudio.com/DevDiv/_build/results?buildId=13940080)
| ✅ |

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@dotnet dotnet deleted a comment from MauiBot May 2, 2026
Copy link
Copy Markdown
Collaborator

@MauiBot MauiBot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Expert Review — 3 findings

See inline comments for details.

@dotnet dotnet deleted a comment from MauiBot May 3, 2026
@dotnet dotnet deleted a comment from MauiBot May 3, 2026
@MauiBot
Copy link
Copy Markdown
Collaborator

MauiBot commented May 3, 2026

🤖 AI Summary

👋 @HarishwaranVijayakumar — new AI review results are available. Please review the latest session below.

📊 Review Sessione77ceb5 · Modify stale comments · 2026-05-03 16:36 UTC
🚦 Gate — Test Before & After Fix

Gate Result: ❌ FAILED

Platform: ANDROID · Base: main · Merge base: 1463c4c5

🩺 Fix breaks tests — one or more tests fail with the fix applied, and none of the failures are resolved by the fix.

Test Without Fix (expect FAIL) With Fix (expect PASS)
📱 DatePickerHandlerTests DatePickerHandlerTests ✅ FAIL — 679s ❌ FAIL — 315s
📱 DatePickerTests DatePickerTests ❌ PASS — 1133s ✅ PASS — 1068s
🔴 Without fix — 📱 DatePickerHandlerTests: FAIL ✅ · 679s

(truncated to last 15,000 chars)

iceTests.SwipeViewHandlerTests 0.2161282 ms
      05-03 13:28:24.257 18628 20692 I ore.devicetest: Explicit concurrent copying GC freed 5651(419KB) AllocSpace objects, 0(0B) LOS objects, 49% free, 11MB/22MB, paused 15us total 13.334ms
      05-03 13:28:24.266 18628 18665 I DOTNET  : Failed tests:
      05-03 13:28:24.267 18628 18665 I DOTNET  : 1) 	[FAIL] Thumb Color Updates Correctly   Test name: Thumb Color Updates Correctly
      05-03 13:28:24.267 18628 18665 I DOTNET  :    Assembly:  [Microsoft.Maui.Core.DeviceTests, Version=10.0.0.0, Culture=neutral, PublicKeyToken=null]
      05-03 13:28:24.267 18628 18665 I DOTNET  :    Exception messages: Color Color [A=255, R=255, G=0, B=0] not found. This is what it looked like:<img>iVBORw0KGgoAAAANSUhEUgAAAIQAAACECAYAAABRRIOnAAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAA/rSURBVHic7Z17jB3Vfcc/v3Nm7mMf9u567QVjMDYuD2NMk7agKGkxhTTpU6iCVG1FGlo1UdWmUtWHQqMKXKlVioRKojRRWjVUrdSWh1pUgigtLyUNJBQwxtjYYDCY9WO99q69r7t3Zs45/WPu7J293vWuvXvte+n5SKM7unfuvM53fr/f+Z3HgMfj8Xg8Ho/H4/F4PB6Px+PxeDwej8fj8Xg8Ho/H4/F4PB6Px+PxeDwej8fj8Xg8Ho/H4/F4PB6Px+PxeNoTudAn8P+c/P13F+wscnhBNJf57q80rOfFMJ8wzotgvCCWn8bCXmi9kfnEsRjRLBkviOWh8T5Kw6eaZ9v5XEZ+3TZ81yiGZRWHF8TSaSzgvAjywpAfAxWDXF777Mr9dwJcCO49sCG4V1IhOGYLIS+OplgML4hzZ64nXTWurwPpA9UHcgz4XeAWkCLoXhABceBGwVXBPAPub4A1wAi4EbCDdQHkBdFoORrXl3xRnsXTKAYFyGaQPaA+BvIBEIO6Cwq/BX290HcCLumA9WVYq2BlAEUHIRAbqFo4VYHDU/D+Kjg0CiN/DyMPQhSCvRR4sS6GvEiWTRReEGfPLDdAThBrQa8HdxsEt8LAari2CB8pw/UhXCmwSkEnUJb0P87VdyguLdyKhUkHJxJ4awp2TsGOEdj9NAw9Bsn7IIfBcLo45oszzvriPIsjCw5niWEt6MPg/gD4FdhwDdysYFsI1ytYDxTIFZKQlqICV/vEgqjaRrl6qACRhfdj2Gnh+TfhuYfgwF8Da+vCmEsUmUs5K7wgFsd8VkFthiCC+DroehDuKMDtCrYo6AOC3H9
      05-03 13:28:24.267 18628 18665 I DOTNET  :    at System.Threading.Tasks.Task.<>c.<.cctor>b__288_0(Object obj)
      05-03 13:28:24.267 18628 18665 I DOTNET  :    at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread , ExecutionContext , ContextCallback , Object )
      05-03 13:28:24.267 18628 18665 I DOTNET  : --- End of stack trace from previous location ---
      05-03 13:28:24.267 18628 18665 I DOTNET  :    at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread , ExecutionContext , ContextCallback , Object )
      05-03 13:28:24.267 18628 18665 I DOTNET  :    at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& , Thread )
      05-03 13:28:24.267 18628 18665 I DOTNET  : --- End of stack trace from previous location ---
      05-03 13:28:24.267 18628 18665 I DOTNET  :    at Microsoft.Maui.DeviceTests.AssertionExtensions.AssertContainsColor(View view, Color expectedColor, IMauiContext mauiContext, Nullable`1 tolerance)
      05-03 13:28:24.267 18628 18665 I DOTNET  :    at Microsoft.Maui.DeviceTests.HandlerTestBasement.<>c__DisplayClass18_0.<<ValidateHasColor>b__0>d.MoveNext()
      05-03 13:28:24.267 18628 18665 I DOTNET  : --- End of stack trace from previous location ---
      05-03 13:28:24.267 18628 18665 I DOTNET  :    at Microsoft.Maui.Dispatching.DispatcherExtensions.<>c__DisplayClass3_0.<<DispatchAsync>b__0>d.MoveNext()
      05-03 13:28:24.267 18628 18665 I DOTNET  : --- End of stack trace from previous location ---
      05-03 13:28:24.271 18628 18665 I DOTNET  :    at Microsoft.Maui.Dispatching.DispatcherExtensions.<>c__DisplayClass2_0`1.<<DispatchAsync>b__0>d[[System.Boolean, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
      05-03 13:28:24.271 18628 18665 I DOTNET  : --- End of stack trace from previous location ---
      05-03 13:28:24.271 18628 18665 I DOTNET  :    at Microsoft.Maui.DeviceTests.SwitchHandlerTests.ThumbColorUpdatesCorrectly()
      05-03 13:28:24.271 18628 18665 I DOTNET  : --- End of stack trace from previous location ---
      05-03 13:28:24.271 18628 18665 I DOTNET  :    Execution time: 0.286512
      05-03 13:28:24.271 18628 18665 I DOTNET  :    Test trait name: Category
      05-03 13:28:24.271 18628 18665 I DOTNET  :       value: Switch
      05-03 13:28:24.271 18628 18665 I DOTNET  : 
      05-03 13:28:24.308 18628 18665 I DOTNET  : Xml file was written to the provided writer.
      05-03 13:28:24.309 18628 18665 I DOTNET  : Tests run: 3015 Passed: 2942 Inconclusive: 0 Failed: 1 Ignored: 0
      05-03 13:28:24.322 13494 16972 D CompatibilityChangeReporter: Compat change id reported: 149924527; UID 10158; state: ENABLED
      05-03 13:28:24.322 13494 16972 D CompatibilityChangeReporter: Compat change id reported: 132649864; UID 10158; state: DISABLED
      05-03 13:28:24.341 14281 14301 I MediaProvider: Using lower FS for /storage/emulated/0/Download/com.microsoft.maui.core.devicetests/9e271c5f832a44578ed657a0a81fee73/testResults.xml
      05-03 13:28:24.348 13494 16972 I ActivityManager: Force stopping com.microsoft.maui.core.devicetests appid=10158 user=0: finished inst
      05-03 13:28:24.349 13494 16972 I ActivityManager: Killing 18628:com.microsoft.maui.core.devicetests/u0a158 (adj 0): stop com.microsoft.maui.core.devicetests due to finished inst
      05-03 13:28:24.356 13494 16972 W ActivityTaskManager: Force removing ActivityRecord{ea4cb61 u0 com.microsoft.maui.core.devicetests/.TestActivity t21 f}}: app died, no saved state
      05-03 13:28:24.377 18599 18599 D AndroidRuntime: Shutting down VM
      05-03 13:28:24.388 13494 16972 W InputReader: Device virtio_input_multi_touch_10 is associated with display ADISPLAY_ID_NONE.
      05-03 13:28:24.388 13494 16972 W InputReader: Device virtio_input_multi_touch_4 is associated with display ADISPLAY_ID_NONE.
      05-03 13:28:24.388 13494 16972 W InputReader: Device virtio_input_multi_touch_11 is associated with display ADISPLAY_ID_NONE.
      05-03 13:28:24.388 13494 16972 W InputReader: Device virtio_input_multi_touch_8 is associated with display ADISPLAY_ID_NONE.
      05-03 13:28:24.388 13494 16972 W InputReader: Device virtio_input_multi_touch_5 is associated with display ADISPLAY_ID_NONE.
      05-03 13:28:24.388 13494 16972 W InputReader: Device virtio_input_multi_touch_2 is associated with display ADISPLAY_ID_NONE.
      05-03 13:28:24.388 13494 16972 W InputReader: Device virtio_input_multi_touch_6 is associated with display ADISPLAY_ID_NONE.
      05-03 13:28:24.388 13494 16972 W InputReader: Device virtio_input_multi_touch_3 is associated with display ADISPLAY_ID_NONE.
      05-03 13:28:24.388 13494 16972 W InputReader: Device virtio_input_multi_touch_9 is associated with display ADISPLAY_ID_NONE.
      05-03 13:28:24.388 13494 16972 W InputReader: Device virtio_input_multi_touch_7 is associated with display ADISPLAY_ID_NONE.
      05-03 13:28:24.388 13494 16972 W InputReader: Device virtio_input_multi_touch_10 is associated with display ADISPLAY_ID_NONE.
      05-03 13:28:24.388 13494 16972 W InputReader: Device virtio_input_multi_touch_4 is associated with display ADISPLAY_ID_NONE.
      05-03 13:28:24.388 13494 16972 W InputReader: Device virtio_input_multi_touch_11 is associated with display ADISPLAY_ID_NONE.
      05-03 13:28:24.388 13494 16972 W InputReader: Device virtio_input_multi_touch_8 is associated with display ADISPLAY_ID_NONE.
      05-03 13:28:24.388 13494 16972 W InputReader: Device virtio_input_multi_touch_5 is associated with display ADISPLAY_ID_NONE.
      05-03 13:28:24.388 13494 16972 W InputReader: Device virtio_input_multi_touch_2 is associated with display ADISPLAY_ID_NONE.
      05-03 13:28:24.388 13494 16972 W InputReader: Device virtio_input_multi_touch_6 is associated with display ADISPLAY_ID_NONE.
      05-03 13:28:24.388 13494 16972 W InputReader: Device virtio_input_multi_touch_3 is associated with display ADISPLAY_ID_NONE.
      05-03 13:28:24.388 13494 16972 W InputReader: Device virtio_input_multi_touch_9 is associated with display ADISPLAY_ID_NONE.
      05-03 13:28:24.388 13494 16972 W InputReader: Device virtio_input_multi_touch_7 is associated with display ADISPLAY_ID_NONE.
      05-03 13:28:24.426 14578 14687 D HostConnection: HostConnection::get() New Host Connection established 0x7ba5f5724310, tid 14687
      05-03 13:28:24.489 14578 14687 D HostConnection: HostComposition ext ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_native_sync_v2 ANDROID_EMU_dma_v1 ANDROID_EMU_direct_mem ANDROID_EMU_host_composition_v1 ANDROID_EMU_host_composition_v2 ANDROID_EMU_vulkan ANDROID_EMU_deferred_vulkan_commands ANDROID_EMU_vulkan_null_optional_strings ANDROID_EMU_vulkan_create_resources_with_requirements ANDROID_EMU_YUV_Cache ANDROID_EMU_vulkan_ignored_handles ANDROID_EMU_has_shared_slots_host_memory_allocator ANDROID_EMU_vulkan_free_memory_sync ANDROID_EMU_vulkan_shader_float16_int8 ANDROID_EMU_vulkan_async_queue_submit ANDROID_EMU_sync_buffer_data ANDROID_EMU_vulkan_async_qsri ANDROID_EMU_read_color_buffer_dma ANDROID_EMU_hwc_color_transform GL_OES_EGL_image_external_essl3 GL_OES_vertex_array_object GL_KHR_texture_compression_astc_ldr ANDROID_EMU_host_side_tracing ANDROID_EMU_gles_max_version_3_0 
      05-03 13:28:24.490 13494 13822 W ActivityManager: Unable to start service Intent { act=android.service.appprediction.AppPredictionService cmp=com.google.android.as/com.google.android.apps.miphone.aiai.app.AiAiPredictionService } U=0: not found
      05-03 13:28:24.490 13494 13822 W RemoteAppPredictionService: could not bind to Intent { act=android.service.appprediction.AppPredictionService cmp=com.google.android.as/com.google.android.apps.miphone.aiai.app.AiAiPredictionService } using flags 67108865
      05-03 13:28:24.507 14578 14687 D EGL_emulation: eglCreateContext: 0x7ba5e5792e00: maj 3 min 0 rcv 3
      05-03 13:28:24.508 14578 14687 D EGL_emulation: eglMakeCurrent: 0x7ba5e5792e00: ver 3 0 (tinfo 0x7ba585783d10) (first time)
      05-03 13:28:24.541   297   297 D goldfish-address-space: claimShared: Ask to claim region [0x3f8000000 0x3f87e9000]
      05-03 13:28:24.548   297 14273 D goldfish-address-space: claimShared: Ask to claim region [0x3f8cc4000 0x3f94ad000]
      05-03 13:28:24.553   297 14273 D goldfish-address-space: claimShared: Ask to claim region [0x3f94ad000 0x3f9c96000]
      05-03 13:28:24.660   297 14273 D goldfish-address-space: claimShared: Ask to claim region [0x3f9c96000 0x3fa47f000]
      05-03 13:28:24.663   297 14273 D goldfish-address-space: claimShared: Ask to claim region [0x3fcb03000 0x3fd2ec000]
      05-03 13:28:24.664   297 14273 D goldfish-address-space: claimShared: Ask to claim region [0x3fdad5000 0x3fe2be000]
      05-03 13:28:25.122 14578 14687 I OpenGLRenderer: Davey! duration=703ms; Flags=1, IntendedVsync=2078825231249, Vsync=2078825231249, OldestInputEvent=9223372036854775807, NewestInputEvent=0, HandleInputStart=2078829274969, AnimationStart=2078829275400, PerformTraversalsStart=2078829275601, DrawStart=2079083010129, SyncQueued=2079254241537, SyncStart=2079265769922, IssueDrawCommandsStart=2079265974555, SwapBuffers=2079413447169, FrameCompleted=2079540408852, DequeueBufferDuration=67215, QueueBufferDuration=150211, GpuCompleted=8245940720249172582, 
      05-03 13:28:25.124 14578 14578 I Choreographer: Skipped 41 frames!  The application may be doing too much work on its main thread.
      05-03 13:28:25.126 14578 14578 I bwmt    : onStart
      05-03 13:28:25.368 13494 13980 D ConnectivityService: requestNetwork for uid/pid:10108/14578 NetworkRequest [ TRACK_DEFAULT id=85, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Uid: 10108 AdministratorUids: [] RequestorUid: 10108 RequestorPackageName: com.google.android.googlequicksearchbox] ]
      05-03 13:28:25.368 13494 13609 D ConnectivityService: NetReassign [85 : null → 101]
      05-03 13:28:25.369 13494 13605 D WifiNetworkFactory: got request NetworkRequest [ TRACK_DEFAULT id=85, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Uid: 10108 AdministratorUids: [] RequestorUid: 10108 RequestorPackageName: com.google.android.googlequicksearchbox] ] with score 60 and providerId 3
      05-03 13:28:25.369 13494 13605 D UntrustedWifiNetworkFactory: got request NetworkRequest [ TRACK_DEFAULT id=85, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Uid: 10108 AdministratorUids: [] RequestorUid: 10108 RequestorPackageName: com.google.android.googlequicksearchbox] ] with score 60 and providerId 3
      05-03 13:28:25.369 13921 13921 D PhoneSwitcherNetworkRequstListener: got request NetworkRequest [ TRACK_DEFAULT id=85, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Uid: 10108 AdministratorUids: [] RequestorUid: 10108 RequestorPackageName: com.google.android.googlequicksearchbox] ] with score 60 and providerId 3
      05-03 13:28:25.374 13666 13666 V KeyguardUpdateMonitor: onSubscriptionInfoChanged()
      05-03 13:28:25.376 13921 13921 D Telephony: isEmergencyPreferredAccount: subId=1, activeData=1
      05-03 13:28:25.376 13921 13921 D Telephony: isEmergencyPreferredAccount: Device does not require preference.
      05-03 13:28:25.376 13666 13666 V KeyguardUpdateMonitor: SubInfo:{id=1 iccId=890141032[****] simSlotIndex=0 carrierId=1 displayName=T-Mobile carrierName=Android nameSource=3 iconTint=-16746133 number=[****] dataRoaming=0 iconBitmap=android.graphics.Bitmap@5d79fc8 mcc=310 mnc=260 countryIso=us isEmbedded=false nativeAccessRules=null cardString=890141032[****] cardId=-1 isOpportunistic=false groupUUID=null isGroupDisabled=false profileClass=-1 ehplmns=null hplmns=null subscriptionType=0 groupOwner=null carrierConfigAccessRules=null areUiccApplicationsEnabled=true}
      05-03 13:28:25.537 14578 14578 I buhd    : (REDACTED) [%s] onStart()
      05-03 13:28:25.548 14578 14578 E NetworkErrorMessage: (REDACTED) Invalid connectivity state: %s
      05-03 13:28:25.548 14578 14578 I bwmt    : onResume
      05-03 13:28:25.577 13455 13455 I Zygote  : Process 18628 exited due to signal 9 (Killed)
      05-03 13:28:25.584 13494 13551 I libprocessgroup: Successfully killed process cgroup uid 10158 pid 18628 in 1233ms
      05-03 13:28:25.613 13494 13822 D AutofillSession: handling death of Token{ddaf663 ActivityRecord{ea4cb61 u0 com.microsoft.maui.core.devicetests/.TestActivity t-1 f}}} when saving=false
      05-03 13:28:25.618 13494 13534 W ActivityManager: setHasOverlayUi called on unknown pid: 18628
      05-03 13:28:25.108 15400 15400 W ThreadPoolForeg: type=1400 audit(0.0:1521): avc: denied { write } for name="traced_producer" dev="tmpfs" ino=12333 scontext=u:r:gmscore_app:s0:c512,c768 tcontext=u:object_r:traced_producer_socket:s0 tclass=sock_file permissive=0 app=com.google.android.gms
      
�[41m�[30mfail�[39m�[22m�[49m: Non-success instrumentation exit code: 1, expected: 0
�[40m�[32minfo�[39m�[22m�[49m: Attempting to remove apk 'com.microsoft.maui.core.devicetests'..
�[40m�[37mdbug�[39m�[22m�[49m: Executing command: '/home/vsts/.nuget/packages/microsoft.dotnet.xharness.cli/11.0.0-prerelease.26107.1/runtimes/any/native/adb/linux/adb -s emulator-5554 uninstall com.microsoft.maui.core.devicetests'
�[40m�[32minfo�[39m�[22m�[49m: Successfully uninstalled com.microsoft.maui.core.devicetests
XHarness exit code: 1 (TESTS_FAILED)
  Tests completed with exit code: 1

🟢 With fix — 📱 DatePickerHandlerTests: FAIL ❌ · 315s

(truncated to last 15,000 chars)

03 13:52:34.894 25860 27492 I DOTNET  : 	[PASS] LineHeightAppliedWhenTextAdded
      05-03 13:52:34.896 25860 27492 I DOTNET  : 	[PASS] TranslationX Initialize Correctly
      05-03 13:52:34.897 25860 27492 I chatty  : uid=10160(com.microsoft.maui.core.devicetests) identical 1 line
      05-03 13:52:34.898 25860 27492 I DOTNET  : 	[PASS] TranslationX Initialize Correctly
      05-03 13:52:34.900 25860 27492 I DOTNET  : 	[PASS] DisconnectHandlerDoesntCrash
      05-03 13:52:34.903 25860 27492 I DOTNET  : 	[PASS] RotationY Initialize Correctly
      05-03 13:52:34.906 25860 27492 I chatty  : uid=10160(com.microsoft.maui.core.devicetests) identical 3 lines
      05-03 13:52:34.907 25860 27492 I DOTNET  : 	[PASS] RotationY Initialize Correctly
      05-03 13:52:34.908 25860 27492 I DOTNET  : 	[PASS] CharacterSpacing Initializes Correctly
      05-03 13:52:34.910 25860 27492 I DOTNET  : 	[PASS] Null Text Color Doesn't Crash
      05-03 13:52:34.910 25860 27492 I DOTNET  : Microsoft.Maui.DeviceTests.LabelHandlerTests 0.5495844 ms
      05-03 13:52:34.910 25860 27492 I DOTNET  : Test collection for Microsoft.Maui.DeviceTests.EntryHandlerTests+EntryFocusTests
      05-03 13:52:34.912 18798 18798 W ThreadPoolForeg: type=1400 audit(0.0:1717): avc: denied { write } for name="traced_producer" dev="tmpfs" ino=12333 scontext=u:r:gmscore_app:s0:c512,c768 tcontext=u:object_r:traced_producer_socket:s0 tclass=sock_file permissive=0 app=com.google.android.gms
      05-03 13:52:35.032 13494 13494 W AutofillInlineSuggestionsRequestSession: Never received an InlineSuggestionsRequest from the IME for 1073742905@2014508038
      05-03 13:52:35.069 25860 25860 I AssistStructure: Flattened final assist data: 2948 bytes, containing 3 windows, 19 views
      05-03 13:52:35.076 13494 13494 W AutofillInlineSuggestionsRequestSession: Never received an InlineSuggestionsRequest from the IME for 1073742918@2014508038
      05-03 13:52:35.112 13494 14265 W AutofillSession: No current view id - session might have finished
      05-03 13:52:35.116 25860 27497 I DOTNET  : 	[PASS] FocusAndIsFocusedIsWorking
      05-03 13:52:35.116 25860 27497 I DOTNET  : Microsoft.Maui.DeviceTests.EntryHandlerTests+EntryFocusTests 0.2056409 ms
      05-03 13:52:35.210 25860 27294 I DOTNET  : Failed tests:
      05-03 13:52:35.288 25860 27294 I DOTNET  : 1) 	[FAIL] Thumb Color Updates Correctly   Test name: Thumb Color Updates Correctly
      05-03 13:52:35.288 25860 27294 I DOTNET  :    Assembly:  [Microsoft.Maui.Core.DeviceTests, Version=10.0.0.0, Culture=neutral, PublicKeyToken=null]
      05-03 13:52:35.288 25860 27294 I DOTNET  :    Exception messages: Color Color [A=255, R=255, G=0, B=0] not found. This is what it looked like:<img>iVBORw0KGgoAAAANSUhEUgAAAIQAAACECAYAAABRRIOnAAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAA/rSURBVHic7Z17jB3Vfcc/v3Nm7mMf9u567QVjMDYuD2NMk7agKGkxhTTpU6iCVG1FGlo1UdWmUtWHQqMKXKlVioRKojRRWjVUrdSWh1pUgigtLyUNJBQwxtjYYDCY9WO99q69r7t3Zs45/WPu7J293vWuvXvte+n5SKM7unfuvM53fr/f+Z3HgMfj8Xg8Ho/H4/F4PB6Px+PxeDwej8fj8Xg8Ho/H4/F4PB6Px+PxeDwej8fj8Xg8Ho/H4/F4PB6Px+PxeNoTudAn8P+c/P13F+wscnhBNJf57q80rOfFMJ8wzotgvCCWn8bCXmi9kfnEsRjRLBkviOWh8T5Kw6eaZ9v5XEZ+3TZ81yiGZRWHF8TSaSzgvAjywpAfAxWDXF777Mr9dwJcCO49sCG4V1IhOGYLIS+OplgML4hzZ64nXTWurwPpA9UHcgz4XeAWkCLoXhABceBGwVXBPAPub4A1wAi4EbCDdQHkBdFoORrXl3xRnsXTKAYFyGaQPaA+BvIBEIO6Cwq/BX290HcCLumA9WVYq2BlAEUHIRAbqFo4VYHDU/D+Kjg0CiN/DyMPQhSCvRR4sS6GvEiWTRReEGfPLDdAThBrQa8HdxsEt8LAari2CB8pw/UhXCmwSkEnUJb0P87VdyguLdyKhUkHJxJ4awp2TsGOEdj9NAw9Bsn7IIfBcLo45oszzvriPIsjCw5niWEt6MPg/gD4FdhwDdysYFsI1ytYDxTIFZKQlqICV/vEgqjaRrl6qACRhfdj2Gnh+TfhuYfgwF8Da+vCmEsUmUs5K7wgFsd8VkFthiCC+DroehDuKMDtCrYo6AOC3H9
      05-03 13:52:35.288 25860 27294 I DOTNET  :    at System.Threading.Tasks.Task.<>c.<.cctor>b__288_0(Object obj)
      05-03 13:52:35.288 25860 27294 I DOTNET  :    at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread , ExecutionContext , ContextCallback , Object )
      05-03 13:52:35.288 25860 27294 I DOTNET  : --- End of stack trace from previous location ---
      05-03 13:52:35.288 25860 27294 I DOTNET  :    at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread , ExecutionContext , ContextCallback , Object )
      05-03 13:52:35.288 25860 27294 I DOTNET  :    at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& , Thread )
      05-03 13:52:35.288 25860 27294 I DOTNET  : --- End of stack trace from previous location ---
      05-03 13:52:35.288 25860 27294 I DOTNET  :    at Microsoft.Maui.DeviceTests.AssertionExtensions.AssertContainsColor(View view, Color expectedColor, IMauiContext mauiContext, Nullable`1 tolerance)
      05-03 13:52:35.288 25860 27294 I DOTNET  :    at Microsoft.Maui.DeviceTests.HandlerTestBasement.<>c__DisplayClass18_0.<<ValidateHasColor>b__0>d.MoveNext()
      05-03 13:52:35.288 25860 27294 I DOTNET  : --- End of stack trace from previous location ---
      05-03 13:52:35.288 25860 27294 I DOTNET  :    at Microsoft.Maui.Dispatching.DispatcherExtensions.<>c__DisplayClass3_0.<<DispatchAsync>b__0>d.MoveNext()
      05-03 13:52:35.288 25860 27294 I DOTNET  : --- End of stack trace from previous location ---
      05-03 13:52:35.288 25860 27294 I DOTNET  :    at Microsoft.Maui.Dispatching.DispatcherExtensions.<>c__DisplayClass2_0`1.<<DispatchAsync>b__0>d[[System.Boolean, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
      05-03 13:52:35.288 25860 27294 I DOTNET  : --- End of stack trace from previous location ---
      05-03 13:52:35.288 25860 27294 I DOTNET  :    at Microsoft.Maui.DeviceTests.SwitchHandlerTests.ThumbColorUpdatesCorrectly()
      05-03 13:52:35.288 25860 27294 I DOTNET  : --- End of stack trace from previous location ---
      05-03 13:52:35.288 25860 27294 I DOTNET  :    Execution time: 0.1914202
      05-03 13:52:35.288 25860 27294 I DOTNET  :    Test trait name: Category
      05-03 13:52:35.288 25860 27294 I DOTNET  :       value: Switch
      05-03 13:52:35.288 25860 27294 I DOTNET  : 
      05-03 13:52:35.343 25860 27294 I DOTNET  : Xml file was written to the provided writer.
      05-03 13:52:35.345 25860 27294 I DOTNET  : Tests run: 3015 Passed: 2942 Inconclusive: 0 Failed: 1 Ignored: 0
      05-03 13:52:35.354 13494 14265 D CompatibilityChangeReporter: Compat change id reported: 149924527; UID 10160; state: ENABLED
      05-03 13:52:35.354 13494 14265 D CompatibilityChangeReporter: Compat change id reported: 132649864; UID 10160; state: DISABLED
      05-03 13:52:35.376 14281 14309 I MediaProvider: Using lower FS for /storage/emulated/0/Download/com.microsoft.maui.core.devicetests/4b528f5123304a53816af82a24d63fb2/testResults.xml
      05-03 13:52:35.381 13494 14265 I ActivityManager: Force stopping com.microsoft.maui.core.devicetests appid=10160 user=0: finished inst
      05-03 13:52:35.382 13494 14265 I ActivityManager: Killing 25860:com.microsoft.maui.core.devicetests/u0a160 (adj 0): stop com.microsoft.maui.core.devicetests due to finished inst
      05-03 13:52:35.384 13494 14265 W ActivityTaskManager: Force removing ActivityRecord{2ab7b98 u0 com.microsoft.maui.core.devicetests/.TestActivity t23 f}}: app died, no saved state
      05-03 13:52:35.390 13494 14265 W InputReader: Device virtio_input_multi_touch_10 is associated with display ADISPLAY_ID_NONE.
      05-03 13:52:35.390 13494 14265 W InputReader: Device virtio_input_multi_touch_4 is associated with display ADISPLAY_ID_NONE.
      05-03 13:52:35.390 13494 14265 W InputReader: Device virtio_input_multi_touch_11 is associated with display ADISPLAY_ID_NONE.
      05-03 13:52:35.390 13494 14265 W InputReader: Device virtio_input_multi_touch_8 is associated with display ADISPLAY_ID_NONE.
      05-03 13:52:35.390 13494 14265 W InputReader: Device virtio_input_multi_touch_5 is associated with display ADISPLAY_ID_NONE.
      05-03 13:52:35.390 13494 14265 W InputReader: Device virtio_input_multi_touch_2 is associated with display ADISPLAY_ID_NONE.
      05-03 13:52:35.390 13494 14265 W InputReader: Device virtio_input_multi_touch_6 is associated with display ADISPLAY_ID_NONE.
      05-03 13:52:35.390 13494 14265 W InputReader: Device virtio_input_multi_touch_3 is associated with display ADISPLAY_ID_NONE.
      05-03 13:52:35.390 13494 14265 W InputReader: Device virtio_input_multi_touch_9 is associated with display ADISPLAY_ID_NONE.
      05-03 13:52:35.390 13494 14265 W InputReader: Device virtio_input_multi_touch_7 is associated with display ADISPLAY_ID_NONE.
      05-03 13:52:35.391 13494 14265 W InputReader: Device virtio_input_multi_touch_10 is associated with display ADISPLAY_ID_NONE.
      05-03 13:52:35.391 13494 14265 W InputReader: Device virtio_input_multi_touch_4 is associated with display ADISPLAY_ID_NONE.
      05-03 13:52:35.391 13494 14265 W InputReader: Device virtio_input_multi_touch_11 is associated with display ADISPLAY_ID_NONE.
      05-03 13:52:35.391 13494 14265 W InputReader: Device virtio_input_multi_touch_8 is associated with display ADISPLAY_ID_NONE.
      05-03 13:52:35.391 13494 14265 W InputReader: Device virtio_input_multi_touch_5 is associated with display ADISPLAY_ID_NONE.
      05-03 13:52:35.391 13494 14265 W InputReader: Device virtio_input_multi_touch_2 is associated with display ADISPLAY_ID_NONE.
      05-03 13:52:35.391 13494 14265 W InputReader: Device virtio_input_multi_touch_6 is associated with display ADISPLAY_ID_NONE.
      05-03 13:52:35.391 13494 14265 W InputReader: Device virtio_input_multi_touch_3 is associated with display ADISPLAY_ID_NONE.
      05-03 13:52:35.391 13494 14265 W InputReader: Device virtio_input_multi_touch_9 is associated with display ADISPLAY_ID_NONE.
      05-03 13:52:35.391 13494 14265 W InputReader: Device virtio_input_multi_touch_7 is associated with display ADISPLAY_ID_NONE.
      05-03 13:52:35.394   297 14273 D goldfish-address-space: claimShared: Ask to claim region [0x3f5fa4000 0x3f678d000]
      05-03 13:52:35.395   297   297 D goldfish-address-space: claimShared: Ask to claim region [0x3f6f76000 0x3f775f000]
      05-03 13:52:35.398   297   297 D goldfish-address-space: claimShared: Ask to claim region [0x3f4000000 0x3f47e9000]
      05-03 13:52:35.442 14578 14578 I bwmt    : onStart
      05-03 13:52:35.449 25848 25848 D AndroidRuntime: Shutting down VM
      05-03 13:52:35.455 13494 14265 D ConnectivityService: requestNetwork for uid/pid:10108/14578 NetworkRequest [ TRACK_DEFAULT id=105, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Uid: 10108 AdministratorUids: [] RequestorUid: 10108 RequestorPackageName: com.google.android.googlequicksearchbox] ]
      05-03 13:52:35.455 13494 13609 D ConnectivityService: NetReassign [105 : null → 101]
      05-03 13:52:35.456 13494 13605 D WifiNetworkFactory: got request NetworkRequest [ TRACK_DEFAULT id=105, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Uid: 10108 AdministratorUids: [] RequestorUid: 10108 RequestorPackageName: com.google.android.googlequicksearchbox] ] with score 60 and providerId 3
      05-03 13:52:35.456 13494 13605 D UntrustedWifiNetworkFactory: got request NetworkRequest [ TRACK_DEFAULT id=105, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Uid: 10108 AdministratorUids: [] RequestorUid: 10108 RequestorPackageName: com.google.android.googlequicksearchbox] ] with score 60 and providerId 3
      05-03 13:52:35.456 13921 13921 D PhoneSwitcherNetworkRequstListener: got request NetworkRequest [ TRACK_DEFAULT id=105, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Uid: 10108 AdministratorUids: [] RequestorUid: 10108 RequestorPackageName: com.google.android.googlequicksearchbox] ] with score 60 and providerId 3
      05-03 13:52:35.458 13666 13666 V KeyguardUpdateMonitor: onSubscriptionInfoChanged()
      05-03 13:52:35.458 13666 13666 V KeyguardUpdateMonitor: SubInfo:{id=1 iccId=890141032[****] simSlotIndex=0 carrierId=1 displayName=T-Mobile carrierName=Android nameSource=3 iconTint=-16746133 number=[****] dataRoaming=0 iconBitmap=android.graphics.Bitmap@4907a3a mcc=310 mnc=260 countryIso=us isEmbedded=false nativeAccessRules=null cardString=890141032[****] cardId=-1 isOpportunistic=false groupUUID=null isGroupDisabled=false profileClass=-1 ehplmns=null hplmns=null subscriptionType=0 groupOwner=null carrierConfigAccessRules=null areUiccApplicationsEnabled=true}
      05-03 13:52:35.460 13921 13921 D Telephony: isEmergencyPreferredAccount: subId=1, activeData=1
      05-03 13:52:35.460 13921 13921 D Telephony: isEmergencyPreferredAccount: Device does not require preference.
      05-03 13:52:35.460 14578 14578 I buhd    : (REDACTED) [%s] onStart()
      05-03 13:52:35.461 14578 14578 E NetworkErrorMessage: (REDACTED) Invalid connectivity state: %s
      05-03 13:52:35.461 14578 14578 I bwmt    : onResume
      05-03 13:52:35.532   297   297 D goldfish-address-space: claimShared: Ask to claim region [0x3f47e9000 0x3f4fd2000]
      05-03 13:52:35.544   297   297 D goldfish-address-space: claimShared: Ask to claim region [0x3f4fd2000 0x3f57bb000]
      05-03 13:52:35.564 13494 14433 W ActivityManager: Unable to start service Intent { act=android.service.appprediction.AppPredictionService cmp=com.google.android.as/com.google.android.apps.miphone.aiai.app.AiAiPredictionService } U=0: not found
      05-03 13:52:35.564 13494 14433 W RemoteAppPredictionService: could not bind to Intent { act=android.service.appprediction.AppPredictionService cmp=com.google.android.as/com.google.android.apps.miphone.aiai.app.AiAiPredictionService } using flags 67108865
      05-03 13:52:35.771   297   297 D goldfish-address-space: claimShared: Ask to claim region [0x3f8000000 0x3f87e9000]
      05-03 13:52:36.198 13494 13534 W ActivityManager: setHasOverlayUi called on unknown pid: 25860
      05-03 13:52:36.200 13494 13891 D AutofillSession: handling death of Token{11c38e ActivityRecord{2ab7b98 u0 com.microsoft.maui.core.devicetests/.TestActivity t-1 f}}} when saving=false
      05-03 13:52:36.205 13455 13455 I Zygote  : Process 25860 exited due to signal 9 (Killed)
      05-03 13:52:36.248 13494 13551 I libprocessgroup: Successfully killed process cgroup uid 10160 pid 25860 in 864ms
      05-03 13:52:36.259 13494 27498 I ActivityManager: Failure reporting to instrumentation watcher: comp=ComponentInfo{com.microsoft.maui.core.devicetests/com.microsoft.maui.core.devicetests.TestInstrumentation} results=Bundle[mParcelledData.dataSize=516]
      
�[41m�[30mfail�[39m�[22m�[49m: Non-success instrumentation exit code: 1, expected: 0
�[40m�[32minfo�[39m�[22m�[49m: Attempting to remove apk 'com.microsoft.maui.core.devicetests'..
�[40m�[37mdbug�[39m�[22m�[49m: Executing command: '/home/vsts/.nuget/packages/microsoft.dotnet.xharness.cli/11.0.0-prerelease.26107.1/runtimes/any/native/adb/linux/adb -s emulator-5554 uninstall com.microsoft.maui.core.devicetests'
�[40m�[32minfo�[39m�[22m�[49m: Successfully uninstalled com.microsoft.maui.core.devicetests
XHarness exit code: 1 (TESTS_FAILED)
  Tests completed with exit code: 1

🔴 Without fix — 📱 DatePickerTests: PASS ❌ · 1133s

(truncated to last 15,000 chars)


      05-03 13:47:19.290 13494 16229 D CompatibilityChangeReporter: Compat change id reported: 149924527; UID 10159; state: ENABLED
      05-03 13:47:19.291 13494 16229 D CompatibilityChangeReporter: Compat change id reported: 132649864; UID 10159; state: DISABLED
      05-03 13:47:19.322 14281 14309 I MediaProvider: Using lower FS for /storage/emulated/0/Download/com.microsoft.maui.controls.devicetests/9947b02317e04ec39448948331ef6d33/testResults.xml
      05-03 13:47:19.327 13494 16229 I ActivityManager: Force stopping com.microsoft.maui.controls.devicetests appid=10159 user=0: finished inst
      05-03 13:47:19.327 13494 16229 I ActivityManager: Killing 21429:com.microsoft.maui.controls.devicetests/u0a159 (adj 0): stop com.microsoft.maui.controls.devicetests due to finished inst
      05-03 13:47:19.331 18798 18798 D BoundBrokerSvc: onUnbind: Intent { act=com.google.android.gms.safetynet.service.START pkg=com.google.android.gms }
      05-03 13:47:19.331 13494 16229 W ActivityTaskManager: Force removing ActivityRecord{765ed5 u0 com.microsoft.maui.controls.devicetests/.TestActivity t22 f}}: app died, no saved state
      05-03 13:47:19.335 23531 23531 I cr_ChildProcessService: Destroying ChildProcessService pid=23531
      05-03 13:47:19.358 13494 16229 W InputReader: Device virtio_input_multi_touch_10 is associated with display ADISPLAY_ID_NONE.
      05-03 13:47:19.358 13494 16229 W InputReader: Device virtio_input_multi_touch_4 is associated with display ADISPLAY_ID_NONE.
      05-03 13:47:19.358 13494 16229 W InputReader: Device virtio_input_multi_touch_11 is associated with display ADISPLAY_ID_NONE.
      05-03 13:47:19.358 13494 16229 W InputReader: Device virtio_input_multi_touch_8 is associated with display ADISPLAY_ID_NONE.
      05-03 13:47:19.358 13494 16229 W InputReader: Device virtio_input_multi_touch_5 is associated with display ADISPLAY_ID_NONE.
      05-03 13:47:19.358 13494 16229 W InputReader: Device virtio_input_multi_touch_2 is associated with display ADISPLAY_ID_NONE.
      05-03 13:47:19.358 13494 16229 W InputReader: Device virtio_input_multi_touch_6 is associated with display ADISPLAY_ID_NONE.
      05-03 13:47:19.358 13494 16229 W InputReader: Device virtio_input_multi_touch_3 is associated with display ADISPLAY_ID_NONE.
      05-03 13:47:19.358 13494 16229 W InputReader: Device virtio_input_multi_touch_9 is associated with display ADISPLAY_ID_NONE.
      05-03 13:47:19.358 13494 16229 W InputReader: Device virtio_input_multi_touch_7 is associated with display ADISPLAY_ID_NONE.
      05-03 13:47:19.358 13494 16229 W InputReader: Device virtio_input_multi_touch_10 is associated with display ADISPLAY_ID_NONE.
      05-03 13:47:19.358 13494 16229 W InputReader: Device virtio_input_multi_touch_4 is associated with display ADISPLAY_ID_NONE.
      05-03 13:47:19.358 13494 16229 W InputReader: Device virtio_input_multi_touch_11 is associated with display ADISPLAY_ID_NONE.
      05-03 13:47:19.358 13494 16229 W InputReader: Device virtio_input_multi_touch_8 is associated with display ADISPLAY_ID_NONE.
      05-03 13:47:19.358 13494 16229 W InputReader: Device virtio_input_multi_touch_5 is associated with display ADISPLAY_ID_NONE.
      05-03 13:47:19.358 13494 16229 W InputReader: Device virtio_input_multi_touch_2 is associated with display ADISPLAY_ID_NONE.
      05-03 13:47:19.358 13494 16229 W InputReader: Device virtio_input_multi_touch_6 is associated with display ADISPLAY_ID_NONE.
      05-03 13:47:19.358 13494 16229 W InputReader: Device virtio_input_multi_touch_3 is associated with display ADISPLAY_ID_NONE.
      05-03 13:47:19.358 13494 16229 W InputReader: Device virtio_input_multi_touch_9 is associated with display ADISPLAY_ID_NONE.
      05-03 13:47:19.358 13494 16229 W InputReader: Device virtio_input_multi_touch_7 is associated with display ADISPLAY_ID_NONE.
      05-03 13:47:19.363 13494 16229 I ActivityManager: Killing 23531:com.google.android.webview:sandboxed_process0:org.chromium.content.app.SandboxedProcessService0:4/u0a159i5 (adj 0): isolated not needed
      05-03 13:47:19.369 21418 21418 D AndroidRuntime: Shutting down VM
      05-03 13:47:19.376   297 14273 D goldfish-address-space: claimShared: Ask to claim region [0x3f4000000 0x3f47e9000]
      05-03 13:47:19.469   297 14273 D goldfish-address-space: claimShared: Ask to claim region [0x3f47e9000 0x3f4fd2000]
      05-03 13:47:19.472   297 14273 D goldfish-address-space: claimShared: Ask to claim region [0x3f4fd2000 0x3f57bb000]
      05-03 13:47:19.477 13494 14669 I ActivityManager: Killing 20882:com.google.android.apps.docs/u0a124 (adj 975): empty #17
      05-03 13:47:19.486 13494 13532 W Looper  : Slow dispatch took 159ms android.ui h=com.android.server.am.ActivityManagerService$UiHandler c=null m=53
      05-03 13:47:19.507   297 14273 D goldfish-address-space: claimShared: Ask to claim region [0x3f57bb000 0x3f5fa4000]
      05-03 13:47:19.603 14578 14578 I bwmt    : onStart
      05-03 13:47:19.605   297 14273 D goldfish-address-space: claimShared: Ask to claim region [0x3f5fa4000 0x3f678d000]
      05-03 13:47:19.738 13494 16972 W ActivityManager: Unable to start service Intent { act=android.service.appprediction.AppPredictionService cmp=com.google.android.as/com.google.android.apps.miphone.aiai.app.AiAiPredictionService } U=0: not found
      05-03 13:47:19.738 13494 16972 W RemoteAppPredictionService: could not bind to Intent { act=android.service.appprediction.AppPredictionService cmp=com.google.android.as/com.google.android.apps.miphone.aiai.app.AiAiPredictionService } using flags 67108865
      05-03 13:47:19.749   297 14273 D goldfish-address-space: claimShared: Ask to claim region [0x3f678d000 0x3f6f76000]
      05-03 13:47:19.752 13494 15020 D ConnectivityService: requestNetwork for uid/pid:10108/14578 NetworkRequest [ TRACK_DEFAULT id=101, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Uid: 10108 AdministratorUids: [] RequestorUid: 10108 RequestorPackageName: com.google.android.googlequicksearchbox] ]
      05-03 13:47:19.752 13494 13609 D ConnectivityService: NetReassign [101 : null → 101]
      05-03 13:47:19.753 13494 13605 D WifiNetworkFactory: got request NetworkRequest [ TRACK_DEFAULT id=101, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Uid: 10108 AdministratorUids: [] RequestorUid: 10108 RequestorPackageName: com.google.android.googlequicksearchbox] ] with score 60 and providerId 3
      05-03 13:47:19.753 13494 13605 D UntrustedWifiNetworkFactory: got request NetworkRequest [ TRACK_DEFAULT id=101, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Uid: 10108 AdministratorUids: [] RequestorUid: 10108 RequestorPackageName: com.google.android.googlequicksearchbox] ] with score 60 and providerId 3
      05-03 13:47:19.753 13921 13921 D PhoneSwitcherNetworkRequstListener: got request NetworkRequest [ TRACK_DEFAULT id=101, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Uid: 10108 AdministratorUids: [] RequestorUid: 10108 RequestorPackageName: com.google.android.googlequicksearchbox] ] with score 60 and providerId 3
      05-03 13:47:19.756 13921 13921 D Telephony: isEmergencyPreferredAccount: subId=1, activeData=1
      05-03 13:47:19.756 13921 13921 D Telephony: isEmergencyPreferredAccount: Device does not require preference.
      05-03 13:47:19.756 13666 13666 V KeyguardUpdateMonitor: onSubscriptionInfoChanged()
      05-03 13:47:19.757 13666 13666 V KeyguardUpdateMonitor: SubInfo:{id=1 iccId=890141032[****] simSlotIndex=0 carrierId=1 displayName=T-Mobile carrierName=Android nameSource=3 iconTint=-16746133 number=[****] dataRoaming=0 iconBitmap=android.graphics.Bitmap@cec98c9 mcc=310 mnc=260 countryIso=us isEmbedded=false nativeAccessRules=null cardString=890141032[****] cardId=-1 isOpportunistic=false groupUUID=null isGroupDisabled=false profileClass=-1 ehplmns=null hplmns=null subscriptionType=0 groupOwner=null carrierConfigAccessRules=null areUiccApplicationsEnabled=true}
      05-03 13:47:19.853 14578 14578 I buhd    : (REDACTED) [%s] onStart()
      05-03 13:47:20.059 14578 14578 E NetworkErrorMessage: (REDACTED) Invalid connectivity state: %s
      05-03 13:47:20.060 14578 14578 I bwmt    : onResume
      05-03 13:47:20.222 13793 13793 I Zygote  : Process 23531 exited due to signal 9 (Killed)
      05-03 13:47:20.227 13494 13555 E KernelCpuSpeedReader: Failed to read cpu-freq: /sys/devices/system/cpu/cpu1/cpufreq/stats/time_in_state: open failed: ENOENT (No such file or directory)
      05-03 13:47:20.291   185   188 E android.system.suspend@1.0-service: Error opening kernel wakelock stats for: wakeup32: Permission denied
      05-03 13:47:20.299   185   188 E android.system.suspend@1.0-service: Error opening kernel wakelock stats for: wakeup33: Permission denied
      05-03 13:47:20.302 13494 13555 D KernelCpuUidUserSysTimeReader: Removing uids 99001-99001
      05-03 13:47:20.303 13494 13555 D KernelCpuUidUserSysTimeReader: Removing uids 99002-99002
      05-03 13:47:20.303 13494 13555 D KernelCpuUidUserSysTimeReader: Removing uids 99003-99003
      05-03 13:47:20.303 13494 13555 D KernelCpuUidUserSysTimeReader: Removing uids 99004-99004
      05-03 13:47:20.312 13494 13534 W ActivityManager: setHasOverlayUi called on unknown pid: 21429
      05-03 13:47:20.314 13494 13519 D AutofillSession: handling death of Token{225978c ActivityRecord{765ed5 u0 com.microsoft.maui.controls.devicetests/.TestActivity t-1 f}}} when saving=false
      05-03 13:47:20.315 13494 13519 D ConnectivityService: ConnectivityService NetworkRequestInfo binderDied(NetworkRequest [ TRACK_DEFAULT id=92, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Uid: 10159 AdministratorUids: [] RequestorUid: 10159 RequestorPackageName: com.microsoft.maui.controls.devicetests] ], android.os.BinderProxy@dddf74f)
      05-03 13:47:20.315 13494 13519 D ConnectivityService: ConnectivityService NetworkRequestInfo binderDied(NetworkRequest [ TRACK_DEFAULT id=97, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Uid: 10159 AdministratorUids: [] RequestorUid: 10159 RequestorPackageName: com.microsoft.maui.controls.devicetests] ], android.os.BinderProxy@ef68edc)
      05-03 13:47:20.315 13494 13609 D ConnectivityService: releasing NetworkRequest [ TRACK_DEFAULT id=92, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Uid: 10159 AdministratorUids: [] RequestorUid: 10159 RequestorPackageName: com.microsoft.maui.controls.devicetests] ] (release request)
      05-03 13:47:20.315 13494 13609 D ConnectivityService: releasing NetworkRequest [ TRACK_DEFAULT id=97, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Uid: 10159 AdministratorUids: [] RequestorUid: 10159 RequestorPackageName: com.microsoft.maui.controls.devicetests] ] (release request)
      05-03 13:47:20.317 13666 13666 V KeyguardUpdateMonitor: onSubscriptionInfoChanged()
      05-03 13:47:20.318 13666 13666 V KeyguardUpdateMonitor: SubInfo:{id=1 iccId=890141032[****] simSlotIndex=0 carrierId=1 displayName=T-Mobile carrierName=Android nameSource=3 iconTint=-16746133 number=[****] dataRoaming=0 iconBitmap=android.graphics.Bitmap@bc07bce mcc=310 mnc=260 countryIso=us isEmbedded=false nativeAccessRules=null cardString=890141032[****] cardId=-1 isOpportunistic=false groupUUID=null isGroupDisabled=false profileClass=-1 ehplmns=null hplmns=null subscriptionType=0 groupOwner=null carrierConfigAccessRules=null areUiccApplicationsEnabled=true}
      05-03 13:47:20.319 13666 13666 V KeyguardUpdateMonitor: onSubscriptionInfoChanged()
      05-03 13:47:20.320 13666 13666 V KeyguardUpdateMonitor: SubInfo:{id=1 iccId=890141032[****] simSlotIndex=0 carrierId=1 displayName=T-Mobile carrierName=Android nameSource=3 iconTint=-16746133 number=[****] dataRoaming=0 iconBitmap=android.graphics.Bitmap@601aaef mcc=310 mnc=260 countryIso=us isEmbedded=false nativeAccessRules=null cardString=890141032[****] cardId=-1 isOpportunistic=false groupUUID=null isGroupDisabled=false profileClass=-1 ehplmns=null hplmns=null subscriptionType=0 groupOwner=null carrierConfigAccessRules=null areUiccApplicationsEnabled=true}
      05-03 13:47:20.320 13921 13921 D Telephony: isEmergencyPreferredAccount: subId=1, activeData=1
      05-03 13:47:20.320 13921 13921 D Telephony: isEmergencyPreferredAccount: Device does not require preference.
      05-03 13:47:20.320 13921 13921 D Telephony: isEmergencyPreferredAccount: subId=1, activeData=1
      05-03 13:47:20.320 13921 13921 D Telephony: isEmergencyPreferredAccount: Device does not require preference.
      05-03 13:47:20.320 13494 15020 D ConnectivityService: ConnectivityService NetworkRequestInfo binderDied(NetworkRequest [ LISTEN id=98, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED&FOREGROUND Uid: 10159 AdministratorUids: [] RequestorUid: 10159 RequestorPackageName: com.microsoft.maui.controls.devicetests] ], android.os.BinderProxy@8aa0be5)
      05-03 13:47:20.325 13455 13455 I Zygote  : Process 21429 exited due to signal 9 (Killed)
      05-03 13:47:20.349 13494 13551 I libprocessgroup: Successfully killed process cgroup uid 10159 pid 21429 in 1020ms
      05-03 13:47:20.377 13494 13551 I libprocessgroup: Successfully killed process cgroup uid 99005 pid 23531 in 0ms
      05-03 13:47:20.398 13494 25326 I ActivityManager: Failure reporting to instrumentation watcher: comp=ComponentInfo{com.microsoft.maui.controls.devicetests/com.microsoft.maui.controls.devicetests.TestInstrumentation} results=Bundle[mParcelledData.dataSize=520]
      05-03 13:47:20.415 18798 18798 D BoundBrokerSvc: onBind: Intent { act=com.google.android.gms.inappreach.service.START dat=chimera-action: cmp=com.google.android.gms/.chimera.GmsApiService }
      05-03 13:47:20.415 18798 18798 D BoundBrokerSvc: Loading bound service for intent: Intent { act=com.google.android.gms.inappreach.service.START dat=chimera-action: cmp=com.google.android.gms/.chimera.GmsApiService }
      05-03 13:47:20.224   185   185 W Binder:185_2: type=1400 audit(0.0:1672): avc: denied { read } for name="wakeup32" dev="sysfs" ino=18322 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs:s0 tclass=dir permissive=0
      05-03 13:47:20.288   185   185 W Binder:185_2: type=1400 audit(0.0:1673): avc: denied { read } for name="wakeup33" dev="sysfs" ino=18385 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs:s0 tclass=dir permissive=0
      05-03 13:47:20.463 13455 13455 I Zygote  : Process 20882 exited due to signal 9 (Killed)
      05-03 13:47:20.465 13494 13551 I libprocessgroup: Successfully killed process cgroup uid 10124 pid 20882 in 88ms
      
�[40m�[32minfo�[39m�[22m�[49m: Attempting to remove apk 'com.microsoft.maui.controls.devicetests'..
�[40m�[37mdbug�[39m�[22m�[49m: Executing command: '/home/vsts/.nuget/packages/microsoft.dotnet.xharness.cli/11.0.0-prerelease.26107.1/runtimes/any/native/adb/linux/adb -s emulator-5554 uninstall com.microsoft.maui.controls.devicetests'
�[40m�[32minfo�[39m�[22m�[49m: Successfully uninstalled com.microsoft.maui.controls.devicetests
XHarness exit code: 0
  Tests completed successfully

🟢 With fix — 📱 DatePickerTests: PASS ✅ · 1068s

(truncated to last 15,000 chars)

I DOTNET  : Microsoft.Maui.DeviceTests.DatePickerTests 0.4883206 ms
      05-03 14:10:23.495 27701 29523 I DOTNET  : Xml file was written to the provided writer.
      05-03 14:10:23.498 27701 29523 I DOTNET  : Tests run: 955 Passed: 942 Inconclusive: 0 Failed: 0 Ignored: 0
      05-03 14:10:23.510 13494 14122 D CompatibilityChangeReporter: Compat change id reported: 149924527; UID 10161; state: ENABLED
      05-03 14:10:23.511 13494 14122 D CompatibilityChangeReporter: Compat change id reported: 132649864; UID 10161; state: DISABLED
      05-03 14:10:23.531 14281 25747 I MediaProvider: Using lower FS for /storage/emulated/0/Download/com.microsoft.maui.controls.devicetests/b846258617c64d1e86e8b30dfd154d4d/testResults.xml
      05-03 14:10:23.535 13494 14122 I ActivityManager: Force stopping com.microsoft.maui.controls.devicetests appid=10161 user=0: finished inst
      05-03 14:10:23.536 13494 14122 I ActivityManager: Killing 27701:com.microsoft.maui.controls.devicetests/u0a161 (adj 0): stop com.microsoft.maui.controls.devicetests due to finished inst
      05-03 14:10:23.539 13494 14122 I ActivityManager: Killing 28232:com.google.android.webview:sandboxed_process0:org.chromium.content.app.SandboxedProcessService0:0/u0a161i8 (adj 0): isolated not needed
      05-03 14:10:23.539 18798 18798 D BoundBrokerSvc: onUnbind: Intent { act=com.google.android.gms.safetynet.service.START pkg=com.google.android.gms }
      05-03 14:10:23.540 13494 14122 W ActivityTaskManager: Force removing ActivityRecord{3759cb7 u0 com.microsoft.maui.controls.devicetests/.TestActivity t24 f}}: app died, no saved state
      05-03 14:10:23.544 13494 14122 W InputReader: Device virtio_input_multi_touch_10 is associated with display ADISPLAY_ID_NONE.
      05-03 14:10:23.544 13494 14122 W InputReader: Device virtio_input_multi_touch_4 is associated with display ADISPLAY_ID_NONE.
      05-03 14:10:23.544 13494 14122 W InputReader: Device virtio_input_multi_touch_11 is associated with display ADISPLAY_ID_NONE.
      05-03 14:10:23.544 13494 14122 W InputReader: Device virtio_input_multi_touch_8 is associated with display ADISPLAY_ID_NONE.
      05-03 14:10:23.544 13494 14122 W InputReader: Device virtio_input_multi_touch_5 is associated with display ADISPLAY_ID_NONE.
      05-03 14:10:23.544 13494 14122 W InputReader: Device virtio_input_multi_touch_2 is associated with display ADISPLAY_ID_NONE.
      05-03 14:10:23.544 13494 14122 W InputReader: Device virtio_input_multi_touch_6 is associated with display ADISPLAY_ID_NONE.
      05-03 14:10:23.544 13494 14122 W InputReader: Device virtio_input_multi_touch_3 is associated with display ADISPLAY_ID_NONE.
      05-03 14:10:23.544 13494 14122 W InputReader: Device virtio_input_multi_touch_9 is associated with display ADISPLAY_ID_NONE.
      05-03 14:10:23.544 13494 14122 W InputReader: Device virtio_input_multi_touch_7 is associated with display ADISPLAY_ID_NONE.
      05-03 14:10:23.544 13494 14122 W InputReader: Device virtio_input_multi_touch_10 is associated with display ADISPLAY_ID_NONE.
      05-03 14:10:23.544 13494 14122 W InputReader: Device virtio_input_multi_touch_4 is associated with display ADISPLAY_ID_NONE.
      05-03 14:10:23.544 13494 14122 W InputReader: Device virtio_input_multi_touch_11 is associated with display ADISPLAY_ID_NONE.
      05-03 14:10:23.544 13494 14122 W InputReader: Device virtio_input_multi_touch_8 is associated with display ADISPLAY_ID_NONE.
      05-03 14:10:23.544 13494 14122 W InputReader: Device virtio_input_multi_touch_5 is associated with display ADISPLAY_ID_NONE.
      05-03 14:10:23.544 13494 14122 W InputReader: Device virtio_input_multi_touch_2 is associated with display ADISPLAY_ID_NONE.
      05-03 14:10:23.544 13494 14122 W InputReader: Device virtio_input_multi_touch_6 is associated with display ADISPLAY_ID_NONE.
      05-03 14:10:23.544 13494 14122 W InputReader: Device virtio_input_multi_touch_3 is associated with display ADISPLAY_ID_NONE.
      05-03 14:10:23.544 13494 14122 W InputReader: Device virtio_input_multi_touch_9 is associated with display ADISPLAY_ID_NONE.
      05-03 14:10:23.544 13494 14122 W InputReader: Device virtio_input_multi_touch_7 is associated with display ADISPLAY_ID_NONE.
      05-03 14:10:23.560 13494 14670 I ActivityManager: Killing 25355:com.android.chrome/u0a119 (adj 975): empty #17
      05-03 14:10:23.591 13494 17694 W ActivityManager: Unable to start service Intent { act=android.service.appprediction.AppPredictionService cmp=com.google.android.as/com.google.android.apps.miphone.aiai.app.AiAiPredictionService } U=0: not found
      05-03 14:10:23.591 13494 17694 W RemoteAppPredictionService: could not bind to Intent { act=android.service.appprediction.AppPredictionService cmp=com.google.android.as/com.google.android.apps.miphone.aiai.app.AiAiPredictionService } using flags 67108865
      05-03 14:10:23.644   297   297 D goldfish-address-space: claimShared: Ask to claim region [0x3f4000000 0x3f47e9000]
      05-03 14:10:23.646   297   297 D goldfish-address-space: claimShared: Ask to claim region [0x3f6f76000 0x3f775f000]
      05-03 14:10:23.662   297   297 D goldfish-address-space: claimShared: Ask to claim region [0x3f775f000 0x3f7f48000]
      05-03 14:10:23.675 14578 14578 I bwmt    : onStart
      05-03 14:10:23.680 13494 15020 D ConnectivityService: requestNetwork for uid/pid:10108/14578 NetworkRequest [ TRACK_DEFAULT id=111, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Uid: 10108 AdministratorUids: [] RequestorUid: 10108 RequestorPackageName: com.google.android.googlequicksearchbox] ]
      05-03 14:10:23.680 14578 14578 I buhd    : (REDACTED) [%s] onStart()
      05-03 14:10:23.681 14578 14578 E NetworkErrorMessage: (REDACTED) Invalid connectivity state: %s
      05-03 14:10:23.681 14578 14578 I bwmt    : onResume
      05-03 14:10:23.688 13494 13609 D ConnectivityService: NetReassign [111 : null → 101]
      05-03 14:10:23.689 13921 13921 D PhoneSwitcherNetworkRequstListener: got request NetworkRequest [ TRACK_DEFAULT id=111, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Uid: 10108 AdministratorUids: [] RequestorUid: 10108 RequestorPackageName: com.google.android.googlequicksearchbox] ] with score 60 and providerId 3
      05-03 14:10:23.690 13494 13605 D WifiNetworkFactory: got request NetworkRequest [ TRACK_DEFAULT id=111, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Uid: 10108 AdministratorUids: [] RequestorUid: 10108 RequestorPackageName: com.google.android.googlequicksearchbox] ] with score 60 and providerId 3
      05-03 14:10:23.690 13494 13605 D UntrustedWifiNetworkFactory: got request NetworkRequest [ TRACK_DEFAULT id=111, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Uid: 10108 AdministratorUids: [] RequestorUid: 10108 RequestorPackageName: com.google.android.googlequicksearchbox] ] with score 60 and providerId 3
      05-03 14:10:23.695 13666 13666 V KeyguardUpdateMonitor: onSubscriptionInfoChanged()
      05-03 14:10:23.695 13921 13921 D Telephony: isEmergencyPreferredAccount: subId=1, activeData=1
      05-03 14:10:23.695 13921 13921 D Telephony: isEmergencyPreferredAccount: Device does not require preference.
      05-03 14:10:23.695 13666 13666 V KeyguardUpdateMonitor: SubInfo:{id=1 iccId=890141032[****] simSlotIndex=0 carrierId=1 displayName=T-Mobile carrierName=Android nameSource=3 iconTint=-16746133 number=[****] dataRoaming=0 iconBitmap=android.graphics.Bitmap@56eeb65 mcc=310 mnc=260 countryIso=us isEmbedded=false nativeAccessRules=null cardString=890141032[****] cardId=-1 isOpportunistic=false groupUUID=null isGroupDisabled=false profileClass=-1 ehplmns=null hplmns=null subscriptionType=0 groupOwner=null carrierConfigAccessRules=null areUiccApplicationsEnabled=true}
      05-03 14:10:23.696   297 14273 D goldfish-address-space: claimShared: Ask to claim region [0x3f4fd2000 0x3f57bb000]
      05-03 14:10:23.698   297 14273 D goldfish-address-space: claimShared: Ask to claim region [0x3f57bb000 0x3f5fa4000]
      05-03 14:10:23.721   297 14273 D goldfish-address-space: claimShared: Ask to claim region [0x3f8000000 0x3f87e9000]
      05-03 14:10:24.119 27690 27690 D AndroidRuntime: Shutting down VM
      05-03 14:10:24.268 13793 13793 I Zygote  : Process 28232 exited due to signal 9 (Killed)
      05-03 14:10:24.278 13494 13555 E KernelCpuSpeedReader: Failed to read cpu-freq: /sys/devices/system/cpu/cpu1/cpufreq/stats/time_in_state: open failed: ENOENT (No such file or directory)
      05-03 14:10:24.294   185   188 E android.system.suspend@1.0-service: Error opening kernel wakelock stats for: wakeup32: Permission denied
      05-03 14:10:24.297   185   188 E android.system.suspend@1.0-service: Error opening kernel wakelock stats for: wakeup33: Permission denied
      05-03 14:10:24.301 13494 13555 D KernelCpuUidUserSysTimeReader: Removing uids 99006-99006
      05-03 14:10:24.301 13494 13555 D KernelCpuUidUserSysTimeReader: Removing uids 99007-99007
      05-03 14:10:24.301 13494 13555 D KernelCpuUidUserSysTimeReader: Removing uids 10160-10160
      05-03 14:10:24.360 13494 13534 W ActivityManager: setHasOverlayUi called on unknown pid: 27701
      05-03 14:10:24.361 13494 14122 D ConnectivityService: ConnectivityService NetworkRequestInfo binderDied(NetworkRequest [ TRACK_DEFAULT id=106, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Uid: 10161 AdministratorUids: [] RequestorUid: 10161 RequestorPackageName: com.microsoft.maui.controls.devicetests] ], android.os.BinderProxy@7f2a866)
      05-03 14:10:24.361 13494 13609 D ConnectivityService: releasing NetworkRequest [ TRACK_DEFAULT id=106, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Uid: 10161 AdministratorUids: [] RequestorUid: 10161 RequestorPackageName: com.microsoft.maui.controls.devicetests] ] (release request)
      05-03 14:10:24.364 13666 13666 V KeyguardUpdateMonitor: onSubscriptionInfoChanged()
      05-03 14:10:24.364 13666 13666 V KeyguardUpdateMonitor: SubInfo:{id=1 iccId=890141032[****] simSlotIndex=0 carrierId=1 displayName=T-Mobile carrierName=Android nameSource=3 iconTint=-16746133 number=[****] dataRoaming=0 iconBitmap=android.graphics.Bitmap@111303a mcc=310 mnc=260 countryIso=us isEmbedded=false nativeAccessRules=null cardString=890141032[****] cardId=-1 isOpportunistic=false groupUUID=null isGroupDisabled=false profileClass=-1 ehplmns=null hplmns=null subscriptionType=0 groupOwner=null carrierConfigAccessRules=null areUiccApplicationsEnabled=true}
      05-03 14:10:24.364 13921 13921 D Telephony: isEmergencyPreferredAccount: subId=1, activeData=1
      05-03 14:10:24.364 13921 13921 D Telephony: isEmergencyPreferredAccount: Device does not require preference.
      05-03 14:10:24.365 13494 14433 D ConnectivityService: ConnectivityService NetworkRequestInfo binderDied(NetworkRequest [ LISTEN id=107, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED&FOREGROUND Uid: 10161 AdministratorUids: [] RequestorUid: 10161 RequestorPackageName: com.microsoft.maui.controls.devicetests] ], android.os.BinderProxy@684f7a7)
      05-03 14:10:24.365 13494 17694 D AutofillSession: handling death of Token{2f977b6 ActivityRecord{3759cb7 u0 com.microsoft.maui.controls.devicetests/.TestActivity t-1 f}}} when saving=false
      05-03 14:10:24.365 13494 14122 D ConnectivityService: ConnectivityService NetworkRequestInfo binderDied(NetworkRequest [ TRACK_DEFAULT id=110, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Uid: 10161 AdministratorUids: [] RequestorUid: 10161 RequestorPackageName: com.microsoft.maui.controls.devicetests] ], android.os.BinderProxy@c3c8454)
      05-03 14:10:24.365 13494 13609 D ConnectivityService: releasing NetworkRequest [ TRACK_DEFAULT id=110, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Uid: 10161 AdministratorUids: [] RequestorUid: 10161 RequestorPackageName: com.microsoft.maui.controls.devicetests] ] (release request)
      05-03 14:10:24.367 13666 13666 V KeyguardUpdateMonitor: onSubscriptionInfoChanged()
      05-03 14:10:24.367 13921 13921 D Telephony: isEmergencyPreferredAccount: subId=1, activeData=1
      05-03 14:10:24.367 13921 13921 D Telephony: isEmergencyPreferredAccount: Device does not require preference.
      05-03 14:10:24.367 13666 13666 V KeyguardUpdateMonitor: SubInfo:{id=1 iccId=890141032[****] simSlotIndex=0 carrierId=1 displayName=T-Mobile carrierName=Android nameSource=3 iconTint=-16746133 number=[****] dataRoaming=0 iconBitmap=android.graphics.Bitmap@7df64eb mcc=310 mnc=260 countryIso=us isEmbedded=false nativeAccessRules=null cardString=890141032[****] cardId=-1 isOpportunistic=false groupUUID=null isGroupDisabled=false profileClass=-1 ehplmns=null hplmns=null subscriptionType=0 groupOwner=null carrierConfigAccessRules=null areUiccApplicationsEnabled=true}
      05-03 14:10:24.372 13455 13455 I Zygote  : Process 27701 exited due to signal 9 (Killed)
      05-03 14:10:24.377 18798 18798 D BoundBrokerSvc: onBind: Intent { act=com.google.android.gms.inappreach.service.START dat=chimera-action: cmp=com.google.android.gms/.chimera.GmsApiService }
      05-03 14:10:24.377 18798 18798 D BoundBrokerSvc: Loading bound service for intent: Intent { act=com.google.android.gms.inappreach.service.START dat=chimera-action: cmp=com.google.android.gms/.chimera.GmsApiService }
      05-03 14:10:24.393 13494 13551 I libprocessgroup: Successfully killed process cgroup uid 10161 pid 27701 in 855ms
      05-03 14:10:24.402 13494 13551 I libprocessgroup: Successfully killed process cgroup uid 99008 pid 28232 in 0ms
      05-03 14:10:24.415 13456 13456 I Zygote  : Process 25355 exited due to signal 9 (Killed)
      05-03 14:10:24.420 13494 13551 I libprocessgroup: Successfully killed process cgroup uid 10119 pid 25355 in 0ms
      05-03 14:10:24.280   185   185 W Binder:185_2: type=1400 audit(0.0:1806): avc: denied { read } for name="wakeup32" dev="sysfs" ino=18322 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs:s0 tclass=dir permissive=0
      05-03 14:10:24.292   185   185 W Binder:185_2: type=1400 audit(0.0:1807): avc: denied { read } for name="wakeup33" dev="sysfs" ino=18385 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs:s0 tclass=dir permissive=0
      05-03 14:10:24.543 13494 31485 I ActivityManager: Failure reporting to instrumentation watcher: comp=ComponentInfo{com.microsoft.maui.controls.devicetests/com.microsoft.maui.controls.devicetests.TestInstrumentation} results=Bundle[mParcelledData.dataSize=520]
      05-03 14:10:26.603 13494 13504 W System  : A resource failed to call release. 
      
�[40m�[32minfo�[39m�[22m�[49m: Attempting to remove apk 'com.microsoft.maui.controls.devicetests'..
�[40m�[37mdbug�[39m�[22m�[49m: Executing command: '/home/vsts/.nuget/packages/microsoft.dotnet.xharness.cli/11.0.0-prerelease.26107.1/runtimes/any/native/adb/linux/adb -s emulator-5554 uninstall com.microsoft.maui.controls.devicetests'
�[40m�[32minfo�[39m�[22m�[49m: Successfully uninstalled com.microsoft.maui.controls.devicetests
XHarness exit code: 0
  Tests completed successfully

⚠️ Failure Details

  • DatePickerTests PASSED without fix (should fail) — tests don't catch the bug
  • DatePickerHandlerTests FAILED with fix (should pass)
📁 Fix files reverted (2 files)
  • eng/pipelines/ci-copilot.yml
  • src/Core/src/Handlers/DatePicker/DatePickerHandler.Android.cs

🧪 UI Tests — Category Detection

Detected UI test categories: DatePicker,ViewBaseTests


🔍 Regression Cross-Reference

🔍 Regression Cross-Reference

🔴 Revert risks detected — this PR removes 1 line(s) previously added by labeled bug-fix PRs.

File Fix PR Fixed issue(s) Risk Reverted line
src/Core/src/Handlers/DatePicker/DatePickerHandler.Android.cs #33687 #19256, #33583 🔴 REVERT ResetDialog();

Action required: Verify that issues #19256, #33583 do not re-regress before merging.

🧪 Regression Tests to Verify

These tests were added by the fix PRs being reverted. They must still pass:

Fix PR Type Test Filter
#33687 UITest Issue19256 Issue19256
#33687 UITest Issue33583 Issue33583

🧪 Regression Test Results

FAILED — 1 passed, 1 failed, 0 skipped

Fix PR Test Type Result
#33687 Issue19256 UITest ✅ PASSED
#33687 Issue33583 UITest ❌ FAILED

🔍 Pre-Flight — Context & Validation

Issue: #34973 - [Android] [Regression] DatePicker dialog dismisses after the device is rotated
PR: #34980 - [Android] Fix DatePicker dialog dismisses after the device is rotated
Platforms Affected: Android only
Files Changed: 1 implementation (DatePickerHandler.Android.cs), 2 test comment-only updates (DatePickerTests.cs, DatePickerHandlerTests.Android.cs)

Key Findings

  • Regression introduced in PR [.NET 10] Add "Open/Close" API to picker controls #29323 which added DismissEvent subscription machinery to track dialog open/close state via IsOpen property.
  • Root cause: In OnMainDisplayInfoChanged, calling currentDialog.Dismiss() fires DismissEventOnDialogDismissHidePickerDialog. Then ShowPickerDialog (else branch) re-subscribes DismissEvent on the same dialog. The deferred DismissEvent fires AFTER re-subscription, causing the newly-shown dialog to be dismissed immediately.
  • Fix renames ResetDialog()DestroyDialog(), moves DismissEvent unsubscription into DestroyDialog() (before calling Dismiss()), removes the duplicate subscribe/unsubscribe from ShowPickerDialog/HidePickerDialog, and updates OnMainDisplayInfoChanged to use DestroyDialog() + ShowPickerDialog().
  • No new test covers the rotation scenario (only comment updates in existing tests).
  • DismissEvent subscription is now ONLY in CreateDatePickerDialog (subscribe) and DestroyDialog (unsubscribe) — clean lifecycle.

Code Review Summary

Verdict: NEEDS_CHANGES
Confidence: high
Errors: 2 | Warnings: 2 | Suggestions: 1

Key code review findings:

  • DatePickerHandlerTests.Android.cs:1 — No regression test added for the rotation-dismiss bug; every bug fix needs a device test reproducing the original scenario.
  • DatePickerHandler.Android.cs:237OnMainDisplayInfoChanged guard _dialog.IsShowing too narrow; if Android dismisses the dialog just before the orientation callback fires, _dialog is non-null but IsShowing == false → stale dialog left in memory, skips the recreate block entirely.
  • ⚠️ DatePickerHandler.Android.cs:110,128DestroyDialog() in MapMinimumDate/MapMaximumDate mappers destroys dialog but leaves VirtualView.IsOpen = true, creating state inconsistency.
  • ⚠️ DatePickerHandler.Android.cs:58DisconnectHandler calls DestroyDialog() without resetting VirtualView.IsOpen, causing dialog to unexpectedly re-open on handler reconnect.
  • 💡 DatePickerHandler.Android.cs:227HidePickerDialog has no null guard on VirtualView.IsOpen = false.

Fix Candidates

# Source Approach Test Result Files Changed Notes
PR PR #34980 Unsubscribe DismissEvent in DestroyDialog before Dismiss(); remove subscribe/unsubscribe from ShowPickerDialog/HidePickerDialog ❌ FAILED (Gate) DatePickerHandler.Android.cs Original PR

Impacted UI Test Categories

DatePicker — PR modifies DatePickerHandler dialog lifecycle on Android


🔬 Code Review — Deep Analysis

Code Review — PR #34980

Independent Assessment

What this changes: The Android DatePickerHandler is refactored to fix dialog lifecycle management. ResetDialog() is renamed to DestroyDialog() and now unsubscribes the DismissEvent handler before calling Dismiss(). The DismissEvent subscription/unsubscription that was scattered across ShowPickerDialog() and HidePickerDialog() is removed from those methods — the subscription now lives exclusively in CreateDatePickerDialog() and the unsubscription in DestroyDialog(). The OnMainDisplayInfoChanged handler is rewritten to capture the current date, call DestroyDialog(), then call ShowPickerDialog(currentDate) instead of calling currentDialog.Dismiss() then ShowPickerDialog() on the existing dialog.

Inferred motivation: A double-dismiss race during device rotation. The old flow:

  1. OnMainDisplayInfoChanged calls currentDialog.Dismiss() → Android queues a DismissEvent
  2. ShowPickerDialog() immediately runs (synchronously after Dismiss()), enters the else branch (dialog is still non-null), and re-subscribes DismissEvent
  3. The queued DismissEvent fires → OnDialogDismissHidePickerDialog() → the newly-shown dialog is dismissed

Is the approach sound? Yes, with caveats. Keeping the DismissEvent subscription exclusively inside the CreateDatePickerDialog()/DestroyDialog() pair is the correct architectural fix — it eliminates the re-subscription window. The rename from ResetDialog() to DestroyDialog() is also an improvement. However, the guard condition in OnMainDisplayInfoChanged has a gap, and the VirtualView.IsOpen state is left inconsistent in several destroy paths.


Reconciliation with PR Narrative

Author claims: The bug is that DismissEvent gets re-subscribed during ShowPickerDialog() in the else branch, and the already-queued DismissEvent then fires and dismisses the re-shown dialog. Fix: remove subscriptions from ShowPickerDialog()/HidePickerDialog(), use DestroyDialog() in OnMainDisplayInfoChanged to force a fresh dialog on rotation.

Agreement/disagreement: The root cause analysis is correct and matches the code. The DestroyDialog() approach cleanly solves the re-subscription race. One disagreement: the PR assumes the dialog is always in IsShowing == true state when OnMainDisplayInfoChanged fires, but Android can dismiss the dialog before the orientation-change callback fires, leaving _dialog non-null and IsShowing == false. In this case the stale dialog is never cleaned up and the rotation recreate is silently skipped. The PR does not add any device test for the rotation scenario.


Findings

❌ Error — Missing regression test for the rotation bug

src/Core/tests/DeviceTests/Handlers/DatePicker/DatePickerHandlerTests.Android.cs:1

Neither test file adds a test for the reported scenario. The only changes to the test files are comment renames from ResetDialog() to DestroyDialog(). Per Principle 1, every bug fix needs a regression test reproducing the original issue.

A viable test: expose OnMainDisplayInfoChanged as internal, then from a device test — open the picker, invoke handler.InvokeMainDisplayInfoChanged() (or raise DeviceDisplay.MainDisplayInfoChanged), then assert handler.DatePickerDialog != null && handler.DatePickerDialog.IsShowing. Without this, the rotation-dismissal regression is entirely unguarded.


❌ Error — OnMainDisplayInfoChanged guard is too narrow; stale dialog left on rotation if not currently showing

src/Core/src/Handlers/DatePicker/DatePickerHandler.Android.cs:237

The guard _dialog is not null && _dialog.IsShowing is the entire handling logic for display-info changes. If Android dismisses the dialog before OnMainDisplayInfoChanged fires (which is the exact scenario the PR is targeting — Android's system-initiated dismiss during rotation), the callback arrives with _dialog non-null but IsShowing == false. The block is entirely skipped.

Consequence: _dialog now points to a dialog attached to the old window context (no longer valid after rotation), _dialog = null is never called, and the next ShowPickerDialog() call enters the else branch (dialog is non-null), tries to reuse the stale dialog via UpdateDate, and shows it — potentially against the wrong window or silently fails.

Suggested fix:

void OnMainDisplayInfoChanged(object? sender, DisplayInfoChangedEventArgs e)
{
    if (_dialog is not null)
    {
        var wasShowing = _dialog.IsShowing;
        var currentDate = wasShowing ? (DateTime?)_dialog.DatePicker.DateTime : null;
        DestroyDialog();
        if (wasShowing && currentDate is not null)
            ShowPickerDialog(currentDate);
    }
}

This ensures any non-null stale dialog is always cleaned up on orientation change, and only recreates when the dialog was actually visible.


⚠️ Warning — DestroyDialog() in mappers leaves VirtualView.IsOpen dirty

src/Core/src/Handlers/DatePicker/DatePickerHandler.Android.cs:110 (same at line 128)

When MinimumDate or MaximumDate is set while the picker dialog is showing, DestroyDialog() dismisses and nulls _dialog but deliberately unsubscribes DismissEvent before dismissing — so OnDialogDismiss is never called and HidePickerDialog() never runs. VirtualView.IsOpen remains true while the dialog is gone from the screen.

App code that reads datePicker.IsOpen after setting MinimumDate while the picker is visible will observe true with no dialog on screen. This is pre-existing behavior under ResetDialog(), but the rename to DestroyDialog() makes the gap more visible and the rename is an appropriate time to address it.

Fix: call VirtualView.IsOpen = false (or call HidePickerDialog() directly) after each DestroyDialog() call in the mapper branches, guarded by a null check on VirtualView.


⚠️ Warning — DisconnectHandler destroys dialog without resetting VirtualView.IsOpen, causing dialog to auto-show on reconnect

src/Core/src/Handlers/DatePicker/DatePickerHandler.Android.cs:58

If the DatePicker's dialog is open when DisconnectHandler runs (e.g., user navigates away from a Shell tab while the picker is showing), DestroyDialog() dismisses the native dialog but VirtualView.IsOpen stays true. When the handler reconnects (user returns to the tab), the mapper pass reads IsOpen == true and immediately calls ShowPickerDialog(), unexpectedly reopening the dialog the user already navigated away from.

Fix: reset IsOpen before DestroyDialog() in DisconnectHandler:

if (VirtualView is not null)
    VirtualView.IsOpen = false;
DestroyDialog();

💡 Suggestion — HidePickerDialog is missing a null guard on VirtualView

src/Core/src/Handlers/DatePicker/DatePickerHandler.Android.cs:227

VirtualView.IsOpen = false has no null guard. HidePickerDialog is reachable via OnDialogDismiss at any time, including during teardown. DisconnectHandler's unsubscription path in DestroyDialog() correctly prevents the race, but a tight race between a system dismiss (back-button, touch outside) and the start of DisconnectHandler before DestroyDialog() runs could arrive with VirtualView == null.

Simple fix: if (VirtualView is not null) VirtualView.IsOpen = false;


CI Analysis

Check Status Notes
maui-pr (Build / Integration) ✅ PASS All platforms build and integration tests pass
Android Mono device tests ✅ PASS Core DatePicker tests green
Android CoreCLR device tests ❌ FAIL Needs investigation — could be a pre-existing flake or a test failure introduced by this PR
iOS/Windows UI tests ❌ FAIL (widespread) All iOS UI test categories fail across unrelated features; pre-existing infrastructure issue

The Android CoreCLR device test failure (net10.0 Android CoreCLR Helix Tests Run DeviceTests Android (CoreCLR)) is the most relevant to this PR. The Mono variant passes. This warrants investigation before merge.


Devil's Advocate

Challenging the ❌ on OnMainDisplayInfoChanged: Is the _dialog.IsShowing == false scenario actually reachable? On Android, the display-info change fires as part of the activity recreation cycle during rotation — the old Activity (and its dialogs) is typically destroyed before the new one starts. If the dialog was dismissed by the system before OnMainDisplayInfoChanged fires (which would require the Maui-managed view to still be alive after the dialog was system-dismissed), that's only possible if the user's own dismiss and the rotation happen simultaneously. This is an edge case, but not an impossible one — and leaving stale _dialog references around is a correctness concern regardless of probability.

Challenging the ⚠️ on IsOpen consistency: One could argue IsOpen is a "desired state" property and the caller is responsible for setting it to false if they change MinimumDate while the picker is open. However, this contradicts how HidePickerDialog() works (it always resets IsOpen), and DestroyDialog() is now a more definitive "dialog is gone" signal than Hide().

Challenging the overall approach: An alternative to renaming + reorganizing the subscription sites would be to keep a simple bool flag _isDestroyingDialog and early-return in OnDialogDismiss when set. This would be a smaller, safer change. The PR's approach is more architecturally clean but touches more code paths.


Verdict: NEEDS_CHANGES

Confidence: high
Summary: The root cause analysis is correct and the fix direction is sound. However, the OnMainDisplayInfoChanged guard condition does not fully cover the scenario it is intended to fix (stale non-showing dialog on rotation), and three paths leave VirtualView.IsOpen in an inconsistent state after dialog destruction. Additionally, the PR provides no regression test for the rotation scenario, and the Android CoreCLR device test CI failure needs to be investigated before merge.


🔧 Fix — Analysis & Comparison

Fix Candidates

# Source Approach Test Result Files Changed Notes
1 try-fix Boolean _suppressDismissCallback flag; unsubscribe before Dismiss in OnMainDisplayInfoChanged ✅ PASS 1 file Both regressions pass (Issue19256 ✅, Issue33583 ✅)
2 try-fix HidePickerDialog-first + null dialog + ShowPickerDialog(date) in OnMainDisplayInfoChanged ✅ PASS 1 file Both regressions pass (Issue19256 ✅, Issue33583 ✅); minimal 9-line change
3 try-fix Single-subscription lifecycle fix + stale dialog handling in OnMainDisplayInfoChanged ❌ FAIL 1 file Infrastructure failure (project flag issue + unrelated test failure)
4 try-fix IsOpen as source of truth; unsubscribe before Dismiss; stale dialog handling; null guards throughout ✅ PASS 1 file Issue33583 ✅; Issue19256 ❌ (claimed pre-existing but unverified independently)
PR PR #34980 Rename ResetDialog→DestroyDialog; remove DismissEvent subscribe/unsubscribe from ShowPickerDialog/HidePickerDialog; use DestroyDialog in OnMainDisplayInfoChanged ❌ FAILED (Gate) DatePickerHandler.Android.cs, 2 comment-only test updates Code review: NEEDS_CHANGES (2 errors, 2 warnings)

Cross-Pollination

Model Round New Ideas? Details
claude-sonnet-4.6 2 Yes DialogFragment approach — wrap DatePickerDialog in a DialogFragment to survive configuration changes natively; impractical for this scope (major architectural refactor, changes public handler API)
All models 2 NO NEW IDEAS After DialogFragment suggestion noted as out-of-scope, exhausted

Exhausted: Yes
Selected Fix: try-fix-2 — Minimal 9-line change to OnMainDisplayInfoChanged that calls HidePickerDialog() (which unsubscribes DismissEvent and uses Hide() not Dismiss()), nulls _dialog, then calls ShowPickerDialog(date). This forces fresh dialog creation path and cleanly eliminates the DismissEvent race, with no new state variables. Both regression tests pass explicitly.


📋 Report — Final Recommendation

⚠️ Final Recommendation: REQUEST CHANGES

Phase Status

Phase Status Notes
Pre-Flight ✅ COMPLETE Issue #34973, 1 impl file + 2 comment-only test updates
Code Review NEEDS_CHANGES (high) 2 errors, 2 warnings, 1 suggestion
Gate ❌ FAILED android — tests did not behave as expected
Try-Fix ✅ COMPLETE 4 attempts: 3 passing, 1 infrastructure failure
Report ✅ COMPLETE

Code Review Impact on Try-Fix

Code review's ❌ Error about OnMainDisplayInfoChanged guard being too narrow (stale dialog when !IsShowing) was explicitly addressed in try-fix-4, which expanded the rotation handler to cover both showing and non-showing cases. Code review's finding about VirtualView.IsOpen inconsistency guided try-fix-4's IsOpen-as-source-of-truth approach. All three passing try-fix models correctly identified and resolved the core DismissEvent race condition identified by the code review failure-mode probe.

Candidate Comparison

Candidate Gate/Tests Regressions Code Quality Verdict
pr (raw PR) ❌ Gate FAILED not tested Architecturally clean but missing stale-dialog guard and no regression test REQUEST CHANGES
pr-plus-reviewer est. ✅ (similar to try-fix-4) est. ✅ Addresses all code review concerns Would PASS with reviewer fixes applied
try-fix-1 ✅ PASS ✅ Both pass Adds _suppressDismissCallback field; functional but introduces extra state Good alternative
try-fix-2 ✅ PASS ✅ Both pass 9-line minimal change; uses existing methods; no new state Best candidate
try-fix-3 ❌ FAIL not tested Infrastructure failure; approach unproven Disqualified
try-fix-4 ✅ PASS ✅ Issue33583; ⚠️ Issue19256 uncertain Most comprehensive; 32 lines; addresses all review concerns Good but regression uncertainty

Summary

The PR correctly identifies and partially fixes a DismissEvent race condition in DatePickerHandler.OnMainDisplayInfoChanged. However, the Gate failed, the code review found two errors (missing rotation regression test, stale dialog guard too narrow), and the PR doesn't address VirtualView.IsOpen inconsistencies. try-fix-2 is the winning candidate: a 9-line minimal change to OnMainDisplayInfoChanged that calls HidePickerDialog() (which properly unsubscribes DismissEvent via Hide() not Dismiss()), nulls _dialog, then calls ShowPickerDialog(date). This forces clean fresh dialog creation and eliminates the race with no new state variables. Both regression tests (Issue19256 and Issue33583) explicitly pass.

Root Cause

OnMainDisplayInfoChanged called currentDialog.Dismiss() while DismissEvent was still subscribed. Android queues the DismissEvent callback. ShowPickerDialog ran immediately after in the else branch (dialog non-null), re-subscribing DismissEvent. The queued callback then fired on the newly re-shown dialog, triggering HidePickerDialog() and dismissing it again.

Fix Quality

Selected fix (try-fix-2): Minimal and correct. Uses the existing HidePickerDialog() method (which calls Hide() not Dismiss(), so no DismissEvent fires) to properly clean up, then forces fresh dialog creation via _dialog = null. Idiomatic, no new API surface, no renaming needed. The PR's broader architectural cleanup (removing subscribe/unsubscribe from Show/HidePickerDialog) is a valid improvement but is blocked by its own code review findings and Gate failure.


Copy link
Copy Markdown
Collaborator

@MauiBot MauiBot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Automated review — alternative fix proposed

The expert-reviewer evaluation compared the PR fix against #2 automatically generated candidates and selected try-fix-2 as the strongest fix.

Why: try-fix-2 wins with a minimal 9-line change to OnMainDisplayInfoChanged that uses the existing HidePickerDialog() method (which calls Hide() not Dismiss(), preventing DismissEvent from firing) then nulls _dialog to force fresh dialog creation via CreateDatePickerDialog. All DatePicker device tests and both regression tests (Issue19256, Issue33583) pass explicitly. The PR's fix has a Gate failure and code-review NEEDS_CHANGES (missing regression test, stale dialog guard too narrow), making it ineligible as-is.

Please consider applying the candidate diff below (or use it as guidance). Once you push an update, this workflow will re-trigger and re-evaluate.

Candidate diff (`try-fix-2`)
diff --git a/src/Core/src/Handlers/DatePicker/DatePickerHandler.Android.cs b/src/Core/src/Handlers/DatePicker/DatePickerHandler.Android.cs
index 1751349534..6b148f11c3 100644
--- a/src/Core/src/Handlers/DatePicker/DatePickerHandler.Android.cs
+++ b/src/Core/src/Handlers/DatePicker/DatePickerHandler.Android.cs
@@ -240,9 +240,19 @@ namespace Microsoft.Maui.Handlers
 
 			if (currentDialog is not null && currentDialog.IsShowing)
 			{
-				currentDialog.Dismiss();
+				var date = currentDialog.DatePicker.DateTime;
 
-				ShowPickerDialog(currentDialog.DatePicker.DateTime);
+				// Unsubscribe DismissEvent and hide before dismissing so that the
+				// queued DismissEvent cannot re-enter OnDialogDismiss and dismiss
+				// the new dialog we are about to create.
+				HidePickerDialog();
+
+				// Null the reference so ShowPickerDialog takes the clean
+				// CreateDatePickerDialog path rather than the else-branch that
+				// re-subscribes DismissEvent on the stale dialog.
+				_dialog = null;
+
+				ShowPickerDialog(date);
 			}
 		}
 	}

@MauiBot MauiBot added s/agent-fix-win AI found a better alternative fix than the PR and removed s/agent-fix-pr-picked AI could not beat the PR fix - PR is the best among all candidates labels May 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-controls-datetimepicker DatePicker, TimePicker community ✨ Community Contribution partner/syncfusion Issues / PR's with Syncfusion collaboration platform/android s/agent-changes-requested AI agent recommends changes - found a better alternative or issues s/agent-fix-win AI found a better alternative fix than the PR s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Android] [Regression] DatePicker dialog dismisses after the device is rotated

6 participants