From 7752583135dfbf01ec5b91961e86d2499f4d2ee6 Mon Sep 17 00:00:00 2001 From: christianrowlands Date: Wed, 23 Oct 2024 17:07:31 -0400 Subject: [PATCH] Handle passing an argument into the MQTT Connection Fragment --- .../networksurvey/fragments/MqttFragment.java | 9 ++-- .../model/MqttConnectionSettings.java | 40 +++++++++++++++++- .../ui/main/appdrawer/AppDrawerNav.kt | 41 ++++++++++++++++--- 3 files changed, 78 insertions(+), 12 deletions(-) diff --git a/networksurvey/src/main/java/com/craxiom/networksurvey/fragments/MqttFragment.java b/networksurvey/src/main/java/com/craxiom/networksurvey/fragments/MqttFragment.java index 4e2dd757c..52a813905 100644 --- a/networksurvey/src/main/java/com/craxiom/networksurvey/fragments/MqttFragment.java +++ b/networksurvey/src/main/java/com/craxiom/networksurvey/fragments/MqttFragment.java @@ -77,6 +77,11 @@ public class MqttFragment extends AConnectionFragment CREATOR = new Creator<>() + { + @Override + public MqttConnectionSettings createFromParcel(Parcel in) + { + return new Gson().fromJson(in.readString(), MqttConnectionSettings.class); + } + + @Override + public MqttConnectionSettings[] newArray(int size) + { + return new MqttConnectionSettings[size]; + } + }; + + @Override + public int describeContents() + { + return 0; + } + + @Override + public void writeToParcel(@NonNull Parcel dest, int flags) + { + dest.writeString(new Gson().toJson(this)); + } + public static class Builder { private String host; @@ -124,7 +159,8 @@ public MqttConnectionSettings build() } } - public MqttConnectionSettings withoutDeviceName() { + public MqttConnectionSettings withoutDeviceName() + { return new MqttConnectionSettings( host, port, diff --git a/networksurvey/src/main/java/com/craxiom/networksurvey/ui/main/appdrawer/AppDrawerNav.kt b/networksurvey/src/main/java/com/craxiom/networksurvey/ui/main/appdrawer/AppDrawerNav.kt index d80b032cb..7c94f6df0 100644 --- a/networksurvey/src/main/java/com/craxiom/networksurvey/ui/main/appdrawer/AppDrawerNav.kt +++ b/networksurvey/src/main/java/com/craxiom/networksurvey/ui/main/appdrawer/AppDrawerNav.kt @@ -1,5 +1,6 @@ package com.craxiom.networksurvey.ui.main.appdrawer +import android.os.Build import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.padding @@ -9,12 +10,15 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.viewinterop.AndroidViewBinding import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavType import androidx.navigation.compose.composable import androidx.navigation.compose.navigation +import androidx.navigation.navArgument import com.craxiom.networksurvey.databinding.ContainerGrpcFragmentBinding import com.craxiom.networksurvey.databinding.ContainerMqttFragmentBinding import com.craxiom.networksurvey.databinding.ContainerSettingsFragmentBinding -import com.craxiom.networksurvey.fragments.SettingsFragment +import com.craxiom.networksurvey.fragments.MqttFragment +import com.craxiom.networksurvey.fragments.model.MqttConnectionSettings import com.craxiom.networksurvey.ui.cellular.CalculatorScreen import com.craxiom.networksurvey.ui.main.HomeScreen import com.craxiom.networksurvey.ui.main.NavRoutes @@ -28,12 +32,33 @@ fun NavGraphBuilder.mainGraph( composable(NavDrawerOption.None.name) { HomeScreen(drawerState) } + composable(NavDrawerOption.ServerConnection.name) { GrpcFragmentInCompose(paddingValues) } - composable(NavDrawerOption.MqttBrokerConnection.name) { - MqttFragmentInCompose(paddingValues) + composable( + route = "${NavDrawerOption.MqttBrokerConnection.name}?${MqttConnectionSettings.KEY}={mqttConnectionSettings}", + arguments = listOf(navArgument("mqttConnectionSettings") { + type = NavType.ParcelableType(MqttConnectionSettings::class.java) + nullable = true // Allow this argument to be nullable + }) + ) { backStackEntry -> + val mqttConnectionSettings = + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + backStackEntry.arguments?.getParcelable( + "mqttConnectionSettings", + MqttConnectionSettings::class.java + ) + } else { + @Suppress("DEPRECATION") + backStackEntry.arguments?.getParcelable(MqttConnectionSettings.KEY) + } + MqttFragmentInCompose( + paddingValues = paddingValues, + mqttConnectionSettings = mqttConnectionSettings + ) } + composable(NavDrawerOption.CellularCalculators.name) { Box(modifier = Modifier.padding(paddingValues = paddingValues)) { CalculatorScreen(viewModel = viewModel()) @@ -70,11 +95,16 @@ fun GrpcFragmentInCompose(paddingValues: PaddingValues) { } @Composable -fun MqttFragmentInCompose(paddingValues: PaddingValues) { +fun MqttFragmentInCompose( + paddingValues: PaddingValues, + mqttConnectionSettings: MqttConnectionSettings? +) { AndroidViewBinding( ContainerMqttFragmentBinding::inflate, - modifier = Modifier.padding(paddingValues = paddingValues) + modifier = Modifier.padding(paddingValues) ) { + val fragment = mqttFragmentContainerView.getFragment() + fragment.setMqttConnectionSettings(mqttConnectionSettings) } } @@ -84,6 +114,5 @@ fun SettingsFragmentInCompose(paddingValues: PaddingValues) { ContainerSettingsFragmentBinding::inflate, modifier = Modifier.padding(paddingValues = paddingValues) ) { - val fragment = settingsFragmentContainerView.getFragment() } }