From 415b997d86f6e31103782ed64dc93676cb8d5e03 Mon Sep 17 00:00:00 2001
From: Aditya Gupta <94394661+Aditya-gupta99@users.noreply.github.com>
Date: Wed, 21 Aug 2024 21:01:08 +0530
Subject: [PATCH] feat: implemented compose navigation in path tracking module
 (#2198)

---
 .../path_tracking/PathTrackingScreen.kt       | 22 +++++++++++++--
 .../navigation/PathTrackingNavigation.kt      | 28 +++++++++++--------
 .../navigation/PathTrackingScreens.kt         |  9 ++++++
 .../mifosxdroid/HomeDestinationsScreen.kt     |  6 ++--
 .../pathtracking/PathTrackingActivity.kt      |  6 ++--
 .../mifosxdroid/components/Navigation.kt      |  7 +++--
 6 files changed, 56 insertions(+), 22 deletions(-)
 create mode 100644 feature/path-tracking/src/main/java/com/mifos/feature/path_tracking/navigation/PathTrackingScreens.kt

diff --git a/feature/path-tracking/src/main/java/com/mifos/feature/path_tracking/PathTrackingScreen.kt b/feature/path-tracking/src/main/java/com/mifos/feature/path_tracking/PathTrackingScreen.kt
index 3288fd9e21..a7b8f7a232 100644
--- a/feature/path-tracking/src/main/java/com/mifos/feature/path_tracking/PathTrackingScreen.kt
+++ b/feature/path-tracking/src/main/java/com/mifos/feature/path_tracking/PathTrackingScreen.kt
@@ -9,6 +9,7 @@ import android.content.BroadcastReceiver
 import android.content.Context
 import android.content.Intent
 import android.content.IntentFilter
+import android.net.Uri
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.fillMaxWidth
@@ -50,6 +51,7 @@ import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.sp
 import androidx.core.content.ContextCompat
 import androidx.core.content.ContextCompat.registerReceiver
+import androidx.core.content.ContextCompat.startActivity
 import androidx.hilt.navigation.compose.hiltViewModel
 import androidx.lifecycle.compose.collectAsStateWithLifecycle
 import com.google.android.gms.maps.model.CameraPosition
@@ -73,8 +75,7 @@ import com.mifos.feature.path.tracking.R
 
 @Composable
 fun PathTrackingScreen(
-    onBackPressed: () -> Unit,
-    onPathTrackingClick: (List<UserLatLng>) -> Unit
+    onBackPressed: () -> Unit
 ) {
 
     val context = LocalContext.current
@@ -115,7 +116,22 @@ fun PathTrackingScreen(
         onRetry = {
             viewModel.loadPathTracking()
         },
-        onPathTrackingClick = onPathTrackingClick,
+        onPathTrackingClick = { userLatLngs ->
+            val uri = if (userLatLngs.isNotEmpty()) {
+                val originLatLng = userLatLngs[0]
+                val destinationLatLng = userLatLngs[userLatLngs.size - 1]
+                "http://maps.google.com/maps?f=d&hl=en&saddr=${originLatLng.lat},${originLatLng.lng}&daddr=${destinationLatLng.lat},${destinationLatLng.lng}"
+            } else {
+                // Handle the case when userLatLngs is empty
+                ""
+            }
+
+            val intent = Intent(Intent.ACTION_VIEW, Uri.parse(uri))
+            intent.setClassName(
+                "com.google.android.apps.maps", "com.google.android.maps.MapsActivity"
+            )
+            startActivity(context, Intent.createChooser(intent, "Start Tracking"), null)
+        },
         onRefresh = {
             viewModel.refreshCenterList()
         },
diff --git a/feature/path-tracking/src/main/java/com/mifos/feature/path_tracking/navigation/PathTrackingNavigation.kt b/feature/path-tracking/src/main/java/com/mifos/feature/path_tracking/navigation/PathTrackingNavigation.kt
index 8074b4e839..4229a0c78d 100644
--- a/feature/path-tracking/src/main/java/com/mifos/feature/path_tracking/navigation/PathTrackingNavigation.kt
+++ b/feature/path-tracking/src/main/java/com/mifos/feature/path_tracking/navigation/PathTrackingNavigation.kt
@@ -3,24 +3,30 @@ package com.mifos.feature.path_tracking.navigation
 import androidx.navigation.NavController
 import androidx.navigation.NavGraphBuilder
 import androidx.navigation.compose.composable
+import androidx.navigation.navigation
 import com.mifos.feature.path_tracking.PathTrackingScreen
 
-/**
- * Created by Pronay Sarker on 10/08/2024 (7:35 AM)
- */
-const val PATH_TRACKING_SCREEN_ROUTE = "path_tracking_route"
-
-fun NavController.navigateToPathTrackingScreen() {
-    this.navigate(PATH_TRACKING_SCREEN_ROUTE)
+fun NavGraphBuilder.pathTrackingNavGraph(
+    navController: NavController
+) {
+    navigation(
+        startDestination = PathTrackingScreens.PathTrackingScreen.route,
+        route = PathTrackingScreens.PathTrackingScreenRoute.route
+    ) {
+        pathTrackingRoute(
+            onBackPressed = navController::popBackStack
+        )
+    }
 }
 
-fun NavGraphBuilder.pathTrackingScreen(
+fun NavGraphBuilder.pathTrackingRoute(
     onBackPressed: () -> Unit
 ) {
-    composable(PATH_TRACKING_SCREEN_ROUTE) {
+    composable(
+        route = PathTrackingScreens.PathTrackingScreen.route
+    ) {
         PathTrackingScreen(
-            onBackPressed = onBackPressed,
-            onPathTrackingClick = {}
+            onBackPressed = onBackPressed
         )
     }
 }
\ No newline at end of file
diff --git a/feature/path-tracking/src/main/java/com/mifos/feature/path_tracking/navigation/PathTrackingScreens.kt b/feature/path-tracking/src/main/java/com/mifos/feature/path_tracking/navigation/PathTrackingScreens.kt
new file mode 100644
index 0000000000..6e564a8da4
--- /dev/null
+++ b/feature/path-tracking/src/main/java/com/mifos/feature/path_tracking/navigation/PathTrackingScreens.kt
@@ -0,0 +1,9 @@
+package com.mifos.feature.path_tracking.navigation
+
+sealed class PathTrackingScreens(val route: String) {
+
+    data object PathTrackingScreenRoute : PathTrackingScreens("path_tracking_screen_route")
+
+    data object PathTrackingScreen : PathTrackingScreens("path_tracking_screen")
+
+}
\ No newline at end of file
diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/HomeDestinationsScreen.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/HomeDestinationsScreen.kt
index 7d85da4b7d..d587cf8a15 100644
--- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/HomeDestinationsScreen.kt
+++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/HomeDestinationsScreen.kt
@@ -20,7 +20,9 @@ import com.mifos.feature.checker_inbox_task.navigation.CheckerInboxTaskScreens
 
 
 import com.mifos.feature.groups.navigation.GROUP_LIST_SCREEN_ROUTE
-import com.mifos.feature.path_tracking.navigation.PATH_TRACKING_SCREEN_ROUTE
+import com.mifos.feature.individual_collection_sheet.navigation.GENERATE_COLLECTION_SHEET_SCREEN_ROUTE
+import com.mifos.feature.individual_collection_sheet.navigation.INDIVIDUAL_COLLECTION_SHEET_SCREEN_ROUTE
+import com.mifos.feature.path_tracking.navigation.PathTrackingScreens
 import com.mifos.feature.search.Navigation.SEARCH_SCREEN_ROUTE
 import com.mifos.feature.settings.navigation.SETTINGS_SCREEN_ROUTE
 
@@ -79,7 +81,7 @@ sealed class HomeDestinationsScreen(
 
     data object PathTrackerScreen : HomeDestinationsScreen(
         title = "Path Tracker",
-        route = PATH_TRACKING_SCREEN_ROUTE,
+        route = PathTrackingScreens.PathTrackingScreen.route,
         icon = Icons.Rounded.PersonPinCircle
     )
 
diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/activity/pathtracking/PathTrackingActivity.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/activity/pathtracking/PathTrackingActivity.kt
index 3eb17534ae..e1fb768f65 100644
--- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/activity/pathtracking/PathTrackingActivity.kt
+++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/activity/pathtracking/PathTrackingActivity.kt
@@ -27,9 +27,9 @@ class PathTrackingActivity : MifosBaseActivity() {
         setContent {
             PathTrackingScreen(
                 onBackPressed = { finish() },
-                onPathTrackingClick = { userLatLngs ->
-                    onUserLocationClick(userLatLngs)
-                }
+//                onPathTrackingClick = { userLatLngs ->
+//                    onUserLocationClick(userLatLngs)
+//                }
             )
         }
     }
diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/components/Navigation.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/components/Navigation.kt
index 343d8c0e4e..b4b1e564e5 100644
--- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/components/Navigation.kt
+++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/components/Navigation.kt
@@ -24,7 +24,7 @@ import com.mifos.feature.loan.navigation.navigateToLoanAccountScreen
 import com.mifos.feature.loan.navigation.navigateToLoanAccountSummaryScreen
 import com.mifos.feature.note.navigation.navigateToNoteScreen
 import com.mifos.feature.note.navigation.noteScreen
-import com.mifos.feature.path_tracking.navigation.pathTrackingScreen
+import com.mifos.feature.path_tracking.navigation.pathTrackingNavGraph
 import com.mifos.feature.report.navigation.reportNavGraph
 import com.mifos.feature.savings.navigation.addSavingsAccountScreen
 import com.mifos.feature.savings.navigation.navigateToAddSavingsAccount
@@ -127,8 +127,9 @@ fun Navigation(
         checkerInboxTaskGraph(
             navController = navController
         )
-        pathTrackingScreen(
-            onBackPressed = { navController.popBackStack() }
+        
+        pathTrackingNavGraph(
+            navController = navController
         )
 
         settingsScreen(