From bb7e6c3d3b0f21296578ec1e2503b04dcff0b8df Mon Sep 17 00:00:00 2001
From: j1nx
Date: Sat, 9 Jan 2021 14:58:33 +0100
Subject: [PATCH] Fix resting screen issue.
---
buildroot-external/Config.in | 2 +-
.../configs/rpi4_64-gui_defconfig | 3 +-
.../package/firstboot-service/gitstash | 2 +-
.../rootfs-overlay/etc/mycroft/mycroft.conf | 4 +-
....mycroftai => mycroft-date-time.mycroftai} | 0
.../skill-balena-wifi-setup/__init__.py | 75 +++++++++------
.../ui/NetworkLoader.qml | 24 +++++
.../skill-balena-wifi-setup/ui/NotReady.qml | 65 +++++++++++++
.../skill-balena-wifi-setup/ui/Prompt.qml | 82 ++++++++++++++++
.../ui/{status.qml => Status.qml} | 30 +++---
.../ui/animations/installing.json | 1 +
.../skill-balena-wifi-setup/ui/prompt.qml | 94 -------------------
.../opt/mycroft/skills/skill-ovos-pairing | 2 +-
13 files changed, 238 insertions(+), 146 deletions(-)
rename buildroot-external/rootfs-overlay/opt/mycroft/skills/{skill-date-time.mycroftai => mycroft-date-time.mycroftai} (100%)
create mode 100644 buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/ui/NetworkLoader.qml
create mode 100644 buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/ui/NotReady.qml
create mode 100644 buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/ui/Prompt.qml
rename buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/ui/{status.qml => Status.qml} (52%)
create mode 100644 buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/ui/animations/installing.json
delete mode 100644 buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/ui/prompt.qml
diff --git a/buildroot-external/Config.in b/buildroot-external/Config.in
index ceaac787..d0ac975a 100644
--- a/buildroot-external/Config.in
+++ b/buildroot-external/Config.in
@@ -158,7 +158,7 @@ menu "Additional external python modules"
endmenu
menu "Mycroft A.I. Personal Assistant"
source "$BR2_EXTERNAL_OPENVOICEOS_PATH/package/python-mycroft/Config.in"
-# source "$BR2_EXTERNAL_OPENVOICEOS_PATH/package/mycroft-embedded-shell/Config.in"
+ source "$BR2_EXTERNAL_OPENVOICEOS_PATH/package/mycroft-embedded-shell/Config.in"
source "$BR2_EXTERNAL_OPENVOICEOS_PATH/package/mycroft-gui/Config.in"
source "$BR2_EXTERNAL_OPENVOICEOS_PATH/package/mycroft-service/Config.in"
source "$BR2_EXTERNAL_OPENVOICEOS_PATH/package/mycroft-splash/Config.in"
diff --git a/buildroot-external/configs/rpi4_64-gui_defconfig b/buildroot-external/configs/rpi4_64-gui_defconfig
index 5a07be85..d186efa2 100644
--- a/buildroot-external/configs/rpi4_64-gui_defconfig
+++ b/buildroot-external/configs/rpi4_64-gui_defconfig
@@ -296,7 +296,7 @@ BR2_PACKAGE_NODEJS=y
BR2_PACKAGE_NODEJS_NPM=y
BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL="node-red node-red-dashboard node-red-contrib-string"
BR2_PACKAGE_PYTHON3=y
-BR2_PACKAGE_PYTHON3_PY_PYC=y
+BR2_PACKAGE_PYTHON3_PY_ONLY=y
BR2_PACKAGE_PYTHON3_BZIP2=y
BR2_PACKAGE_PYTHON3_CODECSCJK=y
BR2_PACKAGE_PYTHON3_CURSES=y
@@ -557,5 +557,6 @@ BR2_PACKAGE_PYTHON_TZLOCAL=y
BR2_PACKAGE_PYTHON_VLC=y
BR2_PACKAGE_PYTHON_XMLRUNNER=y
BR2_PACKAGE_PYTHON_MYCROFT=y
+BR2_PACKAGE_MYCROFT_EMBEDDED_SHELL=y
BR2_PACKAGE_MYCROFT_GUI=y
BR2_PACKAGE_MYCROFT_SERVICE=y
diff --git a/buildroot-external/package/firstboot-service/gitstash b/buildroot-external/package/firstboot-service/gitstash
index c9eef08c..67875c14 100755
--- a/buildroot-external/package/firstboot-service/gitstash
+++ b/buildroot-external/package/firstboot-service/gitstash
@@ -8,7 +8,7 @@ cd /opt/mycroft/skills/skill-ovos-enclosure && git stash
cd /opt/mycroft/skills/skill-ovos-mycroftgui && git stash
cd /opt/mycroft/skills/skill-ovos-pairing && git stash
cd /opt/mycroft/skills/skill-ovos-homescreen && git stash
-cd /opt/mycroft/skills/skill-date-time.mycroftai && git stash
+cd /opt/mycroft/skills/mycroft-date-time.mycroftai && git stash
chown -R mycroft.mycroft /opt/mycroft
echo "[OK]"
diff --git a/buildroot-external/rootfs-overlay/etc/mycroft/mycroft.conf b/buildroot-external/rootfs-overlay/etc/mycroft/mycroft.conf
index 07cd7746..687298c6 100644
--- a/buildroot-external/rootfs-overlay/etc/mycroft/mycroft.conf
+++ b/buildroot-external/rootfs-overlay/etc/mycroft/mycroft.conf
@@ -20,8 +20,8 @@
"pulse_duck": true
},
"skills": {
- "blacklisted_skills": ["mycroft-pairing.mycroftai", "mycroft-mark-2.mycroftai"],
- "priority_skills": ["skill-ovos-enclosure", "skill-ovos-mycroftgui", "skill-balena-wifi-setup", "skill-ovos-pairing", "skill-date-time", "skill-ovos-homescreen"]
+ "blacklisted_skills": ["mycroft-pairing.mycroftai"],
+ "priority_skills": ["skill-ovos-enclosure", "skill-ovos-mycroftgui", "skill-balena-wifi-setup", "skill-ovos-pairing"]
},
"log_level": "INFO"
}
diff --git a/buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-date-time.mycroftai b/buildroot-external/rootfs-overlay/opt/mycroft/skills/mycroft-date-time.mycroftai
similarity index 100%
rename from buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-date-time.mycroftai
rename to buildroot-external/rootfs-overlay/opt/mycroft/skills/mycroft-date-time.mycroftai
diff --git a/buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/__init__.py b/buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/__init__.py
index 963e80a0..57f369d5 100755
--- a/buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/__init__.py
+++ b/buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/__init__.py
@@ -21,6 +21,7 @@ class WifiConnect(MycroftSkill):
self.pswd = None
self.grace_period = 45
self.time_between_checks = 30 # seconds
+ self.mycroft_ready = False
self.wifi_command = "sudo /usr/local/sbin/wifi-connect --portal-ssid {ssid}"
if self.pswd:
self.wifi_command += " --portal-passphrase {pswd}"
@@ -35,8 +36,13 @@ class WifiConnect(MycroftSkill):
self.make_priority()
self.add_event("mycroft.internet.connected",
self.handle_internet_connected)
+ self.add_event("mycroft.ready",
+ self.handle_mycroft_ready)
self.start_internet_check()
+ def handle_mycroft_ready(self):
+ self.mycroft_ready = True
+
def make_priority(self):
if not self.skill_id:
# might not be set yet....
@@ -221,24 +227,13 @@ class WifiConnect(MycroftSkill):
# GUI events
def prompt_to_join_ap(self, message=None):
"""Provide instructions for setting up wifi."""
- self.gui.remove_page("status.qml")
- self.gui["phone_image"] = "1_phone_connect-to-ap.png"
- self.gui["prompt"] = "Connect to the Wi-Fi network"
- self.gui["highlight"] = self.ssid
- self.gui["color"] = self.settings["color"]
- self.gui.show_page("prompt.qml", override_idle=True, override_animations=True)
+ self.manage_setup_display("join-ap", "prompt")
# allow GUI to linger around for a bit, will block the wifi setup loop
sleep(2)
def prompt_to_select_network(self, message=None):
"""Prompt user to select network and login."""
- self.gui.remove_page("status.qml")
- self.gui.clear()
- self.gui["phone_image"] = "3_phone_choose-wifi.png"
- self.gui["prompt"] = "Select local Wi-Fi network to connect"
- self.gui["highlight"] = "OVOS Device"
- self.gui["color"] = self.settings["color"]
- self.gui.show_page("prompt.qml", override_idle=True, override_animations=True)
+ self.manage_setup_display("select-network", "prompt")
# allow GUI to linger around for a bit, will block the wifi setup loop
sleep(2)
@@ -250,33 +245,55 @@ class WifiConnect(MycroftSkill):
# stop watchdog on internet connection
if self.settings["stop_on_internet"]:
self.monitoring = False
- self.gui.remove_page("prompt.qml")
- self.gui.clear()
- self.gui["icon"] = "check-circle.svg"
- self.gui["label"] = "Connected"
- self.gui["bgColor"] = "#40DBB0"
- self.gui.remove_page("prompt.qml")
- self.gui.show_page("status.qml", override_idle=True, override_animations=True)
+ self.manage_setup_display("setup-completed", "status")
# allow GUI to linger around for a bit, will block the wifi setup loop
sleep(3)
if not is_paired():
self.bus.emit(Message("mycroft.not.paired"))
- else:
- self.bus.emit(Message("show.not.ready"))
self.gui.release()
+ else:
+ self.manage_setup_display("not-ready", "status")
def report_setup_failed(self, message=None):
"""Wifi setup failed"""
self.speak_dialog("wifi_error")
- self.gui.remove_page("prompt.qml")
- self.gui.clear()
- self.gui["icon"] = "times-circle.svg"
- self.gui["label"] = "Connection Failed"
- self.gui["bgColor"] = "#FF0000"
- self.gui.show_page("status.qml", override_idle=True, override_animations=True)
+ self.manage_setup_display("setup-failed", "status")
# allow GUI to linger around for a bit, will block the wifi setup loop
sleep(2)
+ def manage_setup_display(self, state, page_type):
+ self.gui.clear()
+ if state == "join-ap" and page_type == "prompt":
+ self.gui["image"] = "1_phone_connect-to-ap.png"
+ self.gui["label"] = "Connect to the Wi-Fi network"
+ self.gui["highlight"] = self.ssid
+ self.gui["color"] = self.settings["color"]
+ self.gui["page_type"] = "Prompt"
+ self.gui.show_page("NetworkLoader.qml", override_animations=True)
+ elif state == "select-network" and page_type == "prompt":
+ self.gui["image"] = "3_phone_choose-wifi.png"
+ self.gui["label"] = "Select local Wi-Fi network to connect"
+ self.gui["highlight"] = "OVOS Device"
+ self.gui["color"] = self.settings["color"]
+ self.gui["page_type"] = "Prompt"
+ self.gui.show_page("NetworkLoader.qml", override_animations=True)
+ elif state == "setup-completed" and page_type == "status":
+ self.gui["image"] = "icons/check-circle.svg"
+ self.gui["label"] = "Connected"
+ self.gui["highlight"] = ""
+ self.gui["color"] = "#40DBB0"
+ self.gui["page_type"] = "Status"
+ self.gui.show_page("NetworkLoader.qml", override_animations=True)
+ elif state == "setup-failed" and page_type == "status":
+ self.gui["image"] = "icons/times-circle.svg"
+ self.gui["label"] = "Connection Failed"
+ self.gui["highlight"] = ""
+ self.gui["color"] = "#FF0000"
+ self.gui["page_type"] = "Status"
+ self.gui.show_page("NetworkLoader.qml", override_animations=True)
+ elif state == "not-ready" and page_type == "status":
+ self.gui.show_page("NotReady.qml", override_animations=True)
+
# cleanup
def stop_setup(self):
if self.wifi_process is not None:
@@ -309,5 +326,3 @@ class WifiConnect(MycroftSkill):
def create_skill():
return WifiConnect()
-
-
diff --git a/buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/ui/NetworkLoader.qml b/buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/ui/NetworkLoader.qml
new file mode 100644
index 00000000..0590aa39
--- /dev/null
+++ b/buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/ui/NetworkLoader.qml
@@ -0,0 +1,24 @@
+import QtQuick.Layouts 1.4
+import QtQuick 2.4
+import QtQuick.Controls 2.0
+import org.kde.kirigami 2.5 as Kirigami
+import Mycroft 1.0 as Mycroft
+
+Mycroft.Delegate {
+ id: mainLoaderView
+
+ property var pageType: sessionData.page_type
+ leftPadding: 0
+ rightPadding: 0
+ bottomPadding: 0
+ topPadding: 0
+
+ contentItem: Loader {
+ id: rootLoader
+ }
+
+ onPageTypeChanged: {
+ console.log(sessionData.page_type)
+ rootLoader.setSource(sessionData.page_type + ".qml")
+ }
+}
diff --git a/buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/ui/NotReady.qml b/buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/ui/NotReady.qml
new file mode 100644
index 00000000..0ded55a4
--- /dev/null
+++ b/buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/ui/NotReady.qml
@@ -0,0 +1,65 @@
+import QtQuick.Layouts 1.4
+import QtQuick 2.4
+import QtQuick.Controls 2.0
+import org.kde.kirigami 2.4 as Kirigami
+
+import Mycroft 1.0 as Mycroft
+import org.kde.lottie 1.0
+
+Mycroft.Delegate {
+ id: mainLoaderView
+
+ property var pageType: sessionData.page_type
+ leftPadding: 0
+ rightPadding: 0
+ bottomPadding: 0
+ topPadding: 0
+
+ Rectangle {
+ anchors.fill: parent
+ color: "#000000"
+
+ ColumnLayout {
+ id: grid
+ anchors.fill: parent
+ anchors.margins: Kirigami.Units.largeSpacing
+
+ Label {
+ id: statusLabel
+ Layout.alignment: Qt.AlignHCenter
+ font.pixelSize: parent.height * 0.075
+ wrapMode: Text.WordWrap
+ renderType: Text.NativeRendering
+ font.family: "Noto Sans Display"
+ font.styleName: "Black"
+ text: "Starting Up"
+ color: "white"
+ }
+
+ Label {
+ id: statusLabel2
+ Layout.alignment: Qt.AlignHCenter
+ font.pixelSize: parent.height * 0.075
+ wrapMode: Text.WordWrap
+ renderType: Text.NativeRendering
+ font.family: "Noto Sans Display"
+ font.styleName: "Black"
+ text: "Loading..."
+ color: "#ff0000"
+ }
+
+ LottieAnimation {
+ id: statusIcon
+ visible: true
+ enabled: true
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ Layout.alignment: Qt.AlignHCenter
+ loops: Animation.Infinite
+ fillMode: Image.PreserveAspectFit
+ running: true
+ source: Qt.resolvedUrl("animations/installing.json")
+ }
+ }
+ }
+}
diff --git a/buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/ui/Prompt.qml b/buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/ui/Prompt.qml
new file mode 100644
index 00000000..7f91306e
--- /dev/null
+++ b/buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/ui/Prompt.qml
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2018 by Aditya Mehra
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import QtQuick.Layouts 1.4
+import QtQuick 2.4
+import QtQuick.Controls 2.0
+import org.kde.kirigami 2.4 as Kirigami
+import Mycroft 1.0 as Mycroft
+
+Rectangle {
+ id: root
+ property var spacingUnit: 30
+ property bool horizontalMode: root.width > root.height ? 1 : 0
+ anchors.fill: parent
+ color: "#000000"
+
+ GridLayout {
+ anchors.fill: parent
+ anchors.margins: Kirigami.Units.largeSpacing
+ columns: horizontalMode ? 2 : 1
+
+ ColumnLayout {
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+
+ Kirigami.Heading {
+ id: sentence
+ Layout.fillWidth: true
+ Layout.alignment: horizontalMode ? Qt.AlignLeft : Qt.AlignHCenter | Qt.AlignVCenter
+ Layout.leftMargin: horizontalMode ? spacingUnit : 0
+ horizontalAlignment: horizontalMode ? Text.AlignLeft : Text.AlignHCenter
+ verticalAlignment: horizontalMode ? Text.AlignVCenter : Text.AlignTop
+ wrapMode: Text.WordWrap
+ elide: Text.ElideRight
+ font.family: "Noto Sans"
+ font.bold: true
+ font.weight: Font.Bold
+ font.pixelSize: horizontalMode ? root.width * 0.065 : root.height * 0.075
+ text: sessionData.label
+ }
+ Kirigami.Heading {
+ id: url
+ Layout.fillWidth: true
+ Layout.leftMargin: horizontalMode ? spacingUnit : 0
+ Layout.alignment: horizontalMode ? Qt.AlignLeft : Qt.AlignHCenter | Qt.AlignTop
+ horizontalAlignment: horizontalMode ? Text.AlignLeft : Text.AlignHCenter
+ verticalAlignment: horizontalMode ? Text.AlignVCenter : Text.AlignTop
+ wrapMode: Text.WordWrap
+ elide: Text.ElideRight
+ font.family: "Noto Sans"
+ font.bold: true
+ font.weight: Font.Bold
+ font.pixelSize: horizontalMode ? root.width * 0.065 : root.height * 0.075
+ color: sessionData.color
+ text: sessionData.highlight
+ }
+ }
+
+ Image {
+ id: img
+ source: sessionData.image
+ Layout.preferredWidth: horizontalMode ? parent.width / 2 : parent.width
+ Layout.preferredHeight: horizontalMode ? parent.height * 0.9 : parent.height / 2
+ Layout.alignment: Qt.AlignBottom
+ fillMode: Image.PreserveAspectFit
+ }
+ }
+}
diff --git a/buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/ui/status.qml b/buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/ui/Status.qml
similarity index 52%
rename from buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/ui/status.qml
rename to buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/ui/Status.qml
index 595a025e..6fbdd3f8 100644
--- a/buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/ui/status.qml
+++ b/buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/ui/Status.qml
@@ -5,33 +5,31 @@ import org.kde.kirigami 2.4 as Kirigami
import Mycroft 1.0 as Mycroft
-Mycroft.ProportionalDelegate {
+Rectangle {
id: root
- skillBackgroundColorOverlay: sessionData.bgColor
+ anchors.fill: parent
+ color: sessionData.color
+ property bool horizontalMode: root.width > root.height ? 1 : 0
ColumnLayout {
id: grid
- anchors.centerIn: parent
-
+ anchors.fill: parent
+
Image {
id: statusIcon
visible: true
enabled: true
- anchors.horizontalCenter: grid.horizontalCenter
- Layout.preferredWidth: proportionalGridUnit * 50
- Layout.preferredHeight: proportionalGridUnit * 50
- source: Qt.resolvedUrl(`icons/${sessionData.icon}`)
- }
-
- /* Add some spacing between icon and text */
- Item {
- height: Kirigami.Units.largeSpacing
+ Layout.preferredWidth: horizontalMode ? parent.width / 4 : parent.width / 2
+ Layout.preferredHeight: width
+ Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter
+ source: sessionData.image
}
Label {
id: statusLabel
- Layout.alignment: Qt.AlignHCenter
- font.pixelSize: 65
+ Layout.alignment: Qt.AlignBottom | Qt.AlignHCenter
+ Layout.bottomMargin: Kirigami.Units.largeSpacing
+ font.pixelSize: parent.width * 0.075
wrapMode: Text.WordWrap
renderType: Text.NativeRendering
font.family: "Noto Sans Display"
@@ -41,4 +39,4 @@ Mycroft.ProportionalDelegate {
color: "white"
}
}
-}
\ No newline at end of file
+}
diff --git a/buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/ui/animations/installing.json b/buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/ui/animations/installing.json
new file mode 100644
index 00000000..ab84a1be
--- /dev/null
+++ b/buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/ui/animations/installing.json
@@ -0,0 +1 @@
+{"v":"5.4.3","fr":29.9700012207031,"ip":0,"op":70.0000028511585,"w":307,"h":389,"nm":"refresh-button","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-44,"ix":10},"p":{"a":0,"k":[154.149,195.327,0],"ix":2},"a":{"a":0,"k":[-2.021,-4,0],"ix":1},"s":{"a":0,"k":[71.946,71.946,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[217,217],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.211764705882,0.211764705882,0.211764705882,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":1,"ml":4,"ml2":{"a":0,"k":4,"ix":8},"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":33,"ix":1}},{"n":"o","nm":"offset","v":{"a":0,"k":0,"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-1.5,-4],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.625],"y":[0]},"n":["0p667_1_0p625_0"],"t":26,"s":[0],"e":[100]},{"t":65.0000026475043}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[1],"y":[0]},"n":["0p667_1_1_0"],"t":7,"s":[0],"e":[100]},{"t":41.0000016699642}],"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[-179],"e":[181]},{"t":65.0000026475043}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":70.0000028511585,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-44,"ix":10},"p":{"a":0,"k":[154.149,195.327,0],"ix":2},"a":{"a":0,"k":[-2.021,-4,0],"ix":1},"s":{"a":0,"k":[71.946,71.946,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[217,217],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.9098039215686274,0.3137254901960784,0.3137254901960784,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":1,"ml":4,"ml2":{"a":0,"k":4,"ix":8},"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":33,"ix":1}},{"n":"o","nm":"offset","v":{"a":0,"k":0,"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-1.5,-4],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.625],"y":[0]},"n":["0p667_1_0p625_0"],"t":26,"s":[0],"e":[100]},{"t":65.0000026475043}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[1],"y":[0]},"n":["0p667_1_1_0"],"t":0,"s":[0],"e":[100]},{"t":41.0000016699642}],"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[-224],"e":[136]},{"t":65.0000026475043}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":70.0000028511585,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Shape Layer 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-44,"ix":10},"p":{"a":0,"k":[154.149,195.327,0],"ix":2},"a":{"a":0,"k":[-2.021,-4,0],"ix":1},"s":{"a":0,"k":[46.072,46.072,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[217,217],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.9058823529411765,0.2627450980392157,0.2627450980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":1,"ml":4,"ml2":{"a":0,"k":4,"ix":8},"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-1.5,-4],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[1],"y":[0]},"n":["0p667_1_1_0"],"t":0,"s":[100],"e":[0]},{"t":38.0000015477717}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.733],"y":[0.015]},"n":["0p667_1_0p733_0p015"],"t":19,"s":[100],"e":[0]},{"t":60.0000024438501}],"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[-319],"e":[-679]},{"t":65.0000026475043}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":70.0000028511585,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-44,"ix":10},"p":{"a":0,"k":[154.149,195.327,0],"ix":2},"a":{"a":0,"k":[-2.021,-4,0],"ix":1},"s":{"a":0,"k":[46.072,46.072,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[217,217],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.105882352941,0.105882352941,0.105882352941,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":1,"ml":4,"ml2":{"a":0,"k":4,"ix":8},"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-1.5,-4],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[1],"y":[0]},"n":["0p667_1_1_0"],"t":0,"s":[100],"e":[0]},{"t":38.0000015477717}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.733],"y":[0.015]},"n":["0p667_1_0p733_0p015"],"t":19,"s":[100],"e":[0]},{"t":60.0000024438501}],"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[-224],"e":[-584]},{"t":65.0000026475043}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":70.0000028511585,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Shape Layer 5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[4.436],"e":[-355.564]},{"t":69.0000028104276}],"ix":10},"p":{"a":0,"k":[155,194,0],"ix":2},"a":{"a":0,"k":[-1.5,-4,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[217,217],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.47843137254901963,0.47843137254901963,0.47843137254901963,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":1,"lj":1,"ml":4,"ml2":{"a":0,"k":4,"ix":8},"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-1.5,-4],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":85,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":70.0000028511585,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[4.436],"e":[-355.564]},{"t":69.0000028104276}],"ix":10},"p":{"a":0,"k":[155,194,0],"ix":2},"a":{"a":0,"k":[-1.5,-4,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[217,217],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.3607843137254902,0.16470588235294117,0.16470588235294117,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":1,"lj":1,"ml":4,"ml2":{"a":0,"k":4,"ix":8},"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-1.5,-4],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":85,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":70.0000028511585,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"refresh-button Outlines","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":85.093,"ix":10},"p":{"a":0,"k":[-6.619,-112.041,0],"ix":2},"a":{"a":0,"k":[188.881,115.959,0],"ix":1},"s":{"a":0,"k":[58.516,58.516,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.875,-1.875],[-1.875,-1.875],[0,0],[-1.274,0],[-0.898,0.903],[0,0],[1.875,1.875],[1.875,-1.875],[0,0]],"o":[[-1.875,-1.875],[-1.875,1.875],[0,0],[0.899,0.903],[1.277,0],[0,0],[1.875,-1.875],[-1.875,-1.875],[0,0],[0,0]],"v":[[-14.662,-12.188],[-21.451,-12.188],[-21.451,-5.398],[-3.393,12.656],[-0.002,14.063],[3.392,12.656],[21.451,-5.398],[21.451,-12.188],[14.662,-12.188],[-0.002,2.473]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0]],"o":[[0,0]],"v":[[-14.662,-12.188]],"c":false},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.9058823529411765,0.2627450980392157,0.2627450980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[188.943,118.162],"ix":2},"a":{"a":0,"k":[0.062,2.438],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":70.0000028511585,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
diff --git a/buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/ui/prompt.qml b/buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/ui/prompt.qml
deleted file mode 100644
index 95e4b699..00000000
--- a/buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-balena-wifi-setup/ui/prompt.qml
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright 2018 by Aditya Mehra
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-import QtQuick.Layouts 1.4
-import QtQuick 2.4
-import QtQuick.Controls 2.0
-import org.kde.kirigami 2.4 as Kirigami
-import Mycroft 1.0 as Mycroft
-
-Mycroft.Delegate {
- id: root
- property var spacingUnit: 30
- property var phone: sessionData.phone_image
- property var prompt: sessionData.prompt
- property var highlight: sessionData.highlight
- property var color: sessionData.color
- property bool horizontalMode: root.width > root.height ? 1 : 0
-
- leftPadding: 0
- rightPadding: 0
- topPadding: 0
- bottomPadding: 0
-
- Rectangle {
- anchors.fill: parent
- color: "#000000"
-
- GridLayout {
- anchors.fill: parent
- anchors.margins: Kirigami.Units.largeSpacing
- columns: horizontalMode ? 2 : 1
-
- ColumnLayout {
- Layout.fillWidth: true
- Layout.fillHeight: true
-
- Kirigami.Heading {
- id: sentence
- Layout.fillWidth: true
- Layout.alignment: horizontalMode ? Qt.AlignLeft : Qt.AlignHCenter | Qt.AlignVCenter
- Layout.leftMargin: horizontalMode ? spacingUnit : 0
- horizontalAlignment: horizontalMode ? Text.AlignLeft : Text.AlignHCenter
- verticalAlignment: horizontalMode ? Text.AlignVCenter : Text.AlignTop
- wrapMode: Text.WordWrap
- elide: Text.ElideRight
- font.family: "Noto Sans"
- font.bold: true
- font.weight: Font.Bold
- font.pixelSize: horizontalMode ? root.width * 0.065 : root.height * 0.075
- text: prompt
- }
- Kirigami.Heading {
- id: url
- Layout.fillWidth: true
- Layout.leftMargin: horizontalMode ? spacingUnit : 0
- Layout.alignment: horizontalMode ? Qt.AlignLeft : Qt.AlignHCenter | Qt.AlignTop
- horizontalAlignment: horizontalMode ? Text.AlignLeft : Text.AlignHCenter
- verticalAlignment: horizontalMode ? Text.AlignVCenter : Text.AlignTop
- wrapMode: Text.WordWrap
- elide: Text.ElideRight
- font.family: "Noto Sans"
- font.bold: true
- font.weight: Font.Bold
- font.pixelSize: horizontalMode ? root.width * 0.065 : root.height * 0.075
- color: root.color
- text: highlight
- }
- }
-
- Image {
- id: img
- source: Qt.resolvedUrl(phone)
- Layout.preferredWidth: horizontalMode ? parent.width / 2 : parent.width
- Layout.preferredHeight: horizontalMode ? parent.height * 0.9 : parent.height / 2
- Layout.alignment: Qt.AlignBottom
- fillMode: Image.PreserveAspectFit
- }
- }
- }
-}
diff --git a/buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-ovos-pairing b/buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-ovos-pairing
index ee7be958..d8fea7c1 160000
--- a/buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-ovos-pairing
+++ b/buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-ovos-pairing
@@ -1 +1 @@
-Subproject commit ee7be95809963a4557d941f614fbb6bdb9093bd9
+Subproject commit d8fea7c156fc91043d0782de94d5c348c12b71d7