Skip to content

Update Dev Branch#247

Open
D4vidDf wants to merge 27 commits into
devfrom
master
Open

Update Dev Branch#247
D4vidDf wants to merge 27 commits into
devfrom
master

Conversation

@D4vidDf

@D4vidDf D4vidDf commented Jul 22, 2026

Copy link
Copy Markdown
Owner

No description provided.

D4vidDf and others added 27 commits June 2, 2026 17:14
* master (#126)

* Update version badge in README.md to 0.4.4

* Update version badge in README.md

* Feat/live updates (#129)

* Feat/color picker (#127)

* feat(theme): implement HSL color picker and enhanced lightness slider

- **New `CustomColorBottomSheet`**: Introduced a dedicated HSL (Hue, Saturation, Lightness) color picker with gradient sliders for precise theme color customization.
- **Enhanced `ColorsDetailContent`**:
    - Overhauled the preset tab with an animated lightness slider that appears when a preset is selected.
    - Improved the preset selection logic to maintain the "base" hue even when adjusting lightness to extreme white or black.
    - Redesigned the "Custom" colors section to use the new HSL bottom sheet instead of a simple hex text field.
    - Switched from simple circular bubbles to a more refined UI with selection rings and rounded-square transitions for active colors.
- **Improved Theme Creator State**:
    - Implemented strict state clearing (nulling `currentEditingThemeId`) when exiting the creator to prevent state leakage between editing sessions.
    - Updated save/apply dialog logic to ensure the UI resets correctly after persistence.
- **Shared Components**: Added `GradientSlider` and `ColorBubble` to `HyperOSColorPicker.kt` for reusable, stylized color selection components.
- **Localization**: Added missing string resources for color labels (Hue, Saturation, Lightness) in English and Spanish.

* #### feat(theme): implement advanced color modes and redesigned color picker

- **Color Modes**: Introduced a `ColorMode` system (`CUSTOM`, `APP_ICON`, `MATERIAL_YOU`) to replace the binary "Use App Colors" toggle. This allows themes to dynamically adapt to Material You system colors or extract colors from app icons globally and per-app.
- **Improved Color Picker**: Replaced standard text fields with a new `CustomColorBottomSheet` in the Call Style and Theme Creator screens, featuring a visual HSL-based selection and hex formatting.
- **UI & UX Refinement**:
    - Redesigned `ColorsDetailContent` with a scrollable layout and new sections for dynamic color modes.
    - Updated the Theme Creator preview to correctly reflect the active color mode.
    - Standardized "My Theme" and "Share Theme" strings to use localized resources.
- **Data Persistence**: Updated `HyperTheme`, `GlobalConfig`, and `AppThemeOverride` models to support the new `ColorMode` enum while maintaining backward compatibility with legacy themes.
- **Theme Creator**: Refactored `ThemeViewModel` to handle more robust state initialization and migration when editing or creating new themes.
- **Tooling**: Added Crowdin configuration settings for the IDE.

* feat(widget): add favorites, recommended filtering, and update notice (#128)

- **Widget Picker**:
    - Implemented a "Recommended" filter to highlight 1x4 and 2x4 layouts compatible with the Island size.
    - Added a Favorite system for widget apps, allowing users to star apps for top-level sorting.
    - Added a floating navigation bar to switch between Recommended and All widgets.
    - Improved dimension display by converting DP to grid cell proportions (e.g., 4x2).
- **Saved Widgets**:
    - Added a persistent "Update Notice" dialog to remind users to check Autostart/Battery permissions after an app update.
    - Implemented a "Kill Active Widgets" action to instantly dismiss all running widget overlays.
    - Redesigned the UI with a centered filter toolbar (Favorites vs. All) and a dedicated Add FAB.
    - Added reactive listening for newly added widgets to ensure the list updates immediately.
- **Service & Data**:
    - Enhanced `WidgetOverlayService` with specific `ACTION_KILL_WIDGET` and `ACTION_KILL_ALL_WIDGETS` handlers for immediate UI cleanup.
    - Added `favoriteWidgetAppsFlow` to `AppPreferences` to persist starred widget providers.
- **Localization**:
    - Added English and Spanish strings for filters, permission reminders, and widget management.

CLOSE #72

* feat(service): implement Native Android 16 Live Updates support

- Added `LiveUpdateTranslator` to transform standard notifications into native Android 16 promoted ongoing tasks using `android.requestPromotedOngoing` and `android.shortCriticalText`.
- Implemented a toggle in Global Settings to choose between custom Xiaomi Islands and native Android 16 Live Updates.
- Created a dedicated `hyper_bridge_live_update_channel` for native updates to manage notifications and visibility independently.
- Added `POST_PROMOTED_NOTIFICATIONS` permission to `AndroidManifest.xml` to support Android 16's promoted notification features.
- Enhanced `LiveUpdateTranslator` with a `generateCriticalShortText` helper to dynamically extract progress percentages or ETAs for the system status chip.
- Fixed Android 16 category filtering by forcing Live Updates into strictly valid categories (`PROGRESS` or `TRANSPORT`) to prevent OS blocking.
- Ensured original notification timestamps are preserved for accurate system-wide "time active" calculations.
- Updated `NotificationReaderService` to support hot-swapping between custom injection and native updates via shared preferences.

* feat(service): enhance Live Update processing and Android 16 compatibility

- **NotificationReaderService**: Implemented a more robust content hashing algorithm that tracks Title, Text, Progress (max, current, indeterminate), and Button Action states (e.g., Play to Pause transitions) to ensure accurate UI updates.
- **LiveUpdateTranslator**:
    - Added support for large icons and picture extras in live updates.
    - Improved media notification handling by suppressing progress bars that often persist in the background.
    - Optimized category mapping (Progress vs. Transport) to comply with Android 16 ongoing promotion requirements.
    - Updated `shortCriticalText` generation logic to prioritize media titles, percentages, or time ETAs for the Dynamic Island chip.
    - Switched to native Android 16 APIs for promoted ongoing requests and short critical text injection.

* feat(settings): refactor Global Settings UI and update version

- Updated `versionName` to `0.5.0-alpha01`.
- Redesigned `GlobalSettingsScreen` to use consistent card-based layouts for all settings items.
- Replaced the "Native Live Updates" `ListItem` with a new standardized `SettingsSwitchItem` component.
- Improved UI spacing and styling across the settings screen, including unified icon background treatments.
- Simplified state management and click behavior for toggleable settings.

* Beta/0 5 0 (#190)

* Feat/color picker (#127)

* feat(theme): implement HSL color picker and enhanced lightness slider

- **New `CustomColorBottomSheet`**: Introduced a dedicated HSL (Hue, Saturation, Lightness) color picker with gradient sliders for precise theme color customization.
- **Enhanced `ColorsDetailContent`**:
    - Overhauled the preset tab with an animated lightness slider that appears when a preset is selected.
    - Improved the preset selection logic to maintain the "base" hue even when adjusting lightness to extreme white or black.
    - Redesigned the "Custom" colors section to use the new HSL bottom sheet instead of a simple hex text field.
    - Switched from simple circular bubbles to a more refined UI with selection rings and rounded-square transitions for active colors.
- **Improved Theme Creator State**:
    - Implemented strict state clearing (nulling `currentEditingThemeId`) when exiting the creator to prevent state leakage between editing sessions.
    - Updated save/apply dialog logic to ensure the UI resets correctly after persistence.
- **Shared Components**: Added `GradientSlider` and `ColorBubble` to `HyperOSColorPicker.kt` for reusable, stylized color selection components.
- **Localization**: Added missing string resources for color labels (Hue, Saturation, Lightness) in English and Spanish.

* #### feat(theme): implement advanced color modes and redesigned color picker

- **Color Modes**: Introduced a `ColorMode` system (`CUSTOM`, `APP_ICON`, `MATERIAL_YOU`) to replace the binary "Use App Colors" toggle. This allows themes to dynamically adapt to Material You system colors or extract colors from app icons globally and per-app.
- **Improved Color Picker**: Replaced standard text fields with a new `CustomColorBottomSheet` in the Call Style and Theme Creator screens, featuring a visual HSL-based selection and hex formatting.
- **UI & UX Refinement**:
    - Redesigned `ColorsDetailContent` with a scrollable layout and new sections for dynamic color modes.
    - Updated the Theme Creator preview to correctly reflect the active color mode.
    - Standardized "My Theme" and "Share Theme" strings to use localized resources.
- **Data Persistence**: Updated `HyperTheme`, `GlobalConfig`, and `AppThemeOverride` models to support the new `ColorMode` enum while maintaining backward compatibility with legacy themes.
- **Theme Creator**: Refactored `ThemeViewModel` to handle more robust state initialization and migration when editing or creating new themes.
- **Tooling**: Added Crowdin configuration settings for the IDE.

* feat(widget): add favorites, recommended filtering, and update notice (#128)

- **Widget Picker**:
    - Implemented a "Recommended" filter to highlight 1x4 and 2x4 layouts compatible with the Island size.
    - Added a Favorite system for widget apps, allowing users to star apps for top-level sorting.
    - Added a floating navigation bar to switch between Recommended and All widgets.
    - Improved dimension display by converting DP to grid cell proportions (e.g., 4x2).
- **Saved Widgets**:
    - Added a persistent "Update Notice" dialog to remind users to check Autostart/Battery permissions after an app update.
    - Implemented a "Kill Active Widgets" action to instantly dismiss all running widget overlays.
    - Redesigned the UI with a centered filter toolbar (Favorites vs. All) and a dedicated Add FAB.
    - Added reactive listening for newly added widgets to ensure the list updates immediately.
- **Service & Data**:
    - Enhanced `WidgetOverlayService` with specific `ACTION_KILL_WIDGET` and `ACTION_KILL_ALL_WIDGETS` handlers for immediate UI cleanup.
    - Added `favoriteWidgetAppsFlow` to `AppPreferences` to persist starred widget providers.
- **Localization**:
    - Added English and Spanish strings for filters, permission reminders, and widget management.

CLOSE #72

* feat(service): implement Native Android 16 Live Updates support

- Added `LiveUpdateTranslator` to transform standard notifications into native Android 16 promoted ongoing tasks using `android.requestPromotedOngoing` and `android.shortCriticalText`.
- Implemented a toggle in Global Settings to choose between custom Xiaomi Islands and native Android 16 Live Updates.
- Created a dedicated `hyper_bridge_live_update_channel` for native updates to manage notifications and visibility independently.
- Added `POST_PROMOTED_NOTIFICATIONS` permission to `AndroidManifest.xml` to support Android 16's promoted notification features.
- Enhanced `LiveUpdateTranslator` with a `generateCriticalShortText` helper to dynamically extract progress percentages or ETAs for the system status chip.
- Fixed Android 16 category filtering by forcing Live Updates into strictly valid categories (`PROGRESS` or `TRANSPORT`) to prevent OS blocking.
- Ensured original notification timestamps are preserved for accurate system-wide "time active" calculations.
- Updated `NotificationReaderService` to support hot-swapping between custom injection and native updates via shared preferences.

* feat(service): enhance Live Update processing and Android 16 compatibility

- **NotificationReaderService**: Implemented a more robust content hashing algorithm that tracks Title, Text, Progress (max, current, indeterminate), and Button Action states (e.g., Play to Pause transitions) to ensure accurate UI updates.
- **LiveUpdateTranslator**:
    - Added support for large icons and picture extras in live updates.
    - Improved media notification handling by suppressing progress bars that often persist in the background.
    - Optimized category mapping (Progress vs. Transport) to comply with Android 16 ongoing promotion requirements.
    - Updated `shortCriticalText` generation logic to prioritize media titles, percentages, or time ETAs for the Dynamic Island chip.
    - Switched to native Android 16 APIs for promoted ongoing requests and short critical text injection.

* feat(settings): refactor Global Settings UI and update version

- Updated `versionName` to `0.5.0-alpha01`.
- Redesigned `GlobalSettingsScreen` to use consistent card-based layouts for all settings items.
- Replaced the "Native Live Updates" `ListItem` with a new standardized `SettingsSwitchItem` component.
- Improved UI spacing and styling across the settings screen, including unified icon background treatments.
- Simplified state management and click behavior for toggleable settings.

* Update changelog resource to v0.4.2

* build: update project dependencies and gradle configuration (#134)

- **Gradle & AGP**:
    - Upgraded Android Gradle Plugin (AGP) from `8.13.2` to `9.1.0`.
    - Upgraded Gradle wrapper from `8.13` to `9.3.1`.
    - Added `foojay-resolver-convention` plugin to `settings.gradle.kts` for automated toolchain management.
- **Dependencies**:
    - Updated Kotlin to `2.3.20` and KSP to `2.3.2`.
    - Updated Compose BOM to `2026.03.00` and Material3 to `1.5.0-alpha15`.
    - Updated various AndroidX libraries: `core-ktx` (`1.18.0`), `datastore-preferences` (`1.2.1`), `activity-compose` (`1.13.0`), and `ui` (`1.10.5`).
    - Bumped `kotlinx-serialization-json` to `1.10.0`.
- **Build Configuration**:
    - Removed `kotlin-android` plugin in favor of `kotlin-compose` and built-in Kotlin support.
    - Removed explicit `jvmTarget` configuration in `app/build.gradle.kts`.
    - Enabled several experimental/new Android Gradle properties in `gradle.properties`, including `android.builtInKotlin` and `android.newDsl`.
- **Optimization**:
    - Updated `proguard-rules.pro` to strip Debug and Info logs in release builds using AGP 9.1+ syntax.

* Feature/ux iprovement global configuration (#137)

* feat(settings): redesign Global Settings and enhance Theme Engine

- **Global Settings UI**:
    - Refactored `GlobalSettingsScreen` to use a card-based list layout with standardized `ListOptionCard` components.
    - Split settings into dedicated screens: `EngineSettingsScreen`, `IslandSettingsScreen`, and `NavCustomizationScreen`.
    - Added an "Engine" section to toggle between "Xiaomi Featured Design" and "Native Android Live Updates".
    - Implemented a more granular "Island Behavior" configuration including an improved auto-hide timeout slider with snap points (1s to 1h).
- **Theme Engine**:
    - Integrated "Engine", "Island Behavior", and "Notification Types" selection directly into the Theme Creator flow.
    - Added a real-time `EnginePreview` component to visualize differences between Xiaomi and Native Live Update designs.
    - Added a "Notification Types" manager to toggle triggers for Standard, Progress, Media, Navigation, Call, and Timer events.
- **Functionality & Fixes**:
    - **Crash Fix**: Resolved a critical issue causing the app to crash when opening settings in Traditional Chinese.
    - Updated `AppPreferences` to support persistent storage for the native notification engine toggle.
    - Improved `ThemeViewModel` with a more efficient bitmap scaling method for theme thumbnails.
    - Updated `StandardTranslator`, `NavTranslator`, and `ProgressTranslator` to better respect global timeout and dismissal configurations.
    - Set the default notification shade visibility to `false` for a cleaner "Island-only" experience by default.
- **Localization**:
    - Added extensive string resources for version 0.4.2 hotfix and new engine settings across multiple languages (SK, PL, RU, ZH-TW, TR, UK, PT-BR, CS, DE, HU, IN, IT, KO, ES).
    - Fixed several translation issues in Traditional Chinese and Spanish.

* feat(settings): externalize and localize auto-hide island strings

- **UI**: Refactored `IslandSettingsControl.kt` to use `stringResource` instead of hardcoded strings for the Auto-hide Island feature.
- **Localization**:
    - Added new string resources (`auto_hide_island`, `hides_after_a_set_time`, `behavior_hide_desc`, `behavior_desc_hide_long`) to multiple locales: Slovak, Polish, Russian, Traditional Chinese, Turkish, Ukrainian, Portuguese (Brazil), Czech, German, Indonesian, Italian, Korean, Spanish, and Hungarian.
    - Updated Spanish translations for behavior and trigger settings.
    - Standardized ellipsis usage from `…` to `...` in Portuguese (Brazil) and Korean `strings.xml`.

* build: update version and remove redundant material3 dependency

- Updated `versionName` to `0.5.0-alpha02`.
- Removed explicit `androidx-material3` dependency from `libs.versions.toml` and `app/build.gradle.kts` (now managed via Compose BOM).

* feat(localization): add French (France) translation

- Added complete French localization (`strings.xml`) for the entire application.
- Translated all core UI components, including onboarding, settings, library, and about screens.
- Localized complex features such as the Theme Engine, Backup & Restore, and the new Notification Engine settings.
- Provided French translations for all historical changelogs (v0.1.0 through v0.4.2).
- Included localized string arrays for specific notification keyword matching (navigation, calls, and progress updates).

* feat(theme): implement layered app-specific behavior overrides

- **Notification Service**:
    - Implemented a layered resolution system (Theme > App > Global) for notification triggers and engine selection.
    - Updated `NotificationReaderService` to respect theme-managed app configurations and simplified processing logic.
    - Enhanced `LiveUpdateTranslator` to support themed colors and icons for the Native Live Update engine, specifically for navigation events.
    - Improved title and text resolution with smarter fallback mechanisms and content hashing for updates.
- **Theme Engine & Editor**:
    - Added app-specific behavior overrides to the Theme Creator, allowing per-app configuration of notification types and engine selection (Xiaomi vs. Native).
    - Integrated "Engine", "Island Behavior", and "Notification Types" into the App Theme Editor.
    - Added `AppNotificationTypesEditor` for granular control over which event types (Standard, Media, Nav, etc.) trigger the island for specific apps.
    - Refactored `EngineThemeContent` to support an optional "Use Global Default" state.
- **UI & Settings**:
    - Redesigned the "Notification Types" settings using `SettingsToggleCard` for a more consistent card-based look.
    - Added a theme-managed warning to the App Settings dialog when behaviors are controlled by an active theme.
    - Externalized and localized several strings related to triggers and engine management.
    - Added French language support to the locale selector.
- **Technical Improvements**:
    - Introduced `ConfigResolver` for fast, in-memory resolution of effective configurations for translators.
    - Updated `AppPreferences` and `ThemeRepository` to support persistent storage of per-app engine and trigger overrides.
    - Standardized navigation layout resolution to respect layered preferences (Global Fallback vs. App-Specific).

* feat(localization): add trigger configuration and override strings

- **Localization**: Added new string resources for "Active Triggers", "Trigger Override", and "Notification Engine" configuration across multiple locales (SK, PL, RU, FR, ZH-TW, TR, UK, PT-BR, CS, DE, IN, IT, KO, HU).
- **Strings**:
    - Added descriptions for notification types: Standard, Progress, Media, Navigation, Call, and Timer.
    - Added UI strings for global trigger settings and per-app overrides.
    - Added `managed_by_theme_desc` and `use_global_default_engine` to support theme-based behavior logic.
- **Cleanup**: Removed unused mock engine strings (`engine_mock_charging`, `engine_mock_percentage`, etc.) from all translated `strings.xml` files.

* feat(theme): enhance engine resolution and theme-persistent configuration (#147)

- **Notification Service**:
    - Refactored `getEffectiveEngine` in `NotificationReaderService` to implement a 4-tier resolution priority: Theme App Override > User App Override > Theme Global Override > User Global Fallback.
- **Theme Engine & Editor**:
    - **Global Settings**: Added `use_native_live_updates` to `GlobalConfig` model, allowing themes to define a default engine for all apps.
    - **Persistence**: Fixed an issue where changing the engine via the UI while a custom theme was active would not persist; it now correctly patches the active Theme JSON.
    - **Theme Creator**:
        - Updated `ThemeViewModel` to correctly load and save the global engine selection to the Theme JSON.
        - Fixed a bug where existing call configurations were wiped when updating app-specific live update settings.
        - Improved state management by making `themeUseNativeLiveUpdates` nullable to support inheritance.
- **UI & Settings**:
    - **Engine Settings**: Refactored `EngineSettingsScreen` to use `AppPreferences` and `ThemeRepository` instead of raw `SharedPreferences`.
    - Integrated real-time engine updates by sending `ACTION_RELOAD_THEME` to the background service upon configuration changes.
    - Standardized UI spacing and typography in the Engine selection screen.
- **Bug Fixes**:
    - Fixed a bug in `AppListViewModel` where app-specific engine overrides were not being saved to the active theme if the override didn't already exist.
    - Corrected `@StringRes` annotation usage in `ShapeOption` enum.

* build: update version to 0.5.0-alpha03 and update localizations

- **Build**: Bumped `versionCode` to `17` and `versionName` to `0.5.0-alpha03` in `app/build.gradle.kts`.
- **Localization**:
    - **French (FR)**: Completed translations for the "Engine" configuration, "Island Behavior", and "Active Triggers" sections. Updated backup and app configuration strings.
    - **Italian (IT)**: Translated the v0.4.2 changelog, engine settings, color labels, and navigation arrival keywords.
    - **Traditional Chinese (ZH-TW)**: Fully localized the new Engine, Behavior, and Trigger settings. Refined onboarding and permission strings (e.g., "HyperIsland" to "超級島").
    - **Hungarian (HU)**: Localized engine settings, behavior controls, trigger descriptions, and the v0.4.2 hotfix changelog. Updated call-related keywords.
    - **Portuguese (Brazil)**: Translated the v0.4.2 changelog, color labels, and UI state strings (Recommended, Favorites, All). Updated navigation arrival keywords.
- **Strings**: Standardized engine configuration keys across all modified locales to support the transition between "Xiaomi Featured Design" and "Native Android Live Updates".

* loc(fr): fix apostrophe escaping in French strings

- Updated `island_behavior_desc` and `engine_timeouts_triggers` in the French (`fr-rFR`) `strings.xml` to properly escape apostrophes, ensuring correct XML parsing and display.

* Feature/nav3 migration (#152)

* build: integrate Navigation 3 and refactor app routing

- **Dependencies**: Added `androidx.navigation3` (runtime and UI) and `androidx-lifecycle-viewmodel-navigation3` to `libs.versions.toml` and `app/build.gradle.kts`.
- **Navigation Framework**:
    - Introduced `NavigationState` to manage persistent back stacks for top-level routes (Onboarding and Home).
    - Implemented a `Navigator` class to abstract forward and backward navigation logic using Navigation 3 APIs.
    - Replaced the manual `Screen` enum and `AnimatedContent` router with a `@Serializable` sealed interface and `NavDisplay`.
- **Routing & State**:
    - Refactored `MainActivity` to use `entryProvider` for screen definitions, simplifying navigation calls across the app.
    - Updated screen transitions to leverage `NavDisplay`'s built-in handling of the back gesture and entry management.
    - Improved data passing between screens (e.g., `ImportPreview` and `NavCustomization`) by using type-safe classes in the `Screen` sealed interface.
- **Models**: Added `@Serializable` annotations to backup-related models (`HyperBridgeBackup`, `BackupMetadata`, `AppSettingBackup`) to support type-safe navigation arguments.
- **UI**: Standardized back-button behavior across all settings and configuration screens to use the new `Navigator.goBack()` method.

* refactor(navigation): modularize and relocate navigation logic

- **Navigation Architecture**:
    - Created a new `com.d4viddf.hyperbridge.ui.navigation` package to house navigation-related components.
    - Moved `Screen` definition from `MainActivity.kt` to its own file `Screen.kt`, maintaining `@Serializable` support for all application routes.
    - Relocated `NavigationState.kt` and `Navigator.kt` to the new navigation package and updated their package declarations accordingly.
- **MainActivity**:
    - Cleaned up imports and removed inline `Screen` interface definition to use the new modularized navigation components.
    - Updated references to use `toEntries` and other navigation extension functions from the new package.

* refactor(navigation): modularize nav graph and enhance back press handling

- **Navigation**:
    - Extracted the main navigation graph from `MainActivity.kt` into a new standalone `mainNavGraph` function in `NavGraph.kt` to improve maintainability.
    - Updated `Navigator.goBack()` to return a boolean indicating if the back event was handled, allowing for better control over app exit logic.
    - Integrated `BackHandler` in `MainActivity` to properly handle system back gestures and call `onExit` when at the root of the navigation stack.
- **MainActivity**:
    - Refactored `MainRootNavigation` into smaller, more focused composables (`MainRootNavigation` and `MainNavigationContent`).
    - Improved the initialization flow to show a `CircularProgressIndicator` while the setup status is being loaded from preferences.
    - Simplified the logic for switching between `Onboarding` and `Home` routes based on the setup completion state.
- **UI**: Standardized back navigation behavior across all screens, ensuring consistent exit behavior from the `Info` screen.

* feat(ui): implement custom navigation transitions and predictive back support

- **Navigation**:
    - Added custom `transitionSpec` and `popTransitionSpec` using horizontal slides and fades for smoother screen transitions.
    - Implemented `predictivePopTransitionSpec` to support Android's predictive back gesture with scaling and transform origin adjustments based on swipe edge.
    - Dynamically updated `topLevelRoutes` to prevent navigating back to the onboarding flow once setup is complete.
- **UI**:
    - Applied a rounded corner clip (32.dp) to the main `NavDisplay` container.
    - Optimized transition durations to 400ms for a more fluid user experience.

* chore: code cleanup, dependency update, and UI refinements

- **UI & UX**:
    - **Widget Picker**: Refactored `WidgetPickerScreen` and removed `WidgetPickerViewModel.kt` to streamline widget selection logic. Updated layout filtering to consistently use `targetCellWidth` and `targetCellHeight`.
    - **Theme Creator**: Improved navigation and state management in `ThemeCreatorScreen` and `AppThemeEditorScreen`. Enhanced UI consistency for color and icon selection previews.
    - **Licenses**: Updated `LicensesScreen` to dynamically load a sorted list of open-source libraries and externalized the screen title string.
    - **Components**: Standardized `EmptyState` component parameters and improved layout logic in `WidgetConfigScreen` and `SavedAppWidgetsScreen`.
- **Localization**:
    - Added `open_source_licenses` string resource.
    - Refactored `WidgetConfigScreen` to use localized toast and error messages.
- **Translators**:
    - **Standard**: Cleaned up title resolution logic in `StandardTranslator`.
    - **Progress**: Updated `ProgressTranslator` to hide redundant percentage text in specific circular progress views.
- **Internal Improvements**:
    - **Compatibility**: Removed redundant SDK version checks for `Parcelable` handling and notification permissions, favoring modern Android APIs.
    - **Utilities**: Switched to `androidx.core` extension functions for `Bitmap` creation and `Uri` parsing.
    - **Persistence**: Updated `SavedAppWidgetsScreen` to use the `edit { }` DSL for `SharedPreferences`.
    - **Data**: Refined theme ID generation in `ThemeRepository` and improved rule engine comments.
- **Bug Fixes**:
    - Fixed a potential nullability issue in `AppListViewModel` when patching theme configurations.
    - Corrected `IslandConfig` initialization in the App Settings dialog.

* Feature/duplication toggle (#153)

* feat(settings): enhance island behavior with heads-up timeout and notification management

- **Island Configuration**:
    - Introduced `floatTimeout` to `IslandConfig` to control the duration of heads-up popups.
    - Added `removeOriginalNotification` toggle to allow automatic dismissal of source notifications when a Live Update is active.
    - Updated `AppPreferences` and `AppSettings` to support persistent storage for these new global and per-app settings.
- **UI & Settings**:
    - **Island Settings**: Redesigned the "Heads-up Popup" configuration with an animated slider for granular timeout control (1s to 30s).
    - **Live Updates**: Added a new section in `IslandSettingsControl` to manage the removal of original notifications.
    - Improved UI scrollability in `IslandSettingsScreen` and added several Compose previews for better development feedback.
    - Refactored toggle logic to ensure consistency between heads-up and timeout states.
- **Translators**:
    - Updated all translators (`Media`, `Call`, `Progress`, `Standard`, `Nav`, `Timer`) to respect the new `expandedTimeMs` (heads-up timeout) configuration.
    - Cleaned up redundant theme color application logic in `TimerTranslator`.
- **Localization**:
    - Added string resources for "Live updates", "Remove original notification", and "Heads-up popup" timeout descriptions.

* feat(service): implement notification timeout and original notification removal

- **Notification Service**:
    - Introduced a `handlePostNotificationSideEffects` method to manage post-processing logic for translated notifications.
    - Added support for automatically cancelling the original system notification when `removeOriginalNotification` is enabled in the configuration (excluding Media notifications). fixes #21, fixes #120, fixes #146
    - Implemented a timeout mechanism using coroutines to automatically dismiss translated notifications after a configured duration.
    - Added `intentionallyRemovedKeys` tracking to prevent recursive processing loops when the service cancels a system notification.
    - Improved cleanup logic in `onNotificationRemoved` and `cleanupCache` to ensure associated timeout jobs are cancelled and resources are freed.
- **Bug Fixes**:
    - Added missing cancellation of existing processing jobs and timeout jobs when a notification is removed or updated.
- **Logic Improvements**:
    - Improved design logic for new notification parameters ( closes #99) and add theme configuration ( closes #107)

* fix(service): refine notification timeout logic and dismissal behavior

- **Notification Service**:
    - Modified `onStartCommand` to use non-nullable `Intent` parameters for better type safety.
    - Updated notification removal logic to ensure the source notification is no longer canceled when the Island notification is dismissed or times out.
    - Refactored `handlePostNotificationSideEffects` to only apply timeout scheduling to "Live Update" notifications.
    - Improved cache cleanup and logging during notification dismissal to prevent unintended side effects on source notifications.

* Feature/onboarding screen (#155)

* feat(ui): redesign onboarding flow and expand configuration options

- **Onboarding Experience**:
    - Significantly expanded the onboarding process from 7 to 11 pages, incorporating new configuration steps for triggers, engine selection, and island behavior.
    - Redesigned the `OnboardingScreen` layout with improved navigation controls, including a dedicated "Back" button and a more prominent "Get Started" entry point.
    - Added several new pages: `TriggersConfigPage` (active notification types), `PriorityEducationPage` (island limit behavior), `BehaviorConfigPage` (notification removal and shade visibility), `CustomizationPage` (themes and widgets), and `EngineConfigPage` (Xiaomi vs. Native Live Updates).
    - Integrated `ModalBottomSheet` for granular settings configuration directly within the onboarding flow.
    - Added extensive Compose previews for all onboarding pages to improve development feedback.

- **Data & Logic**:
    - **AppPreferences**: Implemented a migration check to force an onboarding reset for users upgrading to version 0.5.0 (versionCode 17).
    - **MainActivity**: Removed the standalone `PriorityEducationDialog` as its logic is now integrated into the onboarding flow.
    - **Build Configuration**: Enabled `buildConfig` in `app/build.gradle.kts` and updated the Kotlin serialization plugin version.

- **Localization & Resources**:
    - **Strings**:
        - Standardized and updated terminology across multiple languages (ES, HU, IT, ZH-TW, SK, CS, TR, DE, PT, KO, FR, UK, RU, ID).
        - Added new string resources for the expanded onboarding descriptions, "Live updates" management, and "Remove original notification" toggles.
        - Refined French strings to ensure proper apostrophe escaping and formatting.
        - Simplified and updated battery optimization instructions ("Allow Autostart", "Disable Restrictions").
    - **Icons**: Switched to modern Rounded/Filled icon variants for a more consistent visual style across the setup pages.

* feat(onboarding): implement auto-hide configuration page

- **Onboarding Flow**:
    - Expanded the onboarding process from 11 to 13 pages to include more granular behavior settings.
    - Introduced a dedicated `AutoHideConfigPage` to manage island timeout settings during initial setup.
    - Updated `BehaviorConfigPage` description to reflect its role in global configuration.
- **UI & Components**:
    - Added an interactive "Auto-hide Island" section with a `Switch` and an `AnimatedVisibility` slider for timeout selection.
    - Exposed `timeoutSteps` and `formatSeconds` from `IslandSettingsControl.kt` to be reusable across the onboarding flow.
    - Integrated `Icons.Rounded.Timer` and `Icons.Default.AccessTime` for improved visual cues in behavior settings.
- **State Management**:
    - Updated `OnboardingScreen` to persist `IslandConfig` timeout and `isFloat` preferences directly through `AppPreferences`.
- **Localization**:
    - Added `behavior_desc_glob_config` string resource for better description of island behavior settings.

* chore: bump version to 0.5.0-beta01 and refine onboarding navigation

- **Build**:
    - Updated `versionCode` to `18` and `versionName` to `0.5.0-beta01` in `app/build.gradle.kts`.
- **Navigation**:
    - **Navigator**: Introduced `finishOnboarding` to explicitly handle the transition from onboarding to the home screen by ensuring the home stack is initialized before clearing the onboarding route, preventing potential app closure.
    - **MainActivity**: Refactored `navigationState` initialization to use a persistent set of all possible top-level routes and a fixed initial start route.
    - **NavGraph**: Updated setup completion logic to use the new `navigator.finishOnboarding` method and removed redundant priority education flags.
- **Onboarding**:
    - Refactored `OnboardingScreen` to dynamically determine the last page using `pagerState.pageCount` instead of a hardcoded index.
- **Data & Persistence**:
    - **AppPreferences**: Updated the onboarding reset logic to target `versionCode 18` for version 0.5.0, forcing a setup reset for users on older builds.

* chore: general cleanup, bug fixes, and maintenance

- **UI & Components**:
    - Removed several legacy dialogs and components: `ChangelogDialog`, `PriorityEducationDialog`, and `DeviceCompatibility`.
    - Simplified `CommonCards.kt` by removing `ExpandableOptimizationCard` and localized logic.
    - Refactored `HyperOSColorPicker` to remove unused `ColorBubble` component.
    - Added `verticalScroll` to `ThemeSettingsContent` to improve navigation on smaller screens.
    - Updated `IslandSettingsControl` and `IslandSettingsScreen` to use explicit `IslandConfig` initialization.
    - Added a content description for the widget snapshot layout.

- **Notification Service & Logic**:
    - Refactored `NotificationReaderService` and `LiveUpdateTranslator` to improve string handling and reliability when resolving notification titles/text.
    - Enhanced exception handling across the service and data layers using suppressed exceptions (`catch (_: Exception)`) to reduce log noise.
    - Improved app label caching and package filtering logic.

- **Data & Persistence**:
    - Cleaned up `AppPreferences` by removing the unused `isPriorityEduShown` flow.
    - Refactored `ThemeRepository` to use a lowercase tag and improved error logging for theme installation and resource loading.
    - Updated `AppCacheManager` and `WidgetPickerScreen` for better state management and type safety.

- **Resources & Localization**:
    - **Icons**: Added monochrome support to adaptive launcher icons and moved them to the standard `mipmap-anydpi` directory.
    - **Strings**:
        - **PT-BR**: Updated widget ID formatting.
        - **FR**: Simplified application configuration descriptions.
        - **General**: Added `widget_layout_snapshot` resource.

- **Build & System**:
    - Updated Gradle wrapper from `9.3.1` to `9.4.1`.
    - Refactored `DeviceUtils` for cleaner system property checks.
    - Updated `AndroidManifest` with improved package visibility policy ignores.
    - Cleaned up `ThemeInstallerActivity` by removing redundant SDK version checks for dynamic color schemes.

* chore(manifest): add notification listener permission

- **Permissions**:
    - Added `BIND_NOTIFICATION_LISTENER_SERVICE` to `AndroidManifest.xml` to support notification listener capabilities.
    - Applied `tools:ignore="ProtectedPermissions"` to acknowledge the use of the protected system permission.

* fix(service): refine progress notification behavior and navigation state (#157)

- **Notification Service & Translators**:
    - **ProgressTranslator**:
        - Modified `translate` to accept an `isUpdate` flag.
        - Restricted "floating" behavior to the initial notification appearance only, preventing subsequent progress updates from re-triggering the float animation.
        - Refined `BigIslandInfo` layout for finished progress states by simplifying `ImageTextInfoLeft` and `ImageTextInfoRight` parameters (removing redundant text info).
        - Removed redundant `setIslandFirstFloat` call.
    - **NotificationReaderService**: Updated `PROGRESS` type handling to pass the `isUpdate` state to the translator.

- **UI & Navigation**:
    - **MainActivity**: Added `isSetupComplete` as a key to `remember` blocks for `initialStartRoute` and `allPossibleTopLevel` to ensure navigation state correctly reacts to setup completion changes.

Closes #156

* feat(boot): add support for Direct Boot (#159)

- **Boot Receiver**:
    - Updated `BootReceiver.kt` to handle `ACTION_LOCKED_BOOT_COMPLETED`, allowing the app to respond to boot events before the first user unlock.
    - Added `android.intent.action.LOCKED_BOOT_COMPLETED` to the `BootReceiver` intent filter in `AndroidManifest.xml`.

fixed #158

* chore(localization): update and expand string resources across multiple languages

- **Strings & Localization**:
    - **General**: Added new string resources `behavior_desc_glob_config` (island behavior description) and `widget_layout_snapshot` (widget preview) across all supported locales.
    - **Spanish (ES)**: Added translations for floating notification timeouts, open source licenses, live updates, and original notification removal.
    - **French (FR)**: Fully localized several strings including floating notification settings, live updates, onboarding descriptions, and behavior configurations.
    - **Traditional Chinese (ZH-TW)**: Localized onboarding descriptions for widgets, themes, and customization options.
    - **Portuguese (PT-BR)**: Simplified the `widget_id_fmt` string from "Widget #%d" to "Widget".
    - **New Keys**: Added placeholder or translated entries for `setting_float_timeout_desc`, `open_source_licenses`, `live_updates`, and `remove_original_notification` logic in relevant resource files.

* chore(changelog): update for version 0.5.0-beta

- **UI & Navigation**:
    - Updated `ChangelogHistoryScreen` to include version `0.5.0` at the top of the history list.
    - Updated `MainActivity` to display the `0.5.0-beta` changelog in the main `ChangelogSheet`.

- **Resources & Localization**:
    - Added `changelog_0_5_0_beta` string containing release notes for Native Live Updates, HyperOS CN support, new Theme Engine features (HSL selector, behavior controls), and system fixes.
    - Added `title_0_5_0` string resource ("The Live Update").

* chore: update version metadata to 0.5.0

- **Changelog**:
    - Updated `ChangelogHistoryScreen` to mark version `0.5.0` as the latest release and downgraded `0.4.2` to historical status.
- **Application Versioning**:
    - Updated the fallback `currentVersionName` in `MainActivity` from `0.4.2` to `0.5.0`.

* refactor(service): refine floating behavior for progress notifications (#164)

- **Notification Logic**:
    - Updated `ProgressTranslator` to restrict the floating behavior (`setEnableFloat`) to only the initial appearance of a notification, preventing repeated floats during updates.
    - Removed the redundant `setIslandFirstFloat` call from the builder.

close #163

* Fix/162 bug crash unable to start service with null (#165)

* fix(service): handle nullable intent in onStartCommand

- **Notification Service**:
    - Updated `onStartCommand` signature to accept a nullable `Intent` to prevent potential crashes when the service is restarted by the system.
    - Implemented null-safe checks for `intent.action` when processing test widgets and theme reloads.

fixed #162

* feat(service): implement localized error messages for persistent notifications

- **Notification Service**:
    - Updated `NotificationReaderService` to use localized string resources for fallback content text in both standard and widget notifications.
    - Replaced the hardcoded "Active Island" text with `R.string.notification_went_wrong`.
    - Replaced the hardcoded "Active" widget text with `R.string.widget_went_wrong`.

- **Resources**:
    - Added `notification_went_wrong` and `widget_went_wrong` string resources to provide clearer feedback when notifications or widgets fail to render correctly.

* chore: update changelog string formatting

- **Resources**:
    - Refactored `changelog_0_5_0_beta` in `strings.xml` to use HTML `<b>` tags instead of markdown-style bolding for better compatibility with Android string rendering.
    - Improved indentation and formatting of the changelog text within the resource file.

* chore: bump version to 0.5.0-beta02 and refine changelog trigger logic

- **Build**:
    - Updated `versionCode` to `19` and `versionName` to `0.5.0-beta02` in `app/build.gradle.kts`.

- **Navigation & Lifecycle**:
    - **NavGraph**: Removed redundant `setLastSeenVersion` call during onboarding completion to centralize version tracking.
    - **MainActivity**:
        - Refined the changelog display logic to prevent it from appearing immediately after initial onboarding.
        - Improved `lastSeenVersion` state handling by using a more reliable initial value (`-1`) to ensure version comparisons only trigger after the preference is properly loaded.
        - Introduced `isInitiallySetup` check to distinguish between fresh installations and application updates.

* chore: update localizations and refine progress translation logic

- **Localization & Resources**:
    - **Spanish (ES)**: Translated several core strings, including "Live updates," "Open source licenses," and "Island behavior" descriptions.
    - **Indonesian (ID)**: Extensively updated translations for UI controls, navigation keywords (arrival, destination), and system permission descriptions.
    - **Italian (IT)** and **Traditional Chinese (ZH-TW)**: Completed translations for onboarding descriptions and behavior settings.
    - **General**: Added the `0.5.0-beta` changelog, version title, and error fallback strings (`notification_went_wrong`, `widget_went_wrong`) across all supported languages (ES, HU, IT, ZH-TW, SK, CS, TR, DE, PT, KO, FR, UK, PL, RU, ID).

- **Notification Service**:
    - **ProgressTranslator**: Refactored `setIslandConfig` in the progress update logic to only apply `expandedTimeMs` (float timeout) if the floating notification setting is explicitly enabled, improving consistency with user preferences.

* chore(manifest): remove redundant notification listener permission

- **Permissions**:
    - Removed the `BIND_NOTIFICATION_LISTENER_SERVICE` permission from `AndroidManifest.xml`.
    - Removed the associated `tools:ignore="ProtectedPermissions"` attribute.

* Fix WidgetManager initialization and Shizuku implementation

Closes #97

Closes #119

Closes #141

Closes #177

* chore(manifest): remove redundant notification listener permission

- **Permissions**:
    - Removed the `BIND_NOTIFICATION_LISTENER_SERVICE` permission from `AndroidManifest.xml`.
    - Removed the associated `tools:ignore="ProtectedPermissions"` attribute.

* chore: bump version to 0.5.0-beta04 and refine Shizuku workaround

- **Build**:
    - Updated `versionCode` to `21` and `versionName` to `0.5.0-beta04` in `app/build.gradle.kts`.

- **Shizuku & Notifications**:
    - **ShizukuManager**: Refactored the `notify` logic to improve the reliability of the XMSF network workaround on MIUI/HyperOS.
        - Introduced a `Mutex` to prevent race conditions during concurrent notification dispatches.
        - Added a 50ms delay after disabling XMSF to ensure the network state change takes effect.
        - Implemented a 1-second delayed restoration of XMSF network, which is reset by subsequent notifications to prevent premature re-enabling.
        - Added `@RequiresPermission` annotation for `POST_NOTIFICATIONS`.

- **Resources & Localization**:
    - **Changelog**: Updated `changelog_0_5_0_beta` to include information regarding CN Support and the new Shizuku workaround.
    - **Traditional Chinese (ZH-TW)**: Refined the `enable_autostart` string for better clarity ("開啟後台啟動管理").

* Feature/permanent island (#179)

* feat: implement Permanent Island feature and enhance Shizuku notification handling

- **Permanent Island**:
    - Introduced a "Permanent Island" feature that keeps a placeholder Dynamic Island visible when no active notifications are present.
    - Added `PermanentIslandManager` to coordinate visibility based on the `activeIslands` count within `NotificationReaderService`.
    - Added `isPermanentIslandEnabledFlow` and `permanentIslandWidthFlow` to `AppPreferences` to persist user configuration.
    - Implemented `PermanentIslandConfigPage` in the onboarding flow and a dedicated settings screen.
     Closes #94
- **Shizuku & Notifications**:
    - **ShizukuManager**: Added a `cancel` function that applies the XMSF network workaround (disabling/enabling XMSF network with a delay) when programmatically removing notifications to ensure consistency on MIUI/HyperOS.
    - **NotificationReaderService**: Integrated `PermanentIslandManager` to trigger updates whenever notifications are posted or removed.

- **Lifecycle & System**:
    - **BootReceiver**: Added `ACTION_MY_PACKAGE_REPLACED` to the intent filter in `AndroidManifest.xml` and handled it in the receiver to ensure the service restarts correctly after app updates.

- **UI & Navigation**:
    - **GlobalSettingsScreen**: Added an entry point for Permanent Island settings and updated the expressive shape logic to accommodate the additional list item.
    - **NavGraph**: Defined the route and destination for `PermanentIslandConfig`.
    - **Previews**: Updated `@Preview` annotations across onboarding components to use `apiLevel = 36`.

- **Resources & Localization**:
    - Added strings for "Permanent Island" titles, descriptions, and width controls in English and Spanish (ES, ES-rEM).
    - Refined the `shizuku_workaround_title` string for better clarity.

* feat: implement Permanent Island feature and configuration UI

- **Permanent Island Logic**:
    - Introduced `PermanentIslandManager` to manage a persistent, "empty" island state when no other active notifications are present.
    - Implemented logic to automatically show/hide the permanent island based on the current notification count and user preferences.
    - Utilizes `ShizukuManager` to dispatch a non-dismissible, low-priority notification that uses non-breaking spaces (`\u00A0`) to simulate variable island widths.

- **Settings UI**:
    - Created `PermanentIslandConfigScreen` providing users with a toggle to enable the feature and a slider to adjust the island's width.
    - Integrated `AppPreferences` flows to reactively update the UI and service state.

- **Components**:
    - Developed `PermanentIslandPreview`, a Compose component that provides a real-time visual mock-up of the island's appearance on a status bar, featuring smooth width animations via `animateDpAsState`.

* docs: Add permanent island feature to changelog

* chore: Update .gitignore to exclude build artifacts and IDE configs

* chore: Update .gitignore to standard Android Jetpack Compose template

* chore: initialize project configuration, dependency versions, and ignore rules

* feat: introduce dedicated Download notification type and refine progress parsing (#184)

- **Notifications & Services**:
    - **NotificationType**: Added a new `DOWNLOAD` type to separate file transfers from general `PROGRESS` tasks. Close #174
    - **NotificationReaderService**:
        - Integrated `DownloadTranslator` to handle download-specific notification logic.
        - Implemented `isDownloadNotification` and `hasProgressNotification` to smarter distinguish between types based on package names, channel IDs, and keywords.
        - Added logic to implicitly enable `DOWNLOAD` if `PROGRESS` is active for a specific app to ensure backward compatibility.
    - **Translators**:
        - **BaseTranslator**: Introduced `extractTextPercentage` to parse progress values (e.g., "12%") from notification titles or text.
        - **ProgressTranslator**: Updated to support text-based percentages and refined indeterminate state handling.
        - **LiveUpdateTranslator**: Added fallback to text-based percentage parsing for system-native animations.
        - **CallTranslator**: Switched to `getCharSequence` for retrieving notification titles for better compatibility.

- **Data & Migration**:
    - **AppPreferences**: Implemented a migration routine (`download_type_migration_complete`) that automatically adds the `DOWNLOAD` type to global and app-specific settings if `PROGRESS` was previously enabled.

- **UI & Resources**:
    - **Theme & Onboarding**:
        - Updated `ThemeSettingsContent` and `OnboardingScreen` to reflect the split between Progress and Downloads.
        - Updated icons: `HourglassEmpty` for Progress and `CloudDownload` for Downloads.
    - **Localization**:
        - Refined strings in English and Spanish to distinguish between "Progress & Tasks" and "Downloads."
    - **Changelog**: Updated `changelog_0_5_0_beta` with details regarding CN support, the new Download type, text-based progress support, and smart filtering.

* feat: implement DownloadTranslator and expand configuration resources

- **Translators**:
    - Introduced `DownloadTranslator` to provide specialized handling for file transfer notifications, separating them from general progress tasks.
    - Implemented logic in `DownloadTranslator` to handle indeterminate states, percentage-based progress, and completion detection via keywords or 100% threshold.
    - Added support for custom completion icons ("tick_icon") and automated timeout/dismissible configurations for finished downloads.

- **Resources & Localization**:
    - **Permanent Island**: Added strings for titles, descriptions, and width adjustment controls across multiple locales (ID, FR, TR, CS, IT, UK, DE, ZH-TW, PT-BR, RU, SK, ES, PL, KO, HU).
    - **Shizuku Workaround**: Added localized strings to guide users through enabling the Shizuku workaround, specifically for improved notification triggering on CN ROMs.
    - **Do Not Disturb (DND)**: Introduced strings for managing island visibility during DND, including manual pause and auto-detection of system DND status.
    - **Type Refinement**: Updated `type_progress` and `type_download` strings to clearly distinguish between "Progress & Tasks" (ongoing operations) and "Downloads" (file transfers).
    - **Changelog**: Updated `changelog_0_5_0_beta` in all languages to detail CN support, native live updates, theme engine improvements (HSL selector), and the new Permanent Island feature.

* Feature/sui permission (#185)

* feat(shizuku): implement support for Sui permissions and detection

* chore(i18n): extract hardcoded onboarding text and add Spanish translations for Shizuku and DND strings

* chore(i18n): translate permanent island strings to Spanish

* Fix/widget permanent island (#186)

* fix(permanent-island): hide permanent island when a widget is active

* feat(ui): add shizuku workaround toggle to engine theme page

* Feature/better icons (#187)

* fix(notifications): tint dark icons, extract messaging avatars, fix update popups

* fix(notifications): allow group summaries with text to trigger islands

* fix(notifications): completely remove GROUP_ALERT_CHILDREN check for summaries

* fix(notifications): ensure sequential execution of cancel and notify to prevent race conditions dropping islands

* fix(notifications): use sender_person key for MessagingStyle avatar extraction

* chore: bump version to 0.5.0-beta05 and update dependencies

- **Build Configuration**:
    - Updated `versionCode` to 22 and `versionName` to `0.5.0-beta05`.
    - Updated Kotlin serialization plugin to 2.3.21.

- **Dependencies**:
    - **Kotlin & Serialization**: Updated Kotlin to 2.3.21 and `kotlinxSerializationJson` to 1.11.0.
    - **Compose**: Updated `composeBom` to 2026.05.01 and Compose UI to 1.11.2.
    - **Libraries**:
        - Updated `gson` to 2.14.0.
        - Updated `nav3` to 1.1.2.

---------

Co-authored-by: David Df <abdldaviddom@gmail.com>

* Beta/0 5 0 (#191)

* Feat/color picker (#127)

* feat(theme): implement HSL color picker and enhanced lightness slider

- **New `CustomColorBottomSheet`**: Introduced a dedicated HSL (Hue, Saturation, Lightness) color picker with gradient sliders for precise theme color customization.
- **Enhanced `ColorsDetailContent`**:
    - Overhauled the preset tab with an animated lightness slider that appears when a preset is selected.
    - Improved the preset selection logic to maintain the "base" hue even when adjusting lightness to extreme white or black.
    - Redesigned the "Custom" colors section to use the new HSL bottom sheet instead of a simple hex text field.
    - Switched from simple circular bubbles to a more refined UI with selection rings and rounded-square transitions for active colors.
- **Improved Theme Creator State**:
    - Implemented strict state clearing (nulling `currentEditingThemeId`) when exiting the creator to prevent state leakage between editing sessions.
    - Updated save/apply dialog logic to ensure the UI resets correctly after persistence.
- **Shared Components**: Added `GradientSlider` and `ColorBubble` to `HyperOSColorPicker.kt` for reusable, stylized color selection components.
- **Localization**: Added missing string resources for color labels (Hue, Saturation, Lightness) in English and Spanish.

* #### feat(theme): implement advanced color modes and redesigned color picker

- **Color Modes**: Introduced a `ColorMode` system (`CUSTOM`, `APP_ICON`, `MATERIAL_YOU`) to replace the binary "Use App Colors" toggle. This allows themes to dynamically adapt to Material You system colors or extract colors from app icons globally and per-app.
- **Improved Color Picker**: Replaced standard text fields with a new `CustomColorBottomSheet` in the Call Style and Theme Creator screens, featuring a visual HSL-based selection and hex formatting.
- **UI & UX Refinement**:
    - Redesigned `ColorsDetailContent` with a scrollable layout and new sections for dynamic color modes.
    - Updated the Theme Creator preview to correctly reflect the active color mode.
    - Standardized "My Theme" and "Share Theme" strings to use localized resources.
- **Data Persistence**: Updated `HyperTheme`, `GlobalConfig`, and `AppThemeOverride` models to support the new `ColorMode` enum while maintaining backward compatibility with legacy themes.
- **Theme Creator**: Refactored `ThemeViewModel` to handle more robust state initialization and migration when editing or creating new themes.
- **Tooling**: Added Crowdin configuration settings for the IDE.

* feat(widget): add favorites, recommended filtering, and update notice (#128)

- **Widget Picker**:
    - Implemented a "Recommended" filter to highlight 1x4 and 2x4 layouts compatible with the Island size.
    - Added a Favorite system for widget apps, allowing users to star apps for top-level sorting.
    - Added a floating navigation bar to switch between Recommended and All widgets.
    - Improved dimension display by converting DP to grid cell proportions (e.g., 4x2).
- **Saved Widgets**:
    - Added a persistent "Update Notice" dialog to remind users to check Autostart/Battery permissions after an app update.
    - Implemented a "Kill Active Widgets" action to instantly dismiss all running widget overlays.
    - Redesigned the UI with a centered filter toolbar (Favorites vs. All) and a dedicated Add FAB.
    - Added reactive listening for newly added widgets to ensure the list updates immediately.
- **Service & Data**:
    - Enhanced `WidgetOverlayService` with specific `ACTION_KILL_WIDGET` and `ACTION_KILL_ALL_WIDGETS` handlers for immediate UI cleanup.
    - Added `favoriteWidgetAppsFlow` to `AppPreferences` to persist starred widget providers.
- **Localization**:
    - Added English and Spanish strings for filters, permission reminders, and widget management.

CLOSE #72

* feat(service): implement Native Android 16 Live Updates support

- Added `LiveUpdateTranslator` to transform standard notifications into native Android 16 promoted ongoing tasks using `android.requestPromotedOngoing` and `android.shortCriticalText`.
- Implemented a toggle in Global Settings to choose between custom Xiaomi Islands and native Android 16 Live Updates.
- Created a dedicated `hyper_bridge_live_update_channel` for native updates to manage notifications and visibility independently.
- Added `POST_PROMOTED_NOTIFICATIONS` permission to `AndroidManifest.xml` to support Android 16's promoted notification features.
- Enhanced `LiveUpdateTranslator` with a `generateCriticalShortText` helper to dynamically extract progress percentages or ETAs for the system status chip.
- Fixed Android 16 category filtering by forcing Live Updates into strictly valid categories (`PROGRESS` or `TRANSPORT`) to prevent OS blocking.
- Ensured original notification timestamps are preserved for accurate system-wide "time active" calculations.
- Updated `NotificationReaderService` to support hot-swapping between custom injection and native updates via shared preferences.

* feat(service): enhance Live Update processing and Android 16 compatibility

- **NotificationReaderService**: Implemented a more robust content hashing algorithm that tracks Title, Text, Progress (max, current, indeterminate), and Button Action states (e.g., Play to Pause transitions) to ensure accurate UI updates.
- **LiveUpdateTranslator**:
    - Added support for large icons and picture extras in live updates.
    - Improved media notification handling by suppressing progress bars that often persist in the background.
    - Optimized category mapping (Progress vs. Transport) to comply with Android 16 ongoing promotion requirements.
    - Updated `shortCriticalText` generation logic to prioritize media titles, percentages, or time ETAs for the Dynamic Island chip.
    - Switched to native Android 16 APIs for promoted ongoing requests and short critical text injection.

* feat(settings): refactor Global Settings UI and update version

- Updated `versionName` to `0.5.0-alpha01`.
- Redesigned `GlobalSettingsScreen` to use consistent card-based layouts for all settings items.
- Replaced the "Native Live Updates" `ListItem` with a new standardized `SettingsSwitchItem` component.
- Improved UI spacing and styling across the settings screen, including unified icon background treatments.
- Simplified state management and click behavior for toggleable settings.

* Update changelog resource to v0.4.2

* build: update project dependencies and gradle configuration (#134)

- **Gradle & AGP**:
    - Upgraded Android Gradle Plugin (AGP) from `8.13.2` to `9.1.0`.
    - Upgraded Gradle wrapper from `8.13` to `9.3.1`.
    - Added `foojay-resolver-convention` plugin to `settings.gradle.kts` for automated toolchain management.
- **Dependencies**:
    - Updated Kotlin to `2.3.20` and KSP to `2.3.2`.
    - Updated Compose BOM to `2026.03.00` and Material3 to `1.5.0-alpha15`.
    - Updated various AndroidX libraries: `core-ktx` (`1.18.0`), `datastore-preferences` (`1.2.1`), `activity-compose` (`1.13.0`), and `ui` (`1.10.5`).
    - Bumped `kotlinx-serialization-json` to `1.10.0`.
- **Build Configuration**:
    - Removed `kotlin-android` plugin in favor of `kotlin-compose` and built-in Kotlin support.
    - Removed explicit `jvmTarget` configuration in `app/build.gradle.kts`.
    - Enabled several experimental/new Android Gradle properties in `gradle.properties`, including `android.builtInKotlin` and `android.newDsl`.
- **Optimization**:
    - Updated `proguard-rules.pro` to strip Debug and Info logs in release builds using AGP 9.1+ syntax.

* Feature/ux iprovement global configuration (#137)

* feat(settings): redesign Global Settings and enhance Theme Engine

- **Global Settings UI**:
    - Refactored `GlobalSettingsScreen` to use a card-based list layout with standardized `ListOptionCard` components.
    - Split settings into dedicated screens: `EngineSettingsScreen`, `IslandSettingsScreen`, and `NavCustomizationScreen`.
    - Added an "Engine" section to toggle between "Xiaomi Featured Design" and "Native Android Live Updates".
    - Implemented a more granular "Island Behavior" configuration including an improved auto-hide timeout slider with snap points (1s to 1h).
- **Theme Engine**:
    - Integrated "Engine", "Island Behavior", and "Notification Types" selection directly into the Theme Creator flow.
    - Added a real-time `EnginePreview` component to visualize differences between Xiaomi and Native Live Update designs.
    - Added a "Notification Types" manager to toggle triggers for Standard, Progress, Media, Navigation, Call, and Timer events.
- **Functionality & Fixes**:
    - **Crash Fix**: Resolved a critical issue causing the app to crash when opening settings in Traditional Chinese.
    - Updated `AppPreferences` to support persistent storage for the native notification engine toggle.
    - Improved `ThemeViewModel` with a more efficient bitmap scaling method for theme thumbnails.
    - Updated `StandardTranslator`, `NavTranslator`, and `ProgressTranslator` to better respect global timeout and dismissal configurations.
    - Set the default notification shade visibility to `false` for a cleaner "Island-only" experience by default.
- **Localization**:
    - Added extensive string resources for version 0.4.2 hotfix and new engine settings across multiple languages (SK, PL, RU, ZH-TW, TR, UK, PT-BR, CS, DE, HU, IN, IT, KO, ES).
    - Fixed several translation issues in Traditional Chinese and Spanish.

* feat(settings): externalize and localize auto-hide island strings

- **UI**: Refactored `IslandSettingsControl.kt` to use `stringResource` instead of hardcoded strings for the Auto-hide Island feature.
- **Localization**:
    - Added new string resources (`auto_hide_island`, `hides_after_a_set_time`, `behavior_hide_desc`, `behavior_desc_hide_long`) to multiple locales: Slovak, Polish, Russian, Traditional Chinese, Turkish, Ukrainian, Portuguese (Brazil), Czech, German, Indonesian, Italian, Korean, Spanish, and Hungarian.
    - Updated Spanish translations for behavior and trigger settings.
    - Standardized ellipsis usage from `…` to `...` in Portuguese (Brazil) and Korean `strings.xml`.

* build: update version and remove redundant material3 dependenc…
- **Build**: Bumped `versionCode` to 24 in `app/build.gradle.kts`.
- **Localization**:
    - **Traditional Chinese (ZH-TW) & French (FR)**: Completed full localization for Permanent Island, Do Not Disturb mode settings, and the Shizuku workaround.
    - **Spanish (ES)**: Refined translations for "Downloads" and "Progress" notification types.
    - **Changelog**: Updated and formatted the v0.5.0 "The Live Update" release notes across all supported locales (ID, TR, CS, IT, UK, DE, ZH, FR, PT, RU, SK, ES, PL, KO, HU), ensuring consistent HTML styling and escaped characters.
    - **General**: Added the missing `shizuku_enable_workaround` string to multiple language resources.
- **Tooling**: Updated Crowdin plugin configuration to suppress confirmation dialogs during synchronization.
- **Build**: Updated `versionCode` to 25 and `versionName` to `0.5.1` in `app/build.gradle.kts`.
#200)

* Modified `isJunkNotification` to explicitly block `FLAG_GROUP_SUMMARY`
  notifications for WhatsApp/WhatsApp Business. This prevents the engine
  from triggering two simultaneous islands for the same incoming message,
  while maintaining the previous fix for Telegram's grouped alerts.

* Reverted `postStandardNotification` to consistently use `.notify()`
  instead of `.notifyWithCancel()` when updating an existing active island.
  This stops the UI from rapidly tearing down and recreating the island on
  minor background updates, fixing the severe flashing behavior and
  subsequent system crashes under heavy notification loads.

Fixes #196
Fixes #197
…shes (#201)

- Fixed an issue where call islands would persist after the call ended by explicitly dismissing `NotificationType.CALL` islands when their original notification is removed.
- Fixed system crashes and flicker caused by rapid notification updates by using standard `.notify()` instead of `.notifyWithCancel()` when updating standard notifications.
- Fixed an issue in `PermanentIslandManager` that caused the permanent island to flicker indefinitely. State updates and dispatches are now only triggered when the `isPermanentIslandEnabled` flag or `currentWidth` actually change.
- Added the "Dismiss with original" setting to the `OnboardingScreen` so users can configure it during initial setup.
- Reduced the visual gap between the "Remove original notification" and "Dismiss with original" toggle cards in the settings menu.
- Changed the "Live updates" section title in settings to "Original notification behavior" (and corresponding Spanish translation) as these options control general notification behavior, not just Live Updates.
- Added Spanish translations for the new "Dismiss with original" feature strings.
…ments for v0.5.1 (#202)

- **Diagnostics & Troubleshooting**:
    - **Xiaomi Support**: Introduced `XiaomiNotificationHelper` to detect hardware island support and "Focus Notification" permission status via system properties and content providers.
    - **Onboarding**: Added a `FeaturedNotificationCheckPage` to verify system configuration and guide users to enable required hidden settings.
    - **Setup Health**: Integrated a new check for Xiaomi Featured Notifications into the health dashboard.
    - **Troubleshooting**: Implemented a dedicated troubleshooting dialog in `MainActivity` and a persistent warning banner on the Home screen to handle missing system permissions.
- **Service & Notifications**:
    - **Permission Monitoring**: Updated `NotificationReaderService` to monitor "Featured" permissions; it now injects troubleshooting actions and redirects `contentIntent` to the app's diagnostic screen if permissions are denied.
    - **Stability**: Refined notification posting logic to prevent flickering and crashes when receiving multiple rapid updates (as noted in changelog).
    - **Intents**: Fixed routing issues where clicking notifications occasionally failed to open the source application.
- **UI & UX Refinement**:
    - **Terminology**: Renamed "Live Updates" to "Notification Management" across the settings and configuration screens.
    - **Home Screen**: Added an interactive error card to the `HomeScreen` that appears when system-level notification features are restricted.
    - **Styling**: Restored rounded corner consistency for the "Permanent Island" option in `GlobalSettingsScreen`.
- **Data & Persistence**:
    - Added `featuredPermissionWarningFlow` to `AppPreferences` to track and display permission-related system warnings.
- **Localization**:
    - **English & Spanish**: Updated string resources and changelogs for v0.5.1, covering new troubleshooting steps, system health checks, and updated terminology.
* refactor: optimize performance, thread safety, and UI rendering logic

- **Performance & Initialization**:
    - **MainActivity**: Migrated `AppDatabase` and `BackupManager` to use lazy initialization within `remember` blocks.
    - **Thread Safety**: Offloaded `PackageInfo` retrieval to a background thread using `produceState` and `Dispatchers.IO`.
    - **Resource Loading**: Simplified the onboarding welcome page by using static painter resources for the app logo instead of dynamic bitmap conversion.
- **UI & Layout**:
    - **Constraints**: Replaced `heightIn(min = ...)` with `defaultMinSize(minHeight = ...)` across multiple components (`OnboardingScreen`, `AppsDetailContent`, `ThemeCreatorScreen`, `CommonCards`, and `InfoScreen`) to improve layout behavior.
    - **Widget Previews**: Optimized `WidgetPickerScreen` to load and scale widget preview bitmaps on a background thread with safe dimension constraints, preventing potential UI stutters.
- **Data & Stability**:
    - **Thread Safety**: Updated `ThemeViewModel` to use `ConcurrentHashMap` and defensive copies for temporary assets to prevent `ConcurrentModificationException` during theme saving.
    - **I/O Optimization**: Refactored `BackupManager` to stream JSON directly from `InputStreamReader` into GSON, improving memory efficiency and removing manual string building.
- **Service & Notifications**:
    - **Notification Logic**: Updated `NotificationReaderService` to use `notifyWithCancel` via `ShizukuManager` when updates should alert, ensuring proper notification replacement behavior.

* chore: bump version to v0.5.2 and enable edge-to-edge support

- **Build**: Updated `versionCode` to 26 and `versionName` to `0.5.2` in `app/build.gradle.kts`.
- **UI & UX**:
    - Integrated `enableEdgeToEdge()` in `MainActivity` to support modern Android display standards.
    - Updated `ChangelogSheet` and `ChangelogHistoryScreen` to reference and display the v0.5.2 release notes.
- **Localization**:
    - Added Spanish (Spain and Latin America) translations for the v0.5.2 changelog.
    - Documented performance and stability improvements in the changelog, including fixes for Theme Creator crashes, onboarding ANRs, Widget Selector OOM errors, and Backup/Restore JSON parsing refinements.

* chore: add changelog and title strings for v0.5.2

- **Resources**: Added `changelog_0_5_2` and `title_0_5_2` string resources to `strings.xml` to prepare for the "Performance & Stability Update."
- **Changelog Content**: Documented fixes for Theme Creator crashes, Welcome Screen ANRs, Widget Picker OOM errors, Compose layout exceptions, backup import optimizations, and warm start performance improvements.
…206)

- **Data & Persistence**:
    - **Memory Caching**: Introduced a `ConcurrentHashMap` memory cache in `AppPreferences` to provide near-instant access to configuration settings without database or DataStore overhead.
    - **Reactive Sync**: Implemented `getAllFlow()` in `SettingsDAO` to keep the memory cache automatically synchronized with the underlying Room database.
    - **Synchronous Accessors**: Added a suite of synchronous "Sync" getters (e.g., `getGlobalConfigSync`, `getAppIslandConfigSync`) to bypass coroutine suspension for performance-critical operations.
- **Service & Performance**:
    - **Notification Processing**: Refactored `NotificationReaderService` to use synchronous preference lookups, eliminating the need for `suspend` modifiers and `.first()` flow collection in the notification processing pipeline.
    - **Logic Optimization**: Reordered logic in `onNotificationPosted` to perform the `isAppAllowed` check before launching a coroutine job, reducing unnecessary object allocation.
    - **Resource Usage**: Reduced background service overhead and improved battery life by minimizing I/O operations during high-frequency notification events.
- **Localization**:
    - **Changelog Updates**: Updated English and Spanish (ES-rES, ES-rEM) resources for v0.5.2, highlighting the background service architecture overhaul and its impact on performance and battery life.
- **Inline Reply System**:
    - Introduced `InlineReplyService` to display a Compose-based system overlay for direct message replies using `SYSTEM_ALERT_WINDOW`.
    - Added `InlineReplyReceiver` to handle notification intents and launch the reply service from the background.
    - Updated `BaseTranslator` to intercept `RemoteInput` actions and route them through the custom overlay when enabled.
- **Customization & Themes**:
    - Added `ReplyStyleSheetContent` and `GlobalReplyCustomizationScreen` to allow fine-grained control over reply overlay colors, shapes, and transparency.
    - Integrated "Inline Reply" settings into `ThemeCreatorScreen` and `AppThemeEditorScreen` for both global and per-app overrides.
    - Integrated the `haze` library to implement glassmorphism (blur) effects on the reply text field and send button.
- **Settings & Persistence**:
    - Added `enableInlineReply` property to `IslandConfig` and updated `AppPreferences` to persist the new setting.
    - Added a toggle for Inline Reply in `IslandSettingsControl` and `OnboardingScreen`, including a warning about hidden actions when "Remove original notification" is enabled.
    - Integrated the Inline Reply customization entry into the `GlobalSettingsScreen`.
- **Localization & Metadata**:
    - Updated string resources across all supported locales (ES, FR, DE, CS, etc.) with terminology for the new feature and the v0.5.2 changelog.
    - Registered the new service, receiver, and `SYSTEM_ALERT_WINDOW` permission in `AndroidManifest.xml`.
- **Stability**:
    - Updated changelogs to reflect performance improvements, memory optimizations in the `NotificationListener`, and crash fixes for the Theme Creator and Widget Picker.
- **Home Screen**: Updated bottom bar visibility logic to hide the `bottomBar` when the widget picker is visible or a widget is being edited, preventing UI overlap and providing more space for configuration.
- **Changelog**: Improved the `ChangelogSheet` dismissal experience by explicitly calling `sheetState.hide()` within a coroutine scope, ensuring the bottom sheet animates closed before triggering the `onDismiss` callback.
- **Inline Reply System**:
    - Introduced string resources across all supported locales for the new Inline Reply feature, including configuration toggles, appearance customization (colors, glassmorphism, corner radii), and functional warnings.
    - Added localized strings for the inline reply overlay's text field and send button.
- **Indonesian Localization**:
    - Performed a comprehensive refinement of Indonesian (`in-rID`) translations to improve terminology consistency (e.g., "Notifikasi" to "Pemberitahuan", "Timer" to "Pewaktu").
    - Updated troubleshooting descriptions and permission guides for better clarity on HyperOS/MIUI devices.
- **Multilingual Updates**:
    - Updated v0.5.2 changelogs for French and Spanish to highlight the new Inline Reply feature and performance/stability fixes.
    - Synchronized "Permanent Island," "Shizuku Workaround," and "Color Mode" strings across various supported languages (TR, CS, IT, UK, DE, ZH-TW, PT-BR, RU, SK, PL, KO, HU).
- **Service Logic**:
    - **Permanent Island**: Refactored `PermanentIslandManager` to enable the `reopen` flag and explicitly set an empty `SmallIsland` state, ensuring consistent behavior for the persistent UI.
- **UX & Stability**:
    - Updated the v0.4.2 hotfix changelog and localized it for Indonesian users.
    - Refined descriptions for battery optimization and auto-start permissions to help prevent background service eviction.
…ding

- **Onboarding & Setup**:
    - Introduced a new `OverlayPermissionPage` to the onboarding flow, requiring the "Display over other apps" permission to support the inline reply feature.
    - Updated `SetupHealthScreen` to include a status check and shortcut for the overlay permission.
    - Fixed a bug in `SetupHealthScreen` where the incorrect string resource was used for the notification permission description.
    - Incremented the onboarding reset version to 19, forcing a re-run of the setup flow to ensure users grant the necessary new permissions.
- **Preferences & Logic**:
    - Changed the default value of `dismissWithOriginal` to `true` in both `AppPreferences` and `IslandConfig`.
    - Updated `AppPreferences` to ensure the inline reply setting defaults to enabled during preference parsing.
    - Adjusted the total page count and navigation logic in `OnboardingScreen` to accommodate the additional permission step.
- **Localization**:
    - Added `perm_display_title` and `perm_display_onboard_desc` string resources across all supported locales, including English, Spanish, French, German, and others.
…sets

- **UI & Assets**:
    - **Onboarding**: Updated the `OnboardingScreen` to use the specific `ic_logo_foreground` resource instead of the generic launcher icon.
- **Stability & Error Handling**:
    - **Backup Management**: Refactored `BackupManager` to catch `Throwable` instead of `Exception` across export and import functions, ensuring broader error capture for system-level failures.
    - **State Management**: Applied `.toMap()` defensive copying to `themeDefaultActions` and `appOverrides` in `ThemeViewModel` before saving, preventing potential thread-safety issues with mutable state.
- **Architecture**:
    - **Database**: Simplified the `AppDatabase` singleton pattern in `getDatabase` using the idiomatic Kotlin `.also()` block for cleaner thread-safe initialization.
- **Build**:
    - Updated `versionName` to `0.5.3` in `build.gradle.kts`.
…ion (#216)

- Fix Safe Mode issues by moving the Room database from Credential Encrypted (CE)
  to Device Protected Storage (DE). This allows Direct Boot aware components
  to access settings before user unlock, preventing crash loops.
- Implement automatic database migration from CE to DE storage triggered on
  app update (MY_PACKAGE_REPLACED) and device boot.
- Add a visual Progress Island in NotificationReaderService to inform users
  during the background migration, supporting both Xiaomi and Native engines.
- Refine NLS re-binding logic in BootReceiver to improve stability:
    - Use official requestRebind() API for minor events (Unlock, User Switch).
    - Implement a 5-second cooldown for the component toggle hack on major
      events (Boot, Update) to prevent "Service not registered" system errors.
- Expand BootReceiver triggers to include ACTION_USER_UNLOCKED,
  ACTION_USER_PRESENT, and ACTION_USER_SWITCHED for better service uptime.
- Set "Auto-detect DND" to OFF by default across the app and integrated its
  configuration into the Onboarding flow.
- Guard legacy DataStore migrations in AppPreferences with isUserUnlocked
  checks to ensure storage accessibility during Direct Boot.
- Localize all new string resources and removed hardcoded text from migration UI.
When a third-party app (e.g. WhatsApp) sends a progress notification with
a negative EXTRA_PROGRESS value (such as -1 during backup initialization),
ProgressTranslator and DownloadTranslator would pass the negative percent
directly into the Dynamic Island JSON payload. This causes SystemUI's
CircularProgressBar.setProgress() to throw an IllegalArgumentException,
resulting in a fatal crash on the main thread. The user experiences
repeated SystemUI force-closes (black screen / UI restart loop).

Fix: apply .coerceIn(0, 100) to the calculated percent value before it is
forwarded to the island builder, ensuring only valid progress values reach
SystemUI regardless of what the source notification contains.

Fixes #215
- **Build**:
    - Updated `versionCode` to `28` and `versionName` to `0.5.4` in `build.gradle.kts`.
* feat: Messaging deduplication, 0.5.5 changelog, and migration fixes

- Extracted MessagingStyle grouping to MessageTranslator to avoid duplicate islands

- Fixed database migration not triggering properly on package update by ensuring BootReceiver is exported

- Automatically enable DOWNLOAD and MESSAGE notification types for all active apps during migration

- Added in-app 0.5.5 changelogs and mapped them in MainActivity and ChangelogHistoryScreen

- Fixed missing app icon background on Onboarding Welcome Page by loading the actual application icon bitmap

- Disabled 'Show in Shade' by default

* fix: cancel original notification and island on message tap

* fix: debounce download notification updates to prevent island recreation

* fix: remove aggressive download reuse to support concurrent downloads

* fix: correctly cancel removed islands with debounce state management

* fix: re-add download island reuse matching by title to support concurrent downloads and ID-changing updates

* fix: bypass Shizuku network delay for progress updates to prevent UI lockup and flicker

* fix: robust download matching by package when single download to fix Chrome dynamically changing title and ID

* fix: Chrome downloads being downgraded to standard notifications during progress updates
- **Build**:
    - Updated `versionCode` to `29` and `versionName` to `0.5.5` in `build.gradle.kts`.
* fix: force dismiss call/media and sync islands on screen-on

* fix: prevent syncNotifications from incorrectly dropping intentionally swept standard notifications

* fix: improve discard logic for live updates, chrome progress bars, and instant removal race conditions

* fix: improve discard logic for live updates, chrome progress bars, and instant removal race conditions
* feat: hide permanent island when native hyperos island is active

* Updated languages
- **GitHub Configuration**: Updated `.github/ISSUE_TEMPLATE/bug_report.yml` to include versions `v0.5.0` through `v0.5.5` in the "App Version" selection dropdown.
- **Build**: Updated `versionCode` to 30 in `app/build.gradle.kts`.
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.

3 participants