diff --git a/TODO.md b/TODO.md index 36c184005..d0aab1bce 100644 --- a/TODO.md +++ b/TODO.md @@ -1,23 +1,20 @@ # High priority MVP features required for first public alpha -* do setOwner every time we connect to the radio, use our settings +* when a text arrives, move that node info card to the bottom on the window - put the text to the left of the card. with a small arrow/distance/shortname +* let the user type texts somewhere * include a background behind our cloud graphics, so redraws work properly +* show direction and distance on the nodeinfo cards +* show radio config screen, it shows past channels (and the current one) +* do setOwner every time we connect to the radio, use our settings, radio should ignore if unchanged * send location data for devices that don't have a GPS - https://developer.android.com/training/location/change-location-settings * make nodeinfo card not look like ass -* when a text arrives, move that node info card to the bottom on the window - put the text to the left of the card. with a small arrow/distance/shortname -* all chat in the app defaults to group chat -* make my android app show mesh state -* add app icon -* when notified phone should automatically download messages * at connect we might receive messages before finished downloading the nodeinfo. In that case, process those messages later -* use https://codelabs.developers.google.com/codelabs/jetpack-compose-basics/#4 to show service state * connect to bluetooth device automatically using minimum power - start looking at phone boot * fix BT device scanning * call crashlytics from exceptionReporter!!! currently not logging failures caught there -* show direction and distance on the nodeinfo cards * test with oldest compatible android in emulator (see below for testing with hardware) -* make playstore entry +* make playstore entry, first public alpha # Signal alpha release Do this "Signal app compatible" release relatively soon after the alpha release of the android app. @@ -36,6 +33,9 @@ Do this "Signal app compatible" release relatively soon after the alpha release # Medium priority Things for the betaish period. +* make my android app show mesh state +* show qr code for each channel https://medium.com/@aanandshekharroy/generate-barcode-in-android-app-using-zxing-64c076a5d83a +* register app link for our URLs https://developer.android.com/studio/write/app-link-indexing.html * let user change radio params and share radio join info via QR code or text message (use an encoded app specific URL - to autoprompt for app installation as needed) * test with an oldish android release using real hardware * if necessary restart entire BT adapter with this tip from Michael https://stackoverflow.com/questions/35103701/ble-android-onconnectionstatechange-not-being-called @@ -88,3 +88,7 @@ Don't leave device discoverable. Don't let unpaired users do things with device * don't do mesh based algoritm for node id assignment (initially) - instead just store in flash - possibly even in the initial alpha release do this hack * show connection state on gui * parcels are busted - something wrong with the Parcelize kotlin magic +* add app icon +* when notified phone should automatically download messages +* use https://codelabs.developers.google.com/codelabs/jetpack-compose-basics/#4 to show service state +* all chat in the app defaults to group chat diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 88f169851..a805bd080 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -87,6 +87,23 @@ + + + + + + + + + + diff --git a/app/src/main/aidl/com/geeksville/mesh/IMeshService.aidl b/app/src/main/aidl/com/geeksville/mesh/IMeshService.aidl index 503350b1f..d90384321 100644 --- a/app/src/main/aidl/com/geeksville/mesh/IMeshService.aidl +++ b/app/src/main/aidl/com/geeksville/mesh/IMeshService.aidl @@ -32,6 +32,14 @@ interface IMeshService { */ NodeInfo[] getNodes(); + /// This method is only intended for use in our GUI, so the user can set radio options + /// It returns a RadioConfig protobuf. + byte []getRadioConfig(); + + /// This method is only intended for use in our GUI, so the user can set radio options + /// It sets a RadioConfig protobuf + void setRadioConfig(in byte []payload); + /** Is the packet radio currently connected to the phone? */ diff --git a/app/src/main/java/com/geeksville/mesh/service/MeshService.kt b/app/src/main/java/com/geeksville/mesh/service/MeshService.kt index b1f8e621c..92b94ac6d 100644 --- a/app/src/main/java/com/geeksville/mesh/service/MeshService.kt +++ b/app/src/main/java/com/geeksville/mesh/service/MeshService.kt @@ -541,6 +541,14 @@ class MeshService : Service(), Logging { }) } + override fun getRadioConfig(): ByteArray = toRemoteExceptions { + return connectedRadio.readRadioConfig() + } + + override fun setRadioConfig(payload: ByteArray) = toRemoteExceptions { + connectedRadio.writeRadioConfig(payload) + } + override fun getNodes(): Array = toRemoteExceptions { val r = nodeDBbyID.values.toTypedArray() info("in getOnline, count=${r.size}") diff --git a/app/src/main/proto/mesh.options b/app/src/main/proto/mesh.options index f27659858..62503d11c 100644 --- a/app/src/main/proto/mesh.options +++ b/app/src/main/proto/mesh.options @@ -16,6 +16,7 @@ # 128 bit psk key (we don't use 256 bit yet because we want to keep our QR code small) *ChannelSettings.psk max_size:16 fixed_length:true +*ChannelSettings.name max_size:12 # MyMessage.name max_size:40 # or fixed_length or fixed_count, or max_count diff --git a/app/src/main/proto/mesh.proto b/app/src/main/proto/mesh.proto index 3eca3e800..029d2dde4 100644 --- a/app/src/main/proto/mesh.proto +++ b/app/src/main/proto/mesh.proto @@ -171,6 +171,9 @@ message ChannelSettings { /// A simple preshared key for now for crypto. At first I'm using 128 bit (16 byte) block for the Speck crypto /// but for beta we'll want something more carefully thought through. I want to keep the QR code small bytes psk = 4; + + /// A SHORT name that will be packed into the URL. Less than 12 bytes. Something for end users to call the channel + string name = 5; } // The entire set of user settable/readable settings for our radio device. Includes both the current channel settings diff --git a/images/qrcode.png b/images/qrcode.png new file mode 100644 index 000000000..c92845a5f Binary files /dev/null and b/images/qrcode.png differ diff --git a/images/qrcode.svg b/images/qrcode.svg new file mode 100644 index 000000000..574c0455f --- /dev/null +++ b/images/qrcode.svg @@ -0,0 +1,10 @@ + + + + QR Code + http://www.meshtastic.org/s/YXNkZnF3ZXJhc2RmcXdlcmFzZGZxd2Vy + + + + +