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

Feature/ Introduce New Camera Connection Feature for Android TV App #1392

Merged

Conversation

ghassenbenzahra123
Copy link
Contributor

@ghassenbenzahra123 ghassenbenzahra123 commented Oct 29, 2024

📝 Summary

This PR fixes #1137

Description

Our Android TV app that allows users to connect to a camera and display jumua prayer on the TV screen.

Demo

20241029_165729.mp4

Checklist:

  • Coding Standards: I have reviewed my code to ensure it follows the project's coding standards.
  • Testing: I have tested the changes and they work as expected.
  • Merge Conflicts: I have resolved any merge conflicts with the latest main/development branch.
  • Branch Status: The branch is up-to-date with the target branch (main/development).

YassinNouh21 and others added 11 commits November 4, 2024 16:27
#1402)

* feat: add new localization keys and placeholders for Quran-related strings

- Added new keys for Quran reading page placeholders in portrait mode in intl_sq.arb and intl_bs.arb
- Introduced 'switchQuranType' placeholder with 'name' in intl_sq.arb and intl_bs.arb
- Updated onboarding_language_selector.dart to include debug print for locale language code
- Ensured proper formatting with newlines at the end of arb files

* fix: remove Montenegrin because flutter doesn't support it

* remove the print
* feat(auto_reading): add state management for auto reading feature

- Implement `AutoScrollState` to handle auto scroll speed, visibility, and font size settings.
- Add `AutoScrollNotifier` to manage auto-scrolling functionality with start, stop, and speed control.
- Include derived properties for controlling the visibility of speed control and scroll behavior.
- Support toggling between single-page view and auto-scrolling.

* feat(quran): add play toggle button and refactor directory structure

- Add play toggle button to `QuranReadingScreen` with portrait and landscape support.
- Move `quran_reading_screen.dart` to new `reading` directory for better organization.
- Create `QuranFloatingActionButtons` widget for handling floating action buttons in portrait and landscape modes.

* refactor: Extract floating action controls into new widget with passed focus nodes

- Extracted floating action controls into `QuranFloatingActionControls` widget.
- Used `OrientationBuilder` within the new widget to determine orientation internally.
- Passed focus nodes from `QuranReadingScreen` to the new widget for external focus management.
- Maintained existing UI and design without modifications.

* feat: add the to_string and making the AutoScrollNotifier auto disposed

* modify the new ui

* feat: add auto-scrolling reading mode with font size and speed controls

- QuranFloatingActionControls:
  - Implemented `_buildAutoScrollingReadingMode` to display controls when auto-scroll is active.
  - Added methods:
    - `_buildFontSizeControls` for adjusting font size.
    - `_buildSpeedControls` for adjusting auto-scroll speed.
    - `_buildPlayPauseButton` for toggling auto-scroll.
    - `_buildActionButton` as a helper for creating action buttons.
  - Modified `_buildFloatingPortrait` and `_buildFloatingLandscape` to display auto-scroll controls based on the current state.

- AutoScrollState:
  - Fixed `isAutoScrolling` getter to correctly represent the auto-scrolling state.

- AutoScrollNotifier:
  - Added methods:
    - `increaseFontSize` and `decreaseFontSize` to adjust font size.
    - `increaseSpeed` and `decreaseSpeed` to adjust auto-scroll speed.
  - Updated `startAutoScroll` to use dynamic speed settings.

* fix: scrolling functionality and refactor Quran reading code

- Implement auto-scrolling that aligns with the current page and page height.
- Refactor floating action buttons into separate widget classes for better code organization.
- Update auto-scroll state and notifier to handle scroll controller and dynamic speed adjustments.

* refactor QuranReadingScreen: Remove unused imports and redundant widget functions

- Removed unnecessary imports such as SvgPicture and ReciterSelectionScreen.
- Cleaned up redundant widget methods like `buildFloatingPortrait`, `buildFloatingLandscape`, and other floating action button handlers.
- Simplified the UI logic by eliminating unused `QuranModeButton` and `PlayToggleButton` widgets.

* merge on main

* refactor: remove unused floating action buttons

* refactor: migrate screen rotation to state management

- Add isRotated field to QuranReadingState to manage rotation state
- Add toggleRotation method to QuranReadingNotifier
- Remove local ValueNotifier for rotation management
- Update QuranFloatingActionControls to use state-managed rotation
- Simplify _OrientationToggleButton to use state rotation
- Remove orientation dependencies from UserPreferencesManager

* refactor(quran): improve keyboard navigation and focus management

- Replace custom key event handlers with FocusTraversalPolicy for better focus management
- Add ArrowButtonsFocusTraversalPolicy to handle navigation between left/right buttons
- Implement up/down navigation from arrow buttons to back button and page selector
- Fix positioning issues with Stack and Positioned widgets
- Remove ValueNotifier in favor of setState for rotation state management
- Clean up widget hierarchy and remove redundant wrapper classes
- Add proper focus order using FocusTraversalOrder
- Fix duplicate Positioned widgets causing layout issues
- Improve code organization and readability

* remove unused `ArrowButtonsFocusTraversalPolicy` in the quran_reading_widgets.dart

* fix: resolve Positioned widget conflicts and improve focus navigation

- Remove nested Positioned widgets causing render conflicts
- Fix focus navigation system in reading screen:
  * Add proper FocusTraversalOrder for all interactive elements
  * Implement custom ArrowButtonsFocusTraversalPolicy
  * Add keyboard navigation support (arrows, tab, enter/space)
- Reorganize widget tree structure to prevent parent data conflicts
- Improve navigation button layout and accessibility
- Fix RTL/LTR direction handling in navigation buttons

* remove the unnecessary `FocusTraversalGroup` and order

* refactor: remove `QuranFocusTraversalPolicy` class from `quran_floating_action_buttons.dart`

* refactor: implement strategy pattern for Quran reading view and focus management

Introduced the `QuranViewStrategy` abstract class and created two concrete strategies, `AutoScrollViewStrategy` and `NormalViewStrategy`, to handle view and control layout for different Quran reading modes. Replaced previous inline focus management with a new `FocusNodes` helper class for organizing focus nodes. Refactored loading and error indicators into separate widget methods for cleaner code structure. This update enhances readability and allows for easier expansion of view strategies in the future.

* refactor: add font size and speed controls for Quran auto-scrolling mode

- Updated `autoScrollSpeed` default value in `AutoScrollState` to 0.1 for a slower starting speed.
- Added `cycleFontSize` and `cycleSpeed` methods in `AutoScrollNotifier` to allow cycling through font sizes and scroll speeds with a single button, improving user control and simplifying UI.
- Refactored `_FontSizeControls` and `_SpeedControls` widgets to use a single `_ActionButton` for adjusting font size and speed, displaying current values in tooltips.
- Re-introduced `_ActionButton` class with autofocus support for enhanced focus management.

* refactor: Quran reading widgets for improved modularity and maintainability

- Converted functions in `quran_reading_widgets.dart` into distinct `ConsumerWidget` classes:
  - `VerticalPageViewWidget`, `HorizontalPageViewWidget`
  - `RightSwitchButtonWidget`, `LeftSwitchButtonWidget`
  - `PageNumberIndicatorWidget`, `MoshafSelectorPositionedWidget`
  - `BackButtonWidget`, `SvgPictureWidget`

* feat: add scaling the size of the pages with the font

* feat: add stop and pause and add close the mode

* fix: maintain scroll position and speed when changing auto-scroll settings

- Prevent scroll position reset when changing scroll speed
- Only restart timer instead of full scroll reinitialize when adjusting speed

* remove _handleFloatingActionButtons in the quran floating action

* feat(quran-reader): Add auto-scroll pause/resume on tap

- Add tap gesture detection to auto-scrolling view
- Implement play/pause toggle functionality on tap
- Disable manual scrolling in auto-scroll mode
- Clean up code formatting and indentation

* reformat

* feat(quran): integrate surah name display in SurahSelectorWidget

- Replace icon with current surah name display in the top bar
- Add transparent background with white text for better visibility
- Maintain existing dialog functionality for surah selection

* feat(ui): show quran reading controls in both portrait & landscape modes

- Remove orientation-specific conditional rendering
- Display navigation controls, surah selector and page indicators in all orientations
- Maintain consistent control behavior across screen modes

* fix: portrait mode focus traversal for Quran reading screen

- Removed unused `FocusScopeNode` in `QuranFloatingActionControls`.
- Introduced a new focus traversal policy (`PortraitModeFocusTraversalPolicy`) for better keyboard navigation in portrait mode.
- Updated `_buildBody` to handle focus nodes in both portrait and landscape orientation

* refactor: `quran_floating_action_buttons.dart` for dynamic button sizing and improved readability

- Updated button and icon sizes to scale dynamically based on screen width, enhancing UI consistency across different devices.

* refactor

* refactor(quran-reading): update back button behavior and add exit button focus handling

- Removed the `BackButtonWidget` from the `quran_reading_screen.dart` page to simplify UI elements.
- Enhanced the `_ExitButton` widget in `quran_floating_action_buttons.dart`:
- Changed from `ConsumerWidget` to `ConsumerStatefulWidget` for state management.
- Added a `FocusNode` for the exit button to set autofocus on load.
- Implemented an `initState` method to request focus after widget binding.

* feat: add name for the exitFocusNode

* reformat
* switch to extended image package to handle exception throw

* switch extended image version

* Update pubspec.yaml

* switch to fast cached library as a temp workaround

---------

Co-authored-by: Ibrahim ZEHHAF <[email protected]>
@ghassenbenzahra123 ghassenbenzahra123 marked this pull request as ready for review November 7, 2024 17:37
ghassenbenzahra123 and others added 6 commits November 12, 2024 14:21
* feat(routes): add Quran-specific routes and route generator

* refactor(routes): migrate to named routes and simplify navigation logic in the quran

* fix: Improve Quran mode selection navigation

- Modify route generator to handle QuranModeSelection separately

* fix: waiting for the handle push

* fix the formating

* fix: Pop the screen while it has dialog in reading

* refactor: AdhanSubScreen to use ConsumerStatefulWidget and manage Quran mode

- Updated AdhanSubScreen to use `ConsumerStatefulWidget` and `ConsumerState` for improved state management with Riverpod.
- Moved Quran mode exit logic to AdhanSubScreen and JummuaLive components, removing redundant code from salah_workflow.
- Added post-frame callback in AdhanSubScreen and JummuaLive to trigger `exitQuranMode` via `quranNotifierProvider`.

* pause quran player when adhan begins

---------

Co-authored-by: Ghassen Ben Zahra <[email protected]>
@ibrahim-zehhaf-mawaqit ibrahim-zehhaf-mawaqit changed the base branch from release-1.17.0 to release-1.18.0 November 14, 2024 09:26
# Conflicts:
#	lib/l10n/intl_ar.arb
#	lib/l10n/intl_en.arb
#	lib/l10n/intl_fr.arb
#	lib/src/const/constants.dart
#	lib/src/pages/SettingScreen.dart
#	lib/src/pages/home/sub_screens/JummuaLive.dart
@YassinNouh21 YassinNouh21 changed the base branch from release-1.18.0 to main November 22, 2024 17:42
@YassinNouh21 YassinNouh21 changed the base branch from main to release-1.18.0 November 22, 2024 17:57
…or handling

- Added `_initializeFromSavedUrl` to handle saved URL initialization with better URL validation logic.
- Enhanced `toggleEnabled` method to pause/resume streams based on RTSP state changes.
- Refactored `updateStream` to validate URL formats and handle errors gracefully.
- Introduced new exception classes (`URLNotProvidedRTSPURLException`, `YouTubeVideoIdExtractionException`) for specific error scenarios.
- Improved user feedback via snackbars on URL validation changes.
- Extended `RTSPCameraSettingsState` with Equatable for better comparison and added `isInvalidUrl` flag.
- Refined `JummuaLive` and RTSP settings screen logic to improve error handling and user experience.
- Added `_buildErrorScreen` for consistent error display and retry functionality.
- Consolidated and clarified RTSP stream state management for YouTube and RTSP sources.
@ghassenbenzahra123 ghassenbenzahra123 merged commit b0d1683 into release-1.18.0 Nov 27, 2024
1 check passed
@ghassenbenzahra123 ghassenbenzahra123 deleted the feat/rtsp-camera-connection-androidtv branch November 27, 2024 14:09
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.

Introduce New Camera Connection Feature for Android TV App
2 participants