begin support for showing/sharing qr codes for channel settings

pull/8/head
geeksville 2020-02-11 19:19:56 -08:00
rodzic 4ca5828914
commit b17e7231c0
8 zmienionych plików z 60 dodań i 9 usunięć

22
TODO.md
Wyświetl plik

@ -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

Wyświetl plik

@ -87,6 +87,23 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- The QR codes to share channel settings are shared as meshtastic URLS
an approximate example:
http://www.meshtastic.org/s/YXNkZnF3ZXJhc2RmcXdlcmFzZGZxd2Vy
-->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="http"
android:host="www.meshtastic.org"
android:pathPrefix="/s" />
</intent-filter>
</activity>
<receiver android:name="com.geeksville.mesh.service.BootCompleteReceiver">

Wyświetl plik

@ -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?
*/

Wyświetl plik

@ -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<NodeInfo> = toRemoteExceptions {
val r = nodeDBbyID.values.toTypedArray()
info("in getOnline, count=${r.size}")

Wyświetl plik

@ -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

Wyświetl plik

@ -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

BIN
images/qrcode.png 100644

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 690 B

10
images/qrcode.svg 100644

File diff suppressed because one or more lines are too long

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 14 KiB