🚀 **OShin New CI Build!**
Refactor(Core): Centralize app info caching and logic with
This commit introduces a major refactoring to centralize all application information (name, icon, dominant color) fetching and caching. It replaces several disparate and component-specific caching implementations with a single, robust, and lifecycle-aware data layer. This significantly improves performance, reduces code duplication, and enhances state management across the app.
### Key Changes:
* ** (Singleton Repository):**
* A new class has been introduced as a repository.
* It is now the single source of truth for all app metadata (name and icon).
* It uses a for thread-safe in-memory caching, including caching for uninstalled apps to prevent repeated lookups.
* This replaces the old, scattered implementations in and .
* ** (Singleton):**
* A new utility class has been created to handle the conversion of internal feature routes (e.g., ) into human-readable breadcrumbs (e.g., ).
* It leverages to asynchronously resolve app names within routes, replacing the old, hardcoded .
* This logic is now centralized and cleanly separated from the UI.
* **Refactored ViewModels:**
* ****: Now injects and . It fetches app names, icons, and dominant colors through a unified function. Search results now have pre-formatted breadcrumbs.
* ****: Also uses to pre-calculate and cache formatted routes for Today Highlights features, simplifying the logic.
* ****: A new ViewModel for the app selection dialog. It manages the full app list, search state, and caching of UI info (icon/color), making the component stateless and more efficient.
* ****: A new ViewModel for the app restart dialog. It handles the logic for fetching app info for the restart list and executing the restart commands, abstracting the logic from the UI.
* **Refactored UI Components:**
* ** (Module Screen):**
* The and composables no longer contain any data-fetching or caching logic. They now observe from the 's cache.
* The UI reacts to three states: loading (placeholder), loaded (displays info), and not installed (item is hidden).
* ** (App Selection Dialog):**
* The component has been completely refactored to be driven by the new . All state management, app loading, and searching logic has been moved to the ViewModel.
* The composable is now simpler and focuses purely on rendering the UI based on the state provided by the ViewModel.
* ** -> :**
* The app restart dialog has been moved to its own package and is now backed by .
* All logic for fetching app info and executing restart commands is now handled in the ViewModel, cleaning up the Composable.
* ** (Home Screen):**
* Feature cards (, , etc.) now receive a data class containing the pre-formatted route, removing calls from the UI layer.
* **Code Deletion and Consolidation:**
* , , and the old have been deleted, as their functionality is now covered by the new centralized providers and ViewModels.
* Helper functions like have been moved to a central file.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/01e98c1688cf67e45dd0ad6d5836c4ec367755b7)
Refactor(Core): Centralize app info caching and logic with
This commit introduces a major refactoring to centralize all application information (name, icon, dominant color) fetching and caching. It replaces several disparate and component-specific caching implementations with a single, robust, and lifecycle-aware data layer. This significantly improves performance, reduces code duplication, and enhances state management across the app.
### Key Changes:
* ** (Singleton Repository):**
* A new class has been introduced as a repository.
* It is now the single source of truth for all app metadata (name and icon).
* It uses a for thread-safe in-memory caching, including caching for uninstalled apps to prevent repeated lookups.
* This replaces the old, scattered implementations in and .
* ** (Singleton):**
* A new utility class has been created to handle the conversion of internal feature routes (e.g., ) into human-readable breadcrumbs (e.g., ).
* It leverages to asynchronously resolve app names within routes, replacing the old, hardcoded .
* This logic is now centralized and cleanly separated from the UI.
* **Refactored ViewModels:**
* ****: Now injects and . It fetches app names, icons, and dominant colors through a unified function. Search results now have pre-formatted breadcrumbs.
* ****: Also uses to pre-calculate and cache formatted routes for Today Highlights features, simplifying the logic.
* ****: A new ViewModel for the app selection dialog. It manages the full app list, search state, and caching of UI info (icon/color), making the component stateless and more efficient.
* ****: A new ViewModel for the app restart dialog. It handles the logic for fetching app info for the restart list and executing the restart commands, abstracting the logic from the UI.
* **Refactored UI Components:**
* ** (Module Screen):**
* The and composables no longer contain any data-fetching or caching logic. They now observe from the 's cache.
* The UI reacts to three states: loading (placeholder), loaded (displays info), and not installed (item is hidden).
* ** (App Selection Dialog):**
* The component has been completely refactored to be driven by the new . All state management, app loading, and searching logic has been moved to the ViewModel.
* The composable is now simpler and focuses purely on rendering the UI based on the state provided by the ViewModel.
* ** -> :**
* The app restart dialog has been moved to its own package and is now backed by .
* All logic for fetching app info and executing restart commands is now handled in the ViewModel, cleaning up the Composable.
* ** (Home Screen):**
* Feature cards (, , etc.) now receive a data class containing the pre-formatted route, removing calls from the UI layer.
* **Code Deletion and Consolidation:**
* , , and the old have been deleted, as their functionality is now covered by the new centralized providers and ViewModels.
* Helper functions like have been moved to a central file.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/01e98c1688cf67e45dd0ad6d5836c4ec367755b7)
GitHub
Refactor(Core): Centralize app info caching and logic with `AppInfoPr… · suqi8/OShin@01e98c1
…ovider`
This commit introduces a major refactoring to centralize all application information (name, icon, dominant color) fetching and caching. It replaces several disparate and component-specifi...
This commit introduces a major refactoring to centralize all application information (name, icon, dominant color) fetching and caching. It replaces several disparate and component-specifi...
🚀 **OShin New CI Build!**
Merge pull request #71 from Liberations/mydev
fix(settings): ensure OTA card background replacement works
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/d0da44b5a92e2df5c9e5e439c5a5059e86a86199)
Merge pull request #71 from Liberations/mydev
fix(settings): ensure OTA card background replacement works
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/d0da44b5a92e2df5c9e5e439c5a5059e86a86199)
GitHub
Merge pull request #71 from Liberations/mydev · suqi8/OShin@d0da44b
fix(settings): ensure OTA card background replacement works
🚀 **OShin New CI Build!**
Feat(About): Update contributors list
This commit updates the list of contributors on the About screen.
* Removes the QQ number for contributor Mikusignal.
* Changes the name of one contributor from 喷搜 to Pencil.
* Adds Liberation as a new contributor with a link to their GitHub profile.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/89bac251c298ab16f589d67f7508f27864ea796a)
Feat(About): Update contributors list
This commit updates the list of contributors on the About screen.
* Removes the QQ number for contributor Mikusignal.
* Changes the name of one contributor from 喷搜 to Pencil.
* Adds Liberation as a new contributor with a link to their GitHub profile.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/89bac251c298ab16f589d67f7508f27864ea796a)
GitHub
Feat(About): Update contributors list · suqi8/OShin@89bac25
This commit updates the list of contributors on the "About" screen.
* Removes the QQ number for contributor "Mikusignal".
* Changes the name of one contribu...
* Removes the QQ number for contributor "Mikusignal".
* Changes the name of one contribu...
🚀 **OShin New CI Build!**
Refactor(Core): Relocate UI screens into package
This commit restructures the project's UI package layout by moving all primary screen components into a new, more organized package.
This refactoring aims to improve code organization and scalability. It involves renaming and moving files from their old locations (e.g., , , , ) into corresponding sub-packages under . All associated import statements across the codebase have been updated to reflect these new paths. No functional logic was changed in this commit.
Key package changes:
* ->
* ->
* ->
* ->
* ->
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/35e41abe89a58f94ff1d059917166f3322167569)
Refactor(Core): Relocate UI screens into package
This commit restructures the project's UI package layout by moving all primary screen components into a new, more organized package.
This refactoring aims to improve code organization and scalability. It involves renaming and moving files from their old locations (e.g., , , , ) into corresponding sub-packages under . All associated import statements across the codebase have been updated to reflect these new paths. No functional logic was changed in this commit.
Key package changes:
* ->
* ->
* ->
* ->
* ->
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/35e41abe89a58f94ff1d059917166f3322167569)
GitHub
Refactor(Core): Relocate UI screens into `ui.mainscreen` package · suqi8/OShin@35e41ab
This commit restructures the project's UI package layout by moving all primary screen components into a new, more organized `com.suqi8.oshin.ui.mainscreen` package.
This refactoring aims t...
This refactoring aims t...
🚀 **OShin New CI Build!**
chore(Build): Lower minimum SDK version to 33
This commit updates the in from 36 to 33, expanding the range of supported Android devices.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/4967feec22938979c7413d5a4d695e036a6049f0)
chore(Build): Lower minimum SDK version to 33
This commit updates the in from 36 to 33, expanding the range of supported Android devices.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/4967feec22938979c7413d5a4d695e036a6049f0)
GitHub
chore(Build): Lower minimum SDK version to 33 · suqi8/OShin@4967fee
This commit updates the `minSdk` in `app/build.gradle.kts` from 36 to 33, expanding the range of supported Android devices.
🚀 **OShin New CI Build!**
Build(Proguard): Enable line numbers and clean up rules
This commit updates the Proguard configuration to improve debugging and remove obsolete rules.
- Enables and attributes to preserve line numbers in stack traces, making debugging easier.
- Removes several redundant or overly broad rules for Activities, ViewBinding, and specific app packages, simplifying the configuration.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/82d4f8cf8627b1acff24db247a510b8e4526b20c)
Build(Proguard): Enable line numbers and clean up rules
This commit updates the Proguard configuration to improve debugging and remove obsolete rules.
- Enables and attributes to preserve line numbers in stack traces, making debugging easier.
- Removes several redundant or overly broad rules for Activities, ViewBinding, and specific app packages, simplifying the configuration.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/82d4f8cf8627b1acff24db247a510b8e4526b20c)
GitHub
Build(Proguard): Enable line numbers and clean up rules · suqi8/OShin@82d4f8c
This commit updates the Proguard configuration to improve debugging and remove obsolete rules.
- Enables `SourceFile` and `LineNumberTable` attributes to preserve line numbers in stack traces, m...
- Enables `SourceFile` and `LineNumberTable` attributes to preserve line numbers in stack traces, m...
🚀 **OShin New CI Build!**
feat(Home): Integrate Umeng Union ads into home screen carousel
This commit introduces native advertising into the home screen's top carousel by integrating the Umeng Union (友盟+) SDK. The carousel now dynamically mixes promotional content with native ads (including video ads).
### Key Changes:
* **Umeng Union SDK Integration:**
* Added dependency.
* Initialized the SDK in with pre-initialization for better performance.
* **Carousel Content Refactoring:**
* Introduced a sealed interface to represent different types of carousel items: (original promotional content) and (Umeng native ads).
* now fetches both promotional items and native ads concurrently.
* The two content types are shuffled and combined into a single list () to be displayed in the carousel.
* **Native Ad Composable:**
* Created a new composable to render the ad content provided by the SDK.
* This component handles both image and video ads, using to host for video playback.
* It manages the ad's lifecycle (, , ) using to ensure proper video handling and resource cleanup.
* The ad's view is correctly bound for click and impression tracking.
* **ViewModel Logic:**
* now contains logic to request a native banner ad from the Umeng SDK.
* It includes success and failure handlers for the ad request.
* A new function merges the fetched ad with the existing carousel items and shuffles the result for a mixed display.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/ab0e2a803c274b04cae232d3a24981bc57a8d2d6)
feat(Home): Integrate Umeng Union ads into home screen carousel
This commit introduces native advertising into the home screen's top carousel by integrating the Umeng Union (友盟+) SDK. The carousel now dynamically mixes promotional content with native ads (including video ads).
### Key Changes:
* **Umeng Union SDK Integration:**
* Added dependency.
* Initialized the SDK in with pre-initialization for better performance.
* **Carousel Content Refactoring:**
* Introduced a sealed interface to represent different types of carousel items: (original promotional content) and (Umeng native ads).
* now fetches both promotional items and native ads concurrently.
* The two content types are shuffled and combined into a single list () to be displayed in the carousel.
* **Native Ad Composable:**
* Created a new composable to render the ad content provided by the SDK.
* This component handles both image and video ads, using to host for video playback.
* It manages the ad's lifecycle (, , ) using to ensure proper video handling and resource cleanup.
* The ad's view is correctly bound for click and impression tracking.
* **ViewModel Logic:**
* now contains logic to request a native banner ad from the Umeng SDK.
* It includes success and failure handlers for the ad request.
* A new function merges the fetched ad with the existing carousel items and shuffles the result for a mixed display.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/ab0e2a803c274b04cae232d3a24981bc57a8d2d6)
GitHub
feat(Home): Integrate Umeng Union ads into home screen carousel · suqi8/OShin@ab0e2a8
This commit introduces native advertising into the home screen's top carousel by integrating the Umeng Union (友盟+) SDK. The carousel now dynamically mixes promotional content with native ad...
🚀 **OShin New CI Build!**
Fix(About): Update GitHub repository URL and optimize update button rendering
This commit updates the GitHub repository URL from to across the app. This change affects the About screen's links for the project source and translation contributions, as well as the update checker's API endpoint.
Additionally, the Check for update button on the About screen is now conditionally rendered only when its alpha is greater than zero. This prevents the button from being composed when it is fully transparent, improving rendering performance.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/2ff830bb1d2b63747cb3aafb3819146827e66239)
Fix(About): Update GitHub repository URL and optimize update button rendering
This commit updates the GitHub repository URL from to across the app. This change affects the About screen's links for the project source and translation contributions, as well as the update checker's API endpoint.
Additionally, the Check for update button on the About screen is now conditionally rendered only when its alpha is greater than zero. This prevents the button from being composed when it is fully transparent, improving rendering performance.
🔗 [查看本次提交](https://github.com/suqi8/OShin/commit/2ff830bb1d2b63747cb3aafb3819146827e66239)
🚀 **OShin New CI Build!**
Refactor(About): Introduce ViewModel and UI improvements
This commit refactors the About and Settings screens by introducing ViewModels (, ) to manage UI state and business logic, significantly improving code structure and maintainability.
### Key Changes:
* ** (New):**
* Manages the state for the About screen, including device name, dialog visibility, and complex scroll-based animations (alpha/scale for titles, button, and cards).
* Centralizes logic for updating the device name via .
* Calculates animation values based on scroll offset, moving this logic out of the composable.
* ** (Refactored):**
* Now manages state for all settings (theme, language, update channel, etc.) using .
* Refactored config import/export/clear functions to be more robust, with loading states and improved error handling using .
* Settings changes now update the ViewModel, which in turn saves the preference.
* ** (Refactored):**
* The composable is now stateless, consuming state directly from .
* The monolithic composable has been broken down into smaller, more manageable functions (, , , etc.).
* Introduced an animated Swipe up for more hint to improve discoverability of the scrollable content.
* Corrected a typo in the contributors section from Stracha酸奶菌 to Stracha酸奶茶.
* ** (Refactored):**
* The settings screen now gets its state from and sends updates to the .
* The layout has been reorganized with headers to group settings into categories: General, Appearance, Advanced, and Developer.
* The complex language-switching logic has been simplified and moved into a utility function.
* **:**
* Added new string resources for the Swipe up for more hint and the new settings categories.
🔗 [查看本次提交](https://github.com/suqi8/OShin-Dev/commit/7e2338c7c80973a0d4eedf60268846a9625bb00f)
Refactor(About): Introduce ViewModel and UI improvements
This commit refactors the About and Settings screens by introducing ViewModels (, ) to manage UI state and business logic, significantly improving code structure and maintainability.
### Key Changes:
* ** (New):**
* Manages the state for the About screen, including device name, dialog visibility, and complex scroll-based animations (alpha/scale for titles, button, and cards).
* Centralizes logic for updating the device name via .
* Calculates animation values based on scroll offset, moving this logic out of the composable.
* ** (Refactored):**
* Now manages state for all settings (theme, language, update channel, etc.) using .
* Refactored config import/export/clear functions to be more robust, with loading states and improved error handling using .
* Settings changes now update the ViewModel, which in turn saves the preference.
* ** (Refactored):**
* The composable is now stateless, consuming state directly from .
* The monolithic composable has been broken down into smaller, more manageable functions (, , , etc.).
* Introduced an animated Swipe up for more hint to improve discoverability of the scrollable content.
* Corrected a typo in the contributors section from Stracha酸奶菌 to Stracha酸奶茶.
* ** (Refactored):**
* The settings screen now gets its state from and sends updates to the .
* The layout has been reorganized with headers to group settings into categories: General, Appearance, Advanced, and Developer.
* The complex language-switching logic has been simplified and moved into a utility function.
* **:**
* Added new string resources for the Swipe up for more hint and the new settings categories.
🔗 [查看本次提交](https://github.com/suqi8/OShin-Dev/commit/7e2338c7c80973a0d4eedf60268846a9625bb00f)
🚀 **OShin New CI Build!**
Fix(About): Correct Coolapk username for contributor 酸奶(什么破ai)
This commit corrects the Coolapk username for the contributor 酸奶 in the About screen. The username has been updated from Stracha酸奶茶 to Stracha酸奶菌.
🔗 [查看本次提交](https://github.com/suqi8/OShin-Dev/commit/5ff7d839518c4ee4b91fb63c5e52c93d14e50059)
Fix(About): Correct Coolapk username for contributor 酸奶(什么破ai)
This commit corrects the Coolapk username for the contributor 酸奶 in the About screen. The username has been updated from Stracha酸奶茶 to Stracha酸奶菌.
🔗 [查看本次提交](https://github.com/suqi8/OShin-Dev/commit/5ff7d839518c4ee4b91fb63c5e52c93d14e50059)
🚀 **OShin New CI Build!**
Refactor(Settings): Improve preference export and update URI handling
This commit refactors the settings export functionality and modernizes URI creation.
### Key Changes:
* **:**
* The settings export logic now includes preferences from and .
* The list is now created by combining standard feature preferences, a default settings file, and these two new specific preference files to ensure a more comprehensive backup.
* **:**
* Updated the creation of to use the Kotlin extension function, which is a more idiomatic and concise approach.
* Added to suppress the lint warning related to this change.
🔗 [查看本次提交](https://github.com/suqi8/OShin-Dev/commit/d0ff96e559290e6eb32f9b9adfbf9d7d2f662207)
Refactor(Settings): Improve preference export and update URI handling
This commit refactors the settings export functionality and modernizes URI creation.
### Key Changes:
* **:**
* The settings export logic now includes preferences from and .
* The list is now created by combining standard feature preferences, a default settings file, and these two new specific preference files to ensure a more comprehensive backup.
* **:**
* Updated the creation of to use the Kotlin extension function, which is a more idiomatic and concise approach.
* Added to suppress the lint warning related to this change.
🔗 [查看本次提交](https://github.com/suqi8/OShin-Dev/commit/d0ff96e559290e6eb32f9b9adfbf9d7d2f662207)