Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 435c335c authored by Ellen Poe's avatar Ellen Poe
Browse files

feat: new navigation overlay views

parent d78c17d6
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -110,7 +110,7 @@ import earth.maps.cardinal.routing.RouteRepository
import earth.maps.cardinal.ui.directions.DirectionsScreen
import earth.maps.cardinal.ui.directions.DirectionsScreen
import earth.maps.cardinal.ui.directions.DirectionsViewModel
import earth.maps.cardinal.ui.directions.DirectionsViewModel
import earth.maps.cardinal.ui.directions.RouteDisplayHandler
import earth.maps.cardinal.ui.directions.RouteDisplayHandler
import earth.maps.cardinal.ui.directions.TurnByTurnNavigationScreen
import earth.maps.cardinal.ui.navigation.TurnByTurnNavigationScreen
import earth.maps.cardinal.ui.home.HomeScreen
import earth.maps.cardinal.ui.home.HomeScreen
import earth.maps.cardinal.ui.home.HomeViewModel
import earth.maps.cardinal.ui.home.HomeViewModel
import earth.maps.cardinal.ui.home.NearbyScreenContent
import earth.maps.cardinal.ui.home.NearbyScreenContent
+95 −0
Original line number Original line Diff line number Diff line
package earth.maps.cardinal.ui.navigation

import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.stadiamaps.ferrostar.composeui.config.NavigationViewComponentBuilder
import com.stadiamaps.ferrostar.composeui.models.CameraControlState
import com.stadiamaps.ferrostar.composeui.theme.DefaultNavigationUITheme
import com.stadiamaps.ferrostar.composeui.views.components.CurrentRoadNameView
import com.stadiamaps.ferrostar.composeui.views.components.InstructionsView
import com.stadiamaps.ferrostar.composeui.views.components.TripProgressView
import com.stadiamaps.ferrostar.core.NavigationUiState
import kotlin.time.ExperimentalTime

@Composable
fun CardinalInstructionsView(modifier: Modifier, uiState: NavigationUiState) {
    uiState.visualInstruction?.let { instructions ->
        InstructionsView(
            modifier = modifier,
            instructions = instructions,
            theme = DefaultNavigationUITheme.instructionRowTheme,
            remainingSteps = uiState.remainingSteps,
            distanceToNextManeuver = uiState.progress?.distanceToNextManeuver)
    }
}

@OptIn(ExperimentalTime::class)
@Composable
fun CardinalProgressView(
    modifier: Modifier,
    uiState: NavigationUiState,
    onTapExit: (() -> Unit)?
) {
    uiState.progress?.let { progress ->
        TripProgressView(
            modifier = modifier,
            theme = DefaultNavigationUITheme.tripProgressViewTheme,
            progress = progress,
            onTapExit = onTapExit)
    }
}

@Composable
fun CardinalRoadNameView(
    modifier: Modifier,
    roadName: String?,
    cameraControlState: CameraControlState
) {
    if (cameraControlState is CameraControlState.ShowRouteOverview) {
        roadName?.let { roadName ->
            Row(
                modifier.fillMaxWidth(),
                verticalAlignment = Alignment.Bottom,
                horizontalArrangement = Arrangement.Center) {
                CurrentRoadNameView(
                    modifier = modifier,
                    theme = DefaultNavigationUITheme.roadNameViewTheme,
                    currentRoadName = roadName)

                Spacer(modifier = Modifier.height(8.dp))
            }
        }
    }
}

fun navigationViewComponentBuilder(): NavigationViewComponentBuilder {
    return NavigationViewComponentBuilder(
        instructionsView = @Composable { modifier, navigationUiState ->
            CardinalInstructionsView(
                modifier,
                navigationUiState
            )
        },
        progressView = @Composable { modifier, navigationUiState, onTapExit ->
            CardinalProgressView(
                modifier,
                navigationUiState,
                onTapExit
            )
        },
        roadNameView = @Composable { modifier, roadName, cameraControlState ->
            CardinalRoadNameView(
                modifier,
                roadName,
                cameraControlState
            )
        },
    )
}
+5 −2
Original line number Original line Diff line number Diff line
@@ -16,7 +16,7 @@
 *     along with this program.  If not, see <https://www.gnu.org/licenses/>.
 *     along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
 */


package earth.maps.cardinal.ui.directions
package earth.maps.cardinal.ui.navigation


import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Box
@@ -107,7 +107,10 @@ fun TurnByTurnNavigationScreen(
        // Only display the navigation view if we have a route
        // Only display the navigation view if we have a route
        if (route != null) {
        if (route != null) {
            DynamicallyOrientingNavigationView(
            DynamicallyOrientingNavigationView(
                styleUrl = styleUrl, modifier = Modifier, viewModel = viewModel
                styleUrl = styleUrl,
                modifier = Modifier,
                viewModel = viewModel,
                views = navigationViewComponentBuilder()
            )
            )
        } else {
        } else {
            // Show a placeholder or loading state when no route is available
            // Show a placeholder or loading state when no route is available
+1 −1
Original line number Original line Diff line number Diff line
@@ -16,7 +16,7 @@
 *     along with this program.  If not, see <https://www.gnu.org/licenses/>.
 *     along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
 */


package earth.maps.cardinal.ui.directions
package earth.maps.cardinal.ui.navigation


import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModel
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.lifecycle.HiltViewModel
+1 −0
Original line number Original line Diff line number Diff line
@@ -19,6 +19,7 @@
package earth.maps.cardinal.ui.directions
package earth.maps.cardinal.ui.directions


import earth.maps.cardinal.routing.FerrostarWrapperRepository
import earth.maps.cardinal.routing.FerrostarWrapperRepository
import earth.maps.cardinal.ui.navigation.TurnByTurnNavigationViewModel
import io.mockk.mockk
import io.mockk.mockk
import org.junit.Assert.assertEquals
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Before