🚀 OShin New CI Build!
Refactor(Settings): Disable fingerprint animation hook
This commit comments out the hook for .
Key Changes:
- In , the entire hook block targeting has been commented out. This hook was previously responsible for modifying fingerprint enrollment animations ( and ) by replacing them with custom animations from the module's assets.
This change temporarily disables the custom fingerprint enrollment animation feature.
🔗 查看本次提交
Refactor(Settings): Disable fingerprint animation hook
This commit comments out the hook for .
Key Changes:
- In , the entire hook block targeting has been commented out. This hook was previously responsible for modifying fingerprint enrollment animations ( and ) by replacing them with custom animations from the module's assets.
This change temporarily disables the custom fingerprint enrollment animation feature.
🔗 查看本次提交
GitHub
Refactor(Settings): Disable fingerprint animation hook · suqi8/OShin@492c19c
This commit comments out the hook for `com.oplus.settings.feature.fingerprint.NewFingerEnrollActivity`.
**Key Changes:**
- In `settings.kt`, the entire hook block targeting `NewFingerEnrollActivi...
**Key Changes:**
- In `settings.kt`, the entire hook block targeting `NewFingerEnrollActivi...
🚀 OShin New CI Build!
Refactor: Centralize feature UI with a declarative data model
重构中,普通用户无需下载
This commit introduces a major refactoring of the feature settings UI. It replaces dozens of individual, hardcoded Composable screen files with a centralized, declarative data model. A single composable now dynamically renders pages based on definitions from a .
This change decouples UI structure from rendering logic, making it significantly easier to add, modify, and search for features.
Key Changes:
- Declarative UI Model ():
- Introduced a set of and models to define UI components declaratively:
- : Defines a full screen with title, target apps, and a list of UI blocks ().
- : Represents blocks on a page, like or .
- : Defines individual components within a card, such as , , , (for navigation), (for image selection), and .
- : A flexible model for titles, supporting string resources, plain text, or dynamic app names.
- : Allows UI items to be shown or hidden based on the state of other items.
- Feature Registry ():
- A new central object that maps a route ID (e.g., ) to its corresponding .
- This registry is now the single source of truth for all feature screens.
- Initial definitions for and () have been created as examples of the new structure.
- Dynamic Feature Screen ( & ):
- Created , a generic composable that takes a and renders the entire UI by fetching its definition from the .
- A new Hilt-powered manages state for the dynamic screen. It loads initial values from , handles state updates, and evaluates display conditions.
- The navigation graph in now uses a single dynamic route to handle all feature pages.
- Module/Search Refactoring ():
- The main module list () has been refactored into its own package ().
- now manages the state for this screen, including search logic and app list style.
- The search index is now built once at startup by iterating through the , making search functionality more efficient and scalable.
- Search results now navigate to the dynamic route with a parameter to scroll to and highlight the specific setting.
- Component Abstraction:
- Reusable components like , , , , and have been refactored to be stateless. They now receive their state and lambdas from the ViewModel, following unidirectional data flow principles.
- Code Deletion:
- A large number of individual feature screen files (e.g., , , , , etc.) have been deleted. Their functionality will be progressively migrated to the new declarative model.
- was moved and its old version deleted.
- Dependencies:
- Added to support Hilt injection into ViewModels for composable navigation destinations.
🔗 查看本次提交
重构中,普通用户无需下载
Refactor: Centralize feature UI with a declarative data model
重构中,普通用户无需下载
This commit introduces a major refactoring of the feature settings UI. It replaces dozens of individual, hardcoded Composable screen files with a centralized, declarative data model. A single composable now dynamically renders pages based on definitions from a .
This change decouples UI structure from rendering logic, making it significantly easier to add, modify, and search for features.
Key Changes:
- Declarative UI Model ():
- Introduced a set of and models to define UI components declaratively:
- : Defines a full screen with title, target apps, and a list of UI blocks ().
- : Represents blocks on a page, like or .
- : Defines individual components within a card, such as , , , (for navigation), (for image selection), and .
- : A flexible model for titles, supporting string resources, plain text, or dynamic app names.
- : Allows UI items to be shown or hidden based on the state of other items.
- Feature Registry ():
- A new central object that maps a route ID (e.g., ) to its corresponding .
- This registry is now the single source of truth for all feature screens.
- Initial definitions for and () have been created as examples of the new structure.
- Dynamic Feature Screen ( & ):
- Created , a generic composable that takes a and renders the entire UI by fetching its definition from the .
- A new Hilt-powered manages state for the dynamic screen. It loads initial values from , handles state updates, and evaluates display conditions.
- The navigation graph in now uses a single dynamic route to handle all feature pages.
- Module/Search Refactoring ():
- The main module list () has been refactored into its own package ().
- now manages the state for this screen, including search logic and app list style.
- The search index is now built once at startup by iterating through the , making search functionality more efficient and scalable.
- Search results now navigate to the dynamic route with a parameter to scroll to and highlight the specific setting.
- Component Abstraction:
- Reusable components like , , , , and have been refactored to be stateless. They now receive their state and lambdas from the ViewModel, following unidirectional data flow principles.
- Code Deletion:
- A large number of individual feature screen files (e.g., , , , , etc.) have been deleted. Their functionality will be progressively migrated to the new declarative model.
- was moved and its old version deleted.
- Dependencies:
- Added to support Hilt injection into ViewModels for composable navigation destinations.
🔗 查看本次提交
重构中,普通用户无需下载
❤2
🚀 OShin New CI Build!
Refactor(Module): Handle and display not-installed target apps
This commit refactors the module list screen to gracefully handle cases where a feature's target application is not installed on the user's device. Instead of failing silently, it now collects these missing apps and provides a dedicated, noticeable link to a Help page that lists them.
This improves user experience by clearly communicating why certain feature pages might be inaccessible.
### Key Changes:
- State Management ( & ):
- A new set has been added to to track the package names of missing applications.
- A new function in allows the UI to report a missing app, which is then added to the state.
- and data classes have been moved to their own separate files for better organization.
- Module Screen UI ():
- The composable now invokes the callback when a target app for a module entry isn't found.
- A new component appears conditionally at the bottom of the module list, only when is not empty.
- Clicking this arrow navigates the user to a new notice page, passing the list of missing package names as a navigation argument.
- App Not Found Notice Page ():
- The composable has been renamed to and is now a dynamic screen.
- It accepts a string argument from the navigation route.
- It parses this string to display a list of the specific applications that were not found, providing clear feedback to the user.
- Navigation ():
- The route for the notice page has been updated from a static to a dynamic to support passing the list of missing package names.
- Minor UX Improvement ():
- Added and modifiers to the in to provide standard over-scroll and haptic feedback, enhancing the scrolling experience.
重构中,普通用户无需更新
🔗 查看本次提交
Refactor(Module): Handle and display not-installed target apps
This commit refactors the module list screen to gracefully handle cases where a feature's target application is not installed on the user's device. Instead of failing silently, it now collects these missing apps and provides a dedicated, noticeable link to a Help page that lists them.
This improves user experience by clearly communicating why certain feature pages might be inaccessible.
### Key Changes:
- State Management ( & ):
- A new set has been added to to track the package names of missing applications.
- A new function in allows the UI to report a missing app, which is then added to the state.
- and data classes have been moved to their own separate files for better organization.
- Module Screen UI ():
- The composable now invokes the callback when a target app for a module entry isn't found.
- A new component appears conditionally at the bottom of the module list, only when is not empty.
- Clicking this arrow navigates the user to a new notice page, passing the list of missing package names as a navigation argument.
- App Not Found Notice Page ():
- The composable has been renamed to and is now a dynamic screen.
- It accepts a string argument from the navigation route.
- It parses this string to display a list of the specific applications that were not found, providing clear feedback to the user.
- Navigation ():
- The route for the notice page has been updated from a static to a dynamic to support passing the list of missing package names.
- Minor UX Improvement ():
- Added and modifiers to the in to provide standard over-scroll and haptic feedback, enhancing the scrolling experience.
重构中,普通用户无需更新
🔗 查看本次提交
GitHub
Refactor(Module): Handle and display not-installed target apps · suqi8/OShin@82af074
This commit refactors the module list screen to gracefully handle cases where a feature's target application is not installed on the user's device. Instead of failing silently, it n...
🚀 OShin New CI Build!
Refactor(Home): Migrate Home screen to Hilt ViewModel and Repository
This commit refactors the home screen by decoupling the UI from data-fetching logic. It replaces the monolithic composable with a new Hilt-powered and , following modern Android architecture patterns.
The data-fetching logic is now centralized and cached, improving performance and maintainability.
### Key Changes:
- ViewModel-Driven UI:
- Deleted : The original home screen composable, which contained all UI, state management, and data fetching, has been removed.
- Created : A new Hilt ViewModel now manages the home screen's state (). It's responsible for fetching all data (carousel, device status, features) asynchronously.
- Created : A new, stateless composable that renders the UI based on the collected from the .
- Repository and Dependency Injection:
- Introduced : Created a new repository ( and ) to act as a single source of truth for searchable feature items. It caches the feature list after the first load to optimize performance.
- Created : A new Dagger Hilt module has been added to provide the implementation.
- Updated : The module/search screen's ViewModel now injects and uses to get the searchable item index, centralizing the logic and benefiting from the cache.
- Home Screen Feature Enhancements:
- Random Features: The home screen now displays a shuffled list of features fetched from the , providing users with discoverable functionality.
- UI Cleanup: Minor UI adjustments were made, including adding overscroll effects to lists and cleaning up some code paths.
- Code Organization:
- Home-related files (, , and data models) are now organized under the and packages.
- The file was renamed to to follow Kotlin style conventions.
重构中,普通用户无需更新
🔗 查看本次提交
Refactor(Home): Migrate Home screen to Hilt ViewModel and Repository
This commit refactors the home screen by decoupling the UI from data-fetching logic. It replaces the monolithic composable with a new Hilt-powered and , following modern Android architecture patterns.
The data-fetching logic is now centralized and cached, improving performance and maintainability.
### Key Changes:
- ViewModel-Driven UI:
- Deleted : The original home screen composable, which contained all UI, state management, and data fetching, has been removed.
- Created : A new Hilt ViewModel now manages the home screen's state (). It's responsible for fetching all data (carousel, device status, features) asynchronously.
- Created : A new, stateless composable that renders the UI based on the collected from the .
- Repository and Dependency Injection:
- Introduced : Created a new repository ( and ) to act as a single source of truth for searchable feature items. It caches the feature list after the first load to optimize performance.
- Created : A new Dagger Hilt module has been added to provide the implementation.
- Updated : The module/search screen's ViewModel now injects and uses to get the searchable item index, centralizing the logic and benefiting from the cache.
- Home Screen Feature Enhancements:
- Random Features: The home screen now displays a shuffled list of features fetched from the , providing users with discoverable functionality.
- UI Cleanup: Minor UI adjustments were made, including adding overscroll effects to lists and cleaning up some code paths.
- Code Organization:
- Home-related files (, , and data models) are now organized under the and packages.
- The file was renamed to to follow Kotlin style conventions.
重构中,普通用户无需更新
🔗 查看本次提交
GitHub
Refactor(Home): Migrate Home screen to Hilt ViewModel and Repository · suqi8/OShin@91c0a5f
This commit refactors the home screen by decoupling the UI from data-fetching logic. It replaces the monolithic `Main_Home.kt` composable with a new Hilt-powered `HomeViewModel` and `FeatureReposit...
🚀 OShin New CI Build!
Refactor(UI): Add padding parameter to component items for flexible layout
This commit introduces an parameter to all and composable components (, , , , , , etc.). This change allows for more flexible and granular control over the spacing of items within a .
The new padding is applied in before the , enabling adjustments to the outer spacing of each component row without affecting its internal layout.
Key Changes:
:
Added a new parameter.
Applied this padding to the root modifier, allowing external control over component spacing.
Component Propagation:
The parameter has been threaded through all higher-level components that build on , including , , , , , and .
:
Now dynamically calculates and applies to each item rendered within a .
Items at the start or end of a list, or single items, receive different padding values to improve visual spacing within the card.
:
The default vertical for has been changed from to , as this spacing is now managed externally by the items themselves.
:
Updated keys for to and to for consistency.
普通用户无需更新
🔗 查看本次提交
Refactor(UI): Add padding parameter to component items for flexible layout
This commit introduces an parameter to all and composable components (, , , , , , etc.). This change allows for more flexible and granular control over the spacing of items within a .
The new padding is applied in before the , enabling adjustments to the outer spacing of each component row without affecting its internal layout.
Key Changes:
:
Added a new parameter.
Applied this padding to the root modifier, allowing external control over component spacing.
Component Propagation:
The parameter has been threaded through all higher-level components that build on , including , , , , , and .
:
Now dynamically calculates and applies to each item rendered within a .
Items at the start or end of a list, or single items, receive different padding values to improve visual spacing within the card.
:
The default vertical for has been changed from to , as this spacing is now managed externally by the items themselves.
:
Updated keys for to and to for consistency.
普通用户无需更新
🔗 查看本次提交
GitHub
Refactor(UI): Add padding parameter to component items for flexible l… · suqi8/OShin@40c94fd
…ayout
This commit introduces an `externalPadding` parameter to all `fun*` and `Super*` composable components (`FunArrow`, `FunSwitch`, `FunSlider`, `FunDropdown`, `FunPicSele`, `FunString`, etc.)...
This commit introduces an `externalPadding` parameter to all `fun*` and `Super*` composable components (`FunArrow`, `FunSwitch`, `FunSlider`, `FunDropdown`, `FunPicSele`, `FunString`, etc.)...
🚀 OShin New CI Build!
Refactor: Standardize component names and clean up UI code
This commit refactors several components for consistency, cleans up unused code, and makes minor UI improvements.
The composable has been renamed to to align with Kotlin's naming conventions for composable functions. All calls have been updated accordingly. Additionally, the composable has been renamed to .
### Key Changes:
- Component Renaming:
- is now . An overloaded version that directly handles has also been added.
- is now .
- UI & Code Cleanup:
- Deleted : The Recent Update screen and its navigation entry in have been completely removed. The code was commented out and is now deleted.
- : Switched from the old (with a typo) to the new composable.
- : Corrected the call from to and wrapped the item rendering logic in a to fix layout issues where the separator line was not being displayed correctly.
- : Replaced with the extension function for consistency.
- Component Enhancements:
- : Added an optional composable parameter to allow displaying an icon or other content to the left of the title, similar to other components.
- & : Enabled the parameter to display avatars and icons in the contributor and about lists, which were previously commented out.
🔗 查看本次提交
Refactor: Standardize component names and clean up UI code
This commit refactors several components for consistency, cleans up unused code, and makes minor UI improvements.
The composable has been renamed to to align with Kotlin's naming conventions for composable functions. All calls have been updated accordingly. Additionally, the composable has been renamed to .
### Key Changes:
- Component Renaming:
- is now . An overloaded version that directly handles has also been added.
- is now .
- UI & Code Cleanup:
- Deleted : The Recent Update screen and its navigation entry in have been completely removed. The code was commented out and is now deleted.
- : Switched from the old (with a typo) to the new composable.
- : Corrected the call from to and wrapped the item rendering logic in a to fix layout issues where the separator line was not being displayed correctly.
- : Replaced with the extension function for consistency.
- Component Enhancements:
- : Added an optional composable parameter to allow displaying an icon or other content to the left of the title, similar to other components.
- & : Enabled the parameter to display avatars and icons in the contributor and about lists, which were previously commented out.
🔗 查看本次提交
GitHub
Refactor: Standardize component names and clean up UI code · suqi8/OShin@3e5bf99
This commit refactors several components for consistency, cleans up unused code, and makes minor UI improvements.
The `funSwitch` composable has been renamed to `FunSwitch` to align with Kotlin&am...
The `funSwitch` composable has been renamed to `FunSwitch` to align with Kotlin&am...
🚀 OShin New CI Build!
feat(Module): Sort module list by app name
This commit updates the module list screen to sort entries alphabetically by their application name, rather than using a hardcoded order. This improves usability and makes it easier for users to find a specific app's feature page.
To achieve this without blocking the UI, the sorting logic is performed asynchronously.
### Key Changes:
- :
- The function now initiates an asynchronous task () to fetch and sort the module entries.
- A new function has been created. It asynchronously resolves the display name for each 's package name.
- It uses to ensure correct alphabetical sorting that respects the user's locale (e.g., for Chinese characters).
- The module list is only updated in the UI state after the sorting is complete, while other tasks like building the search index continue in parallel.
🔗 查看本次提交
feat(Module): Sort module list by app name
This commit updates the module list screen to sort entries alphabetically by their application name, rather than using a hardcoded order. This improves usability and makes it easier for users to find a specific app's feature page.
To achieve this without blocking the UI, the sorting logic is performed asynchronously.
### Key Changes:
- :
- The function now initiates an asynchronous task () to fetch and sort the module entries.
- A new function has been created. It asynchronously resolves the display name for each 's package name.
- It uses to ensure correct alphabetical sorting that respects the user's locale (e.g., for Chinese characters).
- The module list is only updated in the UI state after the sorting is complete, while other tasks like building the search index continue in parallel.
🔗 查看本次提交
GitHub
feat(Module): Sort module list by app name · suqi8/OShin@b861843
This commit updates the module list screen to sort entries alphabetically by their application name, rather than using a hardcoded order. This improves usability and makes it easier for users to fi...
🚀 OShin New CI Build!
feat(InCallUI): Add feature page for call interface
This commit introduces a new feature page for the Android In-Call UI ().
The new page is built using the declarative UI model and is now registered in the , making it accessible from the main module list.
### Key Changes:
- New Feature Page ():
- A new page definition has been created for the target application .
- It includes an initial toggle to Hide Call Ringtone, allowing users to mute the ringtone via a preference switch.
- Feature Registration ():
- The page definition has been added to the registry, mapping it to its corresponding feature set.
- A new for has been added to the main list, making the page visible to users.
- Developer Template ():
- A new template file has been added to serve as a basic boilerplate for creating future feature pages, demonstrating the structure of a .
🔗 查看本次提交
feat(InCallUI): Add feature page for call interface
This commit introduces a new feature page for the Android In-Call UI ().
The new page is built using the declarative UI model and is now registered in the , making it accessible from the main module list.
### Key Changes:
- New Feature Page ():
- A new page definition has been created for the target application .
- It includes an initial toggle to Hide Call Ringtone, allowing users to mute the ringtone via a preference switch.
- Feature Registration ():
- The page definition has been added to the registry, mapping it to its corresponding feature set.
- A new for has been added to the main list, making the page visible to users.
- Developer Template ():
- A new template file has been added to serve as a basic boilerplate for creating future feature pages, demonstrating the structure of a .
🔗 查看本次提交
GitHub
feat(InCallUI): Add feature page for call interface · suqi8/OShin@a7f3faa
This commit introduces a new feature page for the Android In-Call UI (`com.android.incallui`).
The new page is built using the declarative UI model and is now registered in the `FeatureRegistry`, ...
The new page is built using the declarative UI model and is now registered in the `FeatureRegistry`, ...