diff --git a/linphone-app/application_info.cmake b/linphone-app/application_info.cmake
index 9281a0838..5e76c1caa 100644
--- a/linphone-app/application_info.cmake
+++ b/linphone-app/application_info.cmake
@@ -4,6 +4,7 @@ set(APPLICATION_NAME Linphone)
set(APPLICATION_URL "https://www.linphone.org")
set(APPLICATION_VENDOR "Belledonne Communications")
set(APPLICATION_LICENCE "GNU General Public License V3")
+set(APPLICATION_LICENCE_URL "https://www.gnu.org/licenses/gpl-3.0.html")
set(APPLICATION_START_LICENCE "2010")
set(EXECUTABLE_NAME linphone)
diff --git a/linphone-app/assets/assistant/create-app-sip-account.rc b/linphone-app/assets/assistant/create-app-sip-account.rc
index 89951bed1..a23f4995a 100644
--- a/linphone-app/assets/assistant/create-app-sip-account.rc
+++ b/linphone-app/assets/assistant/create-app-sip-account.rc
@@ -15,7 +15,7 @@
sip:?@sip.linphone.org
<sip:sip.linphone.org;transport=tls>
1
- nat_policy_default_values
+ default_nat_policy_values
sip.linphone.org
message-expires=2419200
sip:conference-factory@sip.linphone.org
@@ -24,7 +24,7 @@
1
https://lime.linphone.org/lime-server/lime-server.php
-
+
stun.linphone.org
stun,ice
diff --git a/linphone-app/assets/assistant/use-app-sip-account.rc b/linphone-app/assets/assistant/use-app-sip-account.rc
index 1d0249ff0..4e6917299 100644
--- a/linphone-app/assets/assistant/use-app-sip-account.rc
+++ b/linphone-app/assets/assistant/use-app-sip-account.rc
@@ -15,7 +15,7 @@
sip:?@sip.linphone.org
<sip:sip.linphone.org;transport=tls>
1
- nat_policy_default_values
+ default_nat_policy_values
sip.linphone.org
message-expires=2419200
sip:conference-factory@sip.linphone.org
@@ -24,7 +24,7 @@
1
https://lime.linphone.org/lime-server/lime-server.php
-
+
stun.linphone.org
stun,ice
diff --git a/linphone-app/assets/assistant/use-other-sip-account.rc b/linphone-app/assets/assistant/use-other-sip-account.rc
index 228726c84..c5413129e 100644
--- a/linphone-app/assets/assistant/use-other-sip-account.rc
+++ b/linphone-app/assets/assistant/use-other-sip-account.rc
@@ -22,7 +22,7 @@
-
+
diff --git a/linphone-app/src/app/App.cpp b/linphone-app/src/app/App.cpp
index 360079208..2e98ba348 100644
--- a/linphone-app/src/app/App.cpp
+++ b/linphone-app/src/app/App.cpp
@@ -456,6 +456,13 @@ void App::initContentApp () {
#else
mEngine->rootContext()->setContextProperty("applicationLicence", "");
#endif
+#ifdef APPLICATION_LICENCE_URL
+ mEngine->rootContext()->setContextProperty("applicationLicenceUrl", APPLICATION_LICENCE_URL);
+#else
+ mEngine->rootContext()->setContextProperty("applicationLicenceUrl", "");
+#endif
+
+
#ifdef COPYRIGHT_RANGE_DATE
mEngine->rootContext()->setContextProperty("copyrightRangeDate", COPYRIGHT_RANGE_DATE);
#else
diff --git a/linphone-app/src/app/proxyModel/ProxyAbstractObject.hpp b/linphone-app/src/app/proxyModel/ProxyAbstractObject.hpp
index b2affa0c3..e2136a64c 100644
--- a/linphone-app/src/app/proxyModel/ProxyAbstractObject.hpp
+++ b/linphone-app/src/app/proxyModel/ProxyAbstractObject.hpp
@@ -29,6 +29,7 @@ class ProxyAbstractObject : public QAbstractListModel{
Q_OBJECT
public:
Q_PROPERTY(int count READ getCount NOTIFY countChanged)
+ Q_PROPERTY(int length READ getCount NOTIFY countChanged)
ProxyAbstractObject(QObject * parent = nullptr) : QAbstractListModel(parent){
connect(this, &ProxyAbstractObject::rowsInserted, this, &ProxyAbstractObject::countChanged);
diff --git a/linphone-app/src/components/assistant/AssistantModel.cpp b/linphone-app/src/components/assistant/AssistantModel.cpp
index e99efce3a..810c53ef3 100644
--- a/linphone-app/src/components/assistant/AssistantModel.cpp
+++ b/linphone-app/src/components/assistant/AssistantModel.cpp
@@ -53,11 +53,17 @@ public:
private:
void createAccount (const shared_ptr &creator) {
- shared_ptr proxyConfig = creator->createProxyConfig();
- auto account = CoreManager::getInstance()->getCore()->getAccountByIdkey(proxyConfig->getIdkey());
+ auto account = creator->createAccountInCore();
if(account){
+ AccountSettingsModel *accountSettingsModel = CoreManager::getInstance()->getAccountSettingsModel();
CoreManager::getInstance()->addingAccount(account->getParams());
- CoreManager::getInstance()->getAccountSettingsModel()->setDefaultAccount(account);
+ auto accountParams = account->getParams()->clone();
+ auto natPolicy = accountParams->getNatPolicy();
+ if(natPolicy)
+ accountParams->setNatPolicy(natPolicy->clone());// Be sure to have a 'ref' entry on a nat_policy. When using default values, the 'ref' entry is lost where it should be pointing to default. We get one by cloning the policy.
+ if (accountSettingsModel->addOrUpdateAccount(account, accountParams)) {
+ accountSettingsModel->setDefaultAccount(account);
+ }
}
}
@@ -133,7 +139,7 @@ private:
QVariantMap description = doc.toVariant().toMap();
creator->setToken(description.value("token").toString().toStdString());
// it will automatically use the account creation token.
- if (!mAssistant->mCountryCode.isEmpty()) {
+ if (mAssistant->mUsePhoneNumber) {
emit mAssistant->createStatusChanged("Recovering account");
creator->recoverAccount();
}else{
@@ -144,7 +150,6 @@ private:
QTimer::singleShot(2000, [creator](){
creator->requestAccountCreationTokenUsingRequestToken();
});
-
}
void onActivateAccount (
@@ -269,7 +274,8 @@ void AssistantModel::login () {
setIsProcessing(true);
if(mAccountCreator->getUsername().empty())
mAccountCreator->setUsername(mAccountCreator->getPhoneNumber());
- if (!mCountryCode.isEmpty()) {// Recovering account from phone
+ if (mUsePhoneNumber) {
+ emit createStatusChanged("Requesting validation url");
mAccountCreator->requestAccountCreationRequestToken();
return;
}
@@ -555,12 +561,29 @@ QString AssistantModel::getCountryCode () const {
void AssistantModel::setCountryCode (const QString &countryCode) {
mCountryCode = countryCode;
+ mAccountCreator->setPhoneNumber(Utils::appStringToCoreString(mPhoneNumber), Utils::appStringToCoreString(mCountryCode));
emit countryCodeChanged(countryCode);
+ emit computedPhoneNumberChanged();
}
// -----------------------------------------------------------------------------
+bool AssistantModel::getUsePhoneNumber() const{
+ return mUsePhoneNumber;
+}
+
+void AssistantModel::setUsePhoneNumber(bool use) {
+ if(mUsePhoneNumber != use){
+ mUsePhoneNumber = use;
+ emit usePhoneNumberChanged();
+ }
+}
+
QString AssistantModel::getPhoneNumber () const {
+ return mPhoneNumber;
+}
+
+QString AssistantModel::getComputedPhoneNumber () const{
return Utils::coreStringToAppString(mAccountCreator->getPhoneNumber());
}
@@ -588,8 +611,20 @@ void AssistantModel::setPhoneNumber (const QString &phoneNumber) {
default:
break;
}
-
+ mPhoneNumber = phoneNumber;
emit phoneNumberChanged(phoneNumber, error);
+ emit computedPhoneNumberChanged();
+}
+
+QString AssistantModel::getPhoneCountryCode() const {
+ return mPhoneCountryCode;
+}
+
+void AssistantModel::setPhoneCountryCode(const QString &code) {
+ if( mPhoneCountryCode != code) {
+ mPhoneCountryCode = code;
+ emit phoneCountryCodeChanged();
+ }
}
// -----------------------------------------------------------------------------
diff --git a/linphone-app/src/components/assistant/AssistantModel.hpp b/linphone-app/src/components/assistant/AssistantModel.hpp
index c3831330f..a1647ac19 100644
--- a/linphone-app/src/components/assistant/AssistantModel.hpp
+++ b/linphone-app/src/components/assistant/AssistantModel.hpp
@@ -32,18 +32,23 @@ class OAuth2Model;
class AssistantModel : public QObject {
class Handlers;
- Q_OBJECT;
+ Q_OBJECT
+
+ Q_PROPERTY(QString email READ getEmail WRITE setEmail NOTIFY emailChanged)
+ Q_PROPERTY(QString password READ getPassword WRITE setPassword NOTIFY passwordChanged)
+ Q_PROPERTY(QString countryCode READ getCountryCode WRITE setCountryCode NOTIFY countryCodeChanged)
+ Q_PROPERTY(QString phoneNumber READ getPhoneNumber WRITE setPhoneNumber NOTIFY phoneNumberChanged)
+ Q_PROPERTY(QString phoneCountryCode READ getPhoneCountryCode WRITE setPhoneCountryCode NOTIFY phoneCountryCodeChanged)
+ Q_PROPERTY(QString computedPhoneNumber READ getComputedPhoneNumber NOTIFY computedPhoneNumberChanged)
+
+ Q_PROPERTY(QString username READ getUsername WRITE setUsername NOTIFY usernameChanged)
+ Q_PROPERTY(QString displayName READ getDisplayName WRITE setDisplayName NOTIFY displayNameChanged)
+ Q_PROPERTY(QString activationCode READ getActivationCode WRITE setActivationCode NOTIFY activationCodeChanged)
+ Q_PROPERTY(QString configFilename READ getConfigFilename WRITE setConfigFilename NOTIFY configFilenameChanged)
+ Q_PROPERTY(bool isReadingQRCode READ getIsReadingQRCode WRITE setIsReadingQRCode NOTIFY isReadingQRCodeChanged)
+ Q_PROPERTY(bool isProcessing READ getIsProcessing WRITE setIsProcessing NOTIFY isProcessingChanged)
+ Q_PROPERTY(bool usePhoneNumber READ getUsePhoneNumber WRITE setUsePhoneNumber NOTIFY usePhoneNumberChanged)
- Q_PROPERTY(QString email READ getEmail WRITE setEmail NOTIFY emailChanged);
- Q_PROPERTY(QString password READ getPassword WRITE setPassword NOTIFY passwordChanged);
- Q_PROPERTY(QString countryCode READ getCountryCode WRITE setCountryCode NOTIFY countryCodeChanged);
- Q_PROPERTY(QString phoneNumber READ getPhoneNumber WRITE setPhoneNumber NOTIFY phoneNumberChanged);
- Q_PROPERTY(QString username READ getUsername WRITE setUsername NOTIFY usernameChanged);
- Q_PROPERTY(QString displayName READ getDisplayName WRITE setDisplayName NOTIFY displayNameChanged);
- Q_PROPERTY(QString activationCode READ getActivationCode WRITE setActivationCode NOTIFY activationCodeChanged);
- Q_PROPERTY(QString configFilename READ getConfigFilename WRITE setConfigFilename NOTIFY configFilenameChanged);
- Q_PROPERTY(bool isReadingQRCode READ getIsReadingQRCode WRITE setIsReadingQRCode NOTIFY isReadingQRCodeChanged);
- Q_PROPERTY(bool isProcessing READ getIsProcessing WRITE setIsProcessing NOTIFY isProcessingChanged);
public:
AssistantModel (QObject *parent = Q_NULLPTR);
@@ -78,7 +83,10 @@ signals:
void emailChanged (const QString &email, const QString &error);
void passwordChanged (const QString &password, const QString &error);
void countryCodeChanged (const QString &countryCode);
+ void usePhoneNumberChanged();
void phoneNumberChanged (const QString &phoneNumber, const QString &error);
+ void phoneCountryCodeChanged();
+ void computedPhoneNumberChanged();
void usernameChanged (const QString &username, const QString &error);
void displayNameChanged (const QString &displayName, const QString &error);
void activationCodeChanged (const QString &activationCode);
@@ -115,9 +123,16 @@ private:
QString getCountryCode () const;
void setCountryCode (const QString &countryCode);
+ bool getUsePhoneNumber() const;
+ void setUsePhoneNumber(bool use);
+
QString getPhoneNumber () const;
+ QString getComputedPhoneNumber () const;
void setPhoneNumber (const QString &phoneNumber);
+ QString getPhoneCountryCode () const;
+ void setPhoneCountryCode (const QString &code);
+
QString getUsername () const;
void setUsername (const QString &username);
@@ -142,8 +157,11 @@ private:
QString mCountryCode;
QString mConfigFilename;
QString mToken;
+ QString mPhoneCountryCode;
+ QString mPhoneNumber;
bool mIsReadingQRCode;
bool mIsProcessing;
+ bool mUsePhoneNumber = false;
std::shared_ptr mAccountCreator;
std::shared_ptr mHandlers;
diff --git a/linphone-app/src/components/codecs/AbstractCodecsModel.cpp b/linphone-app/src/components/codecs/AbstractCodecsModel.cpp
index 804e51edd..a301058a9 100644
--- a/linphone-app/src/components/codecs/AbstractCodecsModel.cpp
+++ b/linphone-app/src/components/codecs/AbstractCodecsModel.cpp
@@ -20,6 +20,7 @@
#include "app/paths/Paths.hpp"
#include "components/core/CoreManager.hpp"
+#include "components/settings/SettingsModel.hpp"
#include "utils/Utils.hpp"
#include "AbstractCodecsModel.hpp"
@@ -45,6 +46,8 @@ void AbstractCodecsModel::enableCodec (int id, bool status) {
shared_ptr codec = getCodecFromMap(map);
if (codec) {
codec->enable(status);
+ if(codec->getType() == PAYLOAD_VIDEO)
+ emit CoreManager::getInstance()->getSettingsModel()->haveAtLeastOneVideoCodecChanged();
map["enabled"] = codec->enabled();
emit dataChanged(index(id, 0), index(id, 0));
}
diff --git a/linphone-app/src/components/settings/SettingsModel.cpp b/linphone-app/src/components/settings/SettingsModel.cpp
index 8968aa9e5..966a140c5 100644
--- a/linphone-app/src/components/settings/SettingsModel.cpp
+++ b/linphone-app/src/components/settings/SettingsModel.cpp
@@ -55,6 +55,7 @@ SettingsModel::SettingsModel (QObject *parent) : QObject(parent) {
mConfig = coreManager->getCore()->getConfig();
connect(this, &SettingsModel::dontAskAgainInfoEncryptionChanged, this, &SettingsModel::haveDontAskAgainChoicesChanged);
+ connect(this, &SettingsModel::haveAtLeastOneVideoCodecChanged, this, &SettingsModel::videoAvailableChanged);
QObject::connect(coreManager->getHandlers().get(), &CoreHandlers::callCreated,
this, &SettingsModel::handleCallCreated);
@@ -678,6 +679,19 @@ void SettingsModel::setShowVideoCodecs (bool status) {
emit showVideoCodecsChanged(status);
}
+bool SettingsModel::getVideoAvailable() const{
+ return getVideoEnabled() && haveAtLeastOneVideoCodec();
+}
+
+bool SettingsModel::haveAtLeastOneVideoCodec() const{
+ auto codecs = CoreManager::getInstance()->getCore()->getVideoPayloadTypes();
+ for (auto &codec : codecs){
+ if(codec->enabled() && codec->isUsable())
+ return true;
+ }
+ return false;
+}
+
// =============================================================================
void SettingsModel::updateCameraMode(){
auto mode = mConfig->getString("video", "main_display_mode", "OccupyAllSpace");
diff --git a/linphone-app/src/components/settings/SettingsModel.hpp b/linphone-app/src/components/settings/SettingsModel.hpp
index b5b6374eb..2b13f3039 100644
--- a/linphone-app/src/components/settings/SettingsModel.hpp
+++ b/linphone-app/src/components/settings/SettingsModel.hpp
@@ -100,6 +100,7 @@ class SettingsModel : public QObject {
Q_PROPERTY(QVariantMap videoDefinition READ getVideoDefinition WRITE setVideoDefinition NOTIFY videoDefinitionChanged)
Q_PROPERTY(bool videoEnabled READ getVideoEnabled WRITE setVideoEnabled NOTIFY videoEnabledChanged)
+ Q_PROPERTY(bool videoAvailable READ getVideoAvailable NOTIFY videoAvailableChanged)
Q_PROPERTY(bool showVideoCodecs READ getShowVideoCodecs WRITE setShowVideoCodecs NOTIFY showVideoCodecsChanged)
@@ -387,8 +388,10 @@ public:
Q_INVOKABLE QVariantMap getCurrentPreviewVideoDefinition () const;
void setVideoDefinition (const QVariantMap &definition);
- bool getVideoEnabled() const;
+ bool getVideoEnabled() const; // Enabled from settings
void setVideoEnabled(const bool& enable);
+ bool getVideoAvailable() const; // Enabled and have enough codecs.
+ bool haveAtLeastOneVideoCodec() const;
bool getShowVideoCodecs () const;
void setShowVideoCodecs (bool status);
@@ -742,6 +745,7 @@ signals:
// Video. --------------------------------------------------------------------
void videoEnabledChanged();
+ void videoAvailableChanged();
void videoDevicesChanged (const QStringList &devices);
void videoDeviceChanged (const QString &device);
@@ -758,6 +762,8 @@ signals:
void callCameraModeChanged();
void videoConferenceLayoutChanged();
+ void haveAtLeastOneVideoCodecChanged();
+
// Chat & calls. -------------------------------------------------------------
void autoAnswerStatusChanged (bool status);
diff --git a/linphone-app/src/components/telephone-numbers/TelephoneNumbersModel.cpp b/linphone-app/src/components/telephone-numbers/TelephoneNumbersModel.cpp
index 64c4eb474..feb3b6c35 100644
--- a/linphone-app/src/components/telephone-numbers/TelephoneNumbersModel.cpp
+++ b/linphone-app/src/components/telephone-numbers/TelephoneNumbersModel.cpp
@@ -253,7 +253,7 @@ const QList> TelephoneNumbersModel::mCountryCod
// -----------------------------------------------------------------------------
-TelephoneNumbersModel::TelephoneNumbersModel (QObject *parent) : QAbstractListModel(parent) {}
+TelephoneNumbersModel::TelephoneNumbersModel (QObject *parent) : ProxyAbstractObject(parent) {}
int TelephoneNumbersModel::rowCount (const QModelIndex &) const {
return mCountryCodes.count();
@@ -275,13 +275,24 @@ QVariant TelephoneNumbersModel::data (const QModelIndex &index, int role) const
if (role == Qt::DisplayRole) {
return countryCode.second;
}else if(role == Qt::DisplayRole+1)
- return QStringLiteral("%1 (+%2)")
- .arg(Utils::getCountryName(countryCode.first))
- .arg(countryCode.second);
+ return QStringLiteral("%1")
+ .arg(Utils::getCountryName(countryCode.first));
return QVariant();
}
+QVariant TelephoneNumbersModel::getAt(int row){
+ if (row < 0 || row >= mCountryCodes.count())
+ return QVariant();
+ QVariantMap result;
+ auto roles = roleNames();
+ const QPair &countryCode = mCountryCodes[row];
+ result[roles[Qt::DisplayRole]] = countryCode.second;
+ result[roles[Qt::DisplayRole+1]] = QStringLiteral("%1")
+ .arg(Utils::getCountryName(countryCode.first));
+ return result;
+}
+
int TelephoneNumbersModel::getDefaultIndex () const {
QLocale::Country country = QLocale().country();
const auto it = find_if(
diff --git a/linphone-app/src/components/telephone-numbers/TelephoneNumbersModel.hpp b/linphone-app/src/components/telephone-numbers/TelephoneNumbersModel.hpp
index 949b9a14e..9435b580b 100644
--- a/linphone-app/src/components/telephone-numbers/TelephoneNumbersModel.hpp
+++ b/linphone-app/src/components/telephone-numbers/TelephoneNumbersModel.hpp
@@ -21,12 +21,11 @@
#ifndef TELEPHONE_NUMBERS_MODEL_H_
#define TELEPHONE_NUMBERS_MODEL_H_
-#include
#include
-
+#include "app/proxyModel/ProxyAbstractObject.hpp"
// =============================================================================
-class TelephoneNumbersModel : public QAbstractListModel {
+class TelephoneNumbersModel : public ProxyAbstractObject {
Q_OBJECT
Q_PROPERTY(int defaultIndex READ getDefaultIndex CONSTANT)
@@ -38,7 +37,8 @@ public:
QHash roleNames () const override;
QVariant data (const QModelIndex &index, int role = Qt::DisplayRole) const override;
-
+ Q_INVOKABLE QVariant getAt(int);
+
private:
int getDefaultIndex () const;
diff --git a/linphone-app/src/config.h.cmake b/linphone-app/src/config.h.cmake
index 052946678..6589a2798 100644
--- a/linphone-app/src/config.h.cmake
+++ b/linphone-app/src/config.h.cmake
@@ -26,6 +26,7 @@
#cmakedefine APPLICATION_VENDOR "${APPLICATION_VENDOR}"
#cmakedefine APPLICATION_URL "${APPLICATION_URL}"
#cmakedefine APPLICATION_LICENCE "${APPLICATION_LICENCE}"
+#cmakedefine APPLICATION_LICENCE_URL "${APPLICATION_LICENCE_URL}"
#cmakedefine APPLICATION_SEMVER "${APPLICATION_SEMVER}"
#cmakedefine COPYRIGHT_RANGE_DATE "${COPYRIGHT_RANGE_DATE}"
#cmakedefine ENABLE_UPDATE_CHECK 1
diff --git a/linphone-app/ui/modules/Common/Form/ComboBox.js b/linphone-app/ui/modules/Common/Form/ComboBox.js
index b06d2368f..cbee770ec 100644
--- a/linphone-app/ui/modules/Common/Form/ComboBox.js
+++ b/linphone-app/ui/modules/Common/Form/ComboBox.js
@@ -66,9 +66,8 @@ function getSelectedEntryText () {
// With a `QAbstractListModel`, `text` is empty. QML bug?
var model = comboBox.model
if (model.data) {
- var item = model.data(model.index(comboBox.currentIndex, 0))
- var textRole = comboBox.textRole
- return textRole.length > 0 ? item[textRole] : item
+ var item = model.data(model.index(comboBox.currentIndex, 0), comboBox.textRole)
+ return item ? item : ''
}
return ''
diff --git a/linphone-app/ui/modules/Linphone/Calls/Calls.js b/linphone-app/ui/modules/Linphone/Calls/Calls.js
index 76aba5aac..d603ca27c 100644
--- a/linphone-app/ui/modules/Linphone/Calls/Calls.js
+++ b/linphone-app/ui/modules/Linphone/Calls/Calls.js
@@ -83,7 +83,7 @@ function getParams (call) {
if (status === CallModel.CallStatusIncoming) {
var optActions = []
- if (Linphone.SettingsModel.videoEnabled) {
+ if (Linphone.SettingsModel.videoAvailable) {
optActions.push({
handler: call.acceptWithVideo,
name: qsTr('acceptVideoCall')
diff --git a/linphone-app/ui/modules/Linphone/Dialog/MultimediaParametersDialog.qml b/linphone-app/ui/modules/Linphone/Dialog/MultimediaParametersDialog.qml
index 32dbbe0fb..c695e77e2 100644
--- a/linphone-app/ui/modules/Linphone/Dialog/MultimediaParametersDialog.qml
+++ b/linphone-app/ui/modules/Linphone/Dialog/MultimediaParametersDialog.qml
@@ -198,7 +198,7 @@ DialogPlus {
RowLayout {
spacing: MultimediaParametersDialogStyle.column.entry.spacing
width: parent.width
- visible: SettingsModel.videoEnabled
+ visible: SettingsModel.videoAvailable
Icon {
icon: MultimediaParametersDialogStyle.column.entry.camera.icon
diff --git a/linphone-app/ui/modules/Linphone/Menus/IncallMenu.qml b/linphone-app/ui/modules/Linphone/Menus/IncallMenu.qml
index 0779139c2..e01d7a3c7 100644
--- a/linphone-app/ui/modules/Linphone/Menus/IncallMenu.qml
+++ b/linphone-app/ui/modules/Linphone/Menus/IncallMenu.qml
@@ -129,7 +129,7 @@ Rectangle{
: IncallMenuStyle.settingsIcons.activeSpeakerIcon
: IncallMenuStyle.settingsIcons.audioOnlyIcon)
, nextPage:layoutMenu
- , visible: mainItem.callModel && mainItem.callModel.isConference && SettingsModel.videoEnabled},
+ , visible: mainItem.callModel && mainItem.callModel.isConference && SettingsModel.videoAvailable},
{ titleIndex: 2
, icon: IncallMenuStyle.settingsIcons.participantsIcon
diff --git a/linphone-app/ui/modules/Linphone/Notifications/NotificationReceivedCall.qml b/linphone-app/ui/modules/Linphone/Notifications/NotificationReceivedCall.qml
index 5b7cb48a4..30bcacd66 100644
--- a/linphone-app/ui/modules/Linphone/Notifications/NotificationReceivedCall.qml
+++ b/linphone-app/ui/modules/Linphone/Notifications/NotificationReceivedCall.qml
@@ -62,7 +62,7 @@ Notification {
isCustom: true
backgroundRadius: 90
colorSet: NotificationReceivedCallStyle.acceptVideoCall
- visible: SettingsModel.videoEnabled && notification.call.getRemoteVideoEnabled()
+ visible: SettingsModel.videoAvailable && notification.call.getRemoteVideoEnabled()
onClicked: notification._close(notification.call.acceptWithVideo)
}
diff --git a/linphone-app/ui/modules/Linphone/SmartSearchBar/SmartSearchBar.qml b/linphone-app/ui/modules/Linphone/SmartSearchBar/SmartSearchBar.qml
index b9ea98d4c..e238f422c 100644
--- a/linphone-app/ui/modules/Linphone/SmartSearchBar/SmartSearchBar.qml
+++ b/linphone-app/ui/modules/Linphone/SmartSearchBar/SmartSearchBar.qml
@@ -67,7 +67,7 @@ SearchBox {
searchBox.launchVideoCall(entry.sipAddress)
searchBox.closeMenu()
},
- visible: SettingsModel.videoEnabled && SettingsModel.outgoingCallsEnabled && SettingsModel.showStartVideoCallButton
+ visible: SettingsModel.videoAvailable && SettingsModel.outgoingCallsEnabled && SettingsModel.showStartVideoCallButton
}, {
colorSet: SipAddressesViewStyle.call,
secure: 0,
diff --git a/linphone-app/ui/modules/Linphone/View/SipAddressesView.qml b/linphone-app/ui/modules/Linphone/View/SipAddressesView.qml
index c8c024881..17442528d 100644
--- a/linphone-app/ui/modules/Linphone/View/SipAddressesView.qml
+++ b/linphone-app/ui/modules/Linphone/View/SipAddressesView.qml
@@ -107,6 +107,10 @@ ScrollableListView {
haveEncryption:false,
securityLevel:1
})
+ MouseArea {
+ anchors.fill: parent
+ onClicked: sipAddressesView.entryClicked(contact.entry, -1)
+ }
}
ActionBar {
diff --git a/linphone-app/ui/scripts/Utils/utils.js b/linphone-app/ui/scripts/Utils/utils.js
index 37b3a9bc3..c0a131c4b 100644
--- a/linphone-app/ui/scripts/Utils/utils.js
+++ b/linphone-app/ui/scripts/Utils/utils.js
@@ -263,7 +263,7 @@ function _indexFinder (array, cb, context) {
var length = array.length
for (var i = 0; i < length; i++) {
- if (cb(array[i], i, array)) {
+ if (cb( (array.getAt ? array.getAt(i) : array[i]), i, array)) {
return i
}
}
diff --git a/linphone-app/ui/views/App/Calls/Dialogs/CallSipAddress.qml b/linphone-app/ui/views/App/Calls/Dialogs/CallSipAddress.qml
index 5b8189d3e..2db9b18a5 100644
--- a/linphone-app/ui/views/App/Calls/Dialogs/CallSipAddress.qml
+++ b/linphone-app/ui/views/App/Calls/Dialogs/CallSipAddress.qml
@@ -75,7 +75,7 @@ DialogPlus {
handler: function (entry) {
launchVideoCall(entry.sipAddress)
},
- visible: SettingsModel.videoEnabled && SettingsModel.showStartVideoCallButton,
+ visible: SettingsModel.videoAvailable && SettingsModel.showStartVideoCallButton,
handlerSipAddress: function(sipAddress) {
launchVideoCall(sipAddress)
}
diff --git a/linphone-app/ui/views/App/Calls/Incall.js b/linphone-app/ui/views/App/Calls/Incall.js
index c44091fc6..9981acb92 100644
--- a/linphone-app/ui/views/App/Calls/Incall.js
+++ b/linphone-app/ui/views/App/Calls/Incall.js
@@ -65,7 +65,7 @@ function handleStatusChanged (status, isFullscreen) {
}
function handleVideoRequested (call) {
- if (window.virtualWindowVisible || !Linphone.SettingsModel.videoEnabled) {
+ if (window.virtualWindowVisible || !Linphone.SettingsModel.videoAvailable) {
call.rejectVideoRequest()
return
}
diff --git a/linphone-app/ui/views/App/Calls/Incall.qml b/linphone-app/ui/views/App/Calls/Incall.qml
index 02c045b8a..784e7cd85 100644
--- a/linphone-app/ui/views/App/Calls/Incall.qml
+++ b/linphone-app/ui/views/App/Calls/Incall.qml
@@ -549,7 +549,7 @@ Rectangle {
colorSet: callModel && callModel.cameraEnabled ? IncallStyle.buttons.cameraOn : IncallStyle.buttons.cameraOff
updating: callModel.videoEnabled && callModel.updating && !mainItem.layoutChanging
enabled: callModel && !callModel.pausedByUser
- visible: SettingsModel.videoEnabled
+ visible: SettingsModel.videoAvailable
property bool _activateCamera: false
onClicked: if(callModel && !mainItem.layoutChanging){
if( callModel.isConference){// Only deactivate camera in conference.
diff --git a/linphone-app/ui/views/App/Calls/IncomingCall.qml b/linphone-app/ui/views/App/Calls/IncomingCall.qml
index b0e74ea47..590f4686c 100644
--- a/linphone-app/ui/views/App/Calls/IncomingCall.qml
+++ b/linphone-app/ui/views/App/Calls/IncomingCall.qml
@@ -16,7 +16,7 @@ AbstractStartingCall {
isCustom: true
backgroundRadius: 90
colorSet: CallStyle.buttons.acceptVideoCall
- visible: SettingsModel.videoEnabled
+ visible: SettingsModel.videoAvailable
onClicked: call.acceptWithVideo()
}
diff --git a/linphone-app/ui/views/App/Calls/WaitingRoom.qml b/linphone-app/ui/views/App/Calls/WaitingRoom.qml
index 5fab5831a..7486521e4 100644
--- a/linphone-app/ui/views/App/Calls/WaitingRoom.qml
+++ b/linphone-app/ui/views/App/Calls/WaitingRoom.qml
@@ -20,7 +20,7 @@ Rectangle {
color: WaitingRoomStyle.backgroundColor.color
property ConferenceInfoModel conferenceInfoModel
property CallModel callModel // Store the call for processing calling.
- property bool previewLoaderEnabled: callModel ? callModel.videoEnabled : SettingsModel.videoEnabled
+ property bool previewLoaderEnabled: callModel ? callModel.videoEnabled : SettingsModel.videoAvailable
property var _sipAddressObserver: callModel ? SipAddressesModel.getSipAddressObserver(callModel.fullPeerAddress, callModel.fullLocalAddress) : undefined
property bool isEnded: callModel && callModel.status == CallModel.CallStatusEnded
@@ -157,7 +157,7 @@ Rectangle {
: mainItem.callModel
? mainItem.callModel.conferenceModel
: null
- deactivateCamera: !SettingsModel.videoEnabled || !mainItem.previewLoaderEnabled || mainItem.isEnded
+ deactivateCamera: !SettingsModel.videoAvailable || !mainItem.previewLoaderEnabled || mainItem.isEnded
/*
image: mainItem._sipAddressObserver && mainItem._sipAddressObserver.contact && mainItem._sipAddressObserver.contact.vcard.avatar
@@ -307,7 +307,7 @@ Rectangle {
ActionSwitch {
id: camera
property bool cameraEnabled: true
- visible: !mainItem.callModel && SettingsModel.videoEnabled
+ visible: !mainItem.callModel && SettingsModel.videoAvailable
isCustom: true
backgroundRadius: 90
colorSet: cameraEnabled ? WaitingRoomStyle.buttons.cameraOn : WaitingRoomStyle.buttons.cameraOff
@@ -362,7 +362,7 @@ Rectangle {
anchors.right: optionsButton.left
anchors.rightMargin: 10
- visible: !mainItem.callModel && SettingsModel.videoEnabled
+ visible: !mainItem.callModel && SettingsModel.videoAvailable
toggled: layoutMenu.visible
isCustom: true
backgroundRadius: width/2
diff --git a/linphone-app/ui/views/App/Main/Assistant/ActivateAppSipAccountWithPhoneNumber.qml b/linphone-app/ui/views/App/Main/Assistant/ActivateAppSipAccountWithPhoneNumber.qml
index ab5c5b9b2..551d1b3ab 100644
--- a/linphone-app/ui/views/App/Main/Assistant/ActivateAppSipAccountWithPhoneNumber.qml
+++ b/linphone-app/ui/views/App/Main/Assistant/ActivateAppSipAccountWithPhoneNumber.qml
@@ -22,13 +22,13 @@ AssistantAbstractView {
Column {
anchors.centerIn: parent
spacing: ActivateAppSipAccountWithPhoneNumberStyle.spacing
- width: parent.width
+ width: parent.width - 10
Text {
color: ActivateAppSipAccountWithPhoneNumberStyle.activationSteps.colorModel.color
font.pointSize: ActivateAppSipAccountWithPhoneNumberStyle.activationSteps.pointSize
horizontalAlignment: Text.AlignHCenter
- text: qsTr('activationSteps').replace('%1', assistantModel.phoneNumber)
+ text: qsTr('activationSteps').replace('%1', assistantModel.computedPhoneNumber)
width: parent.width
wrapMode: Text.WordWrap
}
diff --git a/linphone-app/ui/views/App/Main/Assistant/CreateAppSipAccountWithPhoneNumber.qml b/linphone-app/ui/views/App/Main/Assistant/CreateAppSipAccountWithPhoneNumber.qml
index 3035823cf..ce8dc7539 100644
--- a/linphone-app/ui/views/App/Main/Assistant/CreateAppSipAccountWithPhoneNumber.qml
+++ b/linphone-app/ui/views/App/Main/Assistant/CreateAppSipAccountWithPhoneNumber.qml
@@ -1,9 +1,13 @@
import QtQuick 2.7
+import QtQuick.Layouts 1.0
import Common 1.0
import Linphone 1.0
import Common.Styles 1.0
+
+import 'qrc:/ui/scripts/Utils/utils.js' as Utils
+
// =============================================================================
AssistantAbstractView {
@@ -12,13 +16,6 @@ AssistantAbstractView {
property alias usernameError: username.error
property alias phoneNumberError: phoneNumber.error
- function setCountryCode (index) {
- if(index>=0){
- var model = country.model
- assistantModel.countryCode = model.data(model.index(index, 0),"countryCode")
- }
- }
-
title: qsTr('createAppSipAccountTitle').replace('%1', Qt.application.name.toUpperCase())
mainAction: requestBlock.execute
@@ -45,39 +42,57 @@ AssistantAbstractView {
currentIndex: model.defaultIndex
model: TelephoneNumbersModel {}
textRole: 'countryName'
-
+ function setCode(code){
+ currentIndex = Utils.findIndex(model, function (phoneModel) {
+ return phoneModel.countryCode === code
+ })
+ assistantModel.setCountryCode(currentIndex)
+ }
onActivated: {
- view.setCountryCode(index)
- var text = phoneNumber.text
- if (text.length > 0) {
- assistantModel.phoneNumber = text
- }
+ assistantModel.setCountryCode(index)
}
}
}
- }
-
- FormLine {
- FormGroup {
- label: qsTr('phoneNumberLabel')
-
- TextField {
- id: phoneNumber
-
- inputMethodHints: Qt.ImhDialableCharactersOnly
-
- onTextChanged: assistantModel.phoneNumber = text
- }
- }
- }
-
+ }
+
+ FormLine {
+ FormGroup {
+ label: qsTr('phoneNumberLabel')
+ RowLayout{
+ spacing: 5
+ TextField {
+ id: countryCode
+ Layout.fillHeight: true
+ Layout.preferredWidth: 50
+ inputMethodHints: Qt.ImhDialableCharactersOnly
+ text: "+"+assistantModel.countryCode
+ cursorPosition:1
+ onCursorPositionChanged: if(cursorPosition == 0) cursorPosition = 1
+ onTextEdited: {
+ country.setCode(text.substring(1))
+
+ }
+ }
+ TextField {
+ id: phoneNumber
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ inputMethodHints: Qt.ImhDialableCharactersOnly
+
+ text: assistantModel.phoneNumber
+ onTextChanged: if( assistantModel.phoneNumber != text) assistantModel.phoneNumber = text
+ }
+ }
+ }
+ }
+
FormLine {
FormGroup {
label: qsTr('usernameLabel')
TextField {
id: username
- placeholderText: phoneNumber.text
+ placeholderText: assistantModel.computedPhoneNumber
onTextChanged: assistantModel.username = text
}
}
@@ -111,8 +126,15 @@ AssistantAbstractView {
id: assistantModel
configFilename: 'create-app-sip-account.rc'
+
+ function setCountryCode (index) {
+ if(index>=0){
+ var model = country.model
+ assistantModel.countryCode = model.data(model.index(index, 0),"countryCode")
+ }
+ }
- Component.onCompleted: view.setCountryCode(country.model.defaultIndex)
+ Component.onCompleted: setCountryCode(country.model.defaultIndex)
onPhoneNumberChanged: phoneNumberError = error
onUsernameChanged: usernameError = error
diff --git a/linphone-app/ui/views/App/Main/Assistant/UseAppSipAccount.qml b/linphone-app/ui/views/App/Main/Assistant/UseAppSipAccount.qml
index fa9197a26..b3dd12cba 100644
--- a/linphone-app/ui/views/App/Main/Assistant/UseAppSipAccount.qml
+++ b/linphone-app/ui/views/App/Main/Assistant/UseAppSipAccount.qml
@@ -12,7 +12,7 @@ import Common.Styles 1.0
AssistantAbstractView {
id: view
- readonly property bool usePhoneNumber: SettingsModel.assistantSupportsPhoneNumbers && !checkBox.checked
+ readonly property alias usePhoneNumber: assistantModel.usePhoneNumber
mainAction: requestBlock.execute
mainActionEnabled: {
@@ -94,26 +94,34 @@ AssistantAbstractView {
id: assistantModel
function setCountryCode (index) {
- var model = telephoneNumbersModel
- assistantModel.countryCode = index !== -1 ? model.data(model.index(index, 0),"countryCode") || '' : ''
+ if( index >= 0) {
+ var model = telephoneNumbersModel
+ //assistantModel.countryCode = index !== -1 ? model.data(model.index(index, 0),"countryCode") || '' : ''
+ assistantModel.countryCode = model.data(model.index(index, 0),"countryCode")
+ }
}
configFilename: 'use-app-sip-account.rc'
-
- countryCode: setCountryCode(view.usePhoneNumber ? telephoneNumbersModel.defaultIndex : -1)
+ usePhoneNumber: SettingsModel.assistantSupportsPhoneNumbers && !checkBox.checked
+ //countryCode: setCountryCode(view.usePhoneNumber ? telephoneNumbersModel.defaultIndex : -1)
onPasswordChanged: {
- if (!view.usePhoneNumber) {
+ if (!usePhoneNumber) {
loader.item.passwordError = error
}
}
onPhoneNumberChanged: {
- if (view.usePhoneNumber) {
+ if (usePhoneNumber) {
loader.item.phoneNumberError = error
}
}
-
+ onCreateStatusChanged: {
+ requestBlock.setText(error)
+ if (error.length) {
+ return
+ }
+ }
onLoginStatusChanged: {
requestBlock.setText(error)
if (!error.length) {
@@ -144,6 +152,7 @@ AssistantAbstractView {
})
}
}
+ Component.onCompleted: setCountryCode(telephoneNumbersModel.defaultIndex)
}
TelephoneNumbersModel {
diff --git a/linphone-app/ui/views/App/Main/Assistant/UseAppSipAccountWithPhoneNumber.qml b/linphone-app/ui/views/App/Main/Assistant/UseAppSipAccountWithPhoneNumber.qml
index 53bf24dfc..6ac1f34a8 100644
--- a/linphone-app/ui/views/App/Main/Assistant/UseAppSipAccountWithPhoneNumber.qml
+++ b/linphone-app/ui/views/App/Main/Assistant/UseAppSipAccountWithPhoneNumber.qml
@@ -1,5 +1,8 @@
import Common 1.0
import Linphone 1.0
+import QtQuick.Layouts 1.0
+
+import 'qrc:/ui/scripts/Utils/utils.js' as Utils
// =============================================================================
@@ -31,13 +34,15 @@ Form {
currentIndex: model.defaultIndex
model: telephoneNumbersModel
textRole: 'countryName'
-
+ function setCode(code){
+ currentIndex = Utils.findIndex(model, function (phoneModel) {
+ return phoneModel.countryCode === code
+ })
+ assistantModel.setCountryCode(currentIndex)
+ }
+
onActivated: {
assistantModel.setCountryCode(index)
- var text = phoneNumber.text
- if (text.length > 0) {
- assistantModel.phoneNumber = text
- }
}
}
}
@@ -46,13 +51,30 @@ Form {
FormLine {
FormGroup {
label: qsTr('phoneNumberLabel')
-
- TextField {
- id: phoneNumber
+ RowLayout{
+ spacing: 5
+ TextField {
+ id: countryCode
+ Layout.fillHeight: true
+ Layout.preferredWidth: 50
+ inputMethodHints: Qt.ImhDialableCharactersOnly
+ text: "+"+assistantModel.countryCode
+ cursorPosition:1
+ onCursorPositionChanged: if(cursorPosition == 0) cursorPosition = 1
+ onTextEdited: {
+ country.setCode(text.substring(1))
+
+ }
+ }
+ TextField {
+ id: phoneNumber
+ Layout.fillHeight: true
+ Layout.fillWidth: true
- inputMethodHints: Qt.ImhDialableCharactersOnly
- text: assistantModel.phoneNumber
- onTextChanged: if( assistantModel.phoneNumber != text) assistantModel.phoneNumber = text
+ inputMethodHints: Qt.ImhDialableCharactersOnly
+ text: assistantModel.phoneNumber
+ onTextChanged: if( assistantModel.phoneNumber != text) assistantModel.phoneNumber = text
+ }
}
}
}
diff --git a/linphone-app/ui/views/App/Main/ContactEdit.qml b/linphone-app/ui/views/App/Main/ContactEdit.qml
index 28f294d32..cd2fa8fb4 100644
--- a/linphone-app/ui/views/App/Main/ContactEdit.qml
+++ b/linphone-app/ui/views/App/Main/ContactEdit.qml
@@ -160,7 +160,7 @@ ColumnLayout {
backgroundRadius: 90
colorSet: ContactEditStyle.videoCall
- visible: SettingsModel.videoEnabled && SettingsModel.outgoingCallsEnabled && SettingsModel.showStartVideoCallButton
+ visible: SettingsModel.videoAvailable && SettingsModel.outgoingCallsEnabled && SettingsModel.showStartVideoCallButton
onClicked: sipAddressesMenu.open(sipAddressesMenu.startVideoCall)
}
diff --git a/linphone-app/ui/views/App/Main/Contacts.qml b/linphone-app/ui/views/App/Main/Contacts.qml
index 6420d42ce..0135fe46c 100644
--- a/linphone-app/ui/views/App/Main/Contacts.qml
+++ b/linphone-app/ui/views/App/Main/Contacts.qml
@@ -142,7 +142,7 @@ ColumnLayout {
isCustom: true
backgroundRadius: 90
colorSet: ContactsStyle.videoCall
- visible: SettingsModel.videoEnabled && SettingsModel.outgoingCallsEnabled && SettingsModel.getShowStartVideoCallButton()
+ visible: SettingsModel.videoAvailable && SettingsModel.outgoingCallsEnabled && SettingsModel.getShowStartVideoCallButton()
onClicked: actions.itemAt(0).open()
}
@@ -168,7 +168,7 @@ ColumnLayout {
isCustom: true
backgroundRadius: 90
colorSet: SettingsModel.getShowStartChatButton() ? ContactsStyle.chat : ContactsStyle.history
- visible: SettingsModel.secureChatEnabled
+ visible: SettingsModel.secureChatEnabled && $modelData && $modelData.hasCapability(LinphoneEnums.FriendCapabilityLimeX3Dh)
enabled: AccountSettingsModel.conferenceUri != ''
Icon{
icon:'secure_level_1'
diff --git a/linphone-app/ui/views/App/Main/Conversation.qml b/linphone-app/ui/views/App/Main/Conversation.qml
index 6cb3a8e05..969d51c24 100644
--- a/linphone-app/ui/views/App/Main/Conversation.qml
+++ b/linphone-app/ui/views/App/Main/Conversation.qml
@@ -262,7 +262,7 @@ ColumnLayout {
backgroundRadius: 1000
colorSet: ConversationStyle.bar.actions.videoCall
- visible: SettingsModel.videoEnabled && SettingsModel.outgoingCallsEnabled && SettingsModel.showStartVideoCallButton && !conversation.haveMoreThanOneParticipants
+ visible: SettingsModel.videoAvailable && SettingsModel.outgoingCallsEnabled && SettingsModel.showStartVideoCallButton && !conversation.haveMoreThanOneParticipants
onClicked: CallsListModel.launchVideoCall(chatRoomModel.participants.addressesToString)
}
diff --git a/linphone-app/ui/views/App/Main/Dialogs/About.qml b/linphone-app/ui/views/App/Main/Dialogs/About.qml
index 1a5fa6c66..1bc69f475 100644
--- a/linphone-app/ui/views/App/Main/Dialogs/About.qml
+++ b/linphone-app/ui/views/App/Main/Dialogs/About.qml
@@ -103,6 +103,11 @@ DialogPlus {
width: parent.width
horizontalAlignment: Text.AlignHCenter
+ MouseArea{
+ anchors.fill: parent
+ visible: applicationLicenceUrl
+ onClicked: Qt.openUrlExternally(applicationLicenceUrl)
+ }
}
Text {
elide: Text.ElideRight
diff --git a/linphone-app/ui/views/App/Main/HistoryView.qml b/linphone-app/ui/views/App/Main/HistoryView.qml
index b53338c3e..17250e807 100644
--- a/linphone-app/ui/views/App/Main/HistoryView.qml
+++ b/linphone-app/ui/views/App/Main/HistoryView.qml
@@ -94,7 +94,7 @@ ColumnLayout {
isCustom: true
backgroundRadius: 90
colorSet: HistoryViewStyle.videoCall
- visible: peerAddress && SettingsModel.videoEnabled && SettingsModel.outgoingCallsEnabled && SettingsModel.showStartVideoCallButton
+ visible: peerAddress && SettingsModel.videoAvailable && SettingsModel.outgoingCallsEnabled && SettingsModel.showStartVideoCallButton
onClicked: CallsListModel.launchVideoCall(historyView.peerAddress)
}