Skip to content

[REFACTOR] Deeplink Processing Stabilization.#100

Merged
doyoonkim3312 merged 2 commits into
developmentfrom
REFACTOR/1.7.1/deeplink-stabilization
Mar 31, 2026
Merged

[REFACTOR] Deeplink Processing Stabilization.#100
doyoonkim3312 merged 2 commits into
developmentfrom
REFACTOR/1.7.1/deeplink-stabilization

Conversation

@doyoonkim3312

@doyoonkim3312 doyoonkim3312 commented Mar 31, 2026

Copy link
Copy Markdown
Member

πŸ“ Summary (κ°œμš”)

  • Modify Deeplink Processing logic to stabilize deeplink received via ImplicitIntent/PendingIntent
  • Apply missing Manifest Rule to WidgetConfigurationActivity to enhance UX.

πŸ”— Related Issue (κ΄€λ ¨ 이슈)

  • Resolves (if applicable) #
  • Jira Ticket: KAN-105

πŸ›  Type of Change (λ³€κ²½ 사항)

  • FEAT: New feature (μƒˆλ‘œμš΄ κΈ°λŠ₯)
  • FIX: Bug fix (버그 μˆ˜μ •)
  • REFACTOR: Code refactoring (no functional change) (μ½”λ“œ λ¦¬νŒ©ν† λ§)
  • DESIGN: UI/UX changes (λ””μžμΈ λ³€κ²½)
  • !HOTFIX: Critical fix (치λͺ…적인 버그 μˆ˜μ •)
  • CHORE: Build/Config/CI (λΉŒλ“œ/μ„€μ •/CI)

✨ Key Changes (핡심 λ³€κ²½ 사항)

  • Resolve identified Deeplink-related edge case. (OS launch Task from History)
  • Stabilize current Deeplink processing logic (utilize Channel to ensure correct intent processing while preventing duplicated navigation.
  • Modify Manifest Rule for WidgetConfigurationActivity to enhance UX

πŸ“Έ Screenshots / Video (μŠ€ν¬λ¦°μƒ· λ˜λŠ” λ™μ˜μƒ)

Before (이전) After (이후)
Screen_recording_20260331_015932.mp4
Screen_recording_20260331_020005.mp4

πŸ§ͺ Test Plan (ν…ŒμŠ€νŠΈ κ³„νš)

  • Device: Android Emulator (Google Pixel 9 Pro, SDK 36)
  • Scenario: (Deeplink Processing Test) Initiate Pending Intent via Push Notification while app is in Foreground/Background -> Requested Deeplink is correctly processed.
  • Scenario: (Edge Case Scenario) Launch Application via either Pending Intent or Implicit Intent -> Press back button until app is closed -> Press system Overview button -> Re-enter the app -> Check whether app is correctly navigate user to HomeScreen. (Previous Deeplink is not being processed)

βœ… Checklist (체크리슀트)

  • My code follows the style guidelines of this project (μ½”λ“œ μŠ€νƒ€μΌμ„ μ€€μˆ˜ν–ˆμŠ΅λ‹ˆλ‹€).
  • I have performed a self-review of my own code (슀슀둜 μ½”λ“œλ₯Ό κ²€ν† ν–ˆμŠ΅λ‹ˆλ‹€).
  • I have commented my code, particularly in hard-to-understand areas (μ΄ν•΄ν•˜κΈ° μ–΄λ €μš΄ 뢀뢄에 주석을 μž‘μ„±ν–ˆμŠ΅λ‹ˆλ‹€).

  - Resolve identified Deeplink-related edge case. (OS launch Task from History)
  - Stabilize current Deeplink processing logic (utilize Channel to ensure correct intent processing while preventing duplicated navigation.
  - Modify Manifest Rule for WidgetConfigurationActivity to enhance UX
  - Update Build configurations
    * VersionCode: 39
    * VersionName: 1.7.1 RC2
@doyoonkim3312 doyoonkim3312 requested a review from jeongHunE March 31, 2026 06:06
@doyoonkim3312 doyoonkim3312 self-assigned this Mar 31, 2026
@doyoonkim3312 doyoonkim3312 added the Improvement Structural or Functional Improvement label Mar 31, 2026

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request updates the application version to 1.7.1 RC2 and refactors deeplink handling in MainActivity to use a Coroutine Channel and Flow instead of mutable state. It also modifies WidgetConfigurationActivity properties in the manifest and adds logic to SplashActivity to prevent re-processing intents when launched from history. Feedback was provided regarding the removal of analytics logging, potential duplicate intent processing during configuration changes, and the effectiveness of the synchronous loading state in the UI.

Comment thread app/src/main/java/com/doyoonkim/knutice/MainActivity.kt
  - Apply appropriate Intent clean-up process after its successful processing, to prevent unexpected duplicated processing cased by Activity Recreation.
  - Remove redundant, unnecessary state variable and corresponding UI composable, which would never be displayed.
@doyoonkim3312

Copy link
Copy Markdown
Member Author

/gemini summary

@gemini-code-assist

Copy link
Copy Markdown

Summary of Changes

This pull request focuses on stabilizing the application's deeplink handling logic to resolve edge cases related to activity lifecycle events and system-level task management. By transitioning to a robust flow-based architecture and implementing smarter intent delegation, the changes ensure that navigation events are processed exactly once, even during configuration changes or when restoring the app from the background.

Highlights

  • Deeplink Processing Stabilization: Replaced the mutable state-based intent handling with a Coroutine Channel-based flow to ensure reliable, one-time processing of incoming intents and prevent duplicate navigation during activity recreation.
  • History-Aware Intent Delegation: Updated SplashActivity to detect intents launched from history, preventing the re-processing of stale deeplinks when the user returns to the app via the system task manager.
  • Widget Configuration UX: Modified the AndroidManifest for WidgetConfigurationActivity to use a dedicated task affinity and singleTask launch mode, improving the user experience when configuring widgets.
Activity
  • The pull request was created by doyoonkim3312.
  • Gemini Code Assist provided feedback regarding potential analytics regressions, duplicate processing on rotation, and synchronous loading state management.
  • The author addressed the feedback by implementing a channel-based flow to handle intent processing and provided explanations for the current state of analytics logging.

@doyoonkim3312 doyoonkim3312 merged commit 74a7c11 into development Mar 31, 2026
1 check passed
@doyoonkim3312 doyoonkim3312 deleted the REFACTOR/1.7.1/deeplink-stabilization branch March 31, 2026 06:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Improvement Structural or Functional Improvement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants