Commit Graph

88 Commits

Author SHA1 Message Date
Michatec ae1e2aa784 chore(notification): update notification IDs
Increment the notification IDs used in `SettingsFragment` and
`PlayerFragment`. This updates the identifiers for the test,
share-app, and update-available notifications.
2026-06-01 19:52:26 +02:00
Michatec d654d79bd5 feat(notification): support custom notification IDs
Update `NotificationSys.showNotification` to accept an optional `id`
parameter. This allows different notifications to be displayed
simultaneously by the system instead of overwriting each other.

In `SettingsFragment` and `PlayerFragment`, assign specific unique IDs
for test, share, and update notifications.
2026-06-01 19:44:56 +02:00
Michatec 181ebd47df feat(ui): add custom theme color support and share app functionality
Introduce a new custom theme feature that allows users to personalize the application background color using RGB sliders, hex input, or a set of predefined palettes.

Key changes include:
* **Custom Theme Engine**: Added `CustomThemeFragment` and `ThemeHelper` to manage color selection and application. The UI dynamically updates the background color across the `MainActivity` and `PlayerFragment` when preferences change.
* **Android TV Support**: Provided a specialized layout for television devices (`fragment_custom_theme.xml` in `layout-television`) with optimized focus handling for D-pad navigation.
* **Share Feature**: Implemented a "Share App" preference in `SettingsFragment` that triggers a standard Android share intent and displays a thank-you notification upon use.
* **Localization**: Added Ukrainian language support and updated string resources for multiple locales (DE, DA, EL, FR, JA, NL, PL, RU) to include the new theme and share options.
* **Persistence**: Updated `PreferencesHelper` and `Keys` to store theme-related settings, including the enabled state, selected color, and predefined color index.
2026-06-01 19:32:46 +02:00
Michatec 4429ed4057 refactor(ui): use anchor view for Snackbars above bottom sheet
Replace manual bottom margin adjustments with `setAnchorView` for Snackbars to ensure they are positioned correctly above the bottom sheet on mobile devices.

- In `LayoutHolder`, make `bottomSheet` public to allow access from other components.
- In `PlayerFragment` and `MainActivity`, replace `FrameLayout.LayoutParams` modifications with `setAnchorView(bottomSheet)`.
- Maintain standard Snackbar behavior for Android TV where the bottom sheet is not present.
2026-05-31 23:06:57 +02:00
Michatec 83752c356f feat(android): refine notification permissions and UI layout
Add explicit `POST_NOTIFICATIONS` permission checks in `SettingsFragment` and `PlayerFragment` before triggering notifications or showing related preferences.

Update the permission launcher in `MainActivity` to provide a "Settings" action that links to the system application details when the notification permission is permanently denied.

Improve UI and system integration by:
* Adjusting `Snackbar` positioning with bottom margins in `MainActivity` and `PlayerFragment`.
* Updating `NotificationSys` to use a new channel ID with `IMPORTANCE_LOW`.
* Configuring `MainActivity` in `activity_main.xml` to handle orientation and screen size configuration changes manually.
2026-05-31 19:27:51 +02:00
Michatec c1bc8b3e19 refactor(android): simplify notification permission request
Remove the explicit permission type from the `RequestPermission`
contract in `MainActivity` to rely on default behavior or
internal contract handling.
2026-05-30 23:11:19 +02:00
Michatec 8835cadd6a fix(ui): specify notification permission type in launcher
Explicitly pass `Manifest.permission.POST_NOTIFICATIONS` to the
`RequestPermission` contract to ensure the correct permission is
requested on Android 13+.
2026-05-30 23:09:50 +02:00
Michatec 2cf98b89b3 feat(notification): allow custom intent for notifications
Update `NotificationSys` to support passing a custom `Intent` when
showing notifications. This enables more flexible navigation, such as
opening a web URL for update notifications.

In `PlayerFragment`, use this new capability to trigger a browser
intent for update notifications on non-Android TV devices.
2026-05-30 22:48:26 +02:00
Michatec 6fa1e5e2c0 style(ui): update test notification icon
Replace the white notification icon with a standard 24dp icon in
SettingsFragment to ensure visual consistency.
2026-05-30 22:30:32 +02:00
Michatec 64d0f3a71f fix(android): resolve compilation error in TV feature detection
Update the Android TV feature check to use the instance-based
`packageManager` instead of the static `PackageManager` class.
This ensures the `hasSystemFeature` method is called correctly on
the available context instance.
2026-05-30 22:23:22 +02:00
Michatec c9122d74f8 refactor(android): fix Android TV feature detection syntax
Correct the usage of `hasSystemFeature` by calling it on the `packageManager` instance instead of the `PackageManager` class. This fixes a compilation error in `MainActivity` and `SettingsFragment`.
2026-05-30 22:18:32 +02:00
Michatec 1879827f4b feat(ui): add test notification preference and optimize Android TV logic
Introduce a "Test Notification" preference in the settings menu to allow users to verify the notification system. This preference is automatically hidden on Android TV devices to maintain a clean UI.

Additionally, refactor notification permission handling to skip requests on Android TV and improve the internal check for Leanback support using a lazy property.

Updated string resources for the new preference across all supported languages.
2026-05-30 22:15:51 +02:00
Michatec 2814ff2cfa feat(android): implement POST_NOTIFICATIONS permission handling
Add NotificationSys to manage system notifications and update
MainActivity to request POST_NOTIFICATIONS permission on Android 13+.
Includes localized string resources for notification testing and
permission error feedback.
2026-05-30 21:17:01 +02:00
Michatec 2688f22a6a chore(app): add IS_DEBUG_ENABLED build config field
Introduce a `IS_DEBUG_ENABLED` boolean flag in `BuildConfig` for both
debug and release build types. This flag is used to suppress update
notifications in `PlayerFragment` when debugging and before its a version released.
2026-05-15 22:20:23 +02:00
Michatec 5d7df9550e feat(ui): add security preference to settings
Add a new security preference in the settings screen that links to the
SECURITY.md file on GitHub. This includes a new security icon and
localized strings for multiple languages.
2026-05-15 21:51:07 +02:00
Michatec 7d6b0fe136 feat: implement station navigation and update to SDK 37
- Implement `seekToNext` and `seekToPrevious` in `PlayerService` to allow switching between radio stations.
- Update `compileSdk` and `targetSdk` to 37 and bump version to 14.6.
- Modify `PlayerService` to remain active while paused to improve playback resumption.
- Modernize media resumption logic using Media3 `isRecent` check instead of legacy extras.
- Refactor `DefaultRenderersFactory` to use non-nullable `AudioSink` return types.
- General code cleanup using KTX extensions (e.g., `View.isEmpty()`) and Kotlin property access syntax.
2026-05-07 13:40:35 +02:00
Michachatz 4974514a81 refactor(ui): Change from normal switch to marquee switches 2026-04-22 06:22:31 +02:00
Michatec 18c28170c5 style(ui): update preference and card icons for presets, equalizer, and visualizer 2026-04-21 19:44:46 +02:00
Michatec 48836334bb refactor(ui): remove unused LanguageSelectionDialog import 2026-04-21 19:26:02 +02:00
Michatec 63d85118a4 feat(ui): add manual language selection to settings 2026-04-21 18:58:53 +02:00
Michatec 08f303997e refactor(ui): use Locale.ROOT for bitrate formatting 2026-04-19 11:27:54 +02:00
Michatec b3de68050c refactor(collection): add TODO for notifyDataSetChanged cleanup 2026-04-18 23:35:27 +02:00
Michatec 297310a784 feat(ui): show snackbar when content is copied to clipboard 2026-04-18 20:08:43 +02:00
Michatec abd9b5ecd9 fix(settings): conditionally enable stream URI editing based on station editing status 2026-04-18 18:39:59 +02:00
Michatec 744a650a91 feat(ui): use checkbox to indicate reordering station status 2026-04-18 17:53:52 +02:00
Michatec 1238a5fba2 style(ui): remove manual card stroke color reset 2026-04-18 16:47:19 +02:00
Michatec cc0b284a7f style(ui): update station card stroke color during reordering and remove play button constraint 2026-04-18 16:31:25 +02:00
Michatec 45576e1577 refactor(player): remove eighth equalizer band preference 2026-04-08 11:08:41 +02:00
Michatec 1212fc61b5 fix(equalizer): update band mappings and reset all bands 2026-04-08 11:04:12 +02:00
Michatec cdf7668d43 refactor(dsp): improve reverb algorithm and update audio presets 2026-04-07 16:10:50 +02:00
Michatec 8c7a8ce7c4 feat(ui): add dedicated station search fragment for television platforms 2026-04-07 12:59:33 +02:00
Michatec d1cc340417 feat(ui): add visualizer button to collection screen 2026-04-07 11:58:23 +02:00
Michatec e0d1770a19 feat(dsp): refine audio processing and visualizer rendering 2026-04-07 11:26:14 +02:00
Michachatz 2e8cc9b243 refactor(helpers): adjust the bass boost value 2026-04-07 01:09:13 +02:00
Michatec 883a4443e9 refactor(dsp): make DSP thread‑safe and add EQ interpolation 2026-04-06 22:58:45 +02:00
Michatec 8ba22a4c09 feat(audio): add runtime sample rate handling and thread safety 2026-04-06 22:44:57 +02:00
Michatec 9d47684f13 feat(ui): add television layouts and improve visualizer performance 2026-04-06 17:17:29 +02:00
Michatec 82993d7c97 feat(ui): add spectrum analyzer visualizer 2026-04-06 16:58:53 +02:00
Michatec 12445a3918 build: rename native audio library from radio to dsp 2026-04-06 15:16:41 +02:00
Michatec bc38742eae perf(audio): adjust audio processing presets and limiters 2026-04-06 15:14:01 +02:00
Michatec 99499ad174 perf(audio): optimize signal processing with NEON and block-based gains 2026-04-06 14:29:08 +02:00
Michatec 0d35770375 feat(audio): add 10-band equalizer and audio presets 2026-04-06 13:27:53 +02:00
Michatec 53abe918ca fix(player): improve cast player integration and service lifecycle management 2026-04-05 18:19:00 +02:00
Michatec bd3ad427fa ui(settings): move app version to top of preference screen 2026-04-05 17:24:39 +02:00
Michatec 7b2cfb4b17 feat(cast): implement Google Cast support and expanded controller activity 2026-04-05 17:15:48 +02:00
Michatec 0796bc8ef4 build(deps): bump version to 14.5 and update cast framework dependency 2026-04-05 14:47:51 +02:00
Michatec 1564fa3dc4 feat(audio): add native audio processing and Google Cast support 2026-04-05 14:38:05 +02:00
Michatec d40ae6b746 feat(audio): add native audio processing and Google Cast support 2026-04-05 14:01:47 +02:00
Michatec d270574365 refactor(helpers): minor code cleanup and documentation fixes 2026-03-30 15:37:35 +02:00
Michatec f96bdc6f07 style(ui): hide loading layout directly 2026-03-30 12:01:37 +02:00