Fix Next Up channel launch sign in (#1886)

## Description
When parsing intents, not every path for authentication was checked, so
launching via the "Next Up" OS channel wouldn't check for a profile PIN.
This PR fixes that.

Additionally, the "Next Up" OS channel launch wasn't checking the
correct parameter to ensure the back stack was written properly.

### Related issues
Fixes #1883

### Testing
I manually test on the emulator with these test cases:
- No profile PIN, cold start
- No profile PIN, hot start
- Profile PIN, cold start
- Profile PIN, hot start
- No profile PIN, launch via "Next Up" channel
- No profile PIN, launch via intent
- Profile PIN, launch via "Next Up" channel
- Profile PIN, launch via intent

Also added unit tests for intent-based and regular launching which
covers those cases and more.

## Screenshots
N/A

## AI or LLM usage
None
This commit is contained in:
Damontecres 2026-08-21 15:04:07 -04:00 • committed by GitHub
parent 39523aa6e2
commit 4b927e6b7b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 736 additions and 34 deletions

View file

@ -439,9 +439,16 @@ class MainActivityViewModel
val result = intent?.let { intentService.parseIntent(intent) }
when (result) {
is IntentResult.Error -> {
setupNavigationManager.navigateTo(SetupDestination.ServerList)
val current = serverRepository.current.value
val destination =
if (current != null) {
SetupDestination.UserList(current.server)
} else {
SetupDestination.ServerList
}
setupNavigationManager.navigateTo(destination)
Timber.e("Error parsing intent: %s", result.message)
showToast(context, "Invalid intent: ${result.message}")
showToast(context, result.message)
return@withLock
}
@ -505,7 +512,7 @@ class MainActivityViewModel
prefs.currentUserId?.toUUIDOrNull(),
)
if (current != null) {
if (current.user.hasPin || current.user.requireLogin) {
if (current.user.isProtected) {
setupNavigationManager.navigateTo(
SetupDestination.UserList(
current.server,