🚀 OShin New CI Build!
Refactor(Hook): Update PhoneManager hooks to use KavaRef and float types
This commit refactors the hooks for and to align with updated API practices and improve type precision.
The manual method finding syntax () has been replaced with the more concise from the KavaRef library. Additionally, preference values for custom score and custom animation duration are now correctly handled as types instead of , allowing for more precise configurations.
### Key Changes:
- API Modernization:
- Replaced the verbose block with for locating and hooking methods, simplifying the codebase.
- Removed now-unused imports for , , , and .
- Type Correction ( & ):
- The preferences for and are now fetched using instead of .
- The default/sentinel value has been changed from to to match the new float type.
- The custom score value passed to the hooked method is now a .
🔗 查看本次提交
Refactor(Hook): Update PhoneManager hooks to use KavaRef and float types
This commit refactors the hooks for and to align with updated API practices and improve type precision.
The manual method finding syntax () has been replaced with the more concise from the KavaRef library. Additionally, preference values for custom score and custom animation duration are now correctly handled as types instead of , allowing for more precise configurations.
### Key Changes:
- API Modernization:
- Replaced the verbose block with for locating and hooking methods, simplifying the codebase.
- Removed now-unused imports for , , , and .
- Type Correction ( & ):
- The preferences for and are now fetched using instead of .
- The default/sentinel value has been changed from to to match the new float type.
- The custom score value passed to the hooked method is now a .
🔗 查看本次提交
GitHub
Refactor(Hook): Update PhoneManager hooks to use KavaRef and float types · suqi8/OShin@d4ffbdd
This commit refactors the hooks for `com.oplus.phonemanager` and `com.coloros.phonemanager` to align with updated API practices and improve type precision.
The manual method finding syntax (`metho...
The manual method finding syntax (`metho...
🚀 OShin New CI Build!
Chore: Add MMKV as a new dependency
This commit introduces as a new dependency to the project.
MMKV is a high-performance, key-value storage framework. Adding it to the project lays the groundwork for its future use, likely for managing application settings or caching data more efficiently than traditional methods like SharedPreferences.
### Key Changes:
:
Added the library with version to the version catalog.
:
Included the new dependency in the app module's implementation configuration.
🔗 查看本次提交
Chore: Add MMKV as a new dependency
This commit introduces as a new dependency to the project.
MMKV is a high-performance, key-value storage framework. Adding it to the project lays the groundwork for its future use, likely for managing application settings or caching data more efficiently than traditional methods like SharedPreferences.
### Key Changes:
:
Added the library with version to the version catalog.
:
Included the new dependency in the app module's implementation configuration.
🔗 查看本次提交
GitHub
Chore: Add MMKV as a new dependency · suqi8/OShin@c378a78
This commit introduces `com.tencent:mmkv` as a new dependency to the project.
MMKV is a high-performance, key-value storage framework. Adding it to the project lays the groundwork for its future u...
MMKV is a high-performance, key-value storage framework. Adding it to the project lays the groundwork for its future u...
❤3
🚀 OShin New CI Build!
feat(Hook): Add DexKitCacheManager for persistent method caching
This commit introduces , a new utility to persistently cache DexKit search results using MMKV, significantly speeding up hook initialization on subsequent app launches.
The manager implements a cache-then-search strategy. It stores method descriptors found by DexKit and invalidates this cache only when the host application's version code changes. This avoids costly and time-consuming dex rescans for every process start, greatly improving performance.
### Key Changes:
:
Introduced a new singleton object, , to handle the entire caching lifecycle.
Uses MMKV for persistent, multi-process storage of method descriptors.
Caches results on a per-app-version basis, automatically clearing outdated caches when an application is updated.
Hooks into the application's lifecycle to initialize MMKV and DexKit resources in a timely manner.
Employs a to ensure that hook execution waits for the cache manager to be fully initialized, preventing race conditions.
:
Added a call to in the 's method to ensure MMKV is initialized for the main app process.
🔗 查看本次提交
feat(Hook): Add DexKitCacheManager for persistent method caching
This commit introduces , a new utility to persistently cache DexKit search results using MMKV, significantly speeding up hook initialization on subsequent app launches.
The manager implements a cache-then-search strategy. It stores method descriptors found by DexKit and invalidates this cache only when the host application's version code changes. This avoids costly and time-consuming dex rescans for every process start, greatly improving performance.
### Key Changes:
:
Introduced a new singleton object, , to handle the entire caching lifecycle.
Uses MMKV for persistent, multi-process storage of method descriptors.
Caches results on a per-app-version basis, automatically clearing outdated caches when an application is updated.
Hooks into the application's lifecycle to initialize MMKV and DexKit resources in a timely manner.
Employs a to ensure that hook execution waits for the cache manager to be fully initialized, preventing race conditions.
:
Added a call to in the 's method to ensure MMKV is initialized for the main app process.
🔗 查看本次提交
GitHub
feat(Hook): Add DexKitCacheManager for persistent method caching · suqi8/OShin@e51335c
This commit introduces `DexKitCacheManager`, a new utility to persistently cache DexKit search results using MMKV, significantly speeding up hook initialization on subsequent app launches.
The man...
The man...
🚀 **OShin New CI Build!**
Chore(CI): Remove unused parameters from Telegram notification step
This commit cleans up the GitHub Actions workflow by removing two deprecated or unused parameters from the Telegram notification step.
The and parameters are no longer necessary for the and have been removed to simplify the workflow configuration.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/3b8b5394b9299b03811e90cc96e879b3b767e9be)
Chore(CI): Remove unused parameters from Telegram notification step
This commit cleans up the GitHub Actions workflow by removing two deprecated or unused parameters from the Telegram notification step.
The and parameters are no longer necessary for the and have been removed to simplify the workflow configuration.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/3b8b5394b9299b03811e90cc96e879b3b767e9be)
GitHub
Chore(CI): Remove unused parameters from Telegram notification step · suqi8/OShin@3b8b539
This commit cleans up the `android.yml` GitHub Actions workflow by removing two deprecated or unused parameters from the Telegram notification step.
The `debug: true` and `format: markdown` parame...
The `debug: true` and `format: markdown` parame...
🚀 **OShin New CI Build!**
Refactor(Hooks): Use float types for status bar Wi-Fi settings
This commit refactors the Wi-Fi status bar hook to use types for retrieving font size and speed threshold preferences, improving precision.
Previously, settings for font sizes (, , , ) and the slow speed threshold were fetched from preferences as values. This commit updates the logic to fetch them as s using and then casts them to for compatibility with their usage. The default sentinel value has also been updated from to to match the new type.
### Key Changes ():
- **Type Correction**:
- , , , , and preferences are now read using instead of .
- The default value for font sizes has been changed to .
- The default value for is now .
- The retrieved float values are cast to before being assigned to the data class properties.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/869014aea6c3cac3574a1c546008e7661b741ff1)
Refactor(Hooks): Use float types for status bar Wi-Fi settings
This commit refactors the Wi-Fi status bar hook to use types for retrieving font size and speed threshold preferences, improving precision.
Previously, settings for font sizes (, , , ) and the slow speed threshold were fetched from preferences as values. This commit updates the logic to fetch them as s using and then casts them to for compatibility with their usage. The default sentinel value has also been updated from to to match the new type.
### Key Changes ():
- **Type Correction**:
- , , , , and preferences are now read using instead of .
- The default value for font sizes has been changed to .
- The default value for is now .
- The retrieved float values are cast to before being assigned to the data class properties.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/869014aea6c3cac3574a1c546008e7661b741ff1)
GitHub
Refactor(Hooks): Use float types for status bar Wi-Fi settings · suqi8/OShin@869014a
This commit refactors the Wi-Fi status bar hook to use `Float` types for retrieving font size and speed threshold preferences, improving precision.
Previously, settings for font sizes (`upload`, `...
Previously, settings for font sizes (`upload`, `...
🚀 **OShin New CI Build!**
Feat(SystemUI): Add View Controller for status bar customization
This commit introduces the View Controller, a powerful new feature that allows users to inspect and modify the visibility of individual views within the SystemUI status bar.
The feature presents a hierarchical tree of all views in the status bar, allowing users to select any view with an ID and set its visibility to Default, Force Show, Force Hide, or Force Invisible. This enables deep customization, such as hiding unwanted icons or system indicators.
Communication between the app and the SystemUI process is handled robustly via YukiHookAPI's . The app can request the view tree, and the hook dynamically parses and sends it back. User configurations are saved to SharedPreferences and immediately applied in the SystemUI process.
### Key Changes:
* ** (Hook):**
* A new hook that injects into .
* It hooks to get a reference to the status bar view.
* Recursively parses the status bar's view hierarchy into a serializable tree.
* Listens for commands from the app via to send the view tree, apply visibility configurations, and highlight selected views.
* Applies saved visibility rules (, , ) to target views.
* ** & (App UI):**
* A new screen and ViewModel to manage the feature's UI and logic.
* The screen displays the view hierarchy in a , with indentation to represent the tree structure.
* It allows nodes to be expanded or collapsed to navigate the tree.
* Clicking a view opens a dialog to change its visibility mode.
* The ViewModel handles state management, data channel communication, and saving configurations.
* ** & (Models):**
* New data models to represent a view's properties (ID, type, visibility, bounds) and its user-defined configuration.
* **Navigation & Integration:**
* A new entry for View Controller has been added to the main function screen.
* The feature is registered in the app's navigation graph.
* New string resources for UI text have been added.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/22c55dbd8f2d54e71a5e013b243c493e584c4599)
Feat(SystemUI): Add View Controller for status bar customization
This commit introduces the View Controller, a powerful new feature that allows users to inspect and modify the visibility of individual views within the SystemUI status bar.
The feature presents a hierarchical tree of all views in the status bar, allowing users to select any view with an ID and set its visibility to Default, Force Show, Force Hide, or Force Invisible. This enables deep customization, such as hiding unwanted icons or system indicators.
Communication between the app and the SystemUI process is handled robustly via YukiHookAPI's . The app can request the view tree, and the hook dynamically parses and sends it back. User configurations are saved to SharedPreferences and immediately applied in the SystemUI process.
### Key Changes:
* ** (Hook):**
* A new hook that injects into .
* It hooks to get a reference to the status bar view.
* Recursively parses the status bar's view hierarchy into a serializable tree.
* Listens for commands from the app via to send the view tree, apply visibility configurations, and highlight selected views.
* Applies saved visibility rules (, , ) to target views.
* ** & (App UI):**
* A new screen and ViewModel to manage the feature's UI and logic.
* The screen displays the view hierarchy in a , with indentation to represent the tree structure.
* It allows nodes to be expanded or collapsed to navigate the tree.
* Clicking a view opens a dialog to change its visibility mode.
* The ViewModel handles state management, data channel communication, and saving configurations.
* ** & (Models):**
* New data models to represent a view's properties (ID, type, visibility, bounds) and its user-defined configuration.
* **Navigation & Integration:**
* A new entry for View Controller has been added to the main function screen.
* The feature is registered in the app's navigation graph.
* New string resources for UI text have been added.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/22c55dbd8f2d54e71a5e013b243c493e584c4599)
GitHub
Feat(SystemUI): Add View Controller for status bar customization · suqi8/OShin@22c55db
This commit introduces the "View Controller," a powerful new feature that allows users to inspect and modify the visibility of individual views within the SystemUI status bar.
Th...
Th...
🚀 **OShin New CI Build!**
Chore(Build): Update ProGuard rules to keep models
This commit updates the ProGuard configuration to prevent obfuscation of model classes.
The following rules have been added to :
- : This rule ensures that all classes within the package, along with their members, are preserved during the obfuscation process.
- : This preserves generic type signatures and information about inner classes, which is often necessary for serialization or reflection to work correctly.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/f305216b65ddc251ac7ad45e788f90567882b7c2)
Chore(Build): Update ProGuard rules to keep models
This commit updates the ProGuard configuration to prevent obfuscation of model classes.
The following rules have been added to :
- : This rule ensures that all classes within the package, along with their members, are preserved during the obfuscation process.
- : This preserves generic type signatures and information about inner classes, which is often necessary for serialization or reflection to work correctly.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/f305216b65ddc251ac7ad45e788f90567882b7c2)
GitHub
Chore(Build): Update ProGuard rules to keep models · suqi8/OShin@f305216
This commit updates the ProGuard configuration to prevent obfuscation of model classes.
The following rules have been added to `proguard-rules.pro`:
- `-keep class com.suqi8.oshin.models.** { *; }...
The following rules have been added to `proguard-rules.pro`:
- `-keep class com.suqi8.oshin.models.** { *; }...
🚀 **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...