Merged
Conversation
- Improve MVI pattern applied. Use Pure Reducer for State Management. (Centralized State Modification Logic)
* (BaseViewModel) Declare commonly used main reducer function as an abstract function.
* Declare intermediate 'mutate' function to call reducer function with provided UiMutation.
* Mark existing 'stateUpdate' function as Deprecated.
- Improve MVI pattern applied. Use Pure Reducer for State Management. (Centralized State Modification Logic)
* (BookmarkListViewModel) Implement main reducer with an appropriate UiMutation.
* (Screen) Replace calling direct callback function to Issuing corresponding event/sideEffect (onSettingRequested)
- Improve MVI pattern applied. Use Pure Reducer for State Management. (Centralized State Modification Logic)
* (EditBookmarkViewModel) Implement main reducer with an appropriate UiMutation.
* (Contract) Remove unnecessary state variables. Modify UpdateReminderOption event to accept parameter for reminder status.
- Improve MVI pattern applied. Use Pure Reducer for State Management. (Centralized State Modification Logic)
* (CustomerServiceViewModel) Implement main reducer with an appropriate UiMutation.
* (Contract) Declare corresponding UiMutation.
- Improve MVI pattern applied. Use Pure Reducer for State Management. (Centralized State Modification Logic)
* (HomeViewModel) Implement main reducer with an appropriate UiMutation.
* (Contract) Declare corresponding UiMutation. Separate centralized UiState. (MainContentState and TipState)
* (Screen) Apply corresponding modification cased by State separation.
- Improve MVI pattern applied. Use Pure Reducer for State Management. (Centralized State Modification Logic)
* (NoticeByMajorViewModel) Implement main reducer with an appropriate UiMutation.
* (Contract) Declare corresponding UiMutation.
- Improve MVI pattern applied. Use Pure Reducer for State Management. (Centralized State Modification Logic)
* (NoticeDetailViewModel) Implement main reducer with an appropriate UiMutation.
* (Contract) Declare corresponding UiMutation.
- Improve MVI pattern applied. Use Pure Reducer for State Management. (Centralized State Modification Logic)
* (NoticeSearchViewModel) Implement main reducer with an appropriate UiMutation.
* (Contract) Declare corresponding UiMutation.
- Improve MVI pattern applied. Use Pure Reducer for State Management. (Centralized State Modification Logic)
* (NoticeSearchViewModel) Implement main reducer with an appropriate UiMutation.
* (Contract) Declare corresponding UiMutation. Remove unnecessary state variable
* (Screen) Apply corresponding modification caused by refactored UiState.
- Improve MVI pattern applied. Use Pure Reducer for State Management. (Centralized State Modification Logic)
* (NotificationPreferencesViewModel) Implement main reducer with an appropriate UiMutation.
* (Contract) Declare corresponding UiMutation.
- Improve MVI pattern applied. Use Pure Reducer for State Management. (Centralized State Modification Logic)
* (SettingsViewModel) Implement main reducer with an appropriate UiMutation.
* (Contract) Declare corresponding UiMutation.
- Improve MVI pattern applied. Use Pure Reducer for State Management. (Centralized State Modification Logic)
* (SplashViewModel) Implement main reducer with an appropriate UiMutation.
* (Contract) Declare corresponding UiMutation.
* Custom-defined Expandable Floating Action Button UI for providing user an option to access AI summarization of the selected notice.
[PR] Structural Improvement (MVI Pattern)
PR [KNUTICE 1.7.0] Implement ExpandableFloatingActionButton
- (:core/network) Implement API endpoint for receiving AI-based Notice Summary. - Remove unnecessary import statements.
- (:core/network) Declare DTO for storing result of AI notice summary request call. - Update NoticeDTO structure to reflect recent updates on server response type.
- (:core/network) Add suspend function to initiate request to Notice Summary endpoints.
- (:model) Update NoticeVO to reflect applied changes on NoticeDTO.
- (:domain) Add new function 'getNoticeSummary' to FetchNoticeById usecase to offer access point to retrieve AI summarization if it's available. - (:domain) Add new function to NoticeRemoteRepository interface. (Actual implementation would be made on :data module; Dependency Inversion) - (:data) Implement function 'getNoticeSummary' added to NoticeRemoteRepository interface.
- Implement custom-defined Markdown Parser to process received AI-supported Notice Summarization string with Markdown Syntax into custom-defined objects for later rending purpose.
- MarkdownView: Composable that takes List of MarkdownString (custom-defined object for Markdown rendering). Based on the type of received objects, it renders native UI elements row-by-row.
- MarkdownComposables: Custom-defined composables are declared to render native UI of corresponding Markdown Syntax.
* 'syntaxProcess': Function that process a 'compound syntax' of expected string. (e.g. _**String**_). It recursively traverse targeted syntax to process styles in correct order. (outer -> inner)
- (:feature) Add new Contracts to process request and corresponding state management initiated by AI Summarization request.
- (:common) AiSummaryDialog: Composable to provide dialog-formatted, Chat-based style AI-supported content container.
- Add necessary image resources. - Add necessary string resources for localization.
- Modify custom-designed ExpandableFloatingActionButton to provide more direct and clear user experiences.
* Now, each ExpandableFabItem can be disabled/enabled.
Custom-defined Markdown Parser/Composable
- Replace current KNUTICE AI logo to comply with Google Gemini's policy
PR: AI Summarization (UI Layer Implementation)
- Resolve missing configuration on localized string resources (untranslatable, attribution_knutice_ai)
* Implement Pulling-based Widget Update Logic
(Notice: 6 Hours + Manual Refresh)
(Carrel: 30 minutes + Manual Refresh)
- Construct Dependency Graph to provide necessary dependencies to WidgetReceiver.
- Implement/Modify ActionCallBack to process Manual Refresh
- Apply updated WidgetTaskScheduler to WidgetConfigViewModel.
- Remove unnecessary WidgetTaskScheduler call.
* Implement In-Memory Local Cache to mitigate potential data inconsistency.
- Implement LocalWidgetCacheRepository to store network fetched result in local in-memory cache.
- Construct Dagger Dependency Graph to provide necessary dependencies.
- Modify Current Dagger SceneComponent to provider LocalWidgetCacheRepository dependency to necessary caller.
- Change Dispatchers of ApplicationScope (injected) from Default to IO
* Implement In-Memory Local Cache to mitigate potential data inconsistency. - Implement WidgetSyncObserver to observe ProcessLifecycle to execute necessary widget update using data cached locally. - Register WidgetSyncObserver to main application's ProcessLifecycleOwner. - (CHORE) Implement necessary library dependency.
* Implement In-Memory Local Cache to mitigate potential data inconsistency. - Implement LocalWidgetCache to necessary caller to write local cache after successful network data fetch. - Implement Simple ViewModel to process local widget cache writing at CarrelStatus.
* Implement Pulling-based Widget Update Logic
(Notice: 6 Hours + Manual Refresh)
(Carrel: 30 minutes + Manual Refresh)
- Link ActionCallBack to NoticeWidget, enabling manual refresh.
- Minor UI fix (Font size adjustment to manage both Latin + CJK strings)
- Provide additional metadata as a state (NoticeWidget)
* Implement Pulling-based Widget Update Logic
(Notice: 6 Hours + Manual Refresh)
(Carrel: 30 minutes + Manual Refresh)
- Modify Token Worker's existing work policy form UPDATE to KEEP to optimize periodic work via WorkManager (MainActivity)
- Modify FetchTopThreeNotices usecase to asynchronously process multiple function call. (reduce loading time approx. 80%)
- Provide comprehensive coroutine dispatcher (IO) to all function related to network call. (KnuticeRemoteSource)
- Wrap SceneComponent declaration with remember lambda to prevent unnecessary recreation. - Revise State observing logic to prevent unnecessary updateNoticeLocalCache call. (Strict evaluation on actual data (notice data) changes additionally)
- Replace hardcoded Dispatcher to injected CoroutineDispatcher.
[REFACTOR] Implement Updated Widget Refresh Logic
…cal-cache [FEAT] Implement Local In-Memory Cache Management for Widget Update
…nalize [FEAT] Implement Updated Widget Refresh Logic (Finalize)
* Apply new Bridge Function to Carrel Room Status Screen to process deeplink from Widget/Notification can be processed as expected.
- Remove temporary Deeplink path and process logic to accept completed Deeplink path to trigger updated bridge function in CarrelStatusScreen.
- Update CarrelRoomStatusDTO/VO to delegate ID value, which is necessary to initiate Deeplink.
-
- Apply identical Carrel Room Status Range, ratio, and color code to Widget in order to provide seamless information between WebApp and Widget.
* 0% - 49%: Spacious
* 50% - 79%: Moderate
* 80% - 100%: Crowded.
- (Critical Issue) Modify Conditional Statement under Bitmap generate to avoid potentially generate incorrect result for given value (float-type) - Add missing semi-colon to keep consistency.
[REFACTOR] Study Room Feature Fianlization
- Add Fallback Screen to gracefully notify the AI summarization is not available for the selected notice. - Extract Height determination outside of the direct modifier property assignment.
- Replace Hardcoded String value with localized String Resource.
- Add static font size (12.sp) to BottomNavBarItem title for robust management of localized String resource.
- Add Theme-aware drawable resource to Fallback Screen for TopThreeMajorNotices. - Modify description into more soft and friendly-sound sentence to seamlessly lead user to select a desired major to subscribe. - Necessary Drawable resources have been added.
- Add Localized String Resources for:
1. Dining Menu Entry Button title
2. AI Summarization Fallback Description
3. HomeDashboard TopThreeMajorNotices Fallback Description
- Remove duplicated destination from the CampusNavGraph (both DiningMenu and CarrelRoom) to handle 'Go-Back' action properly.
* KNUTICE Android 1.7.0 RC3 Artifact
- VersionCode: 36
- VersionName: 1.7.0 RC3
[REFACTOR] 1.7.0 Release Finalization
- Resolve Identified Edge Case:
When user has not yet selected the major subscription, Local In-memory Cache is not being updated
* Add additional condition to let Local In-Memory Cache is being updated when user has not yet selected the major subscription as well.
- Temporarily disable CarrelRoomStatus Widget in 1.7.0 Release, in order to preserve feature consistency with iOS client.
* CarrelStatusWidget would become available on 1.7.1
- KNUTICE 1.7.0 Release Artifact
* VersionCode: 37
* VersionName = 1.7.0
Member
Author
|
All modifications have already been verified and approved. Commence merge. |
|
Warning Gemini encountered an error creating the summary. You can try again by commenting |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
KNUTICE Android 1.7.0 Release
Release Note
Note