mirror of
				https://github.com/OpenVoiceOS/OpenVoiceOS
				synced 2025-06-05 22:19:21 +02:00 
			
		
		
		
	Fix resting screen issue.
This commit is contained 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" | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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]" | ||||
|  | ||||
|   | ||||
| @@ -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" | ||||
| } | ||||
|   | ||||
| @@ -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() | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -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") | ||||
|     } | ||||
| } | ||||
| @@ -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") | ||||
|             } | ||||
|         } | ||||
|     }  | ||||
| } | ||||
| @@ -0,0 +1,82 @@ | ||||
| /* | ||||
|  * Copyright 2018 by Aditya Mehra <aix.m@outlook.com> | ||||
|  * | ||||
|  * 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 | ||||
|         } | ||||
|     } | ||||
| }   | ||||
| @@ -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" | ||||
|         } | ||||
|     } | ||||
| } | ||||
| } | ||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @@ -1,94 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2018 by Aditya Mehra <aix.m@outlook.com> | ||||
|  * | ||||
|  * 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 | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| }   | ||||
 Submodule buildroot-external/rootfs-overlay/opt/mycroft/skills/skill-ovos-pairing updated: ee7be95809...d8fea7c156
									
								
							
		Reference in New Issue
	
	Block a user