Skip to content
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

Fix MediaElement Layout for Android #1873

Open
wants to merge 5 commits into
base: main
Choose a base branch
from

Conversation

ne0rrmatrix
Copy link
Contributor

  • Bug fix

Description of Change

The primary changes to the MauiMediaElement class involve a significant refactoring to enhance layout management and simplify the handling of fullscreen mode for the media player. The key modifications include transitioning to a RelativeLayout for better flexibility in positioning the StyledPlayerView, removing explicit player size management in favor of relying on layout parameters, and streamlining the process for entering and exiting fullscreen mode. These adjustments lead to a more readable and maintainable codebase, with improved centering and sizing of the player view.

Summary of Changes:

  1. Refactoring to Use RelativeLayout: Transitioned the layout management of the StyledPlayerView from a CoordinatorLayout to a RelativeLayout for improved flexibility in positioning and sizing. This change allows for easier adjustments and better control over the player view's layout within the media element.

    • Code Change: Refactored MauiMediaElement to incorporate RelativeLayout.
  2. Removal of Player Size Management: Eliminated the explicit management of the player's height and width variables, relying instead on the layout parameters of the RelativeLayout and StyledPlayerView for size adjustments. This simplification removes unnecessary code and leverages the layout system for resizing.

    • Code Change: Removed playerHeight and playerWidth variables and related size management code.
  3. Adjustments for Fullscreen Mode: Simplified the handling of fullscreen mode by adding the player view directly to the window's decor view in fullscreen, and leveraging the RelativeLayout for re-adding the player view when exiting fullscreen. This approach minimizes the need for manual layout parameter adjustments.

    • Code Change: Updated fullscreen mode handling to use window's decor view and RelativeLayout.
  4. Simplification of Layout Management: By using a RelativeLayout, the process of adding and removing the player view during fullscreen transitions has been streamlined, making the code more readable and the transitions smoother.

    • Code Change: Simplified layout management code for fullscreen transitions.
  5. Enhanced Centering of Player View: Configured the RelativeLayout with layout parameters that ensure the StyledPlayerView is centered within the MauiMediaElement, particularly in fullscreen mode, by setting the gravity to GravityFlags.Center.

    • Code Change: Set RelativeLayout gravity to center the StyledPlayerView.

These changes collectively enhance the layout management of the media player, making the codebase more maintainable and the player's behavior more predictable and consistent, especially in terms of handling fullscreen mode and player view positioning.

Linked Issues

PR Checklist

  • Has a linked Issue, and the Issue has been approved(bug) or Championed (feature/proposal)
  • Has tests (if omitted, state reason in description)
  • Has samples (if omitted, state reason in description)
  • Rebased on top of main at time of PR
  • Changes adhere to coding standard
  • Documentation created or updated: https://github.com/MicrosoftDocs/CommunityToolkit/pulls

Additional information

Fixes previous PR that I put out. My bad!

Sample Android 34.0

Android34LayoutFix.mp4

Sample Android 26.0

Android26LayoutFix.mp4

…cant refactoring to enhance layout management and simplify the handling of fullscreen mode for the media player. The key modifications include transitioning to a `RelativeLayout` for better flexibility in positioning the `StyledPlayerView`, removing explicit player size management in favor of relying on layout parameters, and streamlining the process for entering and exiting fullscreen mode. These adjustments lead to a more readable and maintainable codebase, with improved centering and sizing of the player view.

### Summary of Changes:

1. **Refactoring to Use RelativeLayout**: Transitioned the layout management of the `StyledPlayerView` from a `CoordinatorLayout` to a `RelativeLayout` for improved flexibility in positioning and sizing. This change allows for easier adjustments and better control over the player view's layout within the media element.
   - *Code Change*: Refactored `MauiMediaElement` to incorporate `RelativeLayout`.

2. **Removal of Player Size Management**: Eliminated the explicit management of the player's height and width variables, relying instead on the layout parameters of the `RelativeLayout` and `StyledPlayerView` for size adjustments. This simplification removes unnecessary code and leverages the layout system for resizing.
   - *Code Change*: Removed `playerHeight` and `playerWidth` variables and related size management code.

3. **Adjustments for Fullscreen Mode**: Simplified the handling of fullscreen mode by adding the player view directly to the window's decor view in fullscreen, and leveraging the `RelativeLayout` for re-adding the player view when exiting fullscreen. This approach minimizes the need for manual layout parameter adjustments.
   - *Code Change*: Updated fullscreen mode handling to use window's decor view and `RelativeLayout`.

4. **Simplification of Layout Management**: By using a `RelativeLayout`, the process of adding and removing the player view during fullscreen transitions has been streamlined, making the code more readable and the transitions smoother.
   - *Code Change*: Simplified layout management code for fullscreen transitions.

5. **Enhanced Centering of Player View**: Configured the `RelativeLayout` with layout parameters that ensure the `StyledPlayerView` is centered within the `MauiMediaElement`, particularly in fullscreen mode, by setting the gravity to `GravityFlags.Center`.
   - *Code Change*: Set `RelativeLayout` gravity to center the `StyledPlayerView`.

These changes collectively enhance the layout management of the media player, making the codebase more maintainable and the player's behavior more predictable and consistent, especially in terms of handling fullscreen mode and player view positioning.
… initialization and layout parameter setting of `RelativeLayout`, adjusting the handling of fullscreen mode transitions, optimizing system bars visibility management, and general code cleanup for simplification and efficiency. These changes aim to enhance the clarity, maintainability, and functionality of the media player component, particularly in its layout setup and fullscreen behavior.

### Summary of Changes:

1. **Refactoring RelativeLayout Initialization and Layout Parameters:**
   - Simplified the process of setting up a `RelativeLayout` by directly assigning `RelativeLayout.LayoutParams` with predefined rules (`CenterInParent`, `CenterVertical`, and `CenterHorizontal`) during its instantiation, making the layout intentions clearer and the setup more efficient.

2. **Adjustment in Fullscreen Mode Handling:**
   - Standardized the approach to transitioning into and out of fullscreen mode by consistently adding or removing the `relativeLayout` (containing the `playerView`) to the `layout`, improving the maintainability and consistency of fullscreen functionality.

3. **System Bars Visibility Management:**
   - Optimized the management of system bars' visibility by moving the call to `SetSystemBarsVisibility()` outside of conditional blocks, ensuring consistent updates in both entering and exiting fullscreen scenarios, and reducing redundant code.

4. **Code Cleanup and Simplification:**
   - Removed unnecessary lines and steps, such as duplicated variable declarations and redundant view manipulations, contributing to a cleaner and more understandable codebase.

These changes collectively contribute to a more streamlined, efficient, and maintainable codebase, particularly enhancing the handling of layout parameters and fullscreen mode transitions for the media player component.
…n the `MauiMediaElement` constructor within the `MauiMediaElement.android.cs` file. This modification aims to streamline the code by eliminating unnecessary repetition, specifically the assignment of `LayoutParameters` to `relativeLayout`, which is already addressed during its initialization.

### Summary of Change:
- **Redundancy Elimination in `MauiMediaElement`**: The specific line `relativeLayout.LayoutParameters = layout;` was removed from the constructor in the `MauiMediaElement.android.cs` file. This adjustment was made to remove redundant code, enhancing the clarity and efficiency of the codebase by avoiding the duplicate setting of `LayoutParameters` for `relativeLayout`.

### Detailed Change:
- **File**: `MauiMediaElement.android.cs`
  - **Change**: Removed the line `relativeLayout.LayoutParameters = layout;` from the constructor of `MauiMediaElement`.
  - **Reason**: This line was deemed redundant as the `LayoutParameters` were already specified during the initialization of `relativeLayout`, making this explicit assignment unnecessary.
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.

[BUG] Android Layout issue in Media Element
1 participant