├── .gitignore ├── CMakeLists.txt ├── COPYING.BSD ├── COPYING.MIT ├── README ├── i18n ├── asteroid-launcher.ar_AR.ts ├── asteroid-launcher.ast.ts ├── asteroid-launcher.az.ts ├── asteroid-launcher.be.ts ├── asteroid-launcher.bqi.ts ├── asteroid-launcher.ca.ts ├── asteroid-launcher.cs.ts ├── asteroid-launcher.da.ts ├── asteroid-launcher.de_DE.ts ├── asteroid-launcher.el.ts ├── asteroid-launcher.en_GB.ts ├── asteroid-launcher.eo.ts ├── asteroid-launcher.es.ts ├── asteroid-launcher.es_AR.ts ├── asteroid-launcher.fa.ts ├── asteroid-launcher.fi.ts ├── asteroid-launcher.fr.ts ├── asteroid-launcher.gl.ts ├── asteroid-launcher.he.ts ├── asteroid-launcher.hi.ts ├── asteroid-launcher.hr.ts ├── asteroid-launcher.hu.ts ├── asteroid-launcher.ia.ts ├── asteroid-launcher.id.ts ├── asteroid-launcher.it.ts ├── asteroid-launcher.ja.ts ├── asteroid-launcher.ka.ts ├── asteroid-launcher.kab.ts ├── asteroid-launcher.ko.ts ├── asteroid-launcher.lb.ts ├── asteroid-launcher.lt.ts ├── asteroid-launcher.mr.ts ├── asteroid-launcher.ms.ts ├── asteroid-launcher.nb_NO.ts ├── asteroid-launcher.nl_BE.ts ├── asteroid-launcher.nl_NL.ts ├── asteroid-launcher.pl.ts ├── asteroid-launcher.pt.ts ├── asteroid-launcher.pt_BR.ts ├── asteroid-launcher.pt_PT.ts ├── asteroid-launcher.ro.ts ├── asteroid-launcher.ru.ts ├── asteroid-launcher.rue.ts ├── asteroid-launcher.sk.ts ├── asteroid-launcher.sv.ts ├── asteroid-launcher.ta.ts ├── asteroid-launcher.te.ts ├── asteroid-launcher.th.ts ├── asteroid-launcher.tr.ts ├── asteroid-launcher.tzm.ts ├── asteroid-launcher.uk.ts ├── asteroid-launcher.vec.ts ├── asteroid-launcher.vi.ts ├── asteroid-launcher.zh_Hans.ts └── asteroid-launcher.zh_Hant.ts └── src ├── CMakeLists.txt ├── applauncher ├── 000-default-horizontal.qml ├── 000-vertical.qml ├── 001-three-icons-horizontal.qml ├── 002-two-columns.qml ├── 003-turbo-list.qml ├── 004-three-by-three.qml └── 005-speed-dial.qml ├── applauncherbackground.cpp ├── applauncherbackground.h ├── firstrun.cpp ├── firstrun.h ├── gesturefilterarea.cpp ├── gesturefilterarea.h ├── images ├── bootlogo.svg └── shutdown-logo.png ├── launcherlocalemanager.cpp ├── launcherlocalemanager.h ├── main.cpp ├── notificationsnoozer.cpp ├── notificationsnoozer.h ├── qml ├── MainScreen.qml ├── compositor │ ├── CircleMaskShader.qml │ ├── WindowWrapperBase.qml │ └── compositor.qml ├── firstrun │ ├── FakeAlarmclock.qml │ ├── FirstRunConfig.qml │ └── Tutorial.qml ├── misc │ ├── BluetoothAgent.qml │ ├── ConnectionSelector.qml │ ├── PanelsGrid.qml │ ├── ShutdownScreen.qml │ ├── Splash.qml │ ├── USBModeSelector.qml │ ├── VolumeControl.qml │ └── desktop.js ├── notifications │ ├── NotificationActions.qml │ ├── NotificationButton.qml │ ├── NotificationIndicator.qml │ ├── NotificationPreview.qml │ ├── NotificationView.qml │ └── NotificationsPanel.qml ├── quicksettings │ ├── QuickSettings.qml │ └── QuickSettingsToggle.qml └── today │ ├── Today.qml │ └── weathericons.js ├── resources-qml.qrc ├── watchfaces-img ├── analog-aviator-hour-ambient.svg ├── analog-aviator-hour.svg ├── analog-aviator-minute-ambient.svg ├── analog-aviator-minute.svg ├── analog-aviator-second-ambient.svg ├── analog-aviator-second.svg ├── analog-circle-shades-hour.svg ├── analog-circle-shades-minute.svg ├── analog-circle-shades-second.svg ├── analog-scientific-v2-hour-bw.svg ├── analog-scientific-v2-hour.svg ├── analog-scientific-v2-minute-bw.svg ├── analog-scientific-v2-minute.svg ├── analog-scientific-v2-second.svg ├── analog-weather-satellite-hour-12h.svg ├── analog-weather-satellite-minute.svg ├── analog-weather-satellite-second.svg ├── asteroid-logo-black.svg ├── asteroid-logo-white.svg ├── asteroid-logo.svg ├── funky-town-words-01-bw.svg ├── funky-town-words-01.svg ├── funky-town-words-02-bw.svg ├── funky-town-words-02.svg ├── funky-town-words-03-bw.svg ├── funky-town-words-03.svg ├── funky-town-words-04-bw.svg ├── funky-town-words-04.svg ├── funky-town-words-05-bw.svg ├── funky-town-words-05.svg ├── funky-town-words-06-bw.svg ├── funky-town-words-06.svg ├── funky-town-words-07-bw.svg ├── funky-town-words-07.svg ├── funky-town-words-08-bw.svg ├── funky-town-words-08.svg ├── funky-town-words-09-bw.svg ├── funky-town-words-09.svg ├── funky-town-words-10-bw.svg ├── funky-town-words-10.svg ├── funky-town-words-11-bw.svg ├── funky-town-words-11.svg ├── funky-town-words-12-bw.svg ├── funky-town-words-12.svg ├── funky-town-words-am.svg ├── funky-town-words-pm.svg ├── numerals-duo-synth-neon-green-0.png ├── numerals-duo-synth-neon-green-1.png ├── numerals-duo-synth-neon-green-2.png ├── numerals-duo-synth-neon-green-3.png ├── numerals-duo-synth-neon-green-4.png ├── numerals-duo-synth-neon-green-5.png ├── numerals-duo-synth-neon-green-6.png ├── numerals-duo-synth-neon-green-7.png ├── numerals-duo-synth-neon-green-8.png └── numerals-duo-synth-neon-green-9.png ├── watchfaces-preview ├── 112 │ ├── 000-default-digital.png │ ├── 002-analog-70s-classic.png │ ├── 003-alternative-digital-2.png │ ├── 004-alternative-scifi.png │ ├── 005-analog-circle-shades.png │ ├── 006-analog-weather-satellite.png │ ├── 007-digital-outfit.png │ ├── 008-numerals-duo-synth-neon-green.png │ ├── 009-analog-scientific-v2.png │ ├── 010-analog-aviator.png │ ├── 011-bold-hour-bebas.png │ ├── 012-analog-words.png │ ├── 013-analog-nordic.png │ ├── 014-analog-50s-americana.png │ ├── 015-funky-town-words.png │ ├── 016-masked-spartan.png │ └── 017-contemporary-digital-rings.png ├── 128 │ ├── 000-default-digital.png │ ├── 002-analog-70s-classic.png │ ├── 003-alternative-digital-2.png │ ├── 004-alternative-scifi.png │ ├── 005-analog-circle-shades.png │ ├── 006-analog-weather-satellite.png │ ├── 007-digital-outfit.png │ ├── 008-numerals-duo-synth-neon-green.png │ ├── 009-analog-scientific-v2.png │ ├── 010-analog-aviator.png │ ├── 011-bold-hour-bebas.png │ ├── 012-analog-words.png │ ├── 013-analog-nordic.png │ ├── 014-analog-50s-americana.png │ ├── 015-funky-town-words.png │ ├── 016-masked-spartan.png │ └── 017-contemporary-digital-rings.png ├── 144 │ ├── 000-default-digital.png │ ├── 002-analog-70s-classic.png │ ├── 003-alternative-digital-2.png │ ├── 004-alternative-scifi.png │ ├── 005-analog-circle-shades.png │ ├── 006-analog-weather-satellite.png │ ├── 007-digital-outfit.png │ ├── 008-numerals-duo-synth-neon-green.png │ ├── 009-analog-scientific-v2.png │ ├── 010-analog-aviator.png │ ├── 011-bold-hour-bebas.png │ ├── 012-analog-words.png │ ├── 013-analog-nordic.png │ ├── 014-analog-50s-americana.png │ ├── 015-funky-town-words.png │ ├── 016-masked-spartan.png │ └── 017-contemporary-digital-rings.png ├── 160 │ ├── 000-default-digital.png │ ├── 002-analog-70s-classic.png │ ├── 003-alternative-digital-2.png │ ├── 004-alternative-scifi.png │ ├── 005-analog-circle-shades.png │ ├── 006-analog-weather-satellite.png │ ├── 007-digital-outfit.png │ ├── 008-numerals-duo-synth-neon-green.png │ ├── 009-analog-scientific-v2.png │ ├── 010-analog-aviator.png │ ├── 011-bold-hour-bebas.png │ ├── 012-analog-words.png │ ├── 013-analog-nordic.png │ ├── 014-analog-50s-americana.png │ ├── 015-funky-town-words.png │ ├── 016-masked-spartan.png │ └── 017-contemporary-digital-rings.png └── 182 │ ├── 000-default-digital.png │ ├── 002-analog-70s-classic.png │ ├── 003-alternative-digital-2.png │ ├── 004-alternative-scifi.png │ ├── 005-analog-circle-shades.png │ ├── 006-analog-weather-satellite.png │ ├── 007-digital-outfit.png │ ├── 008-numerals-duo-synth-neon-green.png │ ├── 009-analog-scientific-v2.png │ ├── 010-analog-aviator.png │ ├── 011-bold-hour-bebas.png │ ├── 012-analog-words.png │ ├── 013-analog-nordic.png │ ├── 014-analog-50s-americana.png │ ├── 015-funky-town-words.png │ ├── 016-masked-spartan.png │ └── 017-contemporary-digital-rings.png └── watchfaces ├── 000-default-digital.qml ├── 001-words-worte-palabras-mots.qml ├── 002-analog-70s-classic.qml ├── 003-alternative-digital-2.qml ├── 004-alternative-scifi.qml ├── 005-analog-circle-shades.qml ├── 006-analog-weather-satellite.qml ├── 007-digital-outfit.qml ├── 008-numerals-duo-synth-neon-green.qml ├── 009-analog-scientific-v2.qml ├── 010-analog-aviator.qml ├── 011-bold-hour-bebas.qml ├── 012-analog-words.qml ├── 013-analog-nordic.qml ├── 014-analog-50s-americana.qml ├── 015-funky-town-words.qml ├── 016-masked-spartan.qml ├── 017-contemporary-digital-rings.qml └── weathericons.js /.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.6.0) 2 | 3 | project(asteroid-launcher 4 | VERSION 0.0.1 5 | DESCRIPTION "AsteroidOS launcher and Wayland compositor based on Qt5, QML and QtWayland via Lipstick") 6 | 7 | find_package(ECM REQUIRED NO_MODULE) 8 | find_package(AsteroidApp REQUIRED) 9 | 10 | set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ASTEROID_MODULE_PATH}) 11 | 12 | include(FeatureSummary) 13 | include(GNUInstallDirs) 14 | include(ECMFindQmlModule) 15 | include(AsteroidCMakeSettings) 16 | include(AsteroidTranslations) 17 | 18 | find_package(Qt5 COMPONENTS Quick WaylandCompositor DBus REQUIRED) 19 | find_package(Mlite5 REQUIRED) 20 | find_package(Lipstick REQUIRED) 21 | find_package(Timed REQUIRED) 22 | 23 | ecm_find_qmlmodule(org.nemomobile.calendar 1.0) 24 | ecm_find_qmlmodule(org.nemomobile.systemsettings 1.0) 25 | ecm_find_qmlmodule(Nemo.Mce 1.0) 26 | ecm_find_qmlmodule(Nemo.DBus 2.0) 27 | ecm_find_qmlmodule(Nemo.Configuration 1.0) 28 | ecm_find_qmlmodule(Nemo.Time 1.0) 29 | ecm_find_qmlmodule(Nemo.Ngf 1.0) 30 | 31 | add_subdirectory(src) 32 | 33 | build_translations(i18n) 34 | 35 | feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) 36 | -------------------------------------------------------------------------------- /COPYING.BSD: -------------------------------------------------------------------------------- 1 | Redistribution and use in source and binary forms, with or without 2 | modification, are permitted provided that the following conditions are 3 | met: 4 | 5 | (1) Redistributions of source code must retain the above copyright 6 | notice, this list of conditions and the following disclaimer. 7 | 8 | (2) Redistributions in binary form must reproduce the above copyright 9 | notice, this list of conditions and the following disclaimer in 10 | the documentation and/or other materials provided with the 11 | distribution. 12 | 13 | (3)The name of the author may not be used to 14 | endorse or promote products derived from this software without 15 | specific prior written permission. 16 | 17 | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 18 | IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 19 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 | DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 21 | INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 23 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24 | HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 25 | STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 26 | IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27 | POSSIBILITY OF SUCH DAMAGE. 28 | -------------------------------------------------------------------------------- /COPYING.MIT: -------------------------------------------------------------------------------- 1 | Permission is hereby granted, free of charge, to any person obtaining a copy 2 | of this software and associated documentation files (the "Software"), to deal 3 | in the Software without restriction, including without limitation the rights 4 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 5 | copies of the Software, and to permit persons to whom the Software is 6 | furnished to do so, subject to the following conditions: 7 | 8 | 9 | The above copyright notice and this permission notice shall be included in 10 | all copies or substantial portions of the Software. 11 | 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | Asteroid-launcher is a wayland compositor which uses Lipstick from NemoMobile which itself uses QML, QtWayland, QPA etc... It is designed to provide a smartwatch UX for the AsteroidOS project. 2 | 3 | Asteroid-launcher is released under the BSD license and is based on Glacier-Home (released under the BSD license) which is itself based on lipstick-colorful-home(released under MIT provided in COPYING.MIT). 4 | -------------------------------------------------------------------------------- /src/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(SRC 2 | main.cpp 3 | applauncherbackground.cpp 4 | firstrun.cpp 5 | gesturefilterarea.cpp 6 | launcherlocalemanager.cpp 7 | notificationsnoozer.cpp) 8 | set(HEADERS 9 | applauncherbackground.h 10 | firstrun.h 11 | gesturefilterarea.h 12 | launcherlocalemanager.h 13 | notificationsnoozer.h) 14 | 15 | add_executable(asteroid-launcher ${SRC} ${HEADERS} resources-qml.qrc) 16 | 17 | target_link_libraries(asteroid-launcher PRIVATE 18 | Qt5::Quick 19 | Qt5::WaylandCompositor 20 | Qt5::DBus 21 | Mlite5::Mlite5 22 | Lipstick::Lipstick 23 | Timed::Timed) 24 | 25 | install(TARGETS asteroid-launcher 26 | DESTINATION ${CMAKE_INSTALL_BINDIR}) 27 | 28 | install(DIRECTORY watchfaces 29 | DESTINATION ${CMAKE_INSTALL_DATADIR}/asteroid-launcher) 30 | install(DIRECTORY watchfaces-img 31 | DESTINATION ${CMAKE_INSTALL_DATADIR}/asteroid-launcher) 32 | install(DIRECTORY watchfaces-preview 33 | DESTINATION ${CMAKE_INSTALL_DATADIR}/asteroid-launcher) 34 | install(DIRECTORY applauncher 35 | DESTINATION ${CMAKE_INSTALL_DATADIR}/asteroid-launcher) 36 | -------------------------------------------------------------------------------- /src/applauncherbackground.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2016 Florent Revest 3 | * All rights reserved. 4 | * 5 | * You may use this file under the terms of BSD license as follows: 6 | * 7 | * Redistribution and use in source and binary forms, with or without 8 | * modification, are permitted provided that the following conditions are met: 9 | * * Redistributions of source code must retain the above copyright 10 | * notice, this list of conditions and the following disclaimer. 11 | * * Redistributions in binary form must reproduce the above copyright 12 | * notice, this list of conditions and the following disclaimer in the 13 | * documentation and/or other materials provided with the distribution. 14 | * * Neither the name of the author nor the 15 | * names of its contributors may be used to endorse or promote products 16 | * derived from this software without specific prior written permission. 17 | * 18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 22 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | #include "applauncherbackground.h" 31 | 32 | #include 33 | 34 | QColor AppLauncherBackground::outerColor(QString filePath) 35 | { 36 | if(m_outerColors.contains(filePath)) 37 | return m_outerColors.value(filePath); 38 | 39 | QSettings settings(filePath, QSettings::NativeFormat); 40 | QColor ret(settings.value("Desktop Entry/X-Asteroid-Outer-Color", QColor("#000000")).toString()); 41 | m_outerColors.insert(filePath, ret); 42 | return ret; 43 | } 44 | 45 | QColor AppLauncherBackground::centerColor(QString filePath) 46 | { 47 | if(m_centerColors.contains(filePath)) 48 | return m_centerColors.value(filePath); 49 | 50 | QSettings settings(filePath, QSettings::NativeFormat); 51 | QColor ret(settings.value("Desktop Entry/X-Asteroid-Center-Color", QColor("#888888")).toString()); 52 | m_centerColors.insert(filePath, ret); 53 | return ret; 54 | } 55 | 56 | -------------------------------------------------------------------------------- /src/applauncherbackground.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2016 Florent Revest 3 | * All rights reserved. 4 | * 5 | * You may use this file under the terms of BSD license as follows: 6 | * 7 | * Redistribution and use in source and binary forms, with or without 8 | * modification, are permitted provided that the following conditions are met: 9 | * * Redistributions of source code must retain the above copyright 10 | * notice, this list of conditions and the following disclaimer. 11 | * * Redistributions in binary form must reproduce the above copyright 12 | * notice, this list of conditions and the following disclaimer in the 13 | * documentation and/or other materials provided with the distribution. 14 | * * Neither the name of the author nor the 15 | * names of its contributors may be used to endorse or promote products 16 | * derived from this software without specific prior written permission. 17 | * 18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 22 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | #ifndef APPLAUNCHERBACKGROUND_H 31 | #define APPLAUNCHERBACKGROUND_H 32 | 33 | #include 34 | #include 35 | #include 36 | #include 37 | 38 | class Q_DECL_EXPORT AppLauncherBackground : public QObject 39 | { 40 | Q_OBJECT 41 | public: 42 | Q_INVOKABLE QColor outerColor(QString filePath); 43 | Q_INVOKABLE QColor centerColor(QString filePath); 44 | 45 | private: 46 | QHash m_outerColors, m_centerColors; 47 | }; 48 | 49 | #endif // APPLAUNCHERBACKGROUND_H 50 | -------------------------------------------------------------------------------- /src/firstrun.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2017 Florent Revest 3 | * All rights reserved. 4 | * 5 | * You may use this file under the terms of BSD license as follows: 6 | * 7 | * Redistribution and use in source and binary forms, with or without 8 | * modification, are permitted provided that the following conditions are met: 9 | * * Redistributions of source code must retain the above copyright 10 | * notice, this list of conditions and the following disclaimer. 11 | * * Redistributions in binary form must reproduce the above copyright 12 | * notice, this list of conditions and the following disclaimer in the 13 | * documentation and/or other materials provided with the distribution. 14 | * * Neither the name of the author nor the 15 | * names of its contributors may be used to endorse or promote products 16 | * derived from this software without specific prior written permission. 17 | * 18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 22 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | #include "firstrun.h" 31 | 32 | #include 33 | #include 34 | #include 35 | 36 | FirstRun::FirstRun() 37 | { 38 | m_mceDbus = new QDBusInterface("com.nokia.mce", "/com/nokia/mce/request", "com.nokia.mce.request", QDBusConnection::systemBus()); 39 | firstRunDone = new MGConfItem("/org/asteroidos/launcher/firstRunDone", this); 40 | } 41 | 42 | bool FirstRun::isFirstRun() 43 | { 44 | return !firstRunDone->value(false).toBool();; 45 | } 46 | 47 | void FirstRun::startFirstRun() 48 | { 49 | m_mceDbus->asyncCall("set_config", QDBusObjectPath("/system/osso/dsm/display/inhibit_blank_mode").path(), QVariant::fromValue(QDBusVariant(3))); 50 | m_mceDbus->asyncCall("req_tklock_mode_change", "unlocked"); 51 | m_mceDbus->asyncCall("set_config", QDBusObjectPath("/system/osso/dsm/locks/tklock_blank_disable").path(), QVariant::fromValue(QDBusVariant(1))); 52 | } 53 | 54 | void FirstRun::stopFirstRun() 55 | { 56 | m_mceDbus->asyncCall("set_config", QDBusObjectPath("/system/osso/dsm/display/inhibit_blank_mode").path(), QVariant::fromValue(QDBusVariant(0))); 57 | m_mceDbus->asyncCall("req_tklock_mode_change", "locked"); 58 | m_mceDbus->asyncCall("set_config", QDBusObjectPath("/system/osso/dsm/locks/tklock_blank_disable").path(), QVariant::fromValue(QDBusVariant(0))); 59 | 60 | firstRunDone->set(true); 61 | } 62 | 63 | -------------------------------------------------------------------------------- /src/firstrun.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2017 Florent Revest 3 | * All rights reserved. 4 | * 5 | * You may use this file under the terms of BSD license as follows: 6 | * 7 | * Redistribution and use in source and binary forms, with or without 8 | * modification, are permitted provided that the following conditions are met: 9 | * * Redistributions of source code must retain the above copyright 10 | * notice, this list of conditions and the following disclaimer. 11 | * * Redistributions in binary form must reproduce the above copyright 12 | * notice, this list of conditions and the following disclaimer in the 13 | * documentation and/or other materials provided with the distribution. 14 | * * Neither the name of the author nor the 15 | * names of its contributors may be used to endorse or promote products 16 | * derived from this software without specific prior written permission. 17 | * 18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 22 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | #ifndef FIRSTRUN_H 31 | #define FIRSTRUN_H 32 | 33 | #include 34 | #include 35 | #include 36 | 37 | class FirstRun : public QObject 38 | { 39 | Q_OBJECT 40 | public: 41 | FirstRun(); 42 | 43 | Q_INVOKABLE bool isFirstRun(); 44 | Q_INVOKABLE void startFirstRun(); 45 | Q_INVOKABLE void stopFirstRun(); 46 | 47 | private: 48 | QDBusInterface *m_mceDbus; 49 | MGConfItem *firstRunDone; 50 | }; 51 | 52 | #endif // FIRSTRUN_H 53 | 54 | -------------------------------------------------------------------------------- /src/gesturefilterarea.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2017 Florent Revest 3 | * All rights reserved. 4 | * 5 | * You may use this file under the terms of BSD license as follows: 6 | * 7 | * Redistribution and use in source and binary forms, with or without 8 | * modification, are permitted provided that the following conditions are met: 9 | * * Redistributions of source code must retain the above copyright 10 | * notice, this list of conditions and the following disclaimer. 11 | * * Redistributions in binary form must reproduce the above copyright 12 | * notice, this list of conditions and the following disclaimer in the 13 | * documentation and/or other materials provided with the distribution. 14 | * * Neither the name of the author nor the 15 | * names of its contributors may be used to endorse or promote products 16 | * derived from this software without specific prior written permission. 17 | * 18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 22 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | #ifndef GESTUREFILTERAREA_H 31 | #define GESTUREFILTERAREA_H 32 | 33 | #include 34 | #include 35 | 36 | class GestureFilterArea : public QQuickItem 37 | { 38 | Q_OBJECT 39 | 40 | Q_PROPERTY(bool toRightAllowed WRITE setToRightAllowed READ toRightAllowed NOTIFY toRightAllowedChanged) 41 | Q_PROPERTY(bool toLeftAllowed WRITE setToLeftAllowed READ toLeftAllowed NOTIFY toLeftAllowedChanged) 42 | Q_PROPERTY(bool toBottomAllowed WRITE setToBottomAllowed READ toBottomAllowed NOTIFY toBottomAllowedChanged) 43 | Q_PROPERTY(bool toTopAllowed WRITE setToTopAllowed READ toTopAllowed NOTIFY toTopAllowedChanged) 44 | 45 | public: 46 | GestureFilterArea(QQuickItem *parent = 0); 47 | bool toRightAllowed() { return m_toRightAllowed; } 48 | bool toLeftAllowed() { return m_toLeftAllowed; } 49 | bool toBottomAllowed() { return m_toBottomAllowed; } 50 | bool toTopAllowed() { return m_toTopAllowed; } 51 | 52 | void setToRightAllowed(const bool allowed) { 53 | if (m_toRightAllowed != allowed) { 54 | m_toRightAllowed = allowed; 55 | emit toRightAllowedChanged(); 56 | } 57 | } 58 | void setToLeftAllowed(const bool allowed) { 59 | if (m_toLeftAllowed != allowed) { 60 | m_toLeftAllowed = allowed; 61 | emit toLeftAllowedChanged(); 62 | } 63 | } 64 | void setToBottomAllowed(const bool allowed) { 65 | if (m_toBottomAllowed != allowed) { 66 | m_toBottomAllowed = allowed; 67 | emit toBottomAllowedChanged(); 68 | } 69 | } 70 | void setToTopAllowed(const bool allowed) { 71 | if (m_toTopAllowed != allowed) { 72 | m_toTopAllowed = allowed; 73 | emit toTopAllowedChanged(); 74 | } 75 | } 76 | 77 | signals: 78 | void swipeMoved(bool horizontal, qreal delta); 79 | void swipeReleased(bool horizontal, qreal velocity, bool tracing); 80 | 81 | void toRightAllowedChanged(); 82 | void toLeftAllowedChanged(); 83 | void toTopAllowedChanged(); 84 | void toBottomAllowedChanged(); 85 | 86 | private: 87 | bool m_toRightAllowed, m_toLeftAllowed, m_toBottomAllowed, m_toTopAllowed; 88 | 89 | bool m_horizontal, m_pressed, m_tracing; 90 | unsigned int m_counter; 91 | QPointF m_prevPos; 92 | qreal m_velocityX, m_velocityY, m_threshold; 93 | 94 | protected: 95 | virtual bool childMouseEventFilter(QQuickItem *, QEvent *); 96 | virtual void mousePressEvent(QMouseEvent *event); 97 | virtual void mouseMoveEvent(QMouseEvent *event); 98 | virtual void mouseReleaseEvent(QMouseEvent *event); 99 | virtual void mouseUngrabEvent(); 100 | virtual void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry); 101 | bool filterMouseEvent(QQuickItem *item, QMouseEvent *event); 102 | }; 103 | 104 | #endif // GESTUREFILTERAREA_H 105 | -------------------------------------------------------------------------------- /src/images/bootlogo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/images/shutdown-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/images/shutdown-logo.png -------------------------------------------------------------------------------- /src/launcherlocalemanager.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2017 Florent Revest 3 | * All rights reserved. 4 | * 5 | * You may use this file under the terms of BSD license as follows: 6 | * 7 | * Redistribution and use in source and binary forms, with or without 8 | * modification, are permitted provided that the following conditions are met: 9 | * * Redistributions of source code must retain the above copyright 10 | * notice, this list of conditions and the following disclaimer. 11 | * * Redistributions in binary form must reproduce the above copyright 12 | * notice, this list of conditions and the following disclaimer in the 13 | * documentation and/or other materials provided with the distribution. 14 | * * Neither the name of the author nor the 15 | * names of its contributors may be used to endorse or promote products 16 | * derived from this software without specific prior written permission. 17 | * 18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 22 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | #include "launcherlocalemanager.h" 31 | 32 | #include 33 | #include 34 | #include 35 | 36 | LauncherLocaleManager::LauncherLocaleManager() 37 | { 38 | m_translator = new QTranslator(this); 39 | m_translator->load(QLocale(), "asteroid-launcher", ".", "/usr/share/translations", ".qm"); 40 | qApp->installTranslator(m_translator); 41 | } 42 | 43 | void LauncherLocaleManager::onLocaleChanged() 44 | { 45 | qApp->removeTranslator(m_translator); 46 | m_translator->load(QLocale(), "asteroid-launcher", ".", "/usr/share/translations", ".qm"); 47 | qApp->installTranslator(m_translator); 48 | 49 | QDBusInterface systemdInterface("org.freedesktop.systemd1", "/org/freedesktop/systemd1", "org.freedesktop.systemd1.Manager", QDBusConnection::sessionBus()); 50 | 51 | systemdInterface.call("SetEnvironment", QStringList() << ("LANG=" + QString::fromLocal8Bit(qgetenv("LANG")))); 52 | systemdInterface.call("RestartUnit", "booster-qtcomponents-qt5.service", "replace"); 53 | } 54 | 55 | -------------------------------------------------------------------------------- /src/launcherlocalemanager.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2017 Florent Revest 3 | * All rights reserved. 4 | * 5 | * You may use this file under the terms of BSD license as follows: 6 | * 7 | * Redistribution and use in source and binary forms, with or without 8 | * modification, are permitted provided that the following conditions are met: 9 | * * Redistributions of source code must retain the above copyright 10 | * notice, this list of conditions and the following disclaimer. 11 | * * Redistributions in binary form must reproduce the above copyright 12 | * notice, this list of conditions and the following disclaimer in the 13 | * documentation and/or other materials provided with the distribution. 14 | * * Neither the name of the author nor the 15 | * names of its contributors may be used to endorse or promote products 16 | * derived from this software without specific prior written permission. 17 | * 18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 22 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | #ifndef LAUNCHERLOCALEMANAGER_H 31 | #define LAUNCHERLOCALEMANAGER_H 32 | 33 | #include 34 | #include 35 | 36 | class LauncherLocaleManager : public QObject 37 | { 38 | Q_OBJECT 39 | 40 | public: 41 | LauncherLocaleManager(); 42 | 43 | public slots: 44 | void onLocaleChanged(); 45 | 46 | private: 47 | QTranslator *m_translator; 48 | }; 49 | 50 | #endif // LAUNCHERLOCALEMANAGER_H 51 | 52 | -------------------------------------------------------------------------------- /src/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Florent Revest 3 | * 2014 Aleksi Suomalainen 4 | * 2012 Timur Kristóf 5 | * All rights reserved. 6 | * 7 | * You may use this file under the terms of BSD license as follows: 8 | * 9 | * Redistribution and use in source and binary forms, with or without 10 | * modification, are permitted provided that the following conditions are met: 11 | * * Redistributions of source code must retain the above copyright 12 | * notice, this list of conditions and the following disclaimer. 13 | * * Redistributions in binary form must reproduce the above copyright 14 | * notice, this list of conditions and the following disclaimer in the 15 | * documentation and/or other materials provided with the distribution. 16 | * * Neither the name of the author nor the 17 | * names of its contributors may be used to endorse or promote products 18 | * derived from this software without specific prior written permission. 19 | * 20 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 21 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 22 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 24 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 25 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 26 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 27 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 29 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | */ 31 | 32 | #include 33 | #include 34 | #include 35 | #include 36 | #include 37 | 38 | #include 39 | #include 40 | #include 41 | #include 42 | 43 | #include "applauncherbackground.h" 44 | #include "firstrun.h" 45 | #include "launcherlocalemanager.h" 46 | #include "gesturefilterarea.h" 47 | #include "notificationsnoozer.h" 48 | 49 | int main(int argc, char **argv) 50 | { 51 | QmlPath::append(":/qml/"); 52 | HomeApplication app(argc, argv, QString()); 53 | 54 | FirstRun *firstRun = new FirstRun(); 55 | LauncherLocaleManager *launcherLocaleManager = new LauncherLocaleManager(); 56 | QObject::connect(app.localeManager(), SIGNAL(localeChanged()), launcherLocaleManager, SLOT(onLocaleChanged())); 57 | 58 | QGuiApplication::setFont(QFont("Noto Sans")); 59 | app.setCompositorPath("qrc:/qml/compositor.qml"); 60 | Qt::ScreenOrientation nativeOrientation = app.primaryScreen()->nativeOrientation(); 61 | QByteArray v = qgetenv("LAUNCHER_NATIVEORIENTATION"); 62 | if (!v.isEmpty()) { 63 | switch (v.toInt()) { 64 | case 1: 65 | nativeOrientation = Qt::PortraitOrientation; 66 | break; 67 | case 2: 68 | nativeOrientation = Qt::LandscapeOrientation; 69 | break; 70 | case 4: 71 | nativeOrientation = Qt::InvertedPortraitOrientation; 72 | break; 73 | case 8: 74 | nativeOrientation = Qt::InvertedLandscapeOrientation; 75 | break; 76 | default: 77 | nativeOrientation = app.primaryScreen()->nativeOrientation(); 78 | } 79 | } 80 | if (nativeOrientation == Qt::PrimaryOrientation) 81 | nativeOrientation = app.primaryScreen()->primaryOrientation(); 82 | app.engine()->rootContext()->setContextProperty("nativeOrientation", nativeOrientation); 83 | app.engine()->rootContext()->setContextProperty("firstRun", firstRun); 84 | 85 | qmlRegisterType("org.asteroid.launcher", 1, 0, "AppLauncherBackground"); 86 | qmlRegisterType("org.asteroid.launcher", 1, 0, "GestureFilterArea"); 87 | qmlRegisterType("org.asteroid.launcher", 1, 0, "NotificationSnoozer"); 88 | app.setQmlPath("qrc:/qml/MainScreen.qml"); 89 | 90 | // Give these to the environment inside the lipstick homescreen 91 | // Fixes a bug where some applications wouldn't launch, eg. terminal or browser 92 | setenv("EGL_PLATFORM", "wayland", 1); 93 | setenv("QT_QPA_PLATFORM", "wayland", 1); 94 | setenv("QT_WAYLAND_DISABLE_WINDOWDECORATION", "1", 1); 95 | app.mainWindowInstance()->showFullScreen(); 96 | return app.exec(); 97 | } 98 | 99 | -------------------------------------------------------------------------------- /src/notificationsnoozer.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2017 Florent Revest 3 | * All rights reserved. 4 | * 5 | * You may use this file under the terms of BSD license as follows: 6 | * 7 | * Redistribution and use in source and binary forms, with or without 8 | * modification, are permitted provided that the following conditions are met: 9 | * * Redistributions of source code must retain the above copyright 10 | * notice, this list of conditions and the following disclaimer. 11 | * * Redistributions in binary form must reproduce the above copyright 12 | * notice, this list of conditions and the following disclaimer in the 13 | * documentation and/or other materials provided with the distribution. 14 | * * Neither the name of the author nor the 15 | * names of its contributors may be used to endorse or promote products 16 | * derived from this software without specific prior written permission. 17 | * 18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 22 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | #include "notificationsnoozer.h" 31 | 32 | #include 33 | #include 34 | 35 | bool NotificationSnoozer::snooze(LipstickNotification *notif, int minutes) 36 | { 37 | /* Build a notificationtool command to be triggered later */ 38 | QString notifCmd; 39 | QTextStream cmdStream(¬ifCmd); 40 | 41 | cmdStream << "/usr/bin/notificationtool -o add"; 42 | 43 | const QVariantHash hints(notif->hints()); 44 | QVariantHash::const_iterator hit = hints.constBegin(), hend = hints.constEnd(); 45 | for( ; hit != hend; ++hit) 46 | cmdStream << " --hint=\"" << hit.key() << " " << hit.value().toString() << "\""; 47 | 48 | cmdStream << " --application=\"" << notif->appName() << "\""; 49 | cmdStream << " --icon=\"" << notif->appIcon() << "\""; 50 | cmdStream << " --timeout=\"" << notif->expireTimeout() << "\""; 51 | cmdStream << " \"" << notif->summary() << "\""; 52 | cmdStream << " \"" << notif->body() << "\""; 53 | 54 | /* Build a timed countdown that will run the notificationtool command */ 55 | Maemo::Timed::Interface interface; 56 | Maemo::Timed::Event event; 57 | 58 | if(!interface.isValid()) 59 | return false; 60 | 61 | Maemo::Timed::Event::Action &act = event.addAction(); 62 | act.whenDue(); 63 | act.runCommand(notifCmd.toLatin1().data(), "ceres"); 64 | 65 | event.setAttribute("APPLICATION", "launcher"); 66 | event.setAttribute("type", "countdown"); 67 | event.setAttribute("timeOfDay", "1"); 68 | event.setTicker(time(NULL) + 60*minutes); 69 | 70 | QDBusReply res = interface.add_event_sync(event); 71 | return res.isValid(); 72 | } 73 | 74 | -------------------------------------------------------------------------------- /src/notificationsnoozer.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2017 Florent Revest 3 | * All rights reserved. 4 | * 5 | * You may use this file under the terms of BSD license as follows: 6 | * 7 | * Redistribution and use in source and binary forms, with or without 8 | * modification, are permitted provided that the following conditions are met: 9 | * * Redistributions of source code must retain the above copyright 10 | * notice, this list of conditions and the following disclaimer. 11 | * * Redistributions in binary form must reproduce the above copyright 12 | * notice, this list of conditions and the following disclaimer in the 13 | * documentation and/or other materials provided with the distribution. 14 | * * Neither the name of the author nor the 15 | * names of its contributors may be used to endorse or promote products 16 | * derived from this software without specific prior written permission. 17 | * 18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 22 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | #ifndef NOTIFICATIONSNOOZER_H 31 | #define NOTIFICATIONSNOOZER_H 32 | 33 | #include 34 | 35 | #include 36 | 37 | class Q_DECL_EXPORT NotificationSnoozer : public QObject 38 | { 39 | Q_OBJECT 40 | public: 41 | Q_INVOKABLE bool snooze(LipstickNotification *notif, int minutes); 42 | }; 43 | 44 | #endif // NOTIFICATIONSNOOZER_H 45 | -------------------------------------------------------------------------------- /src/qml/compositor/CircleMaskShader.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Florent Revest 3 | * 2014 Aleksi Suomalainen 4 | * 2013 Jolla Ltd. 5 | * All rights reserved. 6 | * 7 | * You may use this file under the terms of BSD license as follows: 8 | * 9 | * Redistribution and use in source and binary forms, with or without 10 | * modification, are permitted provided that the following conditions are met: 11 | * * Redistributions of source code must retain the above copyright 12 | * notice, this list of conditions and the following disclaimer. 13 | * * Redistributions in binary form must reproduce the above copyright 14 | * notice, this list of conditions and the following disclaimer in the 15 | * documentation and/or other materials provided with the distribution. 16 | * * Neither the name of the author nor the 17 | * names of its contributors may be used to endorse or promote products 18 | * derived from this software without specific prior written permission. 19 | * 20 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 21 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 22 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 24 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 25 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 26 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 27 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 29 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | */ 31 | 32 | import QtQuick 2.9 33 | import org.asteroid.controls 1.0 34 | import org.asteroid.utils 1.0 35 | 36 | ShaderEffect { 37 | property real smoothness: 0.0007 38 | property bool keepInner: true 39 | 40 | property real end: 0.25 41 | property real beginning: 0.25 - smoothness 42 | 43 | fragmentShader: " 44 | #extension GL_OES_standard_derivatives: enable 45 | #ifdef GL_ES 46 | precision lowp float; 47 | #endif // GL_ES 48 | varying highp vec2 qt_TexCoord0; 49 | uniform highp float qt_Opacity; 50 | uniform lowp sampler2D source; 51 | uniform lowp float end; 52 | uniform lowp float beginning; 53 | uniform bool keepInner; 54 | 55 | void main(void) { 56 | lowp float x, y; 57 | x = (qt_TexCoord0.x - 0.5); 58 | y = (qt_TexCoord0.y - 0.5); 59 | if(keepInner) { 60 | gl_FragColor = texture2D(source, qt_TexCoord0).rgba 61 | * step(x * x + y * y, 0.25) 62 | * smoothstep((x * x + y * y) , end, beginning) 63 | * qt_Opacity; 64 | } else { 65 | gl_FragColor = texture2D(source, qt_TexCoord0).rgba 66 | * (1.0 - (step(x * x + y * y, 0.25) 67 | * smoothstep((x * x + y * y) , end, beginning))) 68 | * qt_Opacity; 69 | } 70 | }" 71 | } 72 | -------------------------------------------------------------------------------- /src/qml/compositor/WindowWrapperBase.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Florent Revest 3 | * 2014 Aleksi Suomalainen 4 | * 2013 Jolla Ltd. 5 | * All rights reserved. 6 | * 7 | * You may use this file under the terms of BSD license as follows: 8 | * 9 | * Redistribution and use in source and binary forms, with or without 10 | * modification, are permitted provided that the following conditions are met: 11 | * * Redistributions of source code must retain the above copyright 12 | * notice, this list of conditions and the following disclaimer. 13 | * * Redistributions in binary form must reproduce the above copyright 14 | * notice, this list of conditions and the following disclaimer in the 15 | * documentation and/or other materials provided with the distribution. 16 | * * Neither the name of the author nor the 17 | * names of its contributors may be used to endorse or promote products 18 | * derived from this software without specific prior written permission. 19 | * 20 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 21 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 22 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 24 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 25 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 26 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 27 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 29 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | */ 31 | 32 | import QtQuick 2.15 33 | import org.asteroid.controls 1.0 34 | import org.asteroid.utils 1.0 35 | 36 | Item { 37 | id: wrapper 38 | 39 | property alias moveInAnim: moveInAnimation 40 | 41 | property Item window 42 | property bool smoothBorders: false 43 | width: window !== null ? Dims.w(100) : 0 44 | height: window !== null ? Dims.h(100) : 0 45 | NumberAnimation on x { id: moveInAnimation; running: false ; to: 0; duration: 100 } 46 | NumberAnimation on opacity { 47 | id: fadeInAnimation 48 | running: false 49 | from: 0 50 | to: 1 51 | duration: 100 52 | onFinished: parent.ready = true 53 | } 54 | function animateIn() { fadeInAnimation.start(); } 55 | 56 | Component.onCompleted: window.parent = wrapper 57 | 58 | layer.enabled: smoothBorders && DeviceSpecs.hasRoundScreen 59 | layer.effect: CircleMaskShader { } 60 | } 61 | -------------------------------------------------------------------------------- /src/qml/misc/ConnectionSelector.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Florent Revest 3 | * 2014 Aleksi Suomalainen 4 | * All rights reserved. 5 | * 6 | * You may use this file under the terms of BSD license as follows: 7 | * 8 | * Redistribution and use in source and binary forms, with or without 9 | * modification, are permitted provided that the following conditions are met: 10 | * * Redistributions of source code must retain the above copyright 11 | * notice, this list of conditions and the following disclaimer. 12 | * * Redistributions in binary form must reproduce the above copyright 13 | * notice, this list of conditions and the following disclaimer in the 14 | * documentation and/or other materials provided with the distribution. 15 | * * Neither the name of the author nor the 16 | * names of its contributors may be used to endorse or promote products 17 | * derived from this software without specific prior written permission. 18 | * 19 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 20 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 21 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 23 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 24 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 26 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 | */ 30 | 31 | import QtQuick 2.9 32 | 33 | Item { } 34 | -------------------------------------------------------------------------------- /src/qml/misc/ShutdownScreen.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Florent Revest 3 | * 2014 Aleksi Suomalainen 4 | * All rights reserved. 5 | * 6 | * You may use this file under the terms of BSD license as follows: 7 | * 8 | * Redistribution and use in source and binary forms, with or without 9 | * modification, are permitted provided that the following conditions are met: 10 | * * Redistributions of source code must retain the above copyright 11 | * notice, this list of conditions and the following disclaimer. 12 | * * Redistributions in binary form must reproduce the above copyright 13 | * notice, this list of conditions and the following disclaimer in the 14 | * documentation and/or other materials provided with the distribution. 15 | * * Neither the name of the author nor the 16 | * names of its contributors may be used to endorse or promote products 17 | * derived from this software without specific prior written permission. 18 | * 19 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 20 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 21 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 23 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 24 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 26 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 | */ 30 | 31 | import QtQuick 2.9 32 | import QtQuick.Window 2.0 33 | import org.nemomobile.lipstick 0.1 34 | import ".." 35 | 36 | Rectangle { 37 | id: shutdownWindow 38 | width: parent.width 39 | height: parent.height 40 | color: "black" 41 | property bool shouldVisible 42 | opacity: shutdownScreen.windowVisible 43 | 44 | Image { 45 | anchors.centerIn: parent 46 | source: shutdownMode ? "" : "qrc:/images/shutdown-logo.png" 47 | } 48 | 49 | Behavior on opacity { 50 | NumberAnimation { 51 | duration: 500 52 | onRunningChanged: if (!running && shutdownWindow.opacity == 0) shutdownScreen.windowVisible = false 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/qml/misc/Splash.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2022 - Timo Könnecke 3 | * 2022 - Darrel Griët 4 | * All rights reserved. 5 | * 6 | * You may use this file under the terms of BSD license as follows: 7 | * 8 | * Redistribution and use in source and binary forms, with or without 9 | * modification, are permitted provided that the following conditions are met: 10 | * * Redistributions of source code must retain the above copyright 11 | * notice, this list of conditions and the following disclaimer. 12 | * * Redistributions in binary form must reproduce the above copyright 13 | * notice, this list of conditions and the following disclaimer in the 14 | * documentation and/or other materials provided with the distribution. 15 | * * Neither the name of the author nor the 16 | * names of its contributors may be used to endorse or promote products 17 | * derived from this software without specific prior written permission. 18 | * 19 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 20 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 21 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 23 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 24 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 26 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 | */ 30 | 31 | import QtQuick 2.9 32 | import org.asteroid.controls 1.0 33 | import QtGraphicalEffects 1.15 34 | 35 | Item { 36 | anchors.fill: parent 37 | visible: background.opacity > 0 38 | Timer { 39 | id: animationStarter 40 | running: true 41 | triggeredOnStart: true 42 | onTriggered: { 43 | background.opacity = 0 44 | logoTransform.scale = 14 45 | cutout.width = Dims.w(150) 46 | } 47 | } 48 | Rectangle { 49 | id: background 50 | color: "black" 51 | anchors.fill: parent 52 | opacity: visible ? 1.0 : 0 53 | Behavior on opacity { 54 | SequentialAnimation { 55 | PauseAnimation { duration: 150 } 56 | NumberAnimation { duration: 250; easing.type: Easing.InSine } 57 | } 58 | } 59 | } 60 | Rectangle { 61 | id: logo 62 | anchors.fill: parent 63 | color: "black" 64 | visible: false 65 | Image { 66 | property var logoSize: (parent.width > parent.height ? parent.height : parent.width) * 0.55 67 | id: logoSvg 68 | anchors.fill: parent 69 | fillMode: Image.Pad 70 | source: "qrc:/images/bootlogo.svg" 71 | sourceSize: Qt.size(logoSize, logoSize) 72 | transform: Scale { 73 | id: logoTransform 74 | property real scale: 1 75 | origin.x: Dims.w(50) 76 | origin.y: Dims.h(44.5) 77 | xScale: scale 78 | yScale: scale 79 | Behavior on scale { NumberAnimation { duration: 400; easing.type: Easing.InQuint } } 80 | } 81 | } 82 | } 83 | Item { 84 | id: mask 85 | anchors.fill: parent 86 | visible: false 87 | Rectangle { 88 | id: cutout 89 | width: 1 90 | height: width 91 | anchors.centerIn: parent 92 | anchors.verticalCenterOffset: -Dims.h(5) 93 | radius: parent.width / 2 94 | Behavior on width { NumberAnimation { duration: 400; easing.type: Easing.InQuint } } 95 | } 96 | } 97 | OpacityMask { 98 | anchors.fill: logo 99 | source: logo 100 | maskSource: mask 101 | invert: true 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /src/qml/misc/USBModeSelector.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Florent Revest 3 | * 2014 Aleksi Suomalainen 4 | * All rights reserved. 5 | * 6 | * You may use this file under the terms of BSD license as follows: 7 | * 8 | * Redistribution and use in source and binary forms, with or without 9 | * modification, are permitted provided that the following conditions are met: 10 | * * Redistributions of source code must retain the above copyright 11 | * notice, this list of conditions and the following disclaimer. 12 | * * Redistributions in binary form must reproduce the above copyright 13 | * notice, this list of conditions and the following disclaimer in the 14 | * documentation and/or other materials provided with the distribution. 15 | * * Neither the name of the author nor the 16 | * names of its contributors may be used to endorse or promote products 17 | * derived from this software without specific prior written permission. 18 | * 19 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 20 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 21 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 23 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 24 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 26 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 | */ 30 | 31 | import QtQuick 2.9 32 | 33 | Item { } 34 | -------------------------------------------------------------------------------- /src/qml/misc/VolumeControl.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Florent Revest 3 | * 2014 Aleksi Suomalainen 4 | * All rights reserved. 5 | * 6 | * You may use this file under the terms of BSD license as follows: 7 | * 8 | * Redistribution and use in source and binary forms, with or without 9 | * modification, are permitted provided that the following conditions are met: 10 | * * Redistributions of source code must retain the above copyright 11 | * notice, this list of conditions and the following disclaimer. 12 | * * Redistributions in binary form must reproduce the above copyright 13 | * notice, this list of conditions and the following disclaimer in the 14 | * documentation and/or other materials provided with the distribution. 15 | * * Neither the name of the author nor the 16 | * names of its contributors may be used to endorse or promote products 17 | * derived from this software without specific prior written permission. 18 | * 19 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 20 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 21 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 23 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 24 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 26 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 | */ 30 | 31 | import QtQuick 2.9 32 | 33 | Item {} 34 | -------------------------------------------------------------------------------- /src/qml/misc/desktop.js: -------------------------------------------------------------------------------- 1 | .pragma library 2 | var panelsGrid 3 | var appLauncher 4 | var desktop 5 | 6 | -------------------------------------------------------------------------------- /src/qml/notifications/NotificationButton.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2017 Florent Revest 3 | * All rights reserved. 4 | * 5 | * You may use this file under the terms of BSD license as follows: 6 | * 7 | * Redistribution and use in source and binary forms, with or without 8 | * modification, are permitted provided that the following conditions are met: 9 | * * Redistributions of source code must retain the above copyright 10 | * notice, this list of conditions and the following disclaimer. 11 | * * Redistributions in binary form must reproduce the above copyright 12 | * notice, this list of conditions and the following disclaimer in the 13 | * documentation and/or other materials provided with the distribution. 14 | * * Neither the name of the author nor the 15 | * names of its contributors may be used to endorse or promote products 16 | * derived from this software without specific prior written permission. 17 | * 18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 22 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | import QtQuick 2.9 31 | import org.asteroid.controls 1.0 32 | 33 | MouseArea { 34 | property alias text: content.text 35 | 36 | Rectangle { 37 | anchors.fill: parent 38 | radius: height/2 39 | color: parent.pressed ? "#99222222" : "#BB222222" 40 | } 41 | 42 | Label { 43 | id: content 44 | font.pixelSize: Dims.l(8) 45 | anchors.centerIn: parent 46 | } 47 | } 48 | 49 | -------------------------------------------------------------------------------- /src/qml/notifications/NotificationIndicator.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2017 Florent Revest 3 | * All rights reserved. 4 | * 5 | * You may use this file under the terms of BSD license as follows: 6 | * 7 | * Redistribution and use in source and binary forms, with or without 8 | * modification, are permitted provided that the following conditions are met: 9 | * * Redistributions of source code must retain the above copyright 10 | * notice, this list of conditions and the following disclaimer. 11 | * * Redistributions in binary form must reproduce the above copyright 12 | * notice, this list of conditions and the following disclaimer in the 13 | * documentation and/or other materials provided with the distribution. 14 | * * Neither the name of the author nor the 15 | * names of its contributors may be used to endorse or promote products 16 | * derived from this software without specific prior written permission. 17 | * 18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 22 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | import QtQuick 2.9 31 | import org.nemomobile.lipstick 0.1 32 | import org.asteroid.controls 1.0 33 | 34 | Item { 35 | id: notifIndic 36 | property QtObject panelsGrid 37 | property real iconSize: height 38 | property int currentIndex 39 | property var icons: [] 40 | visible: false 41 | 42 | Item { 43 | id: content 44 | x: notifIndic.width/2 45 | 46 | Rectangle { 47 | id: separator 48 | visible: notifModel.itemCount !== 0 49 | x: iconSize*1.1 50 | width: 1 51 | height: iconSize 52 | color: "#8e8e8e" 53 | } 54 | 55 | Icon { 56 | visible: notifModel.itemCount !== 0 57 | name: "ios-time" 58 | color: "#8e8e8e" 59 | width: iconSize 60 | height: iconSize 61 | anchors.leftMargin: iconSize/10 62 | anchors.left: separator.right 63 | } 64 | } 65 | 66 | Component { 67 | id: iconComponent; 68 | Icon { 69 | property QtObject notification 70 | property int index: 0 71 | 72 | name: { 73 | if(notification==null) 74 | return ""; 75 | 76 | function noicon(str) { 77 | return str === "" || str === null || str === undefined; 78 | } 79 | if(noicon(notification.icon) && noicon(notification.appIcon)) 80 | return "ios-mail-outline"; 81 | if(noicon(notification.icon) && !noicon(notification.appIcon)) 82 | return notification.appIcon; 83 | if(!noicon(notification.icon) && noicon(notification.appIcon)) 84 | return notification.icon; 85 | 86 | return notification.icon; 87 | } 88 | color: index == notifIndic.currentIndex ? "#FFFFFF" : "#8e8e8e" 89 | } 90 | } 91 | 92 | function addIcon(pos, item) { 93 | if (iconComponent.status === Component.Ready) { 94 | var icon = iconComponent.createObject(content) 95 | icon.x = iconSize*pos 96 | icon.y = 0 97 | icon.width = iconSize 98 | icon.height = iconSize 99 | icon.notification = item 100 | icon.index = pos 101 | icons[pos] = icon 102 | } 103 | } 104 | 105 | function moveIcon(originPos, destPos) { 106 | var icon = icons[originPos] 107 | if(icon !== undefined) { 108 | icons[destPos] = icon 109 | icon.x = iconSize*destPos 110 | icon.index = destPos 111 | icons[originPos] = undefined 112 | } 113 | } 114 | 115 | function removeIcon(pos) { 116 | var icon = icons[pos] 117 | if(icon !== undefined) 118 | icon.destroy() 119 | icons[pos] = undefined 120 | } 121 | 122 | function moveTo(pos) { 123 | content.x = notifIndic.width/2 - iconSize/2 -iconSize*pos 124 | currentIndex = pos 125 | } 126 | 127 | Connections { 128 | target: panelsGrid 129 | 130 | function makeVisible() { 131 | if((panelsGrid.currentVerticalPos == 0 && panelsGrid.currentHorizontalPos < 0) && !Lipstick.compositor.displayAmbient) { 132 | notifIndic.visible = true 133 | moveTo(panelsGrid.currentHorizontalPos+1) 134 | } else 135 | notifIndic.visible = false 136 | } 137 | 138 | function onCurrentHorizontalPosChanged() { makeVisible() } 139 | function onCurrentVerticalPosChanged() { makeVisible() } 140 | } 141 | 142 | NotificationListModel { 143 | id: notifModel 144 | onItemAdded: { 145 | var index = notifModel.indexOf(item) 146 | 147 | var leftIconIndex = notifModel.itemCount 148 | while(leftIconIndex > index) { 149 | moveIcon(-leftIconIndex+1, (-leftIconIndex)) 150 | leftIconIndex-- 151 | } 152 | 153 | addIcon(-index, item) 154 | } 155 | 156 | onRowsRemoved: { 157 | for (var i = first ; i <= last; i++) 158 | removeIcon(-i) 159 | 160 | for (var i = last+1 ; i <= notifModel.itemCount+1; i++) 161 | moveIcon(-i, -i+(last-first+1)) 162 | } 163 | } 164 | } 165 | -------------------------------------------------------------------------------- /src/qml/notifications/NotificationPreview.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Florent Revest 3 | * 2014 Aleksi Suomalainen 4 | * 2012 Jolla Ltd. 5 | * All rights reserved. 6 | * 7 | * You may use this file under the terms of BSD license as follows: 8 | * 9 | * Redistribution and use in source and binary forms, with or without 10 | * modification, are permitted provided that the following conditions are met: 11 | * * Redistributions of source code must retain the above copyright 12 | * notice, this list of conditions and the following disclaimer. 13 | * * Redistributions in binary form must reproduce the above copyright 14 | * notice, this list of conditions and the following disclaimer in the 15 | * documentation and/or other materials provided with the distribution. 16 | * * Neither the name of the author nor the 17 | * names of its contributors may be used to endorse or promote products 18 | * derived from this software without specific prior written permission. 19 | * 20 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 21 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 22 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 24 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 25 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 26 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 27 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 29 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | */ 31 | 32 | import QtQuick 2.9 33 | import org.asteroid.controls 1.0 34 | import org.nemomobile.lipstick 0.1 35 | 36 | Item { 37 | id: notificationWindow 38 | width: initialSize.width 39 | height: initialSize.height 40 | 41 | MouseArea { 42 | id: notificationArea 43 | anchors.fill: parent 44 | enabled: state == "show" 45 | onClicked: notificationArea.state = "hide" 46 | 47 | Rectangle { 48 | anchors.fill: parent 49 | color: "#000000" 50 | opacity: notificationArea.pressed ? 0.85 : 0.8 51 | } 52 | 53 | Item { 54 | anchors.verticalCenter: parent.verticalCenter 55 | width: parent.width 56 | height: icon.anchors.topMargin + icon.height + summary.anchors.topMargin + summary.height + body.anchors.topMargin + body.height 57 | 58 | Icon { 59 | id: icon 60 | anchors.top: parent.top 61 | anchors.topMargin: Dims.iconButtonMargin 62 | anchors.horizontalCenter: parent.horizontalCenter 63 | width: Dims.w(20) 64 | height: width 65 | color: "#FFFFFF" 66 | name: { 67 | var notif = notificationPreviewPresenter.notification; 68 | if(notif==null) 69 | return ""; 70 | 71 | function noicon(str) { 72 | return str === "" || str === null || str === undefined; 73 | } 74 | if(noicon(notif.icon) && noicon(notif.appIcon)) 75 | return "ios-mail-outline"; 76 | if(noicon(notif.icon) && !noicon(notif.appIcon)) 77 | return notif.appIcon; 78 | if(!noicon(notif.icon) && noicon(notif.appIcon)) 79 | return notif.icon; 80 | 81 | return notif.icon; 82 | } 83 | } 84 | 85 | Label { 86 | id: summary 87 | anchors.top: icon.bottom 88 | height: text == "" ? 0 : undefined 89 | width: Dims.w(90) 90 | horizontalAlignment: Text.AlignHCenter 91 | anchors.horizontalCenter: parent.horizontalCenter 92 | anchors.topMargin: text == "" ? 0 : Dims.h(3) 93 | color: "#FFFFFF" 94 | font.pixelSize: Dims.l(6) 95 | font.bold: true 96 | clip: true 97 | elide: Text.ElideRight 98 | text: notificationPreviewPresenter.notification != null ? notificationPreviewPresenter.notification.previewSummary : "" 99 | } 100 | 101 | Label { 102 | id: body 103 | anchors.top: summary.bottom 104 | width: Dims.w(80) 105 | horizontalAlignment: Text.AlignHCenter 106 | anchors.horizontalCenter: parent.horizontalCenter 107 | anchors.topMargin: Dims.h(3) 108 | color: "#FFFFFF" 109 | font.pixelSize: Dims.h(6) 110 | font.bold: summary.text == "" 111 | clip: true 112 | maximumLineCount: 4 113 | elide: Text.ElideRight 114 | wrapMode: Text.Wrap 115 | text: notificationPreviewPresenter.notification != null ? notificationPreviewPresenter.notification.previewBody : "" 116 | } 117 | } 118 | 119 | states: [ 120 | State { 121 | name: "show" 122 | PropertyChanges { 123 | target: notificationArea 124 | opacity: 1 125 | } 126 | StateChangeScript { 127 | name: "notificationShown" 128 | script: { 129 | notificationTimer.start() 130 | } 131 | } 132 | }, 133 | State { 134 | name: "hide" 135 | PropertyChanges { 136 | target: notificationArea 137 | opacity: 0 138 | } 139 | StateChangeScript { 140 | name: "notificationHidden" 141 | script: { 142 | notificationTimer.stop() 143 | notificationPreviewPresenter.showNextNotification() 144 | } 145 | } 146 | } 147 | ] 148 | 149 | transitions: [ 150 | Transition { 151 | to: "show" 152 | SequentialAnimation { 153 | OpacityAnimator { duration: 300 } 154 | ScriptAction { scriptName: "notificationShown" } 155 | } 156 | }, 157 | Transition { 158 | to: "hide" 159 | SequentialAnimation { 160 | OpacityAnimator { duration: 300 } 161 | ScriptAction { scriptName: "notificationHidden" } 162 | } 163 | } 164 | ] 165 | 166 | Timer { 167 | id: notificationTimer 168 | interval: 5000 169 | repeat: false 170 | onTriggered: notificationArea.state = "hide" 171 | } 172 | 173 | Connections { 174 | target: notificationPreviewPresenter; 175 | function onNotificationChanged() { notificationArea.state = (notificationPreviewPresenter.notification != null) ? "show" : "hide" } 176 | } 177 | } 178 | } 179 | -------------------------------------------------------------------------------- /src/qml/notifications/NotificationView.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2017 Florent Revest 3 | * All rights reserved. 4 | * 5 | * You may use this file under the terms of BSD license as follows: 6 | * 7 | * Redistribution and use in source and binary forms, with or without 8 | * modification, are permitted provided that the following conditions are met: 9 | * * Redistributions of source code must retain the above copyright 10 | * notice, this list of conditions and the following disclaimer. 11 | * * Redistributions in binary form must reproduce the above copyright 12 | * notice, this list of conditions and the following disclaimer in the 13 | * documentation and/or other materials provided with the distribution. 14 | * * Neither the name of the author nor the 15 | * names of its contributors may be used to endorse or promote products 16 | * derived from this software without specific prior written permission. 17 | * 18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 22 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | import QtQuick 2.9 31 | import org.asteroid.controls 1.0 32 | import QtMultimedia 5.4 33 | 34 | MouseArea { 35 | id: view 36 | 37 | property QtObject panelsGrid 38 | property QtObject notification 39 | property bool forbidTop: column.y < 0 40 | property real prevY: 0 41 | 42 | SoundEffect { 43 | id: notifSound 44 | source: "/usr/share/sounds/notification.wav" 45 | } 46 | 47 | onNotificationChanged: { 48 | if(notification !== undefined && notification !== null) { 49 | appName.text = notification.appName 50 | summary.text = notification.summary 51 | body.text = notification.body 52 | notifSound.play() 53 | updateTimestamp() 54 | } 55 | } 56 | 57 | function updateTimestamp() { 58 | var currentTime = new Date 59 | var delta = (currentTime.getTime() - notification.timestamp.getTime()) 60 | 61 | if(delta < 60*1000) 62 | //% "Now" 63 | timestamp.text = qsTrId("id-now") + localeManager.changesObserver 64 | else { 65 | delta = parseInt(delta/(1000*60)) 66 | if(delta < 60) { 67 | //% "m" 68 | timestamp.text = delta + qsTrId("id-minute-abbrev") + localeManager.changesObserver 69 | } else { 70 | delta = parseInt(delta/60) 71 | if(delta < 60) { 72 | //% "h" 73 | timestamp.text = delta + qsTrId("id-hour-abbrev") + localeManager.changesObserver 74 | } else { 75 | delta = parseInt(delta/24) 76 | //% "d" 77 | timestamp.text = delta + qsTrId("id-day-abbrev") + localeManager.changesObserver 78 | } 79 | } 80 | } 81 | } 82 | 83 | onPressed: prevY = mouse.y 84 | 85 | onPositionChanged: { 86 | var newY = column.y + mouse.y-prevY 87 | newY = Math.max(newY, -column.height+view.height) 88 | newY = Math.min(newY, 0) 89 | column.y = newY 90 | prevY = mouse.y 91 | } 92 | 93 | Column { 94 | id: column 95 | anchors.horizontalCenter: parent.horizontalCenter 96 | width: view.width * 0.7 97 | 98 | Item { 99 | id: spacing1 100 | height: Dims.h(15) 101 | width: 1 102 | } 103 | 104 | Row { 105 | height: Dims.h(10) 106 | 107 | Label { 108 | id: appName 109 | width: Dims.w(56) 110 | font.pixelSize: Dims.l(6) 111 | elide: Text.ElideRight 112 | 113 | Connections { 114 | target: panelsGrid 115 | function onCurrentHorizontalPosChanged() { updateTimestamp() } 116 | } 117 | } 118 | 119 | Label { 120 | id: timestamp 121 | font.pixelSize: appName.font.pixelSize 122 | horizontalAlignment: Text.AlignRight 123 | width: Dims.w(14) 124 | } 125 | } 126 | 127 | Item { 128 | id: spacing3 129 | height: Dims.h(3) 130 | width: 1 131 | } 132 | 133 | Label { 134 | id: summary 135 | font.bold: true 136 | width: parent.width 137 | elide: Text.ElideRight 138 | } 139 | 140 | Item { 141 | id: spacing4 142 | height: Dims.h(1) 143 | width: 1 144 | } 145 | 146 | Label { 147 | id: body 148 | anchors.horizontalCenter: parent.horizontalCenter 149 | wrapMode: Text.Wrap 150 | width: parent.width 151 | } 152 | 153 | Item { 154 | id: spacing5 155 | height: Dims.h(10) 156 | width: 1 157 | } 158 | 159 | NotificationButton { 160 | //% "Dismiss" 161 | text: qsTrId("id-dismiss") + localeManager.changesObserver 162 | anchors.horizontalCenter: parent.horizontalCenter 163 | width: Dims.w(55) 164 | height: Dims.h(20) 165 | onClicked: if (notification !== undefined && notification.userRemovable) notification.actionInvoked("default") 166 | } 167 | 168 | Item { 169 | id: spacing6 170 | height: Dims.h(10) 171 | width: 1 172 | } 173 | } 174 | } 175 | -------------------------------------------------------------------------------- /src/qml/notifications/NotificationsPanel.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2017 Florent Revest 3 | * All rights reserved. 4 | * 5 | * You may use this file under the terms of BSD license as follows: 6 | * 7 | * Redistribution and use in source and binary forms, with or without 8 | * modification, are permitted provided that the following conditions are met: 9 | * * Redistributions of source code must retain the above copyright 10 | * notice, this list of conditions and the following disclaimer. 11 | * * Redistributions in binary form must reproduce the above copyright 12 | * notice, this list of conditions and the following disclaimer in the 13 | * documentation and/or other materials provided with the distribution. 14 | * * Neither the name of the author nor the 15 | * names of its contributors may be used to endorse or promote products 16 | * derived from this software without specific prior written permission. 17 | * 18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 22 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | import QtQuick 2.9 31 | import org.nemomobile.lipstick 0.1 32 | import org.asteroid.controls 1.0 33 | 34 | Item { 35 | id: notifPanel 36 | 37 | property QtObject panelsGrid 38 | property QtObject firstNotifView: null 39 | property bool forbidTop: firstNotifView !== null ? firstNotifView.forbidTop : false 40 | property bool modelEmpty: notifModel.itemCount === 0 41 | 42 | onForbidTopChanged: panelsGrid.changeAllowedDirections() 43 | 44 | NotificationListModel { 45 | id: notifModel 46 | onItemAdded: { 47 | var index = notifModel.indexOf(item) 48 | 49 | var leftPanelIndex = notifModel.itemCount-1 50 | while(leftPanelIndex > index) { 51 | if(leftPanelIndex == 1 && firstNotifView !== null) { 52 | panelsGrid.movePanel(-1, -1, -2, -1) 53 | var notif = firstNotifView.notification 54 | firstNotifView.destroy() 55 | var notifView = panelsGrid.addPanel(-2, 0, notificationViewComp) 56 | notifView.visible = false 57 | notifView.notification = notif 58 | notifView.panelsGrid = panelsGrid 59 | } else if(firstNotifView !== null) { 60 | panelsGrid.movePanel(-leftPanelIndex, 0, (-leftPanelIndex-1), 0) 61 | panelsGrid.movePanel(-leftPanelIndex, -1, (-leftPanelIndex-1), -1) 62 | } 63 | 64 | leftPanelIndex-- 65 | } 66 | 67 | var notifActions = panelsGrid.addPanel(-index-1, -1, notificationActionsComp) 68 | notifActions.visible = false 69 | notifActions.notification = item 70 | notifActions.panelsGrid = panelsGrid 71 | notifActions.notificationModel = notifModel 72 | if(index > 0) { 73 | var notifView = panelsGrid.addPanel(-index-1, 0, notificationViewComp) 74 | notifView.visible = false 75 | notifView.notification = item 76 | notifView.panelsGrid = panelsGrid 77 | } else { 78 | firstNotifView = notificationViewComp.createObject(notifPanel) 79 | 80 | firstNotifView.x = 0 81 | firstNotifView.y = 0 82 | firstNotifView.width = Qt.binding(function() { return notifPanel.width }) 83 | firstNotifView.height = Qt.binding(function() { return notifPanel.height }) 84 | firstNotifView.notification = item 85 | firstNotifView.panelsGrid = panelsGrid 86 | } 87 | 88 | panelsGrid.changeAllowedDirections() 89 | } 90 | 91 | onRowsRemoved: { 92 | for (var i = first+1 ; i <= last+1; i++) { 93 | if(i!==1) 94 | panelsGrid.removePanel(-i, 0) 95 | else 96 | firstNotifView.destroy() 97 | 98 | panelsGrid.removePanel(-i, -1) 99 | } 100 | 101 | for (var i = last+2 ; i <= notifModel.itemCount+1; i++) { 102 | if(i == last-first+2) { 103 | panelsGrid.removePanel(-i, 0) 104 | panelsGrid.removePanel(-i, -1) 105 | 106 | var notifActions = panelsGrid.addPanel(-1, -1, notificationActionsComp) 107 | notifActions.visible = false 108 | notifActions.notification = notifModel.get(0) 109 | notifActions.notificationModel = notifModel 110 | 111 | firstNotifView = notificationViewComp.createObject(notifPanel) 112 | firstNotifView.x = 0 113 | firstNotifView.y = 0 114 | firstNotifView.width = Qt.binding(function() { return notifPanel.width }) 115 | firstNotifView.height = Qt.binding(function() { return notifPanel.height }) 116 | firstNotifView.notification = notifModel.get(0) 117 | firstNotifView.panelsGrid = panelsGrid 118 | } else { 119 | panelsGrid.movePanel(-i, 0, -i+(last-first+1), 0) 120 | panelsGrid.movePanel(-i, -1, -i+(last-first+1), -1) 121 | } 122 | } 123 | 124 | if (first === 0 && notifModel.itemCount > 0) { 125 | panelsGrid.moveTo(-1, 0) 126 | } else { 127 | panelsGrid.moveTo(-first, 0) 128 | } 129 | } 130 | } 131 | 132 | Component { 133 | id: notificationActionsComp 134 | NotificationActions {} 135 | } 136 | Component { 137 | id: notificationViewComp 138 | NotificationView {} 139 | } 140 | 141 | Icon { 142 | id: emptyIndicator 143 | visible: modelEmpty 144 | width: Dims.w(27) 145 | height: width 146 | name: "ios-mail-outline" 147 | opacity: 0.8 148 | anchors.centerIn: parent 149 | anchors.verticalCenterOffset: -Dims.h(9) 150 | } 151 | 152 | Label { 153 | visible: modelEmpty 154 | anchors.topMargin: Dims.h(4) 155 | anchors.top: emptyIndicator.bottom 156 | anchors.left: parent.left 157 | anchors.right: parent.right 158 | horizontalAlignment: Text.AlignHCenter 159 | //% "No notifications" 160 | text: qsTrId("id-no-notifications") + localeManager.changesObserver 161 | font.pixelSize: Dims.l(6) 162 | opacity: 0.8 163 | } 164 | } 165 | 166 | -------------------------------------------------------------------------------- /src/qml/quicksettings/QuickSettings.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Florent Revest 3 | * 2014 Aleksi Suomalainen 4 | * All rights reserved. 5 | * 6 | * You may use this file under the terms of BSD license as follows: 7 | * 8 | * Redistribution and use in source and binary forms, with or without 9 | * modification, are permitted provided that the following conditions are met: 10 | * * Redistributions of source code must retain the above copyright 11 | * notice, this list of conditions and the following disclaimer. 12 | * * Redistributions in binary form must reproduce the above copyright 13 | * notice, this list of conditions and the following disclaimer in the 14 | * documentation and/or other materials provided with the distribution. 15 | * * Neither the name of the author nor the 16 | * names of its contributors may be used to endorse or promote products 17 | * derived from this software without specific prior written permission. 18 | * 19 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 20 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 21 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 23 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 24 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 26 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 | */ 30 | 31 | import QtQuick 2.9 32 | import Nemo.Mce 1.0 33 | import Nemo.DBus 2.0 34 | import org.nemomobile.systemsettings 1.0 35 | import Nemo.Ngf 1.0 36 | import org.asteroid.controls 1.0 37 | import org.asteroid.utils 1.0 38 | 39 | Item { 40 | id: rootitem 41 | width: parent.width 42 | height: parent.height 43 | 44 | property bool forbidLeft: true 45 | property bool forbidRight: true 46 | 47 | MceBatteryLevel { 48 | id: batteryChargePercentage 49 | } 50 | 51 | MceBatteryState { 52 | id: batteryChargeState 53 | } 54 | 55 | DBusInterface { 56 | id: mce_dbus 57 | 58 | service: "com.nokia.mce" 59 | path: "/com/nokia/mce/request" 60 | iface: "com.nokia.mce.request" 61 | 62 | bus: DBus.SystemBus 63 | } 64 | 65 | QuickSettingsToggle { 66 | id: lockedToggle 67 | anchors.top: rootitem.top 68 | anchors.horizontalCenter: rootitem.horizontalCenter 69 | icon: "ios-unlock" 70 | togglable: false 71 | toggled: false 72 | onUnchecked: mce_dbus.call("req_display_state_lpm", undefined) 73 | } 74 | 75 | DisplaySettings { 76 | id: displaySettings 77 | onBrightnessChanged: updateBrightnessToggle() 78 | } 79 | 80 | QuickSettingsToggle { 81 | id: brightnessToggle 82 | anchors.left: rootitem.left 83 | anchors.verticalCenter: rootitem.verticalCenter 84 | icon: "ios-sunny" 85 | onChecked: displaySettings.brightness = 100 86 | onUnchecked: displaySettings.brightness = 0 87 | Component.onCompleted: updateBrightnessToggle() 88 | } 89 | 90 | function updateBrightnessToggle() { 91 | brightnessToggle.toggled = displaySettings.brightness > 80 92 | } 93 | 94 | BluetoothStatus { 95 | id: btStatus 96 | onPoweredChanged: bluetoothToggle.toggled = btStatus.powered 97 | } 98 | 99 | QuickSettingsToggle { 100 | id: bluetoothToggle 101 | anchors.centerIn: parent 102 | icon: btStatus.connected ? "ios-bluetooth-connected" : "ios-bluetooth" 103 | onChecked: btStatus.powered = true 104 | onUnchecked: btStatus.powered = false 105 | Component.onCompleted: toggled = btStatus.powered 106 | } 107 | 108 | NonGraphicalFeedback { 109 | id: feedback 110 | event: "press" 111 | } 112 | 113 | ProfileControl { 114 | id: profileControl 115 | } 116 | 117 | Timer { 118 | id: delayTimer 119 | interval: 125 120 | repeat: false 121 | onTriggered: feedback.play() 122 | } 123 | 124 | QuickSettingsToggle { 125 | id: hapticsToggle 126 | anchors.right: rootitem.right 127 | anchors.verticalCenter: rootitem.verticalCenter 128 | icon: "ios-watch-vibrating" 129 | onChecked: { 130 | profileControl.profile = "general"; 131 | delayTimer.start(); 132 | } 133 | onUnchecked: profileControl.profile = "silent"; 134 | Component.onCompleted: toggled = profileControl.profile == "general" 135 | } 136 | 137 | Item { 138 | id: battery 139 | anchors.horizontalCenter: rootitem.horizontalCenter 140 | anchors.bottom: rootitem.bottom 141 | height: parent.height/3 142 | width: batteryIcon.width + batteryIndicator.width 143 | 144 | Icon { 145 | id: batteryIcon 146 | name: { 147 | if(batteryChargeState.value == MceBatteryState.Charging) return "ios-battery-charging" 148 | else if(batteryChargePercentage.percent > 15) return "ios-battery-full" 149 | else return "ios-battery-dead" 150 | } 151 | width: parent.height/2 152 | height: width 153 | anchors.left: parent.left 154 | anchors.verticalCenter: parent.verticalCenter 155 | } 156 | Label { 157 | id: batteryIndicator 158 | font.pixelSize: parent.height/4 159 | text: batteryChargePercentage.percent + "%" 160 | anchors.right: parent.right 161 | anchors.verticalCenter: parent.verticalCenter 162 | } 163 | } 164 | } 165 | -------------------------------------------------------------------------------- /src/qml/quicksettings/QuickSettingsToggle.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Florent Revest 3 | * All rights reserved. 4 | * 5 | * You may use this file under the terms of BSD license as follows: 6 | * 7 | * Redistribution and use in source and binary forms, with or without 8 | * modification, are permitted provided that the following conditions are met: 9 | * * Redistributions of source code must retain the above copyright 10 | * notice, this list of conditions and the following disclaimer. 11 | * * Redistributions in binary form must reproduce the above copyright 12 | * notice, this list of conditions and the following disclaimer in the 13 | * documentation and/or other materials provided with the distribution. 14 | * * Neither the name of the author nor the 15 | * names of its contributors may be used to endorse or promote products 16 | * derived from this software without specific prior written permission. 17 | * 18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 22 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | import QtQuick 2.9 31 | import org.asteroid.controls 1.0 32 | 33 | MouseArea { 34 | id: ma 35 | 36 | width: parent.width/3 37 | height: width 38 | 39 | property alias icon : ic.name 40 | property bool toggled : true 41 | property bool togglable : true 42 | 43 | signal checked 44 | signal unchecked 45 | onClicked: { 46 | if (ma.togglable) toggled = !toggled; 47 | ma.toggled ? ma.checked() : ma.unchecked() 48 | } 49 | 50 | Rectangle { 51 | anchors.fill: parent 52 | radius: width/2 53 | anchors.margins: ma.width*0.1 54 | color: "#222222" 55 | opacity: ma.pressed ? 0.6 : ma.toggled ? 0.75 : 0.2 56 | } 57 | 58 | Icon { 59 | id: ic 60 | width: parent.width*0.5 61 | height: width 62 | anchors.centerIn: parent 63 | color: ma.pressed ? "lightgrey" : "white" 64 | opacity: ma.pressed ? 0.5 : ma.toggled ? 1 : (ma.togglable ? 0.3 : 1) 65 | } 66 | } 67 | 68 | -------------------------------------------------------------------------------- /src/qml/today/weathericons.js: -------------------------------------------------------------------------------- 1 | // https://openweathermap.org/weather-conditions 2 | var iconNameByOwmCode = { 3 | '200': 'ios-thunderstorm-outline', 4 | '201': 'ios-thunderstorm-outline', 5 | '202': 'ios-thunderstorm-outline', 6 | '210': 'ios-thunderstorm-outline', 7 | '211': 'ios-thunderstorm-outline', 8 | '212': 'ios-thunderstorm-outline', 9 | '221': 'ios-thunderstorm-outline', 10 | '230': 'ios-thunderstorm-outline', 11 | '231': 'ios-thunderstorm-outline', 12 | '232': 'ios-thunderstorm-outline', 13 | 14 | '300': 'ios-rainy-outline', 15 | '301': 'ios-rainy-outline', 16 | '302': 'ios-rainy-outline', 17 | '310': 'ios-rainy-outline', 18 | '311': 'ios-rainy-outline', 19 | '312': 'ios-rainy-outline', 20 | '313': 'ios-rainy-outline', 21 | '314': 'ios-rainy-outline', 22 | '321': 'ios-rainy-outline', 23 | 24 | '500': 'ios-rainy-outline', 25 | '501': 'ios-rainy-outline', 26 | '502': 'ios-rainy-outline', 27 | '503': 'ios-rainy-outline', 28 | '504': 'ios-rainy-outline', 29 | '511': 'ios-snow-outline', 30 | '520': 'ios-rainy-outline', 31 | '521': 'ios-rainy-outline', 32 | '522': 'ios-rainy-outline', 33 | '531': 'ios-rainy-outline', 34 | 35 | '600': 'ios-snow-outline', 36 | '601': 'ios-snow-outline', 37 | '602': 'ios-snow-outline', 38 | '611': 'ios-snow-outline', 39 | '612': 'ios-snow-outline', 40 | '615': 'ios-snow-outline', 41 | '616': 'ios-snow-outline', 42 | '620': 'ios-snow-outline', 43 | '621': 'ios-snow-outline', 44 | '622': 'ios-snow-outline', 45 | 46 | '701': 'ios-cloudy-outline', 47 | '711': 'ios-cloudy-outline', 48 | '721': 'ios-cloudy-outline', 49 | '731': 'ios-cloudy-outline', 50 | '741': 'ios-cloudy-outline', 51 | '751': 'ios-cloudy-outline', 52 | '761': 'ios-cloudy-outline', 53 | 54 | '800': 'ios-sunny-outline', 55 | '801': 'ios-partly-sunny-outline', 56 | '802': 'ios-cloudy-outline', 57 | '803': 'ios-cloudy-outline', 58 | '804': 'ios-cloudy-outline', 59 | 60 | '903': 'ios-snow-outline', 61 | '904': 'ios-flame-outline', 62 | '905': 'ios-sunny-outline', 63 | '906': 'ios-snow-outline', 64 | 65 | '950': 'ios-sunny-outline', 66 | '951': 'ios-sunny-outline', 67 | '952': 'ios-sunny-outline', 68 | '953': 'ios-sunny-outline', 69 | '954': 'ios-sunny-outline', 70 | '955': 'ios-sunny-outline', 71 | '956': 'ios-sunny-outline', 72 | }; 73 | 74 | function getIconName(iconName) { 75 | var iconCodeParts = iconNameByOwmCode[iconName] 76 | if (!iconCodeParts) 77 | return 'ios-alert-outline'; 78 | return iconCodeParts 79 | } 80 | 81 | -------------------------------------------------------------------------------- /src/resources-qml.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | images/shutdown-logo.png 4 | images/bootlogo.svg 5 | 6 | 7 | qml/MainScreen.qml 8 | qml/today/Today.qml 9 | qml/compositor/compositor.qml 10 | qml/misc/Splash.qml 11 | qml/misc/PanelsGrid.qml 12 | qml/notifications/NotificationActions.qml 13 | qml/notifications/NotificationButton.qml 14 | qml/notifications/NotificationIndicator.qml 15 | qml/notifications/NotificationView.qml 16 | qml/notifications/NotificationsPanel.qml 17 | qml/quicksettings/QuickSettings.qml 18 | qml/quicksettings/QuickSettingsToggle.qml 19 | qml/firstrun/FakeAlarmclock.qml 20 | qml/firstrun/FirstRunConfig.qml 21 | qml/firstrun/Tutorial.qml 22 | qml/misc/desktop.js 23 | qml/today/weathericons.js 24 | qml/compositor/WindowWrapperBase.qml 25 | qml/compositor/CircleMaskShader.qml 26 | qml/misc/ShutdownScreen.qml 27 | qml/misc/VolumeControl.qml 28 | qml/misc/USBModeSelector.qml 29 | qml/misc/ConnectionSelector.qml 30 | qml/misc/BluetoothAgent.qml 31 | qml/notifications/NotificationPreview.qml 32 | 33 | 34 | -------------------------------------------------------------------------------- /src/watchfaces-img/analog-aviator-hour-ambient.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/analog-aviator-hour.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/analog-aviator-minute-ambient.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/analog-aviator-minute.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/analog-aviator-second-ambient.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/analog-aviator-second.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/analog-circle-shades-hour.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/analog-circle-shades-minute.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/analog-circle-shades-second.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/analog-scientific-v2-hour-bw.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/analog-scientific-v2-hour.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/analog-scientific-v2-minute-bw.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/analog-scientific-v2-minute.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/analog-scientific-v2-second.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/analog-weather-satellite-second.svg: -------------------------------------------------------------------------------- 1 | 2 | 147 | -------------------------------------------------------------------------------- /src/watchfaces-img/asteroid-logo-black.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/asteroid-logo-white.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/asteroid-logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/funky-town-words-01-bw.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/funky-town-words-01.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/funky-town-words-02-bw.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/funky-town-words-02.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/funky-town-words-03-bw.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/funky-town-words-03.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/funky-town-words-04-bw.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/funky-town-words-04.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/funky-town-words-05-bw.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/funky-town-words-05.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/funky-town-words-06-bw.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/funky-town-words-06.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/funky-town-words-07-bw.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/funky-town-words-07.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/funky-town-words-08-bw.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/funky-town-words-08.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/funky-town-words-09-bw.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/funky-town-words-09.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/funky-town-words-10-bw.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/funky-town-words-10.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/funky-town-words-11-bw.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/funky-town-words-11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/funky-town-words-12-bw.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/funky-town-words-12.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/funky-town-words-am.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/funky-town-words-pm.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/watchfaces-img/numerals-duo-synth-neon-green-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-img/numerals-duo-synth-neon-green-0.png -------------------------------------------------------------------------------- /src/watchfaces-img/numerals-duo-synth-neon-green-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-img/numerals-duo-synth-neon-green-1.png -------------------------------------------------------------------------------- /src/watchfaces-img/numerals-duo-synth-neon-green-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-img/numerals-duo-synth-neon-green-2.png -------------------------------------------------------------------------------- /src/watchfaces-img/numerals-duo-synth-neon-green-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-img/numerals-duo-synth-neon-green-3.png -------------------------------------------------------------------------------- /src/watchfaces-img/numerals-duo-synth-neon-green-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-img/numerals-duo-synth-neon-green-4.png -------------------------------------------------------------------------------- /src/watchfaces-img/numerals-duo-synth-neon-green-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-img/numerals-duo-synth-neon-green-5.png -------------------------------------------------------------------------------- /src/watchfaces-img/numerals-duo-synth-neon-green-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-img/numerals-duo-synth-neon-green-6.png -------------------------------------------------------------------------------- /src/watchfaces-img/numerals-duo-synth-neon-green-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-img/numerals-duo-synth-neon-green-7.png -------------------------------------------------------------------------------- /src/watchfaces-img/numerals-duo-synth-neon-green-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-img/numerals-duo-synth-neon-green-8.png -------------------------------------------------------------------------------- /src/watchfaces-img/numerals-duo-synth-neon-green-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-img/numerals-duo-synth-neon-green-9.png -------------------------------------------------------------------------------- /src/watchfaces-preview/112/000-default-digital.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/112/000-default-digital.png -------------------------------------------------------------------------------- /src/watchfaces-preview/112/002-analog-70s-classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/112/002-analog-70s-classic.png -------------------------------------------------------------------------------- /src/watchfaces-preview/112/003-alternative-digital-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/112/003-alternative-digital-2.png -------------------------------------------------------------------------------- /src/watchfaces-preview/112/004-alternative-scifi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/112/004-alternative-scifi.png -------------------------------------------------------------------------------- /src/watchfaces-preview/112/005-analog-circle-shades.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/112/005-analog-circle-shades.png -------------------------------------------------------------------------------- /src/watchfaces-preview/112/006-analog-weather-satellite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/112/006-analog-weather-satellite.png -------------------------------------------------------------------------------- /src/watchfaces-preview/112/007-digital-outfit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/112/007-digital-outfit.png -------------------------------------------------------------------------------- /src/watchfaces-preview/112/008-numerals-duo-synth-neon-green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/112/008-numerals-duo-synth-neon-green.png -------------------------------------------------------------------------------- /src/watchfaces-preview/112/009-analog-scientific-v2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/112/009-analog-scientific-v2.png -------------------------------------------------------------------------------- /src/watchfaces-preview/112/010-analog-aviator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/112/010-analog-aviator.png -------------------------------------------------------------------------------- /src/watchfaces-preview/112/011-bold-hour-bebas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/112/011-bold-hour-bebas.png -------------------------------------------------------------------------------- /src/watchfaces-preview/112/012-analog-words.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/112/012-analog-words.png -------------------------------------------------------------------------------- /src/watchfaces-preview/112/013-analog-nordic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/112/013-analog-nordic.png -------------------------------------------------------------------------------- /src/watchfaces-preview/112/014-analog-50s-americana.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/112/014-analog-50s-americana.png -------------------------------------------------------------------------------- /src/watchfaces-preview/112/015-funky-town-words.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/112/015-funky-town-words.png -------------------------------------------------------------------------------- /src/watchfaces-preview/112/016-masked-spartan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/112/016-masked-spartan.png -------------------------------------------------------------------------------- /src/watchfaces-preview/112/017-contemporary-digital-rings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/112/017-contemporary-digital-rings.png -------------------------------------------------------------------------------- /src/watchfaces-preview/128/000-default-digital.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/128/000-default-digital.png -------------------------------------------------------------------------------- /src/watchfaces-preview/128/002-analog-70s-classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/128/002-analog-70s-classic.png -------------------------------------------------------------------------------- /src/watchfaces-preview/128/003-alternative-digital-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/128/003-alternative-digital-2.png -------------------------------------------------------------------------------- /src/watchfaces-preview/128/004-alternative-scifi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/128/004-alternative-scifi.png -------------------------------------------------------------------------------- /src/watchfaces-preview/128/005-analog-circle-shades.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/128/005-analog-circle-shades.png -------------------------------------------------------------------------------- /src/watchfaces-preview/128/006-analog-weather-satellite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/128/006-analog-weather-satellite.png -------------------------------------------------------------------------------- /src/watchfaces-preview/128/007-digital-outfit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/128/007-digital-outfit.png -------------------------------------------------------------------------------- /src/watchfaces-preview/128/008-numerals-duo-synth-neon-green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/128/008-numerals-duo-synth-neon-green.png -------------------------------------------------------------------------------- /src/watchfaces-preview/128/009-analog-scientific-v2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/128/009-analog-scientific-v2.png -------------------------------------------------------------------------------- /src/watchfaces-preview/128/010-analog-aviator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/128/010-analog-aviator.png -------------------------------------------------------------------------------- /src/watchfaces-preview/128/011-bold-hour-bebas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/128/011-bold-hour-bebas.png -------------------------------------------------------------------------------- /src/watchfaces-preview/128/012-analog-words.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/128/012-analog-words.png -------------------------------------------------------------------------------- /src/watchfaces-preview/128/013-analog-nordic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/128/013-analog-nordic.png -------------------------------------------------------------------------------- /src/watchfaces-preview/128/014-analog-50s-americana.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/128/014-analog-50s-americana.png -------------------------------------------------------------------------------- /src/watchfaces-preview/128/015-funky-town-words.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/128/015-funky-town-words.png -------------------------------------------------------------------------------- /src/watchfaces-preview/128/016-masked-spartan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/128/016-masked-spartan.png -------------------------------------------------------------------------------- /src/watchfaces-preview/128/017-contemporary-digital-rings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/128/017-contemporary-digital-rings.png -------------------------------------------------------------------------------- /src/watchfaces-preview/144/000-default-digital.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/144/000-default-digital.png -------------------------------------------------------------------------------- /src/watchfaces-preview/144/002-analog-70s-classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/144/002-analog-70s-classic.png -------------------------------------------------------------------------------- /src/watchfaces-preview/144/003-alternative-digital-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/144/003-alternative-digital-2.png -------------------------------------------------------------------------------- /src/watchfaces-preview/144/004-alternative-scifi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/144/004-alternative-scifi.png -------------------------------------------------------------------------------- /src/watchfaces-preview/144/005-analog-circle-shades.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/144/005-analog-circle-shades.png -------------------------------------------------------------------------------- /src/watchfaces-preview/144/006-analog-weather-satellite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/144/006-analog-weather-satellite.png -------------------------------------------------------------------------------- /src/watchfaces-preview/144/007-digital-outfit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/144/007-digital-outfit.png -------------------------------------------------------------------------------- /src/watchfaces-preview/144/008-numerals-duo-synth-neon-green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/144/008-numerals-duo-synth-neon-green.png -------------------------------------------------------------------------------- /src/watchfaces-preview/144/009-analog-scientific-v2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/144/009-analog-scientific-v2.png -------------------------------------------------------------------------------- /src/watchfaces-preview/144/010-analog-aviator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/144/010-analog-aviator.png -------------------------------------------------------------------------------- /src/watchfaces-preview/144/011-bold-hour-bebas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/144/011-bold-hour-bebas.png -------------------------------------------------------------------------------- /src/watchfaces-preview/144/012-analog-words.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/144/012-analog-words.png -------------------------------------------------------------------------------- /src/watchfaces-preview/144/013-analog-nordic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/144/013-analog-nordic.png -------------------------------------------------------------------------------- /src/watchfaces-preview/144/014-analog-50s-americana.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/144/014-analog-50s-americana.png -------------------------------------------------------------------------------- /src/watchfaces-preview/144/015-funky-town-words.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/144/015-funky-town-words.png -------------------------------------------------------------------------------- /src/watchfaces-preview/144/016-masked-spartan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/144/016-masked-spartan.png -------------------------------------------------------------------------------- /src/watchfaces-preview/144/017-contemporary-digital-rings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/144/017-contemporary-digital-rings.png -------------------------------------------------------------------------------- /src/watchfaces-preview/160/000-default-digital.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/160/000-default-digital.png -------------------------------------------------------------------------------- /src/watchfaces-preview/160/002-analog-70s-classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/160/002-analog-70s-classic.png -------------------------------------------------------------------------------- /src/watchfaces-preview/160/003-alternative-digital-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/160/003-alternative-digital-2.png -------------------------------------------------------------------------------- /src/watchfaces-preview/160/004-alternative-scifi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/160/004-alternative-scifi.png -------------------------------------------------------------------------------- /src/watchfaces-preview/160/005-analog-circle-shades.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/160/005-analog-circle-shades.png -------------------------------------------------------------------------------- /src/watchfaces-preview/160/006-analog-weather-satellite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/160/006-analog-weather-satellite.png -------------------------------------------------------------------------------- /src/watchfaces-preview/160/007-digital-outfit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/160/007-digital-outfit.png -------------------------------------------------------------------------------- /src/watchfaces-preview/160/008-numerals-duo-synth-neon-green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/160/008-numerals-duo-synth-neon-green.png -------------------------------------------------------------------------------- /src/watchfaces-preview/160/009-analog-scientific-v2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/160/009-analog-scientific-v2.png -------------------------------------------------------------------------------- /src/watchfaces-preview/160/010-analog-aviator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/160/010-analog-aviator.png -------------------------------------------------------------------------------- /src/watchfaces-preview/160/011-bold-hour-bebas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/160/011-bold-hour-bebas.png -------------------------------------------------------------------------------- /src/watchfaces-preview/160/012-analog-words.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/160/012-analog-words.png -------------------------------------------------------------------------------- /src/watchfaces-preview/160/013-analog-nordic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/160/013-analog-nordic.png -------------------------------------------------------------------------------- /src/watchfaces-preview/160/014-analog-50s-americana.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/160/014-analog-50s-americana.png -------------------------------------------------------------------------------- /src/watchfaces-preview/160/015-funky-town-words.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/160/015-funky-town-words.png -------------------------------------------------------------------------------- /src/watchfaces-preview/160/016-masked-spartan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/160/016-masked-spartan.png -------------------------------------------------------------------------------- /src/watchfaces-preview/160/017-contemporary-digital-rings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/160/017-contemporary-digital-rings.png -------------------------------------------------------------------------------- /src/watchfaces-preview/182/000-default-digital.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/182/000-default-digital.png -------------------------------------------------------------------------------- /src/watchfaces-preview/182/002-analog-70s-classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/182/002-analog-70s-classic.png -------------------------------------------------------------------------------- /src/watchfaces-preview/182/003-alternative-digital-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/182/003-alternative-digital-2.png -------------------------------------------------------------------------------- /src/watchfaces-preview/182/004-alternative-scifi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/182/004-alternative-scifi.png -------------------------------------------------------------------------------- /src/watchfaces-preview/182/005-analog-circle-shades.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/182/005-analog-circle-shades.png -------------------------------------------------------------------------------- /src/watchfaces-preview/182/006-analog-weather-satellite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/182/006-analog-weather-satellite.png -------------------------------------------------------------------------------- /src/watchfaces-preview/182/007-digital-outfit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/182/007-digital-outfit.png -------------------------------------------------------------------------------- /src/watchfaces-preview/182/008-numerals-duo-synth-neon-green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/182/008-numerals-duo-synth-neon-green.png -------------------------------------------------------------------------------- /src/watchfaces-preview/182/009-analog-scientific-v2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/182/009-analog-scientific-v2.png -------------------------------------------------------------------------------- /src/watchfaces-preview/182/010-analog-aviator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/182/010-analog-aviator.png -------------------------------------------------------------------------------- /src/watchfaces-preview/182/011-bold-hour-bebas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/182/011-bold-hour-bebas.png -------------------------------------------------------------------------------- /src/watchfaces-preview/182/012-analog-words.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/182/012-analog-words.png -------------------------------------------------------------------------------- /src/watchfaces-preview/182/013-analog-nordic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/182/013-analog-nordic.png -------------------------------------------------------------------------------- /src/watchfaces-preview/182/014-analog-50s-americana.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/182/014-analog-50s-americana.png -------------------------------------------------------------------------------- /src/watchfaces-preview/182/015-funky-town-words.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/182/015-funky-town-words.png -------------------------------------------------------------------------------- /src/watchfaces-preview/182/016-masked-spartan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/182/016-masked-spartan.png -------------------------------------------------------------------------------- /src/watchfaces-preview/182/017-contemporary-digital-rings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AsteroidOS/asteroid-launcher/2fb66caf1296d09fe7ecc0b9f003ee076adf3106/src/watchfaces-preview/182/017-contemporary-digital-rings.png -------------------------------------------------------------------------------- /src/watchfaces/weathericons.js: -------------------------------------------------------------------------------- 1 | // https://openweathermap.org/weather-conditions 2 | var iconNameByOwmCode = { 3 | '200': 'ios-thunderstorm', 4 | '201': 'ios-thunderstorm', 5 | '202': 'ios-thunderstorm', 6 | '210': 'ios-thunderstorm', 7 | '211': 'ios-thunderstorm', 8 | '212': 'ios-thunderstorm', 9 | '221': 'ios-thunderstorm', 10 | '230': 'ios-thunderstorm', 11 | '231': 'ios-thunderstorm', 12 | '232': 'ios-thunderstorm', 13 | 14 | '300': 'ios-rainy', 15 | '301': 'ios-rainy', 16 | '302': 'ios-rainy', 17 | '310': 'ios-rainy', 18 | '311': 'ios-rainy', 19 | '312': 'ios-rainy', 20 | '313': 'ios-rainy', 21 | '314': 'ios-rainy', 22 | '321': 'ios-rainy', 23 | 24 | '500': 'ios-rainy', 25 | '501': 'ios-rainy', 26 | '502': 'ios-rainy', 27 | '503': 'ios-rainy', 28 | '504': 'ios-rainy', 29 | '511': 'ios-snow', 30 | '520': 'ios-rainy', 31 | '521': 'ios-rainy', 32 | '522': 'ios-rainy', 33 | '531': 'ios-rainy', 34 | 35 | '600': 'ios-snow', 36 | '601': 'ios-snow', 37 | '602': 'ios-snow', 38 | '611': 'ios-snow', 39 | '612': 'ios-snow', 40 | '615': 'ios-snow', 41 | '616': 'ios-snow', 42 | '620': 'ios-snow', 43 | '621': 'ios-snow', 44 | '622': 'ios-snow', 45 | 46 | '701': 'ios-cloudy', 47 | '711': 'ios-cloudy', 48 | '721': 'ios-cloudy', 49 | '731': 'ios-cloudy', 50 | '741': 'ios-cloudy', 51 | '751': 'ios-cloudy', 52 | '761': 'ios-cloudy', 53 | 54 | '800': 'ios-sunny', 55 | '801': 'ios-partly-sunny', 56 | '802': 'ios-cloudy', 57 | '803': 'ios-cloudy', 58 | '804': 'ios-cloudy', 59 | 60 | '903': 'ios-snow', 61 | '904': 'ios-flame', 62 | '905': 'ios-sunny', 63 | '906': 'ios-snow', 64 | 65 | '950': 'ios-sunny', 66 | '951': 'ios-sunny', 67 | '952': 'ios-sunny', 68 | '953': 'ios-sunny', 69 | '954': 'ios-sunny', 70 | '955': 'ios-sunny', 71 | '956': 'ios-sunny', 72 | }; 73 | 74 | function getIconName(iconName) { 75 | var iconCodeParts = iconNameByOwmCode[iconName] 76 | if (!iconCodeParts) 77 | return 'ios-alert'; 78 | return iconCodeParts 79 | } 80 | 81 | --------------------------------------------------------------------------------