refactor: simplify setOwner logic

pull/639/head
andrekir 2023-05-26 16:18:02 -03:00
rodzic 956db658e9
commit 7ca724142f
3 zmienionych plików z 10 dodań i 27 usunięć

Wyświetl plik

@ -2,6 +2,7 @@ package com.geeksville.mesh
import android.graphics.Color
import android.os.Parcelable
import com.geeksville.mesh.MeshProtos.User
import com.geeksville.mesh.util.bearing
import com.geeksville.mesh.util.latLongToMeter
import com.geeksville.mesh.util.anonymize
@ -27,6 +28,9 @@ data class MeshUser(
return "MeshUser(id=${id.anonymize}, longName=${longName.anonymize}, shortName=${shortName.anonymize}, hwModel=${hwModelString}, isLicensed=${isLicensed})"
}
fun toProto(): User = User.newBuilder().setId(id).setLongName(longName).setShortName(shortName)
.setHwModel(hwModel).setIsLicensed(isLicensed).build()
/** a string version of the hardware model, converted into pretty lowercase and changing _ to -, and p to dot
* or null if unset
* */

Wyświetl plik

@ -426,8 +426,6 @@ class UIViewModel @Inject constructor(
try {
// Pull down our real node ID - This must be done AFTER reading the nodedb because we need the DB to find our nodeinof object
nodeDB.setMyId(service.myId)
val ownerName = nodes[service.myId]?.user?.longName
_ownerName.value = ownerName
} catch (ex: Exception) {
warn("Ignoring failure to get myId, service is probably just uninited... ${ex.message}")
}
@ -520,12 +518,6 @@ class UIViewModel @Inject constructor(
}
}
/// our name in hte radio
/// Note, we generate owner initials automatically for now
/// our activity will read this from prefs or set it to the empty string
private val _ownerName = MutableLiveData<String?>()
val ownerName: LiveData<String?> get() = _ownerName
val provideLocation = object : MutableLiveData<Boolean>(preferences.getBoolean("provide-location", false)) {
override fun setValue(value: Boolean) {
super.setValue(value)
@ -536,22 +528,8 @@ class UIViewModel @Inject constructor(
}
}
fun setOwner(user: MeshUser) = with(user) {
longName.trim().let { ownerName ->
// note: we allow an empty user string to be written to prefs
_ownerName.value = ownerName
preferences.edit { putString("owner", ownerName) }
}
// Note: we are careful to not set a new unique ID
if (_ownerName.value!!.isNotEmpty())
try {
// Note: we use ?. here because we might be running in the emulator
meshService?.setOwner(user)
} catch (ex: RemoteException) {
errormsg("Can't set username on device, is device offline? ${ex.message}")
}
fun setOwner(user: User) {
setRemoteOwner(myNodeNum ?: return, user)
}
fun setRemoteOwner(destNum: Int, user: User) {
@ -726,7 +704,7 @@ class UIViewModel @Inject constructor(
longName = if (hasLongName()) longName else it.longName,
shortName = if (hasShortName()) shortName else it.shortName
)
setOwner(user)
setOwner(user.toProto())
}
if (hasChannelUrl()) {
setChannels(ChannelSet(Uri.parse(channelUrl)))

Wyświetl plik

@ -280,7 +280,8 @@ class SettingsFragment : ScreenFragment("Settings"), Logging {
regionAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinner.adapter = regionAdapter
model.ownerName.observe(viewLifecycleOwner) { name ->
model.ourNodeInfo.asLiveData().observe(viewLifecycleOwner) { node ->
val name = node?.user?.longName
binding.usernameEditText.isEnabled = !name.isNullOrEmpty() && !model.isManaged
binding.usernameEditText.setText(name)
}
@ -361,7 +362,7 @@ class SettingsFragment : ScreenFragment("Settings"), Logging {
val n = binding.usernameEditText.text.toString().trim()
model.ourNodeInfo.value?.user?.let {
val user = it.copy(longName = n, shortName = getInitials(n))
if (n.isNotEmpty()) model.setOwner(user)
if (n.isNotEmpty()) model.setOwner(user.toProto())
}
requireActivity().hideKeyboard()
}