Integration: wire 3 new P2 screens into App.kt nav + HapticsInit bootstrap
Navigation wiring (per follow-ups flagged by Streams G/H/I): - Add TaskTemplatesBrowserRoute (new) + App.kt composable<TaskTemplatesBrowserRoute> - Wire composable<TaskSuggestionsRoute> (declared by Stream H but unwired) - Wire composable<AddTaskWithResidenceRoute> (declared by Stream I but unwired) MainActivity.onCreate now calls HapticsInit.install(applicationContext) so the Vibrator fallback path works on non-View call-sites (flagged by Stream S). Deferred cleanup (tracked, not done here): - Port push-token registration from legacy MyFirebaseMessagingService.kt to new FcmService (Stream N TODO). - Remove legacy WidgetTaskActionReceiver + manifest entry (Stream M flag). - Residence invite accept/decline APILayer methods (Stream O TODO). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -68,6 +68,9 @@ class MainActivity : FragmentActivity(), SingletonImageLoader.Factory {
|
|||||||
// Initialize BiometricPreference storage
|
// Initialize BiometricPreference storage
|
||||||
BiometricPreference.initialize(BiometricPreferenceManager.getInstance(applicationContext))
|
BiometricPreference.initialize(BiometricPreferenceManager.getInstance(applicationContext))
|
||||||
|
|
||||||
|
// Initialize cross-platform Haptics backend (P5 Stream S)
|
||||||
|
com.tt.honeyDue.ui.haptics.HapticsInit.install(applicationContext)
|
||||||
|
|
||||||
// Initialize DataManager with platform-specific managers
|
// Initialize DataManager with platform-specific managers
|
||||||
// This loads cached lookup data from disk for faster startup
|
// This loads cached lookup data from disk for faster startup
|
||||||
DataManager.initialize(
|
DataManager.initialize(
|
||||||
|
|||||||
@@ -31,6 +31,9 @@ import com.tt.honeyDue.ui.screens.VerifyEmailScreen
|
|||||||
import com.tt.honeyDue.ui.screens.VerifyResetCodeScreen
|
import com.tt.honeyDue.ui.screens.VerifyResetCodeScreen
|
||||||
import com.tt.honeyDue.ui.screens.onboarding.OnboardingScreen
|
import com.tt.honeyDue.ui.screens.onboarding.OnboardingScreen
|
||||||
import com.tt.honeyDue.ui.screens.subscription.FeatureComparisonScreen
|
import com.tt.honeyDue.ui.screens.subscription.FeatureComparisonScreen
|
||||||
|
import com.tt.honeyDue.ui.screens.task.AddTaskWithResidenceScreen
|
||||||
|
import com.tt.honeyDue.ui.screens.task.TaskSuggestionsScreen
|
||||||
|
import com.tt.honeyDue.ui.screens.task.TaskTemplatesBrowserScreen
|
||||||
import com.tt.honeyDue.ui.screens.theme.ThemeSelectionScreen
|
import com.tt.honeyDue.ui.screens.theme.ThemeSelectionScreen
|
||||||
import com.tt.honeyDue.viewmodel.OnboardingViewModel
|
import com.tt.honeyDue.viewmodel.OnboardingViewModel
|
||||||
import com.tt.honeyDue.viewmodel.PasswordResetViewModel
|
import com.tt.honeyDue.viewmodel.PasswordResetViewModel
|
||||||
@@ -678,6 +681,35 @@ fun App(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
composable<TaskSuggestionsRoute> { backStackEntry ->
|
||||||
|
// P2 Stream H — standalone personalized-task suggestions.
|
||||||
|
val route = backStackEntry.toRoute<TaskSuggestionsRoute>()
|
||||||
|
TaskSuggestionsScreen(
|
||||||
|
residenceId = route.residenceId,
|
||||||
|
onNavigateBack = { navController.popBackStack() },
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
composable<AddTaskWithResidenceRoute> { backStackEntry ->
|
||||||
|
// P2 Stream I — Android port of iOS AddTaskWithResidenceView.
|
||||||
|
val route = backStackEntry.toRoute<AddTaskWithResidenceRoute>()
|
||||||
|
AddTaskWithResidenceScreen(
|
||||||
|
residenceId = route.residenceId,
|
||||||
|
onNavigateBack = { navController.popBackStack() },
|
||||||
|
onCreated = { navController.popBackStack() },
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
composable<TaskTemplatesBrowserRoute> { backStackEntry ->
|
||||||
|
// P2 Stream G — full-screen template catalog browse.
|
||||||
|
val route = backStackEntry.toRoute<TaskTemplatesBrowserRoute>()
|
||||||
|
TaskTemplatesBrowserScreen(
|
||||||
|
residenceId = route.residenceId,
|
||||||
|
fromOnboarding = route.fromOnboarding,
|
||||||
|
onNavigateBack = { navController.popBackStack() },
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
composable<EditTaskRoute> { backStackEntry ->
|
composable<EditTaskRoute> { backStackEntry ->
|
||||||
val route = backStackEntry.toRoute<EditTaskRoute>()
|
val route = backStackEntry.toRoute<EditTaskRoute>()
|
||||||
EditTaskScreen(
|
EditTaskScreen(
|
||||||
|
|||||||
@@ -172,3 +172,13 @@ data class TaskSuggestionsRoute(val residenceId: Int)
|
|||||||
// AddTaskWithResidenceView). Residence is pre-selected via residenceId.
|
// AddTaskWithResidenceView). Residence is pre-selected via residenceId.
|
||||||
@Serializable
|
@Serializable
|
||||||
data class AddTaskWithResidenceRoute(val residenceId: Int)
|
data class AddTaskWithResidenceRoute(val residenceId: Int)
|
||||||
|
|
||||||
|
// Task Templates Browser Route (P2 Stream G — full-screen browse/preview/
|
||||||
|
// bulk-apply of the server-driven template catalog). residenceId scopes
|
||||||
|
// which residence tasks get created against; fromOnboarding switches
|
||||||
|
// analytics event names.
|
||||||
|
@Serializable
|
||||||
|
data class TaskTemplatesBrowserRoute(
|
||||||
|
val residenceId: Int,
|
||||||
|
val fromOnboarding: Boolean = false,
|
||||||
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user