refactor(config): pass destNum via setFragmentResultListener

This commit is contained in:
andrekir 2024-04-15 17:56:47 -03:00
parent e6e85d6403
commit c15c3d8c09
8 changed files with 44 additions and 42 deletions

View file

@ -48,7 +48,8 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.core.content.ContextCompat
import androidx.fragment.app.activityViewModels
import androidx.fragment.app.setFragmentResultListener
import androidx.fragment.app.viewModels
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.navigation.NavHostController
@ -61,7 +62,6 @@ import com.geeksville.mesh.android.Logging
import com.geeksville.mesh.config
import com.geeksville.mesh.model.Channel
import com.geeksville.mesh.model.RadioConfigViewModel
import com.geeksville.mesh.model.UIViewModel
import com.geeksville.mesh.moduleConfig
import com.geeksville.mesh.service.MeshService.ConnectionState
import com.geeksville.mesh.ui.components.PreferenceCategory
@ -95,18 +95,22 @@ import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class DeviceSettingsFragment : ScreenFragment("Radio Configuration"), Logging {
private val model: UIViewModel by activityViewModels()
private val model: RadioConfigViewModel by viewModels()
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
setFragmentResultListener("requestKey") { _, bundle ->
val destNum = bundle.getInt("destNum")
model.setDestNum(destNum)
}
return ComposeView(requireContext()).apply {
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
setBackgroundColor(ContextCompat.getColor(context, R.color.colorAdvancedBackground))
setContent {
// TODO change destNode to destNum and pass as navigation argument
val node by model.destNode.collectAsStateWithLifecycle()
AppCompatTheme {
@ -138,6 +142,7 @@ class DeviceSettingsFragment : ScreenFragment("Radio Configuration"), Logging {
) { innerPadding ->
RadioConfigNavHost(
node = node,
viewModel = model,
navController = navController,
modifier = Modifier.padding(innerPadding),
)
@ -231,12 +236,10 @@ fun RadioConfigNavHost(
val connectionState by viewModel.connectionState.collectAsStateWithLifecycle()
val connected = connectionState == ConnectionState.CONNECTED && node != null
val myNodeInfo by viewModel.myNodeInfo.collectAsStateWithLifecycle() // FIXME
val destNum = node?.num ?: 0
val isLocal = destNum == myNodeInfo?.myNodeNum
val isLocal = destNum == viewModel.myNodeNum
val radioConfigState by viewModel.radioConfigState.collectAsStateWithLifecycle()
var location by remember(node) { mutableStateOf(node?.position) } // FIXME
val deviceProfile by viewModel.deviceProfile.collectAsStateWithLifecycle()
val isWaiting = radioConfigState.responseState.isWaiting()
@ -399,14 +402,13 @@ fun RadioConfigNavHost(
composable(ConfigRoute.POSITION.name) {
PositionConfigItemList(
isLocal = isLocal,
location = location,
location = node?.position,
positionConfig = radioConfigState.radioConfig.position,
enabled = connected,
onSaveClicked = { locationInput, positionInput ->
if (positionInput.fixedPosition) {
if (locationInput != null && locationInput != location) {
if (locationInput != null && locationInput != node?.position) {
viewModel.setFixedPosition(locationInput)
location = locationInput
}
} else {
if (radioConfigState.radioConfig.position.fixedPosition) {

View file

@ -18,7 +18,9 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.shadow
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.unit.dp
import androidx.core.os.bundleOf
import androidx.fragment.app.activityViewModels
import androidx.fragment.app.setFragmentResult
import androidx.lifecycle.asLiveData
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
@ -171,7 +173,7 @@ class UsersFragment : ScreenFragment("Users"), Logging {
}
R.id.remote_admin -> {
debug("calling remote admin --> destNum: ${node.num.toUInt()}")
model.setDestNode(node)
setFragmentResult("requestKey", bundleOf("destNum" to node.num))
parentFragmentManager.beginTransaction()
.replace(R.id.mainActivityLayout, DeviceSettingsFragment())
.addToBackStack(null)

View file

@ -32,8 +32,8 @@ fun PositionConfigItemList(
onSaveClicked: (position: Position?, config: PositionConfig) -> Unit,
) {
val focusManager = LocalFocusManager.current
var locationInput by remember { mutableStateOf(location) }
var positionInput by remember { mutableStateOf(positionConfig) }
var locationInput by remember(location) { mutableStateOf(location) }
var positionInput by remember(positionConfig) { mutableStateOf(positionConfig) }
LazyColumn(
modifier = Modifier.fillMaxSize()
@ -182,8 +182,6 @@ fun PositionConfigItemList(
enabled = positionInput != positionConfig || locationInput != location,
onCancelClicked = {
focusManager.clearFocus()
locationInput = location
positionInput = positionConfig
},
onSaveClicked = {
focusManager.clearFocus()