diff --git a/gschema/com.deepin.dde.dock.module.gschema.xml b/gschema/com.deepin.dde.dock.module.gschema.xml
index 6ef07aac2..f612af1d1 100644
--- a/gschema/com.deepin.dde.dock.module.gschema.xml
+++ b/gschema/com.deepin.dde.dock.module.gschema.xml
@@ -367,6 +367,22 @@
+
+
+ false
+ Blocking event
+
+ Blocking mouse events
+
+
+
+ false
+ Module Enable
+
+ Control Module Enable
+
+
+
false
@@ -519,7 +535,7 @@
-
+
7
Controling the drag height of touch screen
diff --git a/interfaces/constants.h b/interfaces/constants.h
index 03ab85332..dc4bd9a35 100644
--- a/interfaces/constants.h
+++ b/interfaces/constants.h
@@ -35,6 +35,7 @@ namespace Dock {
#define PLUGIN_BACKGROUND_MIN_SIZE 20
#define PLUGIN_ICON_MAX_SIZE 20
+#define PLUGIN_ITEM_WIDTH 300
// 需求变更成插件图标始终保持20x20,但16x16的资源还在。所以暂时保留此宏
#define PLUGIN_ICON_MIN_SIZE 20
diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt
index 862efe77b..0876aacbb 100644
--- a/plugins/CMakeLists.txt
+++ b/plugins/CMakeLists.txt
@@ -12,3 +12,4 @@ add_subdirectory("show-desktop")
add_subdirectory("multitasking")
add_subdirectory("bluetooth")
add_subdirectory("dcc-dock-plugin")
+add_subdirectory("airplane-mode")
diff --git a/plugins/airplane-mode/CMakeLists.txt b/plugins/airplane-mode/CMakeLists.txt
new file mode 100644
index 000000000..c23992a96
--- /dev/null
+++ b/plugins/airplane-mode/CMakeLists.txt
@@ -0,0 +1,38 @@
+
+set(PLUGIN_NAME "airplane-mode")
+
+project(${PLUGIN_NAME})
+
+# Sources files
+file(GLOB_RECURSE SRCS "*.h" "*.cpp" "../../widgets/*.h" "../../widgets/*.cpp" "../../frame/util/imageutil.h" "../../frame/util/imageutil.cpp")
+
+find_package(PkgConfig REQUIRED)
+find_package(Qt5Widgets REQUIRED)
+find_package(Qt5Svg REQUIRED)
+find_package(Qt5DBus REQUIRED)
+find_package(DtkWidget REQUIRED)
+
+pkg_check_modules(DFrameworkDBus REQUIRED dframeworkdbus)
+pkg_check_modules(QGSettings REQUIRED gsettings-qt)
+
+add_definitions("${QT_DEFINITIONS} -DQT_PLUGIN")
+add_library(${PLUGIN_NAME} SHARED ${SRCS} resources/airplane_mode.qrc)
+set_target_properties(${PLUGIN_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ../system-trays)
+target_include_directories(${PLUGIN_NAME} PUBLIC ${DtkWidget_INCLUDE_DIRS}
+ ${DFrameworkDBus_INCLUDE_DIRS}
+ ${QGSettings_INCLUDE_DIRS}
+ ../../interfaces
+ ../../widgets
+ ../../frame
+ ../../frame/util
+ )
+target_link_libraries(${PLUGIN_NAME} PRIVATE
+ ${DtkWidget_LIBRARIES}
+ ${DFrameworkDBus_LIBRARIES}
+ ${QGSettings_LIBRARIES}
+ ${Qt5DBus_LIBRARIES}
+ ${Qt5Widgets_LIBRARIES}
+ ${Qt5Svg_LIBRARIES}
+)
+
+install(TARGETS ${PLUGIN_NAME} LIBRARY DESTINATION lib/dde-dock/plugins/system-trays)
diff --git a/plugins/airplane-mode/airplanemode.json b/plugins/airplane-mode/airplanemode.json
new file mode 100644
index 000000000..cbfdea8e9
--- /dev/null
+++ b/plugins/airplane-mode/airplanemode.json
@@ -0,0 +1,4 @@
+{
+ "api": "1.1.1",
+ "depends-daemon-dbus-service": ""
+}
diff --git a/plugins/airplane-mode/airplanemodeapplet.cpp b/plugins/airplane-mode/airplanemodeapplet.cpp
new file mode 100644
index 000000000..1358dacd3
--- /dev/null
+++ b/plugins/airplane-mode/airplanemodeapplet.cpp
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2020 ~ 2022 Deepin Technology Co., Ltd.
+ *
+ * Author: weizhixiang
+ *
+ * Maintainer: weizhixiang
+ *
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "airplanemodeapplet.h"
+#include "constants.h"
+
+#include
+
+#include
+#include
+
+DWIDGET_USE_NAMESPACE
+
+AirplaneModeApplet::AirplaneModeApplet(QWidget *parent)
+ : QWidget(parent)
+ , m_switchBtn(new DSwitchButton(this))
+{
+ setMinimumWidth(PLUGIN_ITEM_WIDTH);
+ setFixedHeight(30);
+ QLabel *title = new QLabel(this);
+ title->setText(tr("Airplane Mode"));
+ QHBoxLayout *appletlayout = new QHBoxLayout;
+ appletlayout->setMargin(0);
+ appletlayout->setSpacing(0);
+ appletlayout->addSpacing(0);
+ appletlayout->addWidget(title);
+ appletlayout->addStretch();
+ appletlayout->addWidget(m_switchBtn);
+ appletlayout->addSpacing(0);
+ setLayout(appletlayout);
+
+ connect(m_switchBtn, &DSwitchButton::checkedChanged, this, &AirplaneModeApplet::enableChanged);
+}
+
+void AirplaneModeApplet::setEnabled(bool enable)
+{
+ m_switchBtn->blockSignals(true);
+ m_switchBtn->setChecked(enable);
+ m_switchBtn->blockSignals(false);
+}
diff --git a/plugins/airplane-mode/airplanemodeapplet.h b/plugins/airplane-mode/airplanemodeapplet.h
new file mode 100644
index 000000000..eb02f13ae
--- /dev/null
+++ b/plugins/airplane-mode/airplanemodeapplet.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2020 ~ 2022 Deepin Technology Co., Ltd.
+ *
+ * Author: weizhixiang
+ *
+ * Maintainer: weizhixiang
+ *
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#ifndef AIRPLANEMODEAPPLET_H
+#define AIRPLANEMODEAPPLET_H
+
+#include
+
+namespace Dtk {
+namespace Widget {
+class DSwitchButton;
+}
+}
+
+class QLabel;
+class AirplaneModeApplet : public QWidget
+{
+ Q_OBJECT
+
+public:
+ explicit AirplaneModeApplet(QWidget *parent = nullptr);
+ void setEnabled(bool enable);
+
+signals:
+ void enableChanged(bool enable);
+
+private:
+ Dtk::Widget::DSwitchButton *m_switchBtn;
+};
+
+#endif // AIRPLANEMODEAPPLET_H
diff --git a/plugins/airplane-mode/airplanemodeitem.cpp b/plugins/airplane-mode/airplanemodeitem.cpp
new file mode 100644
index 000000000..56a75464d
--- /dev/null
+++ b/plugins/airplane-mode/airplanemodeitem.cpp
@@ -0,0 +1,165 @@
+/*
+ * Copyright (C) 2020 ~ 2022 Deepin Technology Co., Ltd.
+ *
+ * Author: weizhixiang
+ *
+ * Maintainer: weizhixiang
+ *
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "airplanemodeitem.h"
+#include "constants.h"
+#include "tipswidget.h"
+#include "imageutil.h"
+#include "utils.h"
+#include "airplanemodeapplet.h"
+
+#include
+#include
+
+#include
+#include
+#include
+
+DGUI_USE_NAMESPACE
+
+#define SHIFT "shift"
+#define SETTINGS "settings"
+
+AirplaneModeItem::AirplaneModeItem(QWidget *parent)
+ : QWidget(parent)
+ , m_tipsLabel(new Dock::TipsWidget(this))
+ , m_applet(new AirplaneModeApplet(this))
+ , m_airplaneModeInter(new DBusAirplaneMode("com.deepin.daemon.AirplaneMode",
+ "/com/deepin/daemon/AirplaneMode",
+ QDBusConnection::systemBus(),
+ this))
+{
+ m_tipsLabel->setText(tr("Airplane mode enabled"));
+ m_tipsLabel->setVisible(false);
+ m_applet->setVisible(false);
+
+ connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, &AirplaneModeItem::refreshIcon);
+ connect(m_applet, &AirplaneModeApplet::enableChanged, m_airplaneModeInter, &DBusAirplaneMode::Enable);
+ connect(m_airplaneModeInter, &DBusAirplaneMode::EnabledChanged, this, [this](bool enable) {
+ m_applet->setEnabled(enable);
+ refreshIcon();
+
+ Utils::SettingSaveValue("com.deepin.dde.dock.module.airplane-mode", QByteArray(), "enable", enable);
+ });
+
+ m_applet->setEnabled(m_airplaneModeInter->enabled());
+ refreshIcon();
+}
+
+QWidget *AirplaneModeItem::tipsWidget()
+{
+ return m_tipsLabel;
+}
+
+QWidget *AirplaneModeItem::popupApplet()
+{
+ return m_applet;
+}
+
+const QString AirplaneModeItem::contextMenu() const
+{
+ QList items;
+ items.reserve(2);
+
+ QMap shift;
+ shift["itemId"] = SHIFT;
+ if (m_airplaneModeInter->enabled())
+ shift["itemText"] = tr("Turn off");
+ else
+ shift["itemText"] = tr("Turn on");
+ shift["isActive"] = true;
+ items.push_back(shift);
+
+ QMap settings;
+ settings["itemId"] = SETTINGS;
+ settings["itemText"] = tr("Airplane Mode settings");
+ settings["isActive"] = true;
+ items.push_back(settings);
+
+ QMap menu;
+ menu["items"] = items;
+ menu["checkableMenu"] = false;
+ menu["singleCheck"] = false;
+
+ return QJsonDocument::fromVariant(menu).toJson();
+}
+
+void AirplaneModeItem::invokeMenuItem(const QString menuId, const bool checked)
+{
+ Q_UNUSED(checked);
+
+ /* 控制中心暂未实现
+ if (menuId == SHIFT)
+ m_airplaneModeInter->Enable(!m_airplaneModeInter->enabled());
+ else if (menuId == SETTINGS)
+ DDBusSender()
+ .service("com.deepin.dde.ControlCenter")
+ .interface("com.deepin.dde.ControlCenter")
+ .path("/com/deepin/dde/ControlCenter")
+ .method(QString("ShowPage"))
+ .arg(QString("network"))
+ .arg(QString("Airplane Mode"))
+ .call();
+ */
+}
+
+void AirplaneModeItem::refreshIcon()
+{
+ QString iconString;
+ if (m_airplaneModeInter->enabled())
+ iconString = "airplane-on";
+ else
+ iconString = "airplane-off";
+
+ const auto ratio = devicePixelRatioF();
+ int iconSize = PLUGIN_ICON_MAX_SIZE;
+ if (height() <= PLUGIN_BACKGROUND_MIN_SIZE && DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::LightType)
+ iconString.append(PLUGIN_MIN_ICON_NAME);
+ m_iconPixmap = ImageUtil::loadSvg(iconString, ":/", iconSize, ratio);
+ update();
+}
+
+void AirplaneModeItem::resizeEvent(QResizeEvent *e)
+{
+ QWidget::resizeEvent(e);
+
+ const Dock::Position position = qApp->property(PROP_POSITION).value();
+ if (position == Dock::Bottom || position == Dock::Top) {
+ setMaximumWidth(height());
+ setMaximumHeight(QWIDGETSIZE_MAX);
+ } else {
+ setMaximumHeight(width());
+ setMaximumWidth(QWIDGETSIZE_MAX);
+ }
+
+ refreshIcon();
+}
+
+void AirplaneModeItem::paintEvent(QPaintEvent *e)
+{
+ QWidget::paintEvent(e);
+
+ QPainter painter(this);
+ const QRectF &rf = QRectF(rect());
+ const QRectF &rfp = QRectF(m_iconPixmap.rect());
+ painter.drawPixmap(rf.center() - rfp.center() / m_iconPixmap.devicePixelRatioF(), m_iconPixmap);
+}
diff --git a/plugins/airplane-mode/airplanemodeitem.h b/plugins/airplane-mode/airplanemodeitem.h
new file mode 100644
index 000000000..847c4ea99
--- /dev/null
+++ b/plugins/airplane-mode/airplanemodeitem.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2020 ~ 2022 Deepin Technology Co., Ltd.
+ *
+ * Author: weizhixiang
+ *
+ * Maintainer: weizhixiang
+ *
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#ifndef AIRPLANEMODEITEM_H
+#define AIRPLANEMODEITEM_H
+
+#include
+
+#include
+
+using DBusAirplaneMode = com::deepin::daemon::AirplaneMode;
+
+namespace Dock {
+class TipsWidget;
+}
+
+class AirplaneModeApplet;
+class AirplaneModeItem : public QWidget
+{
+ Q_OBJECT
+
+public:
+ explicit AirplaneModeItem(QWidget *parent = nullptr);
+
+ QWidget *tipsWidget();
+ QWidget *popupApplet();
+ const QString contextMenu() const;
+ void invokeMenuItem(const QString menuId, const bool checked);
+ void refreshIcon();
+
+protected:
+ void resizeEvent(QResizeEvent *e);
+ void paintEvent(QPaintEvent *e);
+
+private:
+ Dock::TipsWidget *m_tipsLabel;
+ AirplaneModeApplet *m_applet;
+ DBusAirplaneMode *m_airplaneModeInter;
+ QPixmap m_iconPixmap;
+};
+
+#endif // AIRPLANEMODEITEM_H
diff --git a/plugins/airplane-mode/airplanemodeplugin.cpp b/plugins/airplane-mode/airplanemodeplugin.cpp
new file mode 100644
index 000000000..5e3cb11be
--- /dev/null
+++ b/plugins/airplane-mode/airplanemodeplugin.cpp
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2020 ~ 2022 Deepin Technology Co., Ltd.
+ *
+ * Author: weizhixiang
+ *
+ * Maintainer: weizhixiang
+ *
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "airplanemodeplugin.h"
+#include "airplanemodeitem.h"
+
+#define AIRPLANEMODE_KEY "airplane-mode-key"
+#define STATE_KEY "enable"
+
+AirplaneModePlugin::AirplaneModePlugin(QObject *parent)
+ : QObject(parent)
+ , m_item(new AirplaneModeItem)
+{
+}
+
+const QString AirplaneModePlugin::pluginName() const
+{
+ return "airplane-mode";
+}
+
+const QString AirplaneModePlugin::pluginDisplayName() const
+{
+ return tr("Airplane Mode");
+}
+
+void AirplaneModePlugin::init(PluginProxyInterface *proxyInter)
+{
+ m_proxyInter = proxyInter;
+
+ if (!pluginIsDisable())
+ m_proxyInter->itemAdded(this, AIRPLANEMODE_KEY);
+}
+
+void AirplaneModePlugin::pluginStateSwitched()
+{
+ m_proxyInter->saveValue(this, STATE_KEY, pluginIsDisable());
+}
+
+bool AirplaneModePlugin::pluginIsDisable()
+{
+ return !m_proxyInter->getValue(this, STATE_KEY, true).toBool();
+}
+
+QWidget *AirplaneModePlugin::itemWidget(const QString &itemKey)
+{
+ if (itemKey == AIRPLANEMODE_KEY) {
+ return m_item;
+ }
+
+ return nullptr;
+}
+
+QWidget *AirplaneModePlugin::itemTipsWidget(const QString &itemKey)
+{
+ if (itemKey == AIRPLANEMODE_KEY) {
+ return m_item->tipsWidget();
+ }
+
+ return nullptr;
+}
+
+QWidget *AirplaneModePlugin::itemPopupApplet(const QString &itemKey)
+{
+ return nullptr; // 禁用左键点击功能
+
+ if (itemKey == AIRPLANEMODE_KEY) {
+ return m_item->popupApplet();
+ }
+
+ return nullptr;
+}
+
+const QString AirplaneModePlugin::itemContextMenu(const QString &itemKey)
+{
+ return QString(); // 禁用右键菜单
+
+ if (itemKey == AIRPLANEMODE_KEY) {
+ return m_item->contextMenu();
+ }
+
+ return QString();
+}
+
+void AirplaneModePlugin::invokedMenuItem(const QString &itemKey, const QString &menuId, const bool checked)
+{
+ if (itemKey == AIRPLANEMODE_KEY) {
+ m_item->invokeMenuItem(menuId, checked);
+ }
+}
+
+int AirplaneModePlugin::itemSortKey(const QString &itemKey)
+{
+ const QString key = QString("pos_%1_%2").arg(itemKey).arg(Dock::Efficient);
+
+ return m_proxyInter->getValue(this, key, 4).toInt();
+}
+
+void AirplaneModePlugin::setSortKey(const QString &itemKey, const int order)
+{
+ const QString key = QString("pos_%1_%2").arg(itemKey).arg(Dock::Efficient);
+
+ m_proxyInter->saveValue(this, key, order);
+}
+
+void AirplaneModePlugin::refreshIcon(const QString &itemKey)
+{
+ if (itemKey == AIRPLANEMODE_KEY) {
+ m_item->refreshIcon();
+ }
+}
+
+
diff --git a/plugins/airplane-mode/airplanemodeplugin.h b/plugins/airplane-mode/airplanemodeplugin.h
new file mode 100644
index 000000000..bc97d9874
--- /dev/null
+++ b/plugins/airplane-mode/airplanemodeplugin.h
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2020 ~ 2022 Deepin Technology Co., Ltd.
+ *
+ * Author: weizhixiang
+ *
+ * Maintainer: weizhixiang
+ *
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#ifndef AIRPLANEMODEPLUGIN_H
+#define AIRPLANEMODEPLUGIN_H
+
+#include "pluginsiteminterface.h"
+
+class AirplaneModeItem;
+class AirplaneModePlugin : public QObject, PluginsItemInterface
+{
+ Q_OBJECT
+ Q_INTERFACES(PluginsItemInterface)
+ Q_PLUGIN_METADATA(IID "com.deepin.dock.PluginsItemInterface" FILE "airplanemode.json")
+
+public:
+ explicit AirplaneModePlugin(QObject *parent = nullptr);
+
+ const QString pluginName() const Q_DECL_OVERRIDE;
+ const QString pluginDisplayName() const Q_DECL_OVERRIDE;
+ void init(PluginProxyInterface *proxyInter) Q_DECL_OVERRIDE;
+ void pluginStateSwitched() Q_DECL_OVERRIDE;
+ bool pluginIsAllowDisable() Q_DECL_OVERRIDE { return true; }
+ bool pluginIsDisable() Q_DECL_OVERRIDE;
+ QWidget *itemWidget(const QString &itemKey) Q_DECL_OVERRIDE;
+ QWidget *itemTipsWidget(const QString &itemKey) Q_DECL_OVERRIDE;
+ QWidget *itemPopupApplet(const QString &itemKey) Q_DECL_OVERRIDE;
+ const QString itemContextMenu(const QString &itemKey) Q_DECL_OVERRIDE;
+ void invokedMenuItem(const QString &itemKey, const QString &menuId, const bool checked) Q_DECL_OVERRIDE;
+ int itemSortKey(const QString &itemKey) Q_DECL_OVERRIDE;
+ void setSortKey(const QString &itemKey, const int order) Q_DECL_OVERRIDE;
+ void refreshIcon(const QString &itemKey) Q_DECL_OVERRIDE;
+
+private:
+ AirplaneModeItem *m_item;
+};
+
+#endif // AIRPLANEMODEPLUGIN_H
diff --git a/plugins/airplane-mode/resources/airplane-off-dark.svg b/plugins/airplane-mode/resources/airplane-off-dark.svg
new file mode 100644
index 000000000..00c3067c1
--- /dev/null
+++ b/plugins/airplane-mode/resources/airplane-off-dark.svg
@@ -0,0 +1,3 @@
+
diff --git a/plugins/airplane-mode/resources/airplane-off.svg b/plugins/airplane-mode/resources/airplane-off.svg
new file mode 100644
index 000000000..8954d3f4f
--- /dev/null
+++ b/plugins/airplane-mode/resources/airplane-off.svg
@@ -0,0 +1,10 @@
+
+
\ No newline at end of file
diff --git a/plugins/airplane-mode/resources/airplane-on-dark.svg b/plugins/airplane-mode/resources/airplane-on-dark.svg
new file mode 100644
index 000000000..689403025
--- /dev/null
+++ b/plugins/airplane-mode/resources/airplane-on-dark.svg
@@ -0,0 +1,3 @@
+
diff --git a/plugins/airplane-mode/resources/airplane-on.svg b/plugins/airplane-mode/resources/airplane-on.svg
new file mode 100644
index 000000000..eebb8b613
--- /dev/null
+++ b/plugins/airplane-mode/resources/airplane-on.svg
@@ -0,0 +1,10 @@
+
+
\ No newline at end of file
diff --git a/plugins/airplane-mode/resources/airplane_mode.qrc b/plugins/airplane-mode/resources/airplane_mode.qrc
new file mode 100644
index 000000000..a9a52f319
--- /dev/null
+++ b/plugins/airplane-mode/resources/airplane_mode.qrc
@@ -0,0 +1,8 @@
+
+
+ airplane-on.svg
+ airplane-off.svg
+ airplane-off-dark.svg
+ airplane-on-dark.svg
+
+