Skip to content

0.4.0 Update#100

Merged
D4vidDf merged 67 commits intomasterfrom
dev
Jan 22, 2026
Merged

0.4.0 Update#100
D4vidDf merged 67 commits intomasterfrom
dev

Conversation

@D4vidDf
Copy link
Owner

@D4vidDf D4vidDf commented Jan 22, 2026

No description provided.

D4vidDf and others added 30 commits November 29, 2025 17:54
Primeiro commit para adicionar a tradução para português brasileiro

Co-authored-by: Daniel Ramos <69496904+NIICKTCHUNS@users.noreply.github.com>
- Added `NavCustomizationScreen` with live preview to configure Navigation Island layout.
- Implemented options to customize Left/Right content (Instruction, Distance, ETA) globally or per app.
- Fixed text misalignment bug caused by newline characters in notification extras.
- Updated `NavTranslator` to sanitize inputs and respect new layout configs.
- Added Spanish translations for new settings.

Closes #4
Primeiro commit para adicionar a tradução para português brasileiro

Co-authored-by: Daniel Ramos <69496904+NIICKTCHUNS@users.noreply.github.com>
- Implemented custom accessibility actions for the App Priority List (Move Up/Down) to allow reordering without drag gestures.
- Added dynamic content descriptions to App List switches and buttons (e.g., "Toggle [App Name]" instead of just "Switch").
- Marked settings group titles as Semantic Headings for faster screen reader navigation.
- Added state descriptions to the Navigation Layout Preview to describe the current configuration audibly.
- Improved labeling for expand/collapse actions in the Version History screen.
- Fixed missing content descriptions on navigation and edit icon buttons.

Closes #17
- Implemented strict check in `isJunkNotification` to block notifications where Title or Text equals the Package Name.
- This prevents 'placeholder' notifications (e.g. 'com.whatsapp') from overwriting valid content on the Island.
- Logs ignored placeholders for debugging.

Closes #7
- Downgraded `androidx.datastore:datastore-preferences` from 1.2.0 to 1.1.7.
- The 1.2.0 update introduced a regression on HyperOS/MIUI devices where preference files were not readable immediately after boot, causing the app to reset to the Onboarding screen and lose saved configurations.
- Reverting to the stable 1.1.x release restores reliable data persistence across reboots.

Closes #5
Atualização da tradução com a versão mais recente da branch 'dev'
#31)

- Updated `isJunkNotification` logic in `NotificationReaderService`.
- Now filters out notifications where the Title or Text contains the package name (case-insensitive), rather than just exact matches.
- This prevents the Dynamic Island from displaying raw package strings (e.g., "com.whatsapp checking...") during background updates.

Closes #7
…ig sheet (#32)

- Implemented Blocked Terms logic: Users can now define words to block globally or per-app to prevent spoilers or unwanted notifications.
- Redesigned `AppConfigBottomSheet`: Replaced the tabbed layout with a vertical list using expandable cards. This fixes the "bouncy" animation issues when switching sections.
- Added `GlobalBlocklistScreen` as a central hub for managing filters.
- Added `BlocklistAppListScreen` to configure rules for specific apps, displaying active rule counts per app.
- Updated `NotificationReaderService` to filter notifications based on effective blocked terms (Global + App Specific).
- Standardized UI: App list items in the blocklist settings now use consistent Card styling.

Closes #6
- Updated `hyperisland-kit` to 0.3.3 to resolve Issue #9 (Shade visibility bug).
- Redesigned `IslandSettingsControl`:
  - Updated text descriptions to clearly explain 'Float' (Heads-up) vs 'Shade' (System Panel) behavior.
  - Improved Timeout Slider: Now displays seconds (0-10s) clearly in the header and uses full width for easier adjustment.
- Updated English and Spanish translations.

Closes #9
- Updated `CompatibilityPage` to strictly block the "Next" button if the OS is older than HyperOS 3.0.
- Added logic to `DeviceUtils` to detect HyperOS 3.0 on Android 15 (API 35) to future-proof against base OS updates.
- Implemented `getDeviceMarketName` to display readable model names (e.g., "Xiaomi 14") instead of model codes.
- Added a specific UI warning for users on China ROMs regarding potential stability issues.
- Updated the Autostart permission description to clarify that the app cannot automatically verify if the permission is granted.

Closes #11
- Added comprehensive release notes for version 0.3.0 in English and Spanish.
- Highlighted key features: "Hidden Notification" (Shade toggle), Navigation Customization, and Spoiler Protection.
- Added acknowledgments for community contributions regarding new language support (Portuguese, Polish, Korean).
- Updated version title to "The Global Update".
Atualizando para a versão 0.3.0
- Added comprehensive release notes for version 0.3.0 in English and Spanish.
- Highlighted key features: "Hidden Notification" (Shade toggle), Navigation Customization, and Spoiler Protection.
- Added acknowledgments for community contributions regarding new language support (Portuguese, Polish, Korean).
- Updated version title to "The Global Update".
(additionally mention Ukrainian translation in changelog)
- Replaced Jetpack DataStore with Room (SQLite) to resolve persistence instability and file locking issues observed on HyperOS devices during boot.
- Implemented `AppDatabase`, `SettingsDao`, and `AppSetting` entity to store key-value pairs reliably.
- Rewrote `AppPreferences` to interface with the database while maintaining the existing Flow API for the UI.
- Added a one-time migration mechanism in `AppPreferences` to automatically transfer existing settings from the legacy DataStore file to the new Room database, ensuring no data loss for current users.
- Updated build configuration to include KSP and Room dependencies, and resolved dependency conflicts.

Closes #40
- Connected the Blocked Terms data layer to the `NotificationReaderService`.
- Previously, terms defined in the UI were saved but ignored by the service.
- Implemented Global Blocklist check in `isJunkNotification` (Synchronous) to drop spam immediately.
- Implemented App-Specific Blocklist check in `processAndPost` (Asynchronous) to handle per-app spoiler protection.

Closes #6, Closes #39
- **Backup & Restore**: Implemented a complete system to export/import settings, blocklists, and priorities via `.hbr` JSON files.
- **Localization**: Added an in-app Language Selector and support for German (de) and Russian (ru).
- **UI Overhaul**: Updated the entire settings and onboarding experience to **Material 3 Expressive** design (Large Top Bars, increased roundness, surface colors).
- **Onboarding**: Added a Privacy Page explaining offline architecture and improved HyperOS 3.0 compatibility checks.
- **Fixes**: Resolved Navigation "Exit" button rendering as an icon instead of text, and fixed App Icon loading in the Settings screen.
- **Changelog**: Updated release notes for v0.3.1.

Closes #41
* Dev (#47)

* Add Brazilian Portuguese translation (#14) (#16)

Primeiro commit para adicionar a tradução para português brasileiro

Co-authored-by: Daniel Ramos <69496904+NIICKTCHUNS@users.noreply.github.com>

* feat(nav): add layout customization and fix text alignment (#18)

- Added `NavCustomizationScreen` with live preview to configure Navigation Island layout.
- Implemented options to customize Left/Right content (Instruction, Distance, ETA) globally or per app.
- Fixed text misalignment bug caused by newline characters in notification extras.
- Updated `NavTranslator` to sanitize inputs and respect new layout configs.
- Added Spanish translations for new settings.

Closes #4

* Add Brazilian Portuguese translation (#14) (#22)

Primeiro commit para adicionar a tradução para português brasileiro

Co-authored-by: Daniel Ramos <69496904+NIICKTCHUNS@users.noreply.github.com>

* feat(a11y): improve TalkBack support and semantic navigation (#24)

- Implemented custom accessibility actions for the App Priority List (Move Up/Down) to allow reordering without drag gestures.
- Added dynamic content descriptions to App List switches and buttons (e.g., "Toggle [App Name]" instead of just "Switch").
- Marked settings group titles as Semantic Headings for faster screen reader navigation.
- Added state descriptions to the Navigation Layout Preview to describe the current configuration audibly.
- Improved labeling for expand/collapse actions in the Version History screen.
- Fixed missing content descriptions on navigation and edit icon buttons.

Closes #17

* fix(service): ignore notifications showing package name as content (#28)

- Implemented strict check in `isJunkNotification` to block notifications where Title or Text equals the Package Name.
- This prevents 'placeholder' notifications (e.g. 'com.whatsapp') from overwriting valid content on the Island.
- Logs ignored placeholders for debugging.

Closes #7

* fix(deps): downgrade DataStore to resolve boot persistence issues (#29)

- Downgraded `androidx.datastore:datastore-preferences` from 1.2.0 to 1.1.7.
- The 1.2.0 update introduced a regression on HyperOS/MIUI devices where preference files were not readable immediately after boot, causing the app to reset to the Onboarding screen and lose saved configurations.
- Reverting to the stable 1.1.x release restores reliable data persistence across reboots.

Closes #5

* Updating PTBR translation (#30)

Atualização da tradução com a versão mais recente da branch 'dev'

* Added Korean translation (#26)

* fix(service): ignore placeholder notifications containing package name (#31)

- Updated `isJunkNotification` logic in `NotificationReaderService`.
- Now filters out notifications where the Title or Text contains the package name (case-insensitive), rather than just exact matches.
- This prevents the Dynamic Island from displaying raw package strings (e.g., "com.whatsapp checking...") during background updates.

Closes #7

* feat(blocklist): add spoiler and privacy protection and redesign config sheet (#32)

- Implemented Blocked Terms logic: Users can now define words to block globally or per-app to prevent spoilers or unwanted notifications.
- Redesigned `AppConfigBottomSheet`: Replaced the tabbed layout with a vertical list using expandable cards. This fixes the "bouncy" animation issues when switching sections.
- Added `GlobalBlocklistScreen` as a central hub for managing filters.
- Added `BlocklistAppListScreen` to configure rules for specific apps, displaying active rule counts per app.
- Updated `NotificationReaderService` to filter notifications based on effective blocked terms (Global + App Specific).
- Standardized UI: App list items in the blocklist settings now use consistent Card styling.

Closes #6

* fix(ui): update library and clarify settings UX

- Updated `hyperisland-kit` to 0.3.3 to resolve Issue #9 (Shade visibility bug).
- Redesigned `IslandSettingsControl`:
  - Updated text descriptions to clearly explain 'Float' (Heads-up) vs 'Shade' (System Panel) behavior.
  - Improved Timeout Slider: Now displays seconds (0-10s) clearly in the header and uses full width for easier adjustment.
- Updated English and Spanish translations.

Closes #9

* feat(onboarding): enforce HyperOS 3 requirement and improve device info

- Updated `CompatibilityPage` to strictly block the "Next" button if the OS is older than HyperOS 3.0.
- Added logic to `DeviceUtils` to detect HyperOS 3.0 on Android 15 (API 35) to future-proof against base OS updates.
- Implemented `getDeviceMarketName` to display readable model names (e.g., "Xiaomi 14") instead of model codes.
- Added a specific UI warning for users on China ROMs regarding potential stability issues.
- Updated the Autostart permission description to clarify that the app cannot automatically verify if the permission is granted.

Closes #11

* docs(release): update changelog resources for v0.3.0 "The Global Update"

- Added comprehensive release notes for version 0.3.0 in English and Spanish.
- Highlighted key features: "Hidden Notification" (Shade toggle), Navigation Customization, and Spoiler Protection.
- Added acknowledgments for community contributions regarding new language support (Portuguese, Polish, Korean).
- Updated version title to "The Global Update".

* Update PL translation for 0.3.0 (#34)

* Add Ukrainian translation (#37)

* Updating PTBR translation for v0.3.0 (#38)

Atualizando para a versão 0.3.0

* docs(release): update changelog resources for v0.3.0 "The Global Update"

- Added comprehensive release notes for version 0.3.0 in English and Spanish.
- Highlighted key features: "Hidden Notification" (Shade toggle), Navigation Customization, and Spoiler Protection.
- Added acknowledgments for community contributions regarding new language support (Portuguese, Polish, Korean).
- Updated version title to "The Global Update".

* Add missing 0.3.0 Ukrainian strings (#42)

(additionally mention Ukrainian translation in changelog)

* feat(data): migrate preference storage from DataStore to Room (#43)

- Replaced Jetpack DataStore with Room (SQLite) to resolve persistence instability and file locking issues observed on HyperOS devices during boot.
- Implemented `AppDatabase`, `SettingsDao`, and `AppSetting` entity to store key-value pairs reliably.
- Rewrote `AppPreferences` to interface with the database while maintaining the existing Flow API for the UI.
- Added a one-time migration mechanism in `AppPreferences` to automatically transfer existing settings from the legacy DataStore file to the new Room database, ensuring no data loss for current users.
- Updated build configuration to include KSP and Room dependencies, and resolved dependency conflicts.

Closes #40

* fix(service): enable blocked terms filtering logic

- Connected the Blocked Terms data layer to the `NotificationReaderService`.
- Previously, terms defined in the UI were saved but ignored by the service.
- Implemented Global Blocklist check in `isJunkNotification` (Synchronous) to drop spam immediately.
- Implemented App-Specific Blocklist check in `processAndPost` (Asynchronous) to handle per-app spoiler protection.

Closes #6, Closes #39

* Updated changelog to add support for Ukrainian

* Fixed text buttons and custom actions.

---------

Co-authored-by: Daniel Ramos <69496904+NIICKTCHUNS@users.noreply.github.com>
Co-authored-by: AlexKoala <alexkoala@alexkoala.com>
Co-authored-by: Kacper Skrzypek <kacper@miuipolska.pl>
Co-authored-by: Denys <80550709+ItzDFPlayer@users.noreply.github.com>

* Update README with new features and localization info

Enhanced features section with new capabilities and improved language support.

* Add files

* Add Russian localization strings

Added Russian localization strings for the application.

* Update

* Update

* Update

* Update

* Update

* Update 2

* Update 2

* Update 2

* Update 2

* Add German localization to strings.xml

Added German localization strings for the app.

* Korean translation addition

* Update 2

* u

* Add German translations

* Delete app/src/main/res/values-deu directory

* Update 2

* Update strings.xml

* Update strings.xml

Removed Russian and German language options from the list.

* Update strings.xml

Removed Russian and German language options from the strings.

* Update strings.xml

Removed Russian and German language options from the strings.

* Update strings.xml

* Update strings.xml

Removed Russian and German language options from the list.

* Update strings.xml

Removed Russian and German language options from the list.

* Update strings.xml

* -</resources>

Updated privacy strings to clarify offline processing and security.

* Update Ukrainian

Added new strings for privacy settings, backup options, and language selection in the Ukrainian localization.

* Update Russian

* Update Português Brasileiro

Added new strings for privacy, backup, and language settings.

* Update polski

Added new strings for privacy, language options, backup, and UI updates.

* Fix polski

Corrected the capitalization of language names in Polish localization.

* Update Korean

Added Korean localization strings for backup, privacy, and optimization features.

* fix español

Updated privacy title and description strings in Spanish.

* Update Deutsch

* fix Polish

---------

Co-authored-by: David Df <dominguezfondodavid@gmail.com>
Co-authored-by: Daniel Ramos <69496904+NIICKTCHUNS@users.noreply.github.com>
Co-authored-by: AlexKoala <alexkoala@alexkoala.com>
Co-authored-by: Kacper Skrzypek <kacper@miuipolska.pl>
Co-authored-by: Denys <80550709+ItzDFPlayer@users.noreply.github.com>
* Dev (#47)

* Add Brazilian Portuguese translation (#14) (#16)

Primeiro commit para adicionar a tradução para português brasileiro

Co-authored-by: Daniel Ramos <69496904+NIICKTCHUNS@users.noreply.github.com>

* feat(nav): add layout customization and fix text alignment (#18)

- Added `NavCustomizationScreen` with live preview to configure Navigation Island layout.
- Implemented options to customize Left/Right content (Instruction, Distance, ETA) globally or per app.
- Fixed text misalignment bug caused by newline characters in notification extras.
- Updated `NavTranslator` to sanitize inputs and respect new layout configs.
- Added Spanish translations for new settings.

Closes #4

* Add Brazilian Portuguese translation (#14) (#22)

Primeiro commit para adicionar a tradução para português brasileiro

Co-authored-by: Daniel Ramos <69496904+NIICKTCHUNS@users.noreply.github.com>

* feat(a11y): improve TalkBack support and semantic navigation (#24)

- Implemented custom accessibility actions for the App Priority List (Move Up/Down) to allow reordering without drag gestures.
- Added dynamic content descriptions to App List switches and buttons (e.g., "Toggle [App Name]" instead of just "Switch").
- Marked settings group titles as Semantic Headings for faster screen reader navigation.
- Added state descriptions to the Navigation Layout Preview to describe the current configuration audibly.
- Improved labeling for expand/collapse actions in the Version History screen.
- Fixed missing content descriptions on navigation and edit icon buttons.

Closes #17

* fix(service): ignore notifications showing package name as content (#28)

- Implemented strict check in `isJunkNotification` to block notifications where Title or Text equals the Package Name.
- This prevents 'placeholder' notifications (e.g. 'com.whatsapp') from overwriting valid content on the Island.
- Logs ignored placeholders for debugging.

Closes #7

* fix(deps): downgrade DataStore to resolve boot persistence issues (#29)

- Downgraded `androidx.datastore:datastore-preferences` from 1.2.0 to 1.1.7.
- The 1.2.0 update introduced a regression on HyperOS/MIUI devices where preference files were not readable immediately after boot, causing the app to reset to the Onboarding screen and lose saved configurations.
- Reverting to the stable 1.1.x release restores reliable data persistence across reboots.

Closes #5

* Updating PTBR translation (#30)

Atualização da tradução com a versão mais recente da branch 'dev'

* Added Korean translation (#26)

* fix(service): ignore placeholder notifications containing package name (#31)

- Updated `isJunkNotification` logic in `NotificationReaderService`.
- Now filters out notifications where the Title or Text contains the package name (case-insensitive), rather than just exact matches.
- This prevents the Dynamic Island from displaying raw package strings (e.g., "com.whatsapp checking...") during background updates.

Closes #7

* feat(blocklist): add spoiler and privacy protection and redesign config sheet (#32)

- Implemented Blocked Terms logic: Users can now define words to block globally or per-app to prevent spoilers or unwanted notifications.
- Redesigned `AppConfigBottomSheet`: Replaced the tabbed layout with a vertical list using expandable cards. This fixes the "bouncy" animation issues when switching sections.
- Added `GlobalBlocklistScreen` as a central hub for managing filters.
- Added `BlocklistAppListScreen` to configure rules for specific apps, displaying active rule counts per app.
- Updated `NotificationReaderService` to filter notifications based on effective blocked terms (Global + App Specific).
- Standardized UI: App list items in the blocklist settings now use consistent Card styling.

Closes #6

* fix(ui): update library and clarify settings UX

- Updated `hyperisland-kit` to 0.3.3 to resolve Issue #9 (Shade visibility bug).
- Redesigned `IslandSettingsControl`:
  - Updated text descriptions to clearly explain 'Float' (Heads-up) vs 'Shade' (System Panel) behavior.
  - Improved Timeout Slider: Now displays seconds (0-10s) clearly in the header and uses full width for easier adjustment.
- Updated English and Spanish translations.

Closes #9

* feat(onboarding): enforce HyperOS 3 requirement and improve device info

- Updated `CompatibilityPage` to strictly block the "Next" button if the OS is older than HyperOS 3.0.
- Added logic to `DeviceUtils` to detect HyperOS 3.0 on Android 15 (API 35) to future-proof against base OS updates.
- Implemented `getDeviceMarketName` to display readable model names (e.g., "Xiaomi 14") instead of model codes.
- Added a specific UI warning for users on China ROMs regarding potential stability issues.
- Updated the Autostart permission description to clarify that the app cannot automatically verify if the permission is granted.

Closes #11

* docs(release): update changelog resources for v0.3.0 "The Global Update"

- Added comprehensive release notes for version 0.3.0 in English and Spanish.
- Highlighted key features: "Hidden Notification" (Shade toggle), Navigation Customization, and Spoiler Protection.
- Added acknowledgments for community contributions regarding new language support (Portuguese, Polish, Korean).
- Updated version title to "The Global Update".

* Update PL translation for 0.3.0 (#34)

* Add Ukrainian translation (#37)

* Updating PTBR translation for v0.3.0 (#38)

Atualizando para a versão 0.3.0

* docs(release): update changelog resources for v0.3.0 "The Global Update"

- Added comprehensive release notes for version 0.3.0 in English and Spanish.
- Highlighted key features: "Hidden Notification" (Shade toggle), Navigation Customization, and Spoiler Protection.
- Added acknowledgments for community contributions regarding new language support (Portuguese, Polish, Korean).
- Updated version title to "The Global Update".

* Add missing 0.3.0 Ukrainian strings (#42)

(additionally mention Ukrainian translation in changelog)

* feat(data): migrate preference storage from DataStore to Room (#43)

- Replaced Jetpack DataStore with Room (SQLite) to resolve persistence instability and file locking issues observed on HyperOS devices during boot.
- Implemented `AppDatabase`, `SettingsDao`, and `AppSetting` entity to store key-value pairs reliably.
- Rewrote `AppPreferences` to interface with the database while maintaining the existing Flow API for the UI.
- Added a one-time migration mechanism in `AppPreferences` to automatically transfer existing settings from the legacy DataStore file to the new Room database, ensuring no data loss for current users.
- Updated build configuration to include KSP and Room dependencies, and resolved dependency conflicts.

Closes #40

* fix(service): enable blocked terms filtering logic

- Connected the Blocked Terms data layer to the `NotificationReaderService`.
- Previously, terms defined in the UI were saved but ignored by the service.
- Implemented Global Blocklist check in `isJunkNotification` (Synchronous) to drop spam immediately.
- Implemented App-Specific Blocklist check in `processAndPost` (Asynchronous) to handle per-app spoiler protection.

Closes #6, Closes #39

* Updated changelog to add support for Ukrainian

* Fixed text buttons and custom actions.

---------

Co-authored-by: Daniel Ramos <69496904+NIICKTCHUNS@users.noreply.github.com>
Co-authored-by: AlexKoala <alexkoala@alexkoala.com>
Co-authored-by: Kacper Skrzypek <kacper@miuipolska.pl>
Co-authored-by: Denys <80550709+ItzDFPlayer@users.noreply.github.com>

* Update README with new features and localization info

Enhanced features section with new capabilities and improved language support.

* Add files

* Add Russian localization strings

Added Russian localization strings for the application.

* Update

* Update

* Update

* Update

* Update

* Update 2

* Update 2

* Update 2

* Update 2

* Add German localization to strings.xml

Added German localization strings for the app.

* Korean translation addition

* Update 2

* u

* Add German translations

* Delete app/src/main/res/values-deu directory

* Update 2

* Update strings.xml

* Update strings.xml

Removed Russian and German language options from the list.

* Update strings.xml

Removed Russian and German language options from the strings.

* Update strings.xml

Removed Russian and German language options from the strings.

* Update strings.xml

* Update strings.xml

Removed Russian and German language options from the list.

* Update strings.xml

Removed Russian and German language options from the list.

* Update strings.xml

* -</resources>

Updated privacy strings to clarify offline processing and security.

* Update Ukrainian

Added new strings for privacy settings, backup options, and language selection in the Ukrainian localization.

* Update Russian

* Update Português Brasileiro

Added new strings for privacy, backup, and language settings.

* Update polski

Added new strings for privacy, language options, backup, and UI updates.

* Fix polski

Corrected the capitalization of language names in Polish localization.

* Update Korean

Added Korean localization strings for backup, privacy, and optimization features.

* fix español

Updated privacy title and description strings in Spanish.

* Update Deutsch

* fix Polish

* de fix

* ru fix

* uk fix

---------

Co-authored-by: David Df <dominguezfondodavid@gmail.com>
Co-authored-by: Daniel Ramos <69496904+NIICKTCHUNS@users.noreply.github.com>
Co-authored-by: AlexKoala <alexkoala@alexkoala.com>
Co-authored-by: Kacper Skrzypek <kacper@miuipolska.pl>
Co-authored-by: Denys <80550709+ItzDFPlayer@users.noreply.github.com>
D4vidDf and others added 25 commits December 24, 2025 17:56
- Implement `AppCacheManager` to locally persist names and icons of bridged apps, allowing them to remain listed after uninstallation.
- Update `AppListViewModel` to reconstruct app data from cache when detecting missing packages and introduce `isInstalled` state.
- Redesign `AppListItem` to display an "Uninstalled" badge, support placeholder icons for null bitmaps, and disable settings for missing apps.
- Add Pull-to-Refresh functionality to both `ActiveAppsPage` and `LibraryPage` for manual list updates.
- Enhance app categorization logic by prioritizing `ApplicationInfo.category` (API 26+) before falling back to keyword matching.
- Migrate main navigation to Material 3 Expressive `ShortNavigationBar`.
- Update `GlobalBlockListScreen` and dialogs to safely handle nullable app icons.
- Add English and Spanish translations for new UI elements.
- Update `AppListItem` row click action to invoke `onSettingsClick()` instead of toggling the bridged state directly.
- Replace `SavedWidgetsListScreen` with a revamped `SavedAppWidgetsScreen` featuring search, collapsible app groups, and pull-to-refresh.
- Implement `AnimatedContent` for smooth transitions in `HomeScreen` and dynamic visibility for system bars during navigation.
- Update `StandardTranslator` to map notification actions to text buttons and hidden actions instead of footer actions.
- Add "Show on Island" trigger and improved preview measurement in widget list items.
- Introduce "BETA" labeling across widget picker and design entry points.
- Add localization strings for new widget management UI.
- Upgrade `hyperislandKit` to 0.4.4.
- Implement two-way dismissal sync in `NotificationReaderService` to cancel source notifications and clean up orphaned group summaries upon island dismissal.
- Add `EXTRA_ORIGINAL_KEY` persistence to notification extras to maintain tracking across service restarts.
- Update `BaseTranslator` to handle `RemoteInput` actions and support redirecting reply clicks to app launch.
- Configure `StandardTranslator` to display reply actions and map them to the content intent.
- Refactor `CallTranslator`, `NavTranslator`, and `ProgressTranslator` to use centralized theme constants for colors and icons.
- Fix missing `other` quantity in plural string resources.
- Introduce job tracking to cancel pending tasks immediately when a notification is removed, preventing "ghost" islands.
- Implement `ensureValidSbn` with a 150ms debounce for suspicious notifications (title/text equals package name) to resolve UI glitches.
- Bypass validation delays for notifications with progress bars to ensure smooth updates for downloads.
- Remove arbitrary time-based throttling in favor of coroutine cancellation to improve responsiveness.
- Add a final safety check against `activeNotifications` before posting to ensure the source still exists.
- Update junk filter to strictly ignore case-insensitive matches between content and package name (fixes #66).

Closed #69
…andling

- Implement `resolveTitle` and `resolveText` to intelligently fallback to `EXTRA_TITLE_BIG` and `EXTRA_BIG_TEXT` when standard fields are missing or resemble the package name.
- Add immediate cancellation of processing jobs in `onNotificationRemoved` to prevent "ghost" notifications.
- Introduce a final existence check against active notifications before displaying to handle race conditions during processing.
- Bump application version to `0.4.0-dev06`.
- Update `StandardTranslator` to accept resolved `title` and `text` parameters explicitly instead of extracting them internally.
- Refactor `NotificationReaderService` to intelligently resolve titles, prioritizing `EXTRA_TITLE_BIG` if the standard title is missing or matches the package name.
- Implement fallback logic to restore titles from the previous cached state or use the App Label if resolution fails.
- Add strict validation to abort processing if the final title is empty and no progress bar is present.
- Add detailed debug logging for raw notification extras to assist with troubleshooting.
- Clean up unused comments and optimize cache map declarations.
* feat(theme): implement theme engine, creator UI, and import logic

- Implement `ThemeRepository` to manage JSON-based `.hbr` theme packages, including Zip import/export logic via `FileProvider`.
- Add `RulesEngine` to `NotificationReaderService` for intercepting notifications via regex/package rules to enforce layouts or overrides.
- Introduce `ThemeManagerScreen` and `ThemeCreatorScreen` for managing installed themes and building new ones with live previews.
- Add `ThemeInstallerActivity` to handle external theme file intents.
- Refactor all translators (`Call`, `Nav`, `Progress`, `Standard`) to dynamically load assets and colors from the active `HyperTheme`.
- Implement per-app overrides for highlight colors and custom action icons.
- Integrate Kotlin Serialization for theme configuration parsing.

* feat(theme): implement advanced theme creation and overhaul installer

- Introduce `ThemeCreatorScreen` and sub-screens (`ColorsScreen`, `IconsScreen`, `ThemeAppScreen`) for granular control over colors, icon shapes, and app-specific overrides.
- Implement `ThemePreviews` to visualize changes to notifications, calls, and action buttons in real-time within the creator UI.
- Update `ThemeModels` to support advanced configuration: customizable icon shapes (`GlobalConfig`), detailed call styling (`CallModule`), and per-app action overrides.
- Refactor `ThemeViewModel` to manage creator state, handle asset staging (icons, shapes), and persist themes with the updated JSON structure.
- Enhance `ThemeInstallerActivity` to detect system theme (light/dark) and use dynamic colors, while adopting a transparent activity style for a dialog-like experience.
- Update `BaseTranslator` and subclasses (`Standard`, `Nav`, `Call`, `Progress`) to apply theme-defined shapes and padding to action icons using `applyThemeToActionIcon`.
- Add `IconsScreen` logic to toggle between full and minimal modes, adjust icon padding, and select from preset shapes (Circle, Square, Squircle, etc.).
- Add localization strings for all new creator UI elements, shape names, and installer dialogs.
- Bump application version to `0.4.0-dev08`.
Updated the translation to the latest 0.4.0-dev08
- **Design Screen**: Completely revamped UI using Material 3 Carousels (`HeroCarousel`, `MultiBrowseCarousel`), added theme/widget preview cards, and split logic into stateful/stateless composables.
- **Navigation**: Moved `TopAppBar` ownership from `HomeScreen` to individual tabs (`ActiveAppsPage`, `LibraryPage`) to fix window inset handling and allow per-screen actions.
- **Settings UI**: Standardized `InfoScreen` and `GlobalSettingsScreen` using new `SettingsSection` and shaped card components; added Settings entry point to all main tabs.
- **Dependencies**: Updated Kotlin to 2.3.0, Material 3 to 1.5.0-alpha11, Compose UI to 1.10.0, and Activity to 1.12.2.
- Added localization resources for the new personalization UI and bumped version to `0.4.0-dev09`.
- Create `crowdin.yml` to define the configuration for the Crowdin localization platform.
- Configure source file path as `app/src/main/res/values/strings.xml`.
- Set translation output pattern to `app/src/main/res/values-%android_code%/%original_file_name%`.
- Map project ID and API token to environment variables.
- Fix `InfoScreen` logic to correctly update state when dismissing the `LanguageSelectorDialog`.
- Update `ThemeAppScreen` to use `pluralStringResource` for action counts, ensuring correct singular/plural formatting.
- Extract the hardcoded "Design" tab label in `HomeScreen` to string resources.
- Restructure and rename resource directories to include specific region codes (e.g., `values-ru` to `values-ru-rRU`).
- Add new localizations for Catalan, Galician, and Turkish, and sync missing theme/widget keys across all supported languages.
- Update `values-pt-rBR/strings.xml` to fully translate the application interface from English to Portuguese.
- Add localization for the Theme Engine, including the Theme Installer, Creator UI, and shape/color customization screens.
- Localize strings for Backup & Restore features, Widget configuration, and Island behavior settings.
- Translate changelog entries for versions 0.1.0 through 0.3.1.
- Update keywords for notification parsing (Downloads, Navigation, Calls) and system compatibility checks.
…slator

- Update `WidgetTranslator` to fetch the actual widget provider label and package icon instead of using hardcoded placeholders.
- Convert application icons to `Bitmap` and register them as `HyperPicture` assets for the Island notification.
- Set the Island title to the specific widget label (e.g., app name) rather than "Widget Active".
- Add fallback logic to use the default icon if the package icon cannot be retrieved.

Close #77
)

* feat(theme): add global action styling and call shape customization

- **Global Actions**: Implemented "Global Actions" in Theme Creator to style notification buttons based on keywords (e.g., "Reply"), supporting custom colors and display modes (Icon/Text).
- **Call Styling**: Added support for independent shape configuration for Answer and Decline buttons in `ThemeViewModel` and `CallTranslator`.
- **Dynamic Colors**: Integrated `Palette` API in `BaseTranslator` to dynamically extract highlight colors from app icons when "Use App Colors" is enabled.
- **Theme Creator**: Refactored UI into modular content screens (`ActionsDetailContent`, `CallStyleSheetContent`) and fixed scrolling layout issues in the main list.
- **Service**: Added `ACTION_RELOAD_THEME` intent handling to `NotificationReaderService` for hot-swapping themes without restart.
- **Design Hub**: Updated `DesignScreen` to support editing user themes directly from the carousel and differentiated "Add/Browse" action cards.

* feat(theme): implement save-and-apply logic and service reloading

- **ThemeViewModel**: Updated `saveTheme` to accept an `apply` flag, allowing immediate activation upon save.
- **Service Integration**: Added logic to broadcast `NotificationReaderService.ACTION_RELOAD_THEME` when activating, resetting, or saving the active theme to ensure the notification listener updates immediately.
- **Theme Creator UI**: Introduced a confirmation dialog in `ThemeCreatorScreen` allowing users to choose between "Save & Apply" or "Save Only" for new or inactive themes.
- **Resources**: Added string resources for the new "Apply Theme" dialog.
- **Refactoring**: Cleaned up comments and imports in `ThemeViewModel` and `ThemeCreatorScreen`.
This commit introduces significant enhancements to the theme engine, allowing for richer metadata, custom branding, and a more integrated user experience.

-   **Theme Metadata**: Themes now support additional metadata fields:
    -   `description`: A detailed description for the theme.
    -   `customIcon`: A user-uploadable icon (thumbnail) for each theme.
    -   `lockedForEditing`: A flag to prevent users from modifying a theme.
    -   `customShareLink`: A URL to redirect users to, instead of the default export action.
-   **Icon Management**:
    -   Implemented logic in `ThemeViewModel` to handle theme icon uploads. Custom icons are automatically resized to 512x512 PNGs for consistency and stored locally within the theme's directory.
    -   Updated `ThemeManagerScreen` and `DesignScreen` to asynchronously load and display these custom icons on theme cards, falling back to the highlight color if no icon is present.
-   **Theme Creator UI (`ThemeMetadataSheet`)**:
    -   Overhauled the "Edit Info" bottom sheet with a new design.
    -   Added a clickable image preview area to select or change the theme's icon using the photo picker.
    -   Included input fields for the new `description` and `customShareLink` metadata.
-   **UI & UX Improvements**:
    -   On the `ThemeManagerScreen`, the share button now intelligently switches to a link icon and opens the `customShareLink` if one is defined.
    -   The edit button is now hidden for themes that are locked for editing.
    -   Adjusted padding on top app bar icons in `ActiveAppsPage` and `LibraryPage` for better alignment.
-   **Refactoring**:
    -   Moved `getExpressiveShape` and related `ShapeStyle` classes from `ThemeCreatorScreen.kt` to a new standalone file, `ThemeShapes.kt`, for better code organization.
    -   Added extensive localization strings to support the new metadata and UI elements across all supported languages.
* refactor(theme): introduce per-app overrides and modularize creator UI

This commit refactors the theme engine to support granular, per-app theme overrides and separates the global and app-specific theme editing into distinct, modular UI components.

- **App-Specific Overrides**:
    - Implemented `AppThemeOverride` to allow customizing `highlightColor`, `iconShapeId`, `iconPaddingPercent`, and `callConfig` on a per-application basis, inheriting from the global theme by default.
    - Added a new "Apps" section in the Theme Creator to manage these overrides.
    - App-specific customizations are now saved within the theme file and automatically applied by the notification service.

- **New `AppThemeEditor` Screen**:
    - Created a dedicated `AppThemeEditorScreen.kt` for editing app-specific overrides.
    - Users can navigate from the main creator to this screen, which provides a focused interface for customizing an app's colors, icons, call styles, and actions independently of the global theme.
    - The editor uses the same composable modules as the global creator but binds them to app-specific state in the `ThemeViewModel`.

- **`ThemeViewModel` Refactoring**:
    - Introduced a separate state management section for app-specific editing (`editingAppPackage`, `appHighlightColor`, etc.) to buffer changes without affecting the global theme state until saved.
    - Added logic (`loadAppForEditing`, `saveAppChanges`) to manage the lifecycle of app override editing.
    - `saveTheme` logic now correctly persists `appOverrides` and handles asset staging for both global and app-specific icons.
    - Centralized the notification service reload logic into a single `reloadNotificationService()` method.

- **UI Component Modularization**:
    - Refactored `ThemeCreatorScreen` and its sub-components (`ColorsDetailContent`, `IconsDetailContent`, `CallStyleSheetContent`, `ActionsDetailContent`) to be stateless. They now receive state via parameters and emit changes through callbacks, allowing them to be reused in both the global and app-specific editors.
    - The old `ThemeAppScreen.kt` has been removed and its functionality is replaced by the new, more robust `AppsDetailContent.kt` and `AppThemeEditorScreen.kt`.
    - The preview carousel (`SharedThemePreview`) is now a shared, stateless component that dynamically reflects either global or app-specific settings.

- **New String Resources**:
    - Added strings to support the new app editor UI, including titles (`Edit App`), subtitles (`Using Global Default`, `Custom Color Set`), and descriptions.

* fix(theme): improve state management and override logic

This commit introduces critical fixes to the theme creation and app override workflow, ensuring state consistency, preventing data loss, and correctly applying app-specific styles.

-   **State Management in Theme Creator**:
    -   A unique `currentEditingThemeId` is now generated immediately when creating a new theme (`clearCreatorState`) and persists throughout the editing session. This prevents the ID from changing and ensures app override edits are saved to the correct theme draft.
    -   Saving app-specific overrides now correctly passes the `currentEditingThemeId` to `saveTheme`, ensuring changes are persisted to the theme being edited.
    -   The `saveTheme` function logic has been updated to prioritize an explicit ID, then the session ID, before generating a new one as a fallback.
    -   In `ThemeCreatorScreen`, `LaunchedEffect` logic is now more robust, preventing the editor from reloading and overwriting unsaved changes when the view recomposes.

-   **App Override & Editor Improvements**:
    -   Implemented an "Unsaved Changes" dialog in the `AppThemeEditorScreen`. When backing out, users are now prompted to either save or discard their app-specific customizations.
    -   The color selection logic in `BaseTranslator` has been enhanced to correctly respect the `useAppColors` flag set on a per-app basis. It now properly cascades from app-specific settings to global settings.
    -   Shape and padding resolution logic (`resolveShape`, `resolvePadding`) has been centralized in `BaseTranslator` and is now correctly applied in `NavTranslator` and `BaseTranslator`'s action processing, ensuring per-app icon shapes are respected.
    -   `CallTranslator` now correctly resolves call button colors and shapes from app-specific overrides before falling back to global theme settings.

-   **Bug Fixes & Refinements**:
    -   Fixed an issue where returning from the `AppThemeEditor` would incorrectly clear the state of a new theme draft in `ThemeCreatorScreen`.
    -   Removed redundant comments and cleaned up code in `ThemeCreatorScreen` and `ThemeViewModel`.
    -   Added new string resources for the "Unsaved Changes" and "Discard" dialog options.

* refactor(theme): extract strings and simplify creator state

This commit refactors the `ThemeViewModel` to improve string resource handling and simplify state management within the theme creator.

- **String Resource Extraction**:
    - Extracted hardcoded strings "Share Theme" and "My Theme" into `strings.xml`.
    - In `ThemeViewModel`, these strings are now loaded from the application context to support localization and improve maintainability. The `share_theme` string is pre-loaded for use in the share intent chooser, and the `my_theme` string is used as a default theme name upon saving.

- **State Management Simplification**:
    - Removed redundant logic and comments related to `currentEditingThemeId` management. The logic now consistently relies on the ID being set when a theme creation or editing session begins.
    - In `clearCreatorState()`, the `themeName` field is now cleared, delegating the responsibility of showing a placeholder (like "My Theme") to the UI layer.
This commit introduces localization for Indonesian and Turkish, refactors default island behavior, and ensures consistency across all existing language files.

-   **New Languages**:
    -   Added full translation support for Bahasa Indonesia (`in-rID`).
    -   Added "Bahasa Indonesia" and "Türkçe" to the in-app language selector.

-   **String Synchronization & Cleanup**:
    -   Updated all existing translation files (`de`, `es`, `pl`, `pt`, `ru`, `uk`, `ko`, etc.) to match the latest English strings. This includes adding missing translations for the theme creator, app overrides, and other recent features.
    -   Corrected inconsistent translations, replacing many localized strings for common UI elements like "Search apps…", "Pending…", and setting descriptions with their English equivalents to maintain clarity until fully translated.
    -   Removed obsolete, language-specific keywords from the `progress_finish_keywords` array in the default `strings.xml`.

-   **Default Behavior Change**:
    -   Adjusted the default `IslandConfig` values:
        -   `isFloat` (Heads-up Popup) now defaults to `false` instead of `true`.
        -   `timeout` (Auto-Close Delay) has been increased from 5 to 10 seconds.
    -   The string for "Auto-Minimize Delay" has been globally updated to "Auto-Close delay" for better clarity.
This commit refactors the changelog presentation by replacing the old `ChangelogDialog` with a new `ChangelogSheet` and improving the underlying HTML tag parsing logic.

-   **New `ChangelogSheet` Component**:
    -   Introduced a new `ChangelogSheet.kt` component, a modern `ModalBottomSheet` that presents "What's New" information upon app updates.
    -   The sheet features a prominent header with an icon, the new version name, and a scrollable content area for the changelog text.
    -   In `MainActivity.kt`, the old `ChangelogDialog` has been replaced with the new `ChangelogSheet`.

-   **Enhanced HTML Tag Parsing**:
    -   Created a new `StringExt.kt` utility file and moved the HTML parsing logic into it from the now-deleted `ComposeExtensions.kt`.
    -   The `parseBold()` extension function was rewritten to more robustly handle `<b>` and `<i>` tags (and their XML-escaped equivalents like `&lt;b&gt;`).
    -   The new parser correctly handles nested tags, ensuring both bold and italic text render correctly within the changelog.

-   **Content Updates**:
    -   Added new string resources for the version 0.4.0 changelog (`changelog_0_4_0`), detailing major features like the Theme Engine, Widget Support, and Notification Engine 2.0.
    -   Updated `ChangelogHistoryScreen.kt` to include the 0.4.0 version log.
    -   Bumped the application `versionCode` to 11 and `versionName` to "0.4.0".
This commit introduces localized changelog strings for the "Customization Update" (version 0.4.0) across multiple languages.

- **New Strings**: Added `title_0_4_0` and `changelog_0_4_0` to the `strings.xml` files for default English and various localizations (de, es, in, ko, pl, pt, ru, tr, uk).
- **Changelog Content**: The new strings detail major features and improvements in version 0.4.0, including the Theme Engine, Widget Support, Notification Engine 2.0 rewrite, and a visual refresh.
- **Localization Cleanup**: Removed redundant, non-English keywords from the `status_download_complete_words` string array in several language files to improve clarity and maintainability.
This commit resolves a critical layout issue with navigation notifications and improves UI state management and localization.

-   **Navigation Notification Fix**:
    -   In `NavTranslator`, navigation notifications have been reverted to use the standard `setBaseInfo` (Type 1) layout.
    -   This fixes a bug where action buttons (like "Exit") were not being displayed in the notification shade because the custom `setCoverInfo` layout does not support them.
    -   The implementation now correctly builds a standard notification with a title, content (ETA • Distance), and properly attached `HyperAction` buttons.
    -   The island layout and progress bar functionality remain unchanged.

-   **State Handling in `HomeScreen`**:
    -   Fixed a potential crash in the `AppConfigBottomSheet` by safely handling a nullable state variable (`configApp`).
    -   A local, non-null variable is now used within lambdas to prevent race conditions where the state could become null before the click listener is executed.

-   **Localization Updates**:
    -   Refined and improved translations for Brazilian Portuguese (`pt-rBR`) and Polish (`pl-rPL`) to enhance clarity and provide more natural phrasing.
    -   Corrected untranslated strings, such as the search hint, in both language files.
    -   Updated changelogs for version 0.4.0 to use translated text instead of English.

-   **Version Bump**:
    -   Incremented the `versionCode` to 12.
* docs(readme): update for version 0.4.0 and add Slovak

This commit updates the `README.md` file to reflect the major feature release of version 0.4.0 and adds Slovak to the list of supported languages.

- **README Overhaul**:
    - Updated the project description to highlight the new Theme Engine and Widget support.
    - Added a "version 0.4.0" badge and a link to the new Crowdin translation project.
    - Greatly expanded the "Features" section with details on the Theme Engine (Creator, Smart Colors, Icon Shaping, Per-app Overrides) and Widgets.
    - Added a new "For Developers" section explaining how to create and distribute themes via `.hbr` files and the `APPLY_THEME` Intent API.
    - Replaced old screenshots with new ones showcasing the Theme Creator and Widget Picker.
    - Updated the list of supported languages, including a new entry for Slovak and revised contribution links.

- **Language Addition**:
    - Added "Slovenčina" (Slovak) to the in-app language selector in `InfoScreen.kt`.

* docs(readme): update for version 0.4.0 and add Slovak

This commit updates the `README.md` file to reflect the major feature release of version 0.4.0 and adds Slovak to the list of supported languages.

- **README Overhaul**:
    - Updated the project description to highlight the new Theme Engine and Widget support.
    - Added a "version 0.4.0" badge and a link to the new Crowdin translation project.
    - Greatly expanded the "Features" section with details on the Theme Engine (Creator, Smart Colors, Icon Shaping, Per-app Overrides) and Widgets.
    - Added a new "For Developers" section explaining how to create and distribute themes via `.hbr` files and the `APPLY_THEME` Intent API.
    - Replaced old screenshots with new ones showcasing the Theme Creator and Widget Picker.
    - Updated the list of supported languages, including a new entry for Slovak and revised contribution links.

- **Language Addition**:
    - Added "Slovenčina" (Slovak) to the in-app language selector in `InfoScreen.kt`.

* Delete screenshots/settings.png

* Delete screenshots/home.png

* Add files via upload

* Rename widgets.png to widget_picker.png

* Add files via upload
…dependencies

This commit introduces localization improvements for Spanish and Indonesian, updates a dependency, and increments the application version code.

- **Localization Updates**:
    - **Spanish (`es-rES`)**: Corrected minor typographical errors and improved phrasing in the version 0.4.0 changelog. This includes fixing a typo in "aplicaciones" and adjusting the emoji for Turkish support.
    - **Indonesian (`in-rID`)**: Translated several previously untranslated strings, including the search hint, status messages ("Pending", "Auto-Close delay"), and setting descriptions. The entire changelog for version 0.4.0 has also been fully translated.

- **Dependency Updates**:
    - The Android Gradle Plugin (AGP) has been updated from version `8.13.1` to `8.13.2`.

- **Version Bump**:
    - Incremented the `versionCode` from 13 to 14.
@D4vidDf D4vidDf self-assigned this Jan 22, 2026
@D4vidDf D4vidDf added the enhancement New feature or request label Jan 22, 2026
@D4vidDf D4vidDf changed the title Dev 0.4.0 Update Jan 22, 2026
# Conflicts:
#	README.md
#	app/build.gradle.kts
#	app/src/main/java/com/d4viddf/hyperbridge/MainActivity.kt
#	app/src/main/java/com/d4viddf/hyperbridge/service/translators/BaseTranslator.kt
#	app/src/main/java/com/d4viddf/hyperbridge/service/translators/NavTranslator.kt
#	app/src/main/java/com/d4viddf/hyperbridge/ui/components/AppListItem.kt
#	app/src/main/java/com/d4viddf/hyperbridge/ui/screens/home/HomeScreen.kt
#	app/src/main/java/com/d4viddf/hyperbridge/ui/screens/settings/ChangelogHistoryScreen.kt
#	app/src/main/java/com/d4viddf/hyperbridge/ui/screens/settings/GlobalBlockListScreen.kt
#	app/src/main/java/com/d4viddf/hyperbridge/ui/screens/settings/InfoScreen.kt
#	app/src/main/res/values-es/strings.xml
#	app/src/main/res/values-ko/strings.xml
#	app/src/main/res/values-pl/strings.xml
#	app/src/main/res/values-pt-rBR/strings.xml
#	app/src/main/res/values-uk-rUA/strings.xml
#	app/src/main/res/values/strings.xml
#	app/src/main/res/values/themes.xml
#	gradle/libs.versions.toml
@D4vidDf D4vidDf merged commit a3cbb71 into master Jan 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants