diff --git a/js/js-resources.gresource.xml b/js/js-resources.gresource.xml
index 93d612cc5..1e36ed4a1 100644
--- a/js/js-resources.gresource.xml
+++ b/js/js-resources.gresource.xml
@@ -138,6 +138,7 @@
ui/status/autoRotate.js
ui/status/backgroundApps.js
ui/status/brightness.js
+ ui/status/camera.js
ui/status/darkMode.js
ui/status/dwellClick.js
ui/status/location.js
diff --git a/js/ui/panel.js b/js/ui/panel.js
index 073d78b16..b44635f56 100644
--- a/js/ui/panel.js
+++ b/js/ui/panel.js
@@ -23,6 +23,7 @@ const Main = imports.ui.main;
const RemoteAccessStatus = imports.ui.status.remoteAccess;
const PowerProfileStatus = imports.ui.status.powerProfiles;
const RFKillStatus = imports.ui.status.rfkill;
+const CameraStatus = imports.ui.status.camera;
const VolumeStatus = imports.ui.status.volume;
const BrightnessStatus = imports.ui.status.brightness;
const SystemStatus = imports.ui.status.system;
@@ -388,6 +389,7 @@ class QuickSettings extends PanelMenu.Button {
}
this._system = new SystemStatus.Indicator();
+ this._camera = new CameraStatus.Indicator();
this._volumeOutput = new VolumeStatus.OutputIndicator();
this._volumeInput = new VolumeStatus.InputIndicator();
this._brightness = new BrightnessStatus.Indicator();
@@ -403,6 +405,7 @@ class QuickSettings extends PanelMenu.Button {
this._backgroundApps = new BackgroundAppsStatus.Indicator();
this._indicators.add_child(this._remoteAccess);
+ this._indicators.add_child(this._camera);
this._indicators.add_child(this._volumeInput);
this._indicators.add_child(this._location);
this._indicators.add_child(this._brightness);
@@ -421,6 +424,7 @@ class QuickSettings extends PanelMenu.Button {
this._indicators.add_child(this._system);
this._addItems(this._system.quickSettingsItems, N_QUICK_SETTINGS_COLUMNS);
+ this._addItems(this._camera.quickSettingsItems, N_QUICK_SETTINGS_COLUMNS);
this._addItems(this._volumeOutput.quickSettingsItems, N_QUICK_SETTINGS_COLUMNS);
this._addItems(this._volumeInput.quickSettingsItems, N_QUICK_SETTINGS_COLUMNS);
this._addItems(this._brightness.quickSettingsItems, N_QUICK_SETTINGS_COLUMNS);
diff --git a/js/ui/status/camera.js b/js/ui/status/camera.js
new file mode 100644
index 000000000..b5ff2ee0a
--- /dev/null
+++ b/js/ui/status/camera.js
@@ -0,0 +1,22 @@
+// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
+/* exported Indicator */
+
+const GObject = imports.gi.GObject;
+const Shell = imports.gi.Shell;
+
+const {SystemIndicator} = imports.ui.quickSettings;
+
+var Indicator = GObject.registerClass(
+class Indicator extends SystemIndicator {
+ constructor() {
+ super();
+
+ this._indicator = this._addIndicator();
+ this._indicator.icon_name = 'camera-web-symbolic';
+ this._indicator.add_style_class_name('privacy-indicator');
+
+ this._cameraMonitor = new Shell.CameraMonitor();
+ this._cameraMonitor.bind_property('cameras-in-use', this._indicator,
+ 'visible', GObject.BindingFlags.SYNC_CREATE);
+ }
+});