Skip to content

Add UI test for Shell flyout gesture when FlyoutBehavior is Disabled#9

Merged
kubaflo merged 5 commits intofix-32616from
copilot/review-pr-32648
Nov 15, 2025
Merged

Add UI test for Shell flyout gesture when FlyoutBehavior is Disabled#9
kubaflo merged 5 commits intofix-32616from
copilot/review-pr-32648

Conversation

Copy link

Copilot AI commented Nov 15, 2025

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!

Description of Change

Adds UI test coverage for PR dotnet#32648 which fixes Shell flyout pan gesture behavior when FlyoutBehavior.Disabled is set.

Test Coverage:

Test Structure:

  • Issue32616.cs in TestCases.HostApp: Shell page with toggleable FlyoutBehavior
  • Issue32616.cs in TestCases.Shared.Tests: NUnit test verifying flyout icon presence/absence

Issues Fixed

Related to dotnet#32616 (fixed by PR dotnet#32648)

Original prompt

pr-reviewer review dotnet#32648


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

Copilot AI and others added 2 commits November 15, 2025 01:16
…avigation (#7)

* Initial plan

* Add null checks in ShellSectionRenderer

Added additional null checks for page and renderer references in ShellSectionRenderer to prevent potential null reference exceptions during navigation and view controller handling.

* Fix inconsistent cast in ElementForViewController method

* Complete PR dotnet#32456 review with detailed analysis

Co-authored-by: kubaflo <42434498+kubaflo@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Jakub Florkowski <42434498+kubaflo@users.noreply.github.com>
Copilot AI and others added 3 commits November 15, 2025 15:04
Co-authored-by: kubaflo <42434498+kubaflo@users.noreply.github.com>
Co-authored-by: kubaflo <42434498+kubaflo@users.noreply.github.com>
Co-authored-by: kubaflo <42434498+kubaflo@users.noreply.github.com>
Copilot AI changed the title [WIP] Review pull request #32648 for MAUI Add UI test for Shell flyout gesture when FlyoutBehavior is Disabled Nov 15, 2025
Copilot AI requested a review from kubaflo November 15, 2025 15:12
@kubaflo kubaflo changed the base branch from main to fix-32616 November 15, 2025 18:04
@kubaflo kubaflo marked this pull request as ready for review November 15, 2025 18:05
@kubaflo kubaflo merged commit ddab018 into fix-32616 Nov 15, 2025
kubaflo pushed a commit that referenced this pull request Jan 6, 2026
…tnet#33071)

App crashes because of changing a shared Drawable on the fly. I found
out it is the SearchBar. It only happens on Android and in large apps
with lots of screens. Unfortunately I can't reproduce it in the
TestSuite. But by reading the docs of Android this crash is common and
caused by changing a Drawable which is still referenced. With a custom
SearchBarHandler the issues is resolved.

```Backtrace (top frames):
  #00 pc 00000000006b8694  /system/lib64/libhwui.so
      android::getRootAlpha(_JNIEnv*, _jobject*, long) +4

  #1 pc 0000000002256c90  /memfd:jit-cache (deleted)
      art_jni_trampoline +112

  #2 pc 000000000223bc4c  /memfd:jit-cache (deleted)
      android.graphics.drawable.VectorDrawable.-$$Nest$smnGetRootAlpha +108

  #3 pc 000000000223bb20  /memfd:jit-cache (deleted)
      android.graphics.drawable.VectorDrawable$VectorDrawableState.getAlpha +144

  #4 pc 00000000025c50e0  /memfd:jit-cache (deleted)
      android.graphics.drawable.VectorDrawable.getAlpha +128

  #5 pc 00000000025c4f9c  /memfd:jit-cache (deleted)
      android.graphics.drawable.VectorDrawable.getOpacity +124

  #6 pc 00000000025c1ea8  /memfd:jit-cache (deleted)
      android.widget.ImageView.isOpaque +152

  #7 pc 000000000227979c  /memfd:jit-cache (deleted)
      android.view.View.invalidateInternal +428

  #8 pc 00000000025c4790  /memfd:jit-cache (deleted)
      android.widget.ImageView.invalidateDrawable +256

  #9 pc 000000000224419c  /memfd:jit-cache (deleted)
      android.graphics.drawable.Drawable.invalidateSelf +156

  #10 pc 000000000260e710  /memfd:jit-cache (deleted)
      android.graphics.drawable.VectorDrawable.setTintList +192

  #11 pc 00000000025d0094  /memfd:jit-cache (deleted)
      **android.graphics.drawable.Drawable.setTint +148**
```

### Description of Change

- Changes tinting of Androids SearchBar to unified setTint instead of
setColorFilter
-  Mutates the drawable before setting the tint.

### Issues Fixed
Issue is fixed with a custom handler for now.

Fixes dotnet#33070
PureWeen pushed a commit that referenced this pull request Jan 9, 2026
…tnet#33071)

App crashes because of changing a shared Drawable on the fly. I found
out it is the SearchBar. It only happens on Android and in large apps
with lots of screens. Unfortunately I can't reproduce it in the
TestSuite. But by reading the docs of Android this crash is common and
caused by changing a Drawable which is still referenced. With a custom
SearchBarHandler the issues is resolved.

```Backtrace (top frames):
  #00 pc 00000000006b8694  /system/lib64/libhwui.so
      android::getRootAlpha(_JNIEnv*, _jobject*, long) +4

  #1 pc 0000000002256c90  /memfd:jit-cache (deleted)
      art_jni_trampoline +112

  #2 pc 000000000223bc4c  /memfd:jit-cache (deleted)
      android.graphics.drawable.VectorDrawable.-$$Nest$smnGetRootAlpha +108

  #3 pc 000000000223bb20  /memfd:jit-cache (deleted)
      android.graphics.drawable.VectorDrawable$VectorDrawableState.getAlpha +144

  #4 pc 00000000025c50e0  /memfd:jit-cache (deleted)
      android.graphics.drawable.VectorDrawable.getAlpha +128

  #5 pc 00000000025c4f9c  /memfd:jit-cache (deleted)
      android.graphics.drawable.VectorDrawable.getOpacity +124

  #6 pc 00000000025c1ea8  /memfd:jit-cache (deleted)
      android.widget.ImageView.isOpaque +152

  #7 pc 000000000227979c  /memfd:jit-cache (deleted)
      android.view.View.invalidateInternal +428

  #8 pc 00000000025c4790  /memfd:jit-cache (deleted)
      android.widget.ImageView.invalidateDrawable +256

  #9 pc 000000000224419c  /memfd:jit-cache (deleted)
      android.graphics.drawable.Drawable.invalidateSelf +156

  #10 pc 000000000260e710  /memfd:jit-cache (deleted)
      android.graphics.drawable.VectorDrawable.setTintList +192

  #11 pc 00000000025d0094  /memfd:jit-cache (deleted)
      **android.graphics.drawable.Drawable.setTint +148**
```

### Description of Change

- Changes tinting of Androids SearchBar to unified setTint instead of
setColorFilter
-  Mutates the drawable before setting the tint.

### Issues Fixed
Issue is fixed with a custom handler for now.

Fixes dotnet#33070
kubaflo pushed a commit that referenced this pull request Jan 10, 2026
Adds the issue-triage skill from PureWeen#9
to help triage open GitHub issues that need milestones, labels, or
investigation.

## Changes

- **`.github/skills/issue-triage/SKILL.md`** - Skill definition with
workflow, trigger phrases, and milestone suggestion logic
- **`scripts/init-triage-session.ps1`** - Initializes session with
current milestones and labels from dotnet/maui
- **`scripts/query-issues.ps1`** - Queries open issues with
platform/area/age filters, fetches linked PRs, suggests milestones
dynamically
- **`scripts/record-triage.ps1`** - Tracks triaged issues in session
file
- **`.github/copilot-instructions.md`** - Added "Reusable Skills"
section documenting the new skill

## Dynamic Milestone Detection

Milestones are queried dynamically from dotnet/maui rather than being
hardcoded (since SR milestones change monthly):
- **SR milestones**: Identified by pattern `\.NET.*SR\d+`, sorted by due
date to determine current/next SR
- **Servicing milestone**: Identified by pattern `\.NET.*Servicing`
- Suggestions use the dynamically discovered milestones based on issue
characteristics (regressions → current SR, PRs → Servicing, etc.)

## Usage

```bash
# Initialize triage session
pwsh .github/skills/issue-triage/scripts/init-triage-session.ps1

# Query Android issues needing triage
pwsh .github/skills/issue-triage/scripts/query-issues.ps1 -Platform android -Limit 20

# Record a triage decision
pwsh .github/skills/issue-triage/scripts/record-triage.ps1 -IssueNumber 33272 -Milestone "Backlog"
```

Trigger phrases: "find issues to triage", "triage Android issues", "what
issues need attention"

<!-- START COPILOT CODING AGENT SUFFIX -->



<!-- START COPILOT ORIGINAL PROMPT -->



<details>

<summary>Original prompt</summary>

> Create a PR for an issue-triage skill that uses the skill from here
PureWeen#9. Just grab the issue-triage
skill from this PR please


</details>



<!-- START COPILOT CODING AGENT TIPS -->
---

✨ Let Copilot coding agent [set things up for
you](https://github.com/dotnet/maui/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: PureWeen <5375137+PureWeen@users.noreply.github.com>
Co-authored-by: Shane Neuville <shneuvil@microsoft.com>
kubaflo pushed a commit that referenced this pull request Jan 14, 2026
…tnet#33071)

App crashes because of changing a shared Drawable on the fly. I found
out it is the SearchBar. It only happens on Android and in large apps
with lots of screens. Unfortunately I can't reproduce it in the
TestSuite. But by reading the docs of Android this crash is common and
caused by changing a Drawable which is still referenced. With a custom
SearchBarHandler the issues is resolved.

```Backtrace (top frames):
  #00 pc 00000000006b8694  /system/lib64/libhwui.so
      android::getRootAlpha(_JNIEnv*, _jobject*, long) +4

  #1 pc 0000000002256c90  /memfd:jit-cache (deleted)
      art_jni_trampoline +112

  #2 pc 000000000223bc4c  /memfd:jit-cache (deleted)
      android.graphics.drawable.VectorDrawable.-$$Nest$smnGetRootAlpha +108

  #3 pc 000000000223bb20  /memfd:jit-cache (deleted)
      android.graphics.drawable.VectorDrawable$VectorDrawableState.getAlpha +144

  #4 pc 00000000025c50e0  /memfd:jit-cache (deleted)
      android.graphics.drawable.VectorDrawable.getAlpha +128

  #5 pc 00000000025c4f9c  /memfd:jit-cache (deleted)
      android.graphics.drawable.VectorDrawable.getOpacity +124

  #6 pc 00000000025c1ea8  /memfd:jit-cache (deleted)
      android.widget.ImageView.isOpaque +152

  #7 pc 000000000227979c  /memfd:jit-cache (deleted)
      android.view.View.invalidateInternal +428

  #8 pc 00000000025c4790  /memfd:jit-cache (deleted)
      android.widget.ImageView.invalidateDrawable +256

  #9 pc 000000000224419c  /memfd:jit-cache (deleted)
      android.graphics.drawable.Drawable.invalidateSelf +156

  #10 pc 000000000260e710  /memfd:jit-cache (deleted)
      android.graphics.drawable.VectorDrawable.setTintList +192

  #11 pc 00000000025d0094  /memfd:jit-cache (deleted)
      **android.graphics.drawable.Drawable.setTint +148**
```

### Description of Change

- Changes tinting of Androids SearchBar to unified setTint instead of
setColorFilter
-  Mutates the drawable before setting the tint.

### Issues Fixed
Issue is fixed with a custom handler for now.

Fixes dotnet#33070
kubaflo pushed a commit that referenced this pull request Jan 16, 2026
Adds the issue-triage skill from PureWeen#9
to help triage open GitHub issues that need milestones, labels, or
investigation.

## Changes

- **`.github/skills/issue-triage/SKILL.md`** - Skill definition with
workflow, trigger phrases, and milestone suggestion logic
- **`scripts/init-triage-session.ps1`** - Initializes session with
current milestones and labels from dotnet/maui
- **`scripts/query-issues.ps1`** - Queries open issues with
platform/area/age filters, fetches linked PRs, suggests milestones
dynamically
- **`scripts/record-triage.ps1`** - Tracks triaged issues in session
file
- **`.github/copilot-instructions.md`** - Added "Reusable Skills"
section documenting the new skill

## Dynamic Milestone Detection

Milestones are queried dynamically from dotnet/maui rather than being
hardcoded (since SR milestones change monthly):
- **SR milestones**: Identified by pattern `\.NET.*SR\d+`, sorted by due
date to determine current/next SR
- **Servicing milestone**: Identified by pattern `\.NET.*Servicing`
- Suggestions use the dynamically discovered milestones based on issue
characteristics (regressions → current SR, PRs → Servicing, etc.)

## Usage

```bash
# Initialize triage session
pwsh .github/skills/issue-triage/scripts/init-triage-session.ps1

# Query Android issues needing triage
pwsh .github/skills/issue-triage/scripts/query-issues.ps1 -Platform android -Limit 20

# Record a triage decision
pwsh .github/skills/issue-triage/scripts/record-triage.ps1 -IssueNumber 33272 -Milestone "Backlog"
```

Trigger phrases: "find issues to triage", "triage Android issues", "what
issues need attention"

<!-- START COPILOT CODING AGENT SUFFIX -->



<!-- START COPILOT ORIGINAL PROMPT -->



<details>

<summary>Original prompt</summary>

> Create a PR for an issue-triage skill that uses the skill from here
PureWeen#9. Just grab the issue-triage
skill from this PR please


</details>



<!-- START COPILOT CODING AGENT TIPS -->
---

✨ Let Copilot coding agent [set things up for
you](https://github.com/dotnet/maui/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: PureWeen <5375137+PureWeen@users.noreply.github.com>
Co-authored-by: Shane Neuville <shneuvil@microsoft.com>
kubaflo pushed a commit that referenced this pull request Jan 16, 2026
…tnet#33071)

App crashes because of changing a shared Drawable on the fly. I found
out it is the SearchBar. It only happens on Android and in large apps
with lots of screens. Unfortunately I can't reproduce it in the
TestSuite. But by reading the docs of Android this crash is common and
caused by changing a Drawable which is still referenced. With a custom
SearchBarHandler the issues is resolved.

```Backtrace (top frames):
  #00 pc 00000000006b8694  /system/lib64/libhwui.so
      android::getRootAlpha(_JNIEnv*, _jobject*, long) +4

  #1 pc 0000000002256c90  /memfd:jit-cache (deleted)
      art_jni_trampoline +112

  #2 pc 000000000223bc4c  /memfd:jit-cache (deleted)
      android.graphics.drawable.VectorDrawable.-$$Nest$smnGetRootAlpha +108

  #3 pc 000000000223bb20  /memfd:jit-cache (deleted)
      android.graphics.drawable.VectorDrawable$VectorDrawableState.getAlpha +144

  #4 pc 00000000025c50e0  /memfd:jit-cache (deleted)
      android.graphics.drawable.VectorDrawable.getAlpha +128

  #5 pc 00000000025c4f9c  /memfd:jit-cache (deleted)
      android.graphics.drawable.VectorDrawable.getOpacity +124

  #6 pc 00000000025c1ea8  /memfd:jit-cache (deleted)
      android.widget.ImageView.isOpaque +152

  #7 pc 000000000227979c  /memfd:jit-cache (deleted)
      android.view.View.invalidateInternal +428

  #8 pc 00000000025c4790  /memfd:jit-cache (deleted)
      android.widget.ImageView.invalidateDrawable +256

  #9 pc 000000000224419c  /memfd:jit-cache (deleted)
      android.graphics.drawable.Drawable.invalidateSelf +156

  #10 pc 000000000260e710  /memfd:jit-cache (deleted)
      android.graphics.drawable.VectorDrawable.setTintList +192

  #11 pc 00000000025d0094  /memfd:jit-cache (deleted)
      **android.graphics.drawable.Drawable.setTint +148**
```

### Description of Change

- Changes tinting of Androids SearchBar to unified setTint instead of
setColorFilter
-  Mutates the drawable before setting the tint.

### Issues Fixed
Issue is fixed with a custom handler for now.

Fixes dotnet#33070
kubaflo added a commit that referenced this pull request Jan 17, 2026
Adds the `find-reviewable-pr` skill from <a
href="https://github.com/PureWeen/maui/pull/9">PureWeen/maui PR #9</a>
to help find open PRs in the dotnet/maui and dotnet/docs-maui
repositories that are good candidates for review.

## Changes Made

- **`.github/skills/find-reviewable-pr/SKILL.md`** - Skill documentation
including usage guide, priority categories, script parameters, and
workflow for reviewing PRs
-
**`.github/skills/find-reviewable-pr/scripts/query-reviewable-prs.ps1`**
- PowerShell script that queries GitHub for open PRs and prioritizes
them dynamically by milestone (lower SR numbers first), P/0 priority,
partner status, community contributions, and recency

## Features

The skill provides:
- Priority-based PR categorization (P/0, Milestoned, Partner, Community,
Recent)
- **Dynamic milestone sorting**: Milestones are sorted by SR number
(e.g., SR5 before SR6) so prioritization remains correct as milestones
advance monthly
- Platform filtering (Android, iOS, Windows, MacCatalyst)
- Multiple output formats (review, table, JSON)
- Complexity assessment for PRs
- Review status tracking
- **docs-maui support**: Returns 5 priority PRs and 5 recent PRs from
dotnet/docs-maui by default
  - New `-DocsLimit` parameter to control docs-maui PR count
  - New `-Category docs-maui` filter option to show only docs-maui PRs
- **Recent PRs**: Shows 5 recent PRs from both maui and docs-maui by
default
- New `-RecentLimit` parameter to control recent PRs from maui (default:
5)

<!-- START COPILOT ORIGINAL PROMPT -->



<details>

<summary>Original prompt</summary>

> Create a PR that just grabs the find-reviewable-pr's skill from this
PR PureWeen#9


</details>



<!-- START COPILOT CODING AGENT TIPS -->
---

💡 You can make Copilot smarter by setting up custom instructions,
customizing its development environment and configuring Model Context
Protocol (MCP) servers. Learn more [Copilot coding agent
tips](https://gh.io/copilot-coding-agent-tips) in the docs.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: PureWeen <5375137+PureWeen@users.noreply.github.com>
Co-authored-by: Shane Neuville <shneuvil@microsoft.com>
Co-authored-by: Jakub Florkowski <kubaflo123@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants