diff --git a/app/src/main/java/com/geeksville/mesh/model/UIState.kt b/app/src/main/java/com/geeksville/mesh/model/UIState.kt
index 33bd1f7b..fe54d37e 100644
--- a/app/src/main/java/com/geeksville/mesh/model/UIState.kt
+++ b/app/src/main/java/com/geeksville/mesh/model/UIState.kt
@@ -5,8 +5,10 @@ import android.content.SharedPreferences
import android.graphics.Bitmap
import android.os.RemoteException
import android.util.Base64
+import androidx.compose.Model
import androidx.compose.mutableStateOf
import androidx.core.content.edit
+import com.geeksville.android.BuildUtils.isEmulator
import com.geeksville.android.Logging
import com.geeksville.mesh.IMeshService
import com.geeksville.mesh.MeshProtos
@@ -16,18 +18,21 @@ import com.google.zxing.BarcodeFormat
import com.google.zxing.MultiFormatWriter
import com.journeyapps.barcodescanner.BarcodeEncoder
+@Model
data class Channel(
- val name: String,
- val num: Int,
- val modemConfig: ModemConfig = ModemConfig.Bw125Cr45Sf128
+ var name: String,
+ var modemConfig: ModemConfig
) {
companion object {
// Placeholder when emulating
- val emulated = Channel("Default", 7)
+ val emulated = Channel("Default", ModemConfig.Bw125Cr45Sf128)
}
- constructor(c: MeshProtos.ChannelSettings) : this(c.name, c.channelNum, c.modemConfig) {
+ constructor(c: MeshProtos.ChannelSettings) : this(c.name, c.modemConfig) {
}
+
+ /// Can this channel be changed right now?
+ var editable = false
}
/**
@@ -60,7 +65,19 @@ object UIState : Logging {
/// our activity will read this from prefs or set it to the empty string
var ownerName: String = "MrInIDE Ownername"
- fun getChannel() = radioConfig.value?.channelSettings?.let { Channel(it) }
+ /**
+ * Return the current channel info
+ * FIXME, we should sim channels at the MeshService level if we are running on an emulator,
+ * for now I just fake it by returning a canned channel.
+ */
+ fun getChannel(): Channel? {
+ val channel = radioConfig.value?.channelSettings?.let { Channel(it) }
+
+ return if (channel == null && isEmulator)
+ Channel.emulated
+ else
+ channel
+ }
/// Return an URL that represents the current channel values
fun getChannelUrl(context: Context): String {
diff --git a/app/src/main/java/com/geeksville/mesh/ui/Channel.kt b/app/src/main/java/com/geeksville/mesh/ui/Channel.kt
index 2ba40fa6..a55a5c5b 100644
--- a/app/src/main/java/com/geeksville/mesh/ui/Channel.kt
+++ b/app/src/main/java/com/geeksville/mesh/ui/Channel.kt
@@ -4,10 +4,10 @@ import android.content.Intent
import androidx.compose.Composable
import androidx.ui.core.ContextAmbient
import androidx.ui.core.Text
+import androidx.ui.input.ImeAction
import androidx.ui.layout.*
import androidx.ui.material.MaterialTheme
import androidx.ui.material.OutlinedButton
-import androidx.ui.material.ripple.Ripple
import androidx.ui.tooling.preview.Preview
import androidx.ui.unit.dp
import com.geeksville.analytics.DataPair
@@ -31,24 +31,65 @@ fun ChannelContent(channel: Channel?) {
Column(modifier = LayoutSize.Fill + LayoutPadding(16.dp)) {
if (channel != null) {
+ Row(modifier = LayoutGravity.Center) {
+
+ Text(text = "Channel ", modifier = LayoutGravity.Center)
+
+ if (channel.editable) {
+ // FIXME - limit to max length
+ StyledTextField(
+ value = channel.name,
+ onValueChange = { channel.name = it },
+ textStyle = typography.h4.copy(
+ color = palette.onSecondary.copy(alpha = 0.8f)
+ ),
+ imeAction = ImeAction.Send,
+ onImeActionPerformed = {
+ TODO()
+ }
+ )
+ } else {
+ Text(
+ text = channel.name,
+ style = typography.h4
+ )
+ }
+ }
+
+ // simulated qr code
+ // val image = imageResource(id = R.drawable.qrcode)
+ val image = AndroidImage(UIState.getChannelQR(context))
+
+ ScaledImage(
+ image = image,
+ modifier = LayoutGravity.Center + LayoutSize.Min(200.dp, 200.dp)
+ )
+
Text(
- text = "Channel: ${channel.name}",
- modifier = LayoutGravity.Center,
- style = typography.h4
+ text = "Mode: ${channel.modemConfig.toHumanString()}",
+ modifier = LayoutGravity.Center + LayoutPadding(bottom = 16.dp)
)
Row(modifier = LayoutGravity.Center) {
- // simulated qr code
- // val image = imageResource(id = R.drawable.qrcode)
- val image = AndroidImage(UIState.getChannelQR(context))
- ScaledImage(
- image = image,
- modifier = LayoutGravity.Center + LayoutSize.Min(200.dp, 200.dp)
- )
+ OutlinedButton(onClick = {
+ channel.editable = !channel.editable
+ }) {
+ if (channel.editable)
+ VectorImage(
+ id = R.drawable.ic_twotone_lock_open_24,
+ tint = palette.onBackground
+ )
+ else
+ VectorImage(
+ id = R.drawable.ic_twotone_lock_24,
+ tint = palette.onBackground
+ )
+ }
- Ripple(bounded = false) {
- OutlinedButton(modifier = LayoutGravity.Center + LayoutPadding(start = 24.dp),
+ // Only show the share buttone once we are locked
+ if (!channel.editable)
+ OutlinedButton(modifier = LayoutPadding(start = 24.dp),
onClick = {
GeeksvilleApplication.analytics.track(
"share",
@@ -58,7 +99,10 @@ fun ChannelContent(channel: Channel?) {
val sendIntent: Intent = Intent().apply {
action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_TEXT, UIState.getChannelUrl(context))
- putExtra(Intent.EXTRA_TITLE, "A URL for joining a Meshtastic mesh")
+ putExtra(
+ Intent.EXTRA_TITLE,
+ "A URL for joining a Meshtastic mesh"
+ )
type = "text/plain"
}
@@ -70,17 +114,7 @@ fun ChannelContent(channel: Channel?) {
tint = palette.onBackground
)
}
- }
}
-
- Text(
- text = "Number: ${channel.num}",
- modifier = LayoutGravity.Center
- )
- Text(
- text = "Mode: ${channel.modemConfig.toHumanString()}",
- modifier = LayoutGravity.Center
- )
}
}
}
diff --git a/app/src/main/proto b/app/src/main/proto
index 66e92674..398fdf36 160000
--- a/app/src/main/proto
+++ b/app/src/main/proto
@@ -1 +1 @@
-Subproject commit 66e926740acb30518d1fdcb901d1cc0b0d48122c
+Subproject commit 398fdf362518e9d6869247cef09f2e071b715639
diff --git a/app/src/main/res/drawable/ic_twotone_lock_24.xml b/app/src/main/res/drawable/ic_twotone_lock_24.xml
new file mode 100644
index 00000000..2c454424
--- /dev/null
+++ b/app/src/main/res/drawable/ic_twotone_lock_24.xml
@@ -0,0 +1,15 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_twotone_lock_open_24.xml b/app/src/main/res/drawable/ic_twotone_lock_open_24.xml
new file mode 100644
index 00000000..e17c4ff5
--- /dev/null
+++ b/app/src/main/res/drawable/ic_twotone_lock_open_24.xml
@@ -0,0 +1,15 @@
+
+
+
+