diff --git a/Linphone/core/address-books/carddav/CarddavCore.cpp b/Linphone/core/address-books/carddav/CarddavCore.cpp
index 01ff930c..69e73e65 100644
--- a/Linphone/core/address-books/carddav/CarddavCore.cpp
+++ b/Linphone/core/address-books/carddav/CarddavCore.cpp
@@ -58,6 +58,8 @@ void CarddavCore::save() {
auto realm = Utils::appStringToCoreString(mRealm);
auto storeNewFriendsInIt = mStoreNewFriendsInIt;
+ lInfo() << log().arg("CarddavCore::save() called") << " mUsername=" << mUsername << " mRealm=" << mRealm;
+
mCarddavModelConnection->invokeToModel([this, displayName, uri, username, password, realm, storeNewFriendsInIt]() {
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
mCarddavModel->save(displayName, uri, username, password, realm, storeNewFriendsInIt);
diff --git a/Linphone/data/languages/de.ts b/Linphone/data/languages/de.ts
index 8d8de7a6..50e2ee17 100644
--- a/Linphone/data/languages/de.ts
+++ b/Linphone/data/languages/de.ts
@@ -930,46 +930,46 @@
settings_call_forward_to_voicemail
-
+ Zur Voicemail
settings_call_forward_address_cannot_be_empty
-
+ Adresse darf nicht leer sein
settings_call_forward_activate_title
"Forward calls"
-
+ Anrufe weiterleiten
settings_call_forward_activate_subtitle
"Enable call forwarding to voicemail or sip address"
-
+ Anrufweiterleitung zur Voicemail oder SIP-Adresse aktivieren
settings_call_forward_destination_choose
Forward to destination
-
+ Weiterleiten an
settings_call_forward_to_sipaddress
-
+ Zur SIP-Adresse
settings_call_forward_sipaddress_title
SIP Address
-
+ SIP-Adresse
settings_call_forward_sipaddress_placeholder
-
+ sip:benutzer@domain.de
@@ -2694,7 +2694,7 @@ Error
settings_chat_notifications_title
Notifications
-
+ Benachrichtigungen
@@ -6027,7 +6027,13 @@ Pour les activer dans un projet commercial, merci de nous contacter.
settings_call_forward
"Transfert d'appel"
-
+ Anrufweiterleitung
+
+
+
+ settings_user_interface_title
+ Display settings
+ Anzeige
@@ -7872,18 +7878,28 @@ Pour les activer dans un projet commercial, merci de nous contacter.
settings_display_dark_mode_subtitle
- Enable dark mode for the interface
- Dunkelmodus für die Oberfläche aktivieren
+ Enable dark mode (or follows system theme like Breeze Dark)
+ Dunkelmodus aktivieren (oder System-Theme wie Breeze Dark folgen)
+
+
+ settings_display_system_dark_detected
+ System dark theme is detected automatically
+ System-Dunkelmodus erkannt (z.B. Breeze Dark)
+
+
+ settings_display_system_light_detected
+ System light theme is detected
+ System-Hellmodus erkannt
settings_display_theme_color_title
- Theme color
- Farbschema
+ Accent color
+ Akzentfarbe
settings_display_theme_color_subtitle
- Choose the main color theme
- Wählen Sie das Hauptfarbschema
+ Choose the accent color for buttons and highlights
+ Wählen Sie die Akzentfarbe für Schaltflächen und Hervorhebungen
diff --git a/Linphone/data/languages/en.ts b/Linphone/data/languages/en.ts
index f918e3f6..98c7e27a 100644
--- a/Linphone/data/languages/en.ts
+++ b/Linphone/data/languages/en.ts
@@ -7771,18 +7771,28 @@ To enable them in a commercial project, please contact us.
settings_display_dark_mode_subtitle
- Enable dark mode for the interface
- Enable dark mode for the interface
+ Enable dark mode (or follows system theme like Breeze Dark)
+ Enable dark mode (or follows system theme like Breeze Dark)
+
+
+ settings_display_system_dark_detected
+ System dark theme is detected automatically
+ System dark theme detected (e.g. Breeze Dark)
+
+
+ settings_display_system_light_detected
+ System light theme is detected
+ System light theme detected
settings_display_theme_color_title
- Theme color
- Theme color
+ Accent color
+ Accent color
settings_display_theme_color_subtitle
- Choose the main color theme
- Choose the main color theme
+ Choose the accent color for buttons and highlights
+ Choose the accent color for buttons and highlights
diff --git a/Linphone/view/Control/Button/Settings/ComboSetting.qml b/Linphone/view/Control/Button/Settings/ComboSetting.qml
index ee82d025..2e3b65cc 100644
--- a/Linphone/view/Control/Button/Settings/ComboSetting.qml
+++ b/Linphone/view/Control/Button/Settings/ComboSetting.qml
@@ -4,33 +4,70 @@ import QtQuick.Layouts
import Linphone
import 'qrc:/qt/qml/Linphone/view/Control/Tool/Helper/utils.js' as Utils
-ComboBox {
+RowLayout {
id: mainItem
- Layout.preferredHeight: Utils.getSizeWithScreenRatio(49)
+ property string titleText
+ property string subTitleText
property string propertyName
-
property var propertyOwner
property var propertyOwnerGui
- property alias entries: mainItem.model
- oneLine: true
- currentIndex: Utils.findIndex(model, function (entry) {
- if(propertyOwnerGui)
- return Utils.equalObject(entry,propertyOwnerGui.core[propertyName])
- else
- return Utils.equalObject(entry,propertyOwner[propertyName])
- })
- onCurrentValueChanged: {
- if(propertyOwnerGui) {
- binding.when = !Utils.equalObject(currentValue,propertyOwnerGui.core[propertyName])
- }else{
- binding.when = !Utils.equalObject(currentValue,propertyOwner[propertyName])
+ property alias entries: comboBox.model
+ property alias model: comboBox.model
+ property alias textRole: comboBox.textRole
+ property alias flagRole: comboBox.flagRole
+ property alias currentIndex: comboBox.currentIndex
+ property alias currentValue: comboBox.currentValue
+ property alias listView: comboBox.listView
+ spacing: Utils.getSizeWithScreenRatio(20)
+
+ ColumnLayout {
+ Layout.minimumHeight: Utils.getSizeWithScreenRatio(32)
+ Layout.fillWidth: true
+ spacing: Utils.getSizeWithScreenRatio(4)
+ visible: titleText.length > 0
+ Text {
+ text: titleText
+ font: Typography.p2l
+ wrapMode: Text.WordWrap
+ color: DefaultStyle.main2_600
+ Layout.fillWidth: true
+ }
+ Text {
+ text: subTitleText
+ font: Typography.p1
+ wrapMode: Text.WordWrap
+ visible: subTitleText.length > 0
+ color: DefaultStyle.main2_600
+ Layout.fillWidth: true
}
}
- Binding {
- id: binding
- target: propertyOwnerGui ? propertyOwnerGui.core : propertyOwner
- property: propertyName
- value: mainItem.currentValue
- when: false
+
+ ComboBox {
+ id: comboBox
+ Layout.alignment: titleText.length > 0 ? (Qt.AlignRight | Qt.AlignVCenter) : Qt.AlignLeft
+ Layout.preferredHeight: Utils.getSizeWithScreenRatio(49)
+ Layout.preferredWidth: titleText.length > 0 ? Utils.getSizeWithScreenRatio(200) : undefined
+ Layout.fillWidth: titleText.length === 0
+ oneLine: true
+ currentIndex: Utils.findIndex(model, function (entry) {
+ if(propertyOwnerGui)
+ return Utils.equalObject(entry, propertyOwnerGui.core[mainItem.propertyName])
+ else
+ return Utils.equalObject(entry, propertyOwner[mainItem.propertyName])
+ })
+ onCurrentValueChanged: {
+ if(propertyOwnerGui) {
+ binding.when = !Utils.equalObject(currentValue, propertyOwnerGui.core[mainItem.propertyName])
+ } else {
+ binding.when = !Utils.equalObject(currentValue, propertyOwner[mainItem.propertyName])
+ }
+ }
+ Binding {
+ id: binding
+ target: propertyOwnerGui ? propertyOwnerGui.core : propertyOwner
+ property: mainItem.propertyName
+ value: comboBox.currentValue
+ when: false
+ }
}
}
diff --git a/Linphone/view/Control/Button/Settings/SwitchSetting.qml b/Linphone/view/Control/Button/Settings/SwitchSetting.qml
index bf74d608..ec706ba2 100644
--- a/Linphone/view/Control/Button/Settings/SwitchSetting.qml
+++ b/Linphone/view/Control/Button/Settings/SwitchSetting.qml
@@ -18,6 +18,7 @@ RowLayout {
signal toggled()
ColumnLayout {
+ Layout.fillWidth: true
Layout.minimumHeight: Utils.getSizeWithScreenRatio(32)
spacing: Utils.getSizeWithScreenRatio(4)
Text {
diff --git a/Linphone/view/Page/Layout/Settings/DisplaySettingsLayout.qml b/Linphone/view/Page/Layout/Settings/DisplaySettingsLayout.qml
index d8328cca..e6e52a6d 100644
--- a/Linphone/view/Page/Layout/Settings/DisplaySettingsLayout.qml
+++ b/Linphone/view/Page/Layout/Settings/DisplaySettingsLayout.qml
@@ -89,26 +89,39 @@ AbstractSettingsLayout {
Layout.fillWidth: true
//: Dark mode
titleText: qsTr("settings_display_dark_mode_title")
- //: Enable dark mode for the interface
+ //: Enable dark mode (or follows system theme like Breeze Dark)
subTitleText: qsTr("settings_display_dark_mode_subtitle")
propertyName: "darkModeAllowed"
propertyOwner: SettingsCpp
}
+ Text {
+ Layout.fillWidth: true
+ //: System dark theme is detected automatically
+ text: DefaultStyle.systemDarkMode
+ ? qsTr("settings_display_system_dark_detected")
+ : qsTr("settings_display_system_light_detected")
+ color: DefaultStyle.main2_500main
+ font.pixelSize: Typography.p2.pixelSize
+ wrapMode: Text.WordWrap
+ }
+
ComboSetting {
Layout.fillWidth: true
- //: Theme color
+ //: Accent color
titleText: qsTr("settings_display_theme_color_title")
- //: Choose the main color theme
+ //: Choose the accent color for buttons and highlights
subTitleText: qsTr("settings_display_theme_color_subtitle")
propertyName: "themeMainColor"
propertyOwner: SettingsCpp
model: [
+ {text: "Orange", value: "orange"},
{text: "Green", value: "green"},
{text: "Blue", value: "blue"},
- {text: "Orange", value: "orange"},
{text: "Red", value: "red"},
- {text: "Purple", value: "purple"}
+ {text: "Purple", value: "purple"},
+ {text: "Pink", value: "pink"},
+ {text: "Yellow", value: "yellow"}
]
}
}
diff --git a/Linphone/view/Style/DefaultStyle.qml b/Linphone/view/Style/DefaultStyle.qml
index e1adb509..bce3daf5 100644
--- a/Linphone/view/Style/DefaultStyle.qml
+++ b/Linphone/view/Style/DefaultStyle.qml
@@ -4,10 +4,15 @@ import Linphone
import SettingsCpp
QtObject {
+ // Dark mode detection: use setting or auto-detect from system
+ property bool isDarkMode: SettingsCpp.darkModeAllowed || systemDarkMode
+ property bool systemDarkMode: Qt.styleHints.colorScheme === Qt.Dark
property var currentTheme: Themes.themes.hasOwnProperty(SettingsCpp.themeMainColor)
? Themes.themes[SettingsCpp.themeMainColor]
: Themes.themes["orange"]
+
+ // Main accent colors (from theme)
property var main1_100: currentTheme.main100
property var main1_200: currentTheme.main200
property var main1_300: currentTheme.main300
@@ -15,37 +20,40 @@ QtObject {
property var main1_600: currentTheme.main600
property var main1_700: currentTheme.main700
- property var main2_0: "#FAFEFF"
- property var main2_100: "#EEF6F8"
- property var main2_200: "#DFECF2"
- property var main2_300: "#C0D1D9"
- property var main2_400: "#9AABB5"
- property var main2_500_main: "#6C7A87"
- property var main2_600: "#4E6074"
- property var main2_700: "#364860"
- property var main2_800: "#22334D"
- property var main2_900: "#2D3648"
+ // Main UI colors - switch based on dark mode
+ property var main2_0: isDarkMode ? "#1a1a1a" : "#FAFEFF"
+ property var main2_100: isDarkMode ? "#252525" : "#EEF6F8"
+ property var main2_200: isDarkMode ? "#2d2d2d" : "#DFECF2"
+ property var main2_300: isDarkMode ? "#3d3d3d" : "#C0D1D9"
+ property var main2_400: isDarkMode ? "#5a5a5a" : "#9AABB5"
+ property var main2_500_main: isDarkMode ? "#8a8a8a" : "#6C7A87"
+ property var main2_600: isDarkMode ? "#b0b0b0" : "#4E6074"
+ property var main2_700: isDarkMode ? "#c8c8c8" : "#364860"
+ property var main2_800: isDarkMode ? "#e0e0e0" : "#22334D"
+ property var main2_900: isDarkMode ? "#f0f0f0" : "#2D3648"
- property var grey_0: "#FFFFFF"
- property var grey_100: "#F9F9F9"
- property var grey_200: "#EDEDED"
- property var grey_300: "#C9C9C9"
- property var grey_400: "#949494"
- property var grey_500: "#4E4E4E"
- property var grey_600: "#2E3030"
- property var grey_850: "#D9D9D9"
- property var grey_900: "#070707"
- property var grey_1000: "#000000"
+ // Grey colors - inverted for dark mode
+ property var grey_0: isDarkMode ? "#1a1a1a" : "#FFFFFF"
+ property var grey_100: isDarkMode ? "#252525" : "#F9F9F9"
+ property var grey_200: isDarkMode ? "#333333" : "#EDEDED"
+ property var grey_300: isDarkMode ? "#4a4a4a" : "#C9C9C9"
+ property var grey_400: isDarkMode ? "#6b6b6b" : "#949494"
+ property var grey_500: isDarkMode ? "#b1b1b1" : "#4E4E4E"
+ property var grey_600: isDarkMode ? "#d1d1d1" : "#2E3030"
+ property var grey_850: isDarkMode ? "#404040" : "#D9D9D9"
+ property var grey_900: isDarkMode ? "#f8f8f8" : "#070707"
+ property var grey_1000: isDarkMode ? "#ffffff" : "#000000"
+ // Status colors - keep similar but adjust for dark mode visibility
property var warning_600: "#DBB820"
property var warning_700: "#AF9308"
property var danger_500_main: "#DD5F5F"
property var warning_500_main: "#FFDC2E"
property var danger_700: "#9E3548"
- property var danger_900: "#723333"
+ property var danger_900: isDarkMode ? "#ff6666" : "#723333"
property var success_500_main: "#4FAE80"
property var success_700: "#377d71"
- property var success_900: "#1E4C53"
+ property var success_900: isDarkMode ? "#5fd9a8" : "#1E4C53"
property var info_500_main: "#4AA8FF"
property var info_800_main: "#02528D"
@@ -67,10 +75,10 @@ QtObject {
property string flagFont: "Noto Color Emoji"
property string defaultFont: "Noto Sans"
- property var numericPadPressedButtonColor: "#EEF7F8"
+ property var numericPadPressedButtonColor: isDarkMode ? "#2a3a3d" : "#EEF7F8"
- property var groupCallButtonColor: "#EEF7F8"
+ property var groupCallButtonColor: isDarkMode ? "#2a3a3d" : "#EEF7F8"
+
+ property var placeholders: isDarkMode ? '#555555' : '#CACACA'
- property var placeholders: '#CACACA' // No name in design
-
}