🚀 **OShin New CI Build!**
Chore(Build): Remove local Expressa AAR dependencies
This commit removes the locally included and dependencies.
These libraries, previously included as local files from the directory, are no longer required by the project.
### Key Changes:
* **:**
* Removed the declarations for and .
* **:**
* The and files have been deleted from the repository.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/0df1b5696212ba6861f30f9c7041109ef6f635e3)
Chore(Build): Remove local Expressa AAR dependencies
This commit removes the locally included and dependencies.
These libraries, previously included as local files from the directory, are no longer required by the project.
### Key Changes:
* **:**
* Removed the declarations for and .
* **:**
* The and files have been deleted from the repository.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/0df1b5696212ba6861f30f9c7041109ef6f635e3)
GitHub
Chore(Build): Remove local Expressa AAR dependencies · suqi8/OShin@0df1b56
This commit removes the locally included `expressa-components-release.aar` and `expressa-core-release.aar` dependencies.
These libraries, previously included as local `.aar` files from the `app/li...
These libraries, previously included as local `.aar` files from the `app/li...
🚀 **OShin New CI Build!**
Refactor(ViewModel): Add backward compatibility for legacy Slider values
This commit enhances to ensure backward compatibility for preferences that were previously stored as values.
The logic for initializing component states has been updated to handle potential s when reading values. It now attempts to read the value as a first. If that fails, it catches the exception and gracefully falls back to reading the value as an , which is then converted to a .
This prevents crashes and ensures a smooth transition for users who have saved settings from older versions of the app where sliders used integer types.
### Key Changes ():
* **Type-Safe Reading**:
* A block now wraps the logic for reading preference values.
* It prioritizes reading the value as a using .
* If a occurs, it reads the legacy value as an with and converts it to a .
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/861a4a5a28cedd702dc7863fde2ba76635d052e4)
Refactor(ViewModel): Add backward compatibility for legacy Slider values
This commit enhances to ensure backward compatibility for preferences that were previously stored as values.
The logic for initializing component states has been updated to handle potential s when reading values. It now attempts to read the value as a first. If that fails, it catches the exception and gracefully falls back to reading the value as an , which is then converted to a .
This prevents crashes and ensures a smooth transition for users who have saved settings from older versions of the app where sliders used integer types.
### Key Changes ():
* **Type-Safe Reading**:
* A block now wraps the logic for reading preference values.
* It prioritizes reading the value as a using .
* If a occurs, it reads the legacy value as an with and converts it to a .
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/861a4a5a28cedd702dc7863fde2ba76635d052e4)
GitHub
Refactor(ViewModel): Add backward compatibility for legacy Slider values · suqi8/OShin@861a4a5
This commit enhances `featureViewModel.kt` to ensure backward compatibility for `Slider` preferences that were previously stored as `Int` values.
The logic for initializing component states has be...
The logic for initializing component states has be...
🚀 **OShin New CI Build!**
Refactor(SystemUI): Relocate and rename View Controller to Status Bar Layout
This commit refactors the View Controller feature into a more appropriately named and organized Status Bar Layout module. The core functionality of inspecting and modifying the visibility of status bar elements remains, but the underlying code has been restructured for better clarity and maintainability.
The feature has been moved from a general package to a more specific package. All related UI components, ViewModels, and data models have been similarly relocated and renamed, and the feature is now presented as Status Bar Layout in the UI.
### Key Changes:
* **File Relocation and Renaming:**
* has been deleted and recreated as , with updated package paths and class names.
* UI screens ( -> ), ViewModels ( -> ), and data models (, ) have been moved to a new package.
* **Hook & Preferences Update:**
* The hook class is now .
* SharedPreferences storage has been updated from to to follow the new modular convention.
* **UI & Navigation:**
* The feature title in the UI has been changed from View Controller to Status Bar Layout.
* Navigation routes have been updated from to .
* The entry point has been moved from the main function screen to the SystemUI feature category.
* **ViewModel Enhancement:**
* A 1-second timeout has been added to the function in . If the hook doesn't respond within this time, the loading state is cancelled to prevent the UI from getting stuck.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/9779f47e696aa4caf7740e23409227598e06362e)
Refactor(SystemUI): Relocate and rename View Controller to Status Bar Layout
This commit refactors the View Controller feature into a more appropriately named and organized Status Bar Layout module. The core functionality of inspecting and modifying the visibility of status bar elements remains, but the underlying code has been restructured for better clarity and maintainability.
The feature has been moved from a general package to a more specific package. All related UI components, ViewModels, and data models have been similarly relocated and renamed, and the feature is now presented as Status Bar Layout in the UI.
### Key Changes:
* **File Relocation and Renaming:**
* has been deleted and recreated as , with updated package paths and class names.
* UI screens ( -> ), ViewModels ( -> ), and data models (, ) have been moved to a new package.
* **Hook & Preferences Update:**
* The hook class is now .
* SharedPreferences storage has been updated from to to follow the new modular convention.
* **UI & Navigation:**
* The feature title in the UI has been changed from View Controller to Status Bar Layout.
* Navigation routes have been updated from to .
* The entry point has been moved from the main function screen to the SystemUI feature category.
* **ViewModel Enhancement:**
* A 1-second timeout has been added to the function in . If the hook doesn't respond within this time, the loading state is cancelled to prevent the UI from getting stuck.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/9779f47e696aa4caf7740e23409227598e06362e)
GitHub
Refactor(SystemUI): Relocate and rename View Controller to Status Bar… · suqi8/OShin@9779f47
… Layout
This commit refactors the "View Controller" feature into a more appropriately named and organized "Status Bar Layout" module. The core functionality of...
This commit refactors the "View Controller" feature into a more appropriately named and organized "Status Bar Layout" module. The core functionality of...
🚀 **OShin New CI Build!**
Refactor(SystemUI): Use hashCode to identify views in View Controller
This commit refactors the View Controller feature to use a view's instead of its resource ID for identification and communication between the app and the SystemUI hook. This change significantly improves the reliability of view targeting, especially for views that do not have a unique resource ID.
Previously, identifying views relied on their string-based resource ID, which was unreliable as many views lack one. This could lead to failures in highlighting or applying visibility changes. By switching to the integer , every view can be uniquely and reliably identified.
### Key Changes:
* **:**
* The data model now includes to store the view's hash code.
* ** (Hook):**
* The view tree parsing logic now captures and stores the of each view in the .
* A new recursive function, , has been implemented to locate views within the status bar hierarchy using their hash code.
* The method now accepts an integer hash code instead of a string ID to find and highlight the target view. A of is used as a signal to clear any active highlight.
* The listener () has been updated to expect an (hash code) instead of a .
* ** & (App UI):**
* The app now sends the view's to the hook when requesting to highlight a view.
* A new method was added to the ViewModel to explicitly send a hash code, providing a clearer way to cancel highlighting.
* **:**
* Updated ProGuard rules to keep classes in the package, ensuring the model is not obfuscated.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/5dda3d79c6e7fe50ab1efdc0ec7676295c7fcf5d)
Refactor(SystemUI): Use hashCode to identify views in View Controller
This commit refactors the View Controller feature to use a view's instead of its resource ID for identification and communication between the app and the SystemUI hook. This change significantly improves the reliability of view targeting, especially for views that do not have a unique resource ID.
Previously, identifying views relied on their string-based resource ID, which was unreliable as many views lack one. This could lead to failures in highlighting or applying visibility changes. By switching to the integer , every view can be uniquely and reliably identified.
### Key Changes:
* **:**
* The data model now includes to store the view's hash code.
* ** (Hook):**
* The view tree parsing logic now captures and stores the of each view in the .
* A new recursive function, , has been implemented to locate views within the status bar hierarchy using their hash code.
* The method now accepts an integer hash code instead of a string ID to find and highlight the target view. A of is used as a signal to clear any active highlight.
* The listener () has been updated to expect an (hash code) instead of a .
* ** & (App UI):**
* The app now sends the view's to the hook when requesting to highlight a view.
* A new method was added to the ViewModel to explicitly send a hash code, providing a clearer way to cancel highlighting.
* **:**
* Updated ProGuard rules to keep classes in the package, ensuring the model is not obfuscated.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/5dda3d79c6e7fe50ab1efdc0ec7676295c7fcf5d)
GitHub
Refactor(SystemUI): Use hashCode to identify views in View Controller · suqi8/OShin@5dda3d7
This commit refactors the "View Controller" feature to use a view's `hashCode()` instead of its resource ID for identification and communication between the app and the Sy...
🚀 **OShin New CI Build!**
Feat(Settings): Add backup and restore functionality
This commit introduces a comprehensive settings management feature, allowing users to back up, restore, and clear all module configurations.
The new functionality is accessible via a Configuration Management card on the About screen. It enables users to export all current settings to a JSON file and import them from a backup, providing a convenient way to save and transfer setups. A Clear Configuration option is also included to reset all settings to their default values.
To support this, a has been created to handle the logic for exporting (serializing to JSON), importing (deserializing and applying to SharedPreferences), and clearing settings.
### Key Changes:
* ** (New):**
* Introduced a new Hilt to manage configuration logic.
* : Gathers all preferences from registered features, serializes them to a JSON string, and writes them to a user-selected file.
* : Reads a JSON file, deserializes the settings, and commits them to the appropriate SharedPreferences files.
* : Iterates through all known preference files and clears their contents.
* ** (UI):**
* Added a Configuration Management card to the About screen.
* Integrated to handle file creation () for exports and file selection () for imports.
* The UI now includes options for Export, Import, and Clear configurations, which are linked to the new .
* **:**
* Added new string resources for the titles and summaries of the configuration management options.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/c723e98c047bc278d85723299e982ac40ac45351)
Feat(Settings): Add backup and restore functionality
This commit introduces a comprehensive settings management feature, allowing users to back up, restore, and clear all module configurations.
The new functionality is accessible via a Configuration Management card on the About screen. It enables users to export all current settings to a JSON file and import them from a backup, providing a convenient way to save and transfer setups. A Clear Configuration option is also included to reset all settings to their default values.
To support this, a has been created to handle the logic for exporting (serializing to JSON), importing (deserializing and applying to SharedPreferences), and clearing settings.
### Key Changes:
* ** (New):**
* Introduced a new Hilt to manage configuration logic.
* : Gathers all preferences from registered features, serializes them to a JSON string, and writes them to a user-selected file.
* : Reads a JSON file, deserializes the settings, and commits them to the appropriate SharedPreferences files.
* : Iterates through all known preference files and clears their contents.
* ** (UI):**
* Added a Configuration Management card to the About screen.
* Integrated to handle file creation () for exports and file selection () for imports.
* The UI now includes options for Export, Import, and Clear configurations, which are linked to the new .
* **:**
* Added new string resources for the titles and summaries of the configuration management options.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/c723e98c047bc278d85723299e982ac40ac45351)
GitHub
Feat(Settings): Add backup and restore functionality · suqi8/OShin@c723e98
This commit introduces a comprehensive settings management feature, allowing users to back up, restore, and clear all module configurations.
The new functionality is accessible via a "Con...
The new functionality is accessible via a "Con...
🚀 **OShin New CI Build!**
Refactor(Settings): Improve number type handling in SharedPreferences
This commit refactors the to more intelligently handle saving numerical values to .
Previously, different number types (, , , ) were handled in separate branches. This change unifies the logic by treating all of them as . The new implementation checks if a numerical value is a whole number that fits within an . If it is, the value is saved as an ; otherwise, it is saved as a . This approach simplifies the code and prevents floating-point numbers with no fractional part (e.g., ) from being unnecessarily stored as floats.
### Key Changes ():
- **Unified Number Handling**: Replaced separate cases for , , , and with a single case.
- **Intelligent Type-Casting**:
- Checks if a is a whole number ().
- If it is a whole number and within bounds, it is stored as an .
- Otherwise, the number is stored as a .
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/7057bdc99f2c34ea3927e2f719dc7d5fbac91cf2)
Refactor(Settings): Improve number type handling in SharedPreferences
This commit refactors the to more intelligently handle saving numerical values to .
Previously, different number types (, , , ) were handled in separate branches. This change unifies the logic by treating all of them as . The new implementation checks if a numerical value is a whole number that fits within an . If it is, the value is saved as an ; otherwise, it is saved as a . This approach simplifies the code and prevents floating-point numbers with no fractional part (e.g., ) from being unnecessarily stored as floats.
### Key Changes ():
- **Unified Number Handling**: Replaced separate cases for , , , and with a single case.
- **Intelligent Type-Casting**:
- Checks if a is a whole number ().
- If it is a whole number and within bounds, it is stored as an .
- Otherwise, the number is stored as a .
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/7057bdc99f2c34ea3927e2f719dc7d5fbac91cf2)
GitHub
Refactor(Settings): Improve number type handling in SharedPreferences · suqi8/OShin@7057bdc
This commit refactors the `SettingsViewModel` to more intelligently handle saving numerical values to `SharedPreferences`.
Previously, different number types (`Int`, `Float`, `Long`, `Double`) wer...
Previously, different number types (`Int`, `Float`, `Long`, `Double`) wer...
🚀 **OShin New CI Build!**
Refactor(Settings): Localize toast messages and improve preference handling
This commit refactors the to improve code quality and internationalization.
All hardcoded toast message strings for settings import, export, and clear operations have been replaced with string resources from . This enables easier localization and maintenance.
Additionally, the preference-writing logic has been updated to use instead of . This performs the save operation asynchronously, preventing potential UI thread blockage during file I/O.
### Key Changes:
* **:**
* Replaced hardcoded toast messages for success and failure of export, import, and clear actions with new string resources (, , etc.).
* Changed to for to handle saving preferences off the main thread.
* Removed redundant comments.
* **:**
* Added new string resources for success and failure notifications related to settings management.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/7b6b934b3d8dff84d1d199becd325a3f2b94a48d)
Refactor(Settings): Localize toast messages and improve preference handling
This commit refactors the to improve code quality and internationalization.
All hardcoded toast message strings for settings import, export, and clear operations have been replaced with string resources from . This enables easier localization and maintenance.
Additionally, the preference-writing logic has been updated to use instead of . This performs the save operation asynchronously, preventing potential UI thread blockage during file I/O.
### Key Changes:
* **:**
* Replaced hardcoded toast messages for success and failure of export, import, and clear actions with new string resources (, , etc.).
* Changed to for to handle saving preferences off the main thread.
* Removed redundant comments.
* **:**
* Added new string resources for success and failure notifications related to settings management.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/7b6b934b3d8dff84d1d199becd325a3f2b94a48d)
GitHub
Refactor(Settings): Localize toast messages and improve preference ha… · suqi8/OShin@7b6b934
…ndling
This commit refactors the `SettingsViewModel` to improve code quality and internationalization.
All hardcoded toast message strings for settings import, export, and clear operations have ...
This commit refactors the `SettingsViewModel` to improve code quality and internationalization.
All hardcoded toast message strings for settings import, export, and clear operations have ...
🚀 **OShin New CI Build!**
Feat(Settings): Add dynamic Oplus feature controller
This commit introduces a new feature that dynamically scans the Oplus Settings application for hidden feature flags and allows users to control them.
It scans for boolean methods within and , presenting them in a new Features screen. Users can then choose to force-enable, force-disable, or leave each feature at its default state. This enables advanced customization by unlocking experimental or region-locked functionalities.
The feature list is discovered using DexKit and communicated to the app via . To improve performance, the list is cached in SharedPreferences and only rescanned on demand.
### Key Changes:
* ** (New Hook):**
* A new hook for .
* Uses DexKit to scan for methods in and .
* Listens for a request from the app via to start the scan and sends the discovered method names back.
* Hooks the discovered methods to override their return value based on user configuration (/).
* ** & (New UI):**
* Adds a new screen and ViewModel to display and manage the discovered features.
* The screen requests the feature list from the hook and displays it in a .
* The ViewModel manages state, caches the feature list, and saves user choices to SharedPreferences.
* **UI & Navigation:**
* A new Features entry is added to the Settings page.
* Refactored the SystemUI features by grouping all status bar customizations under a new Status Bar sub-page for better organization.
* Updated preference keys and navigation routes to reflect the new structure.
* **Refactor & Cleanup:**
* Moved and removed the now-redundant hook from the package into a more organized structure.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/02e7e737053a127a48bed569a2ba579ee164805b)
Feat(Settings): Add dynamic Oplus feature controller
This commit introduces a new feature that dynamically scans the Oplus Settings application for hidden feature flags and allows users to control them.
It scans for boolean methods within and , presenting them in a new Features screen. Users can then choose to force-enable, force-disable, or leave each feature at its default state. This enables advanced customization by unlocking experimental or region-locked functionalities.
The feature list is discovered using DexKit and communicated to the app via . To improve performance, the list is cached in SharedPreferences and only rescanned on demand.
### Key Changes:
* ** (New Hook):**
* A new hook for .
* Uses DexKit to scan for methods in and .
* Listens for a request from the app via to start the scan and sends the discovered method names back.
* Hooks the discovered methods to override their return value based on user configuration (/).
* ** & (New UI):**
* Adds a new screen and ViewModel to display and manage the discovered features.
* The screen requests the feature list from the hook and displays it in a .
* The ViewModel manages state, caches the feature list, and saves user choices to SharedPreferences.
* **UI & Navigation:**
* A new Features entry is added to the Settings page.
* Refactored the SystemUI features by grouping all status bar customizations under a new Status Bar sub-page for better organization.
* Updated preference keys and navigation routes to reflect the new structure.
* **Refactor & Cleanup:**
* Moved and removed the now-redundant hook from the package into a more organized structure.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/02e7e737053a127a48bed569a2ba579ee164805b)
GitHub
Feat(Settings): Add dynamic Oplus feature controller · suqi8/OShin@02e7e73
This commit introduces a new feature that dynamically scans the Oplus "Settings" application for hidden feature flags and allows users to control them.
It scans for boolean metho...
It scans for boolean metho...
🚀 **OShin New CI Build!**
Chore: Add status_bar route for feature navigation
This commit adds a new entry for to the function route map in .
This change maps the key to its corresponding string resource, , preparing for the addition of a new Status Bar feature section in the app's navigation.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/39571c4a929bf7776b7a4a009558304d1dba1ddc)
Chore: Add status_bar route for feature navigation
This commit adds a new entry for to the function route map in .
This change maps the key to its corresponding string resource, , preparing for the addition of a new Status Bar feature section in the app's navigation.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/39571c4a929bf7776b7a4a009558304d1dba1ddc)
GitHub
Chore: Add "status_bar" route for feature navigation · suqi8/OShin@39571c4
This commit adds a new entry for `"status_bar"` to the function route map in `GetFuncRoute.kt`.
This change maps the key `"status_bar"` to its corresponding str...
This change maps the key `"status_bar"` to its corresponding str...
🚀 **OShin New CI Build!**
Chore: Update app version name to 15.8
This commit updates the application's version name format in the file.
The version name has been changed from to . This new version will be combined with the Git commit count and hash to form the final version name (e.g., ).
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/c763686bedfb9dcae752fde08eefae0dca8aeb9d)
Chore: Update app version name to 15.8
This commit updates the application's version name format in the file.
The version name has been changed from to . This new version will be combined with the Git commit count and hash to form the final version name (e.g., ).
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/c763686bedfb9dcae752fde08eefae0dca8aeb9d)
GitHub
Chore: Update app version name to 15.8 · suqi8/OShin@c763686
This commit updates the application's version name format in the `app/build.gradle.kts` file.
The version name has been changed from `15.7beta1` to `15.8`. This new version will be combine...
The version name has been changed from `15.7beta1` to `15.8`. This new version will be combine...
🚀 **OShin New CI Build!**
Fix(AppDetail): Refactor Remove Security Check hook
This commit refactors the hook for removing the security check during app installation in the application.
The previous implementation, which targeted multiple methods and view models, has been replaced with a more direct approach. The new hook targets a single static method, , and forces it to return . This effectively and cleanly disables the installation security check.
Additionally, the code for the Remove Recommendations feature has been commented out, indicating it is likely deprecated or non-functional.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/a8e990f600b8559ab5d5226e4017833f39851e0a)
Fix(AppDetail): Refactor Remove Security Check hook
This commit refactors the hook for removing the security check during app installation in the application.
The previous implementation, which targeted multiple methods and view models, has been replaced with a more direct approach. The new hook targets a single static method, , and forces it to return . This effectively and cleanly disables the installation security check.
Additionally, the code for the Remove Recommendations feature has been commented out, indicating it is likely deprecated or non-functional.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/a8e990f600b8559ab5d5226e4017833f39851e0a)
GitHub
Fix(AppDetail): Refactor "Remove Security Check" hook · suqi8/OShin@a8e990f
This commit refactors the hook for removing the security check during app installation in the `com.oplus.appdetail` application.
The previous implementation, which targeted multiple methods and vi...
The previous implementation, which targeted multiple methods and vi...