-
Notifications
You must be signed in to change notification settings - Fork 404
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Full screen events #2041
base: main
Are you sure you want to change the base?
Full screen events #2041
Conversation
This commit introduces full screen state management for media elements. The `CommunityToolkit.Maui.Primitives` namespace was added to several files to support this feature. A new `MediaElementScreenState` enum and `FullScreenStateChangedEventArgs` class were added to represent the full screen state and event data respectively. The `IMediaElement` and `MediaElement` interfaces were updated to include a `FullScreenState` property, a `FullScreenStateChanged` event, and a `FullScreenChanged` method. The `MediaElementPage` class now subscribes to the `FullScreenStateChanged` event and logs information when triggered. The `MauiMediaElement` classes for Android and Windows, and the `MediaManagerDelegate` class for MacOS, were updated to include a `WindowsChanged` event that triggers when the full screen state changes. The `MediaManager` classes for Android, MacOS, and Windows now subscribe to the `WindowsChanged` event and update the full screen state when triggered. The `MediaManager` class for MacOS sets the `Delegate` property of the `AVPlayerViewController` to a new instance of `MediaManagerDelegate`.
- Updated MediaElementPage.xaml to include a new event handler `FullScreenStateChanged` for better responsiveness to fullscreen changes. - Removed subscription to `FullScreenStateChanged` in MediaElementPage.xaml.cs, indicating a shift in how fullscreen changes are managed. - Improved Android fullscreen support in MauiMediaElement.android.cs by invoking `OnWindowsChanged` with `FullScreenStateChangedEventArgs` to accurately track fullscreen state changes.
Updated the comment for the `OnWindowsChanged` static event in the `MediaManager` class to more accurately describe its purpose related to changes in the full screen state of the media element. The previous, less descriptive comment was replaced with a clearer explanation.
…iOld into FullScreenEvents
This commit overhauls the handling of full-screen state changes across Android, Windows, and macOS within a Maui application. A new record, `FullScreenEvents`, has been introduced in the `MediaManager` class to centralize event handling, replacing platform-specific `WindowsChanged` events with a unified approach. This refactor includes the removal of redundant `using` directives, adjustments in event invocation to utilize the new centralized event, and general code cleanup for better readability and maintainability. Platform-specific code has been updated to align with this new mechanism, streamlining the full-screen state change process across different operating systems.
…iOld into FullScreenEvents
- Removed `OnWindowsChanged` from `MediaManager` in platform-specific files (Android, macOS, Windows) due to redundancy and centralized this logic by adding a new protected method `OnWindowsChanged` to the `FullScreenEvents` record in `MediaManager.shared.cs`. This change aims to reduce code duplication and improve the management of full-screen state changes across different platforms.
Centralized the subscription to FullScreenEvents.WindowsChanged in the MediaManager class to improve maintainability and readability. Removed redundant event unsubscriptions in platform-specific MediaManager files, streamlining event management.
- Renamed `OnWindowsChanged` to `OnFullScreenStatusChanged` in `MediaManager` and `FullScreenEvents` for clarity. - Added `MediaElement` property to `FullScreenEvents` for better media element access.
In `MauiMediaElement.android.cs`, the visibility of `CurrentPlatformContext` has been changed from `readonly` to `public readonly`, enhancing its accessibility for external use. Additionally, in `MediaManager.shared.cs`, a comment has been added to acknowledge similarities with PR CommunityToolkit#1918 on the CommunityToolkit/Maui repository.
- Changed `CurrentPlatformContext` in `MauiMediaElement.android.cs` from `public` to `internal`, limiting its accessibility to within its assembly. - Modified `FullScreenEvents` in `MediaManager.shared.cs`: 1. Access modifier updated from `public` to `internal`. 2. Converted from a `record` to a `readonly record struct`, making it a value type and immutable.
@ne0rrmatrix - Any plans to merge this in? |
Yes it will be merged some time in the future. I am working on porting Media 3 and after it is done I will be getting back to this PR and a few others and making sure they are GTG and waiting on review after that. All my PR's are essentially on hold waiting for media3. Media 3 is the new home of ATM the nugets are not ready for us. I have One PR waiting for approval. That will fix at least one show stopper bug in media 3 bindings. The current bindings also have a show stopper bug that was fixed by me in another PR that has been merged. It will be another few weeks to maybe a month before it will be ready for review. Fingers crossed it may be merge in October if we are super lucky. Most likely November. Following that I will be looking back at this PR and others to make sure they are fine and then I will bug the team to review them. |
This will be looked at after #2076 has merged |
Thank you! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Copilot reviewed 5 out of 10 changed files in this pull request and generated no suggestions.
Files not reviewed (5)
- samples/CommunityToolkit.Maui.Sample/Pages/Views/MediaElement/MediaElementPage.xaml: Language not supported
- samples/CommunityToolkit.Maui.Sample/Pages/Views/MediaElement/MediaElementPage.xaml.cs: Evaluated as low risk
- src/CommunityToolkit.Maui.MediaElement/Interfaces/IMediaElement.cs: Evaluated as low risk
- src/CommunityToolkit.Maui.MediaElement/MediaElement.shared.cs: Evaluated as low risk
- src/CommunityToolkit.Maui.MediaElement/Primitives/FullScreenStateChangedEventArgs.cs: Evaluated as low risk
Comments skipped due to low confidence (3)
src/CommunityToolkit.Maui.MediaElement/Views/MediaManager.shared.cs:57
- [nitpick] The method name 'OnWindowsChanged' is misleading as it suggests it is specific to Windows. Consider renaming it to 'OnFullScreenStateChanged' to clearly indicate its purpose.
public static void OnWindowsChanged(FullScreenStateChangedEventArgs e) => WindowsChanged?.Invoke(null, e);
src/CommunityToolkit.Maui.MediaElement/Views/MauiMediaElement.android.cs:195
- [nitpick] Consider marking the CurrentPlatformContext struct as sealed instead of readonly to prevent inheritance and ensure immutability.
readonly record struct CurrentPlatformContext
src/CommunityToolkit.Maui.MediaElement/Primitives/MediaElementFullScreenState.cs:4
- The summary comments for the enum values should be more descriptive to provide better context for developers.
///
Add Support for Full Screen Events for Windows, Android, iOS and Mac Catalyst.
Description of Change
Add event handlers to notify developer when full screen status changes.
API:
XAML:
Code Behind:
Linked Issues
PR Checklist
approved
(bug) orChampioned
(feature/proposal)main
at time of PRAdditional information
This is a PR to implement a solution for adding support for developers to have an the choice to see when user goes into full full screen and back again.
Note for Maintainers: If you see a need for a name change please go ahead and edit. Names are important. I have no opinion on naming of classes/functions/variables. If you see a need for them to change feel free to make those edits.