diff --git a/ui/StatusQ/include/StatusQ/keychain.h b/ui/StatusQ/include/StatusQ/keychain.h index 6607dbe51c..4471cb9cb8 100644 --- a/ui/StatusQ/include/StatusQ/keychain.h +++ b/ui/StatusQ/include/StatusQ/keychain.h @@ -14,7 +14,7 @@ class Keychain : public QObject { Q_PROPERTY(QString service READ service WRITE setService NOTIFY serviceChanged) Q_PROPERTY(bool loading READ loading NOTIFY loadingChanged) - Q_PROPERTY(bool available READ available CONSTANT) + Q_PROPERTY(bool available READ available NOTIFY availableChanged) public: explicit Keychain(QObject *parent = nullptr); @@ -50,6 +50,7 @@ signals: void serviceChanged(); void reasonChanged(); void loadingChanged(); + void availableChanged(); private: QString m_service; diff --git a/ui/StatusQ/src/keychain_osx.mm b/ui/StatusQ/src/keychain_osx.mm index bc3f20a8a6..e3267fe976 100644 --- a/ui/StatusQ/src/keychain_osx.mm +++ b/ui/StatusQ/src/keychain_osx.mm @@ -3,6 +3,7 @@ #include #include #include +#include #include #include @@ -50,6 +51,15 @@ Keychain::Keychain(QObject *parent) : QObject(parent) { reevaluateAvailability(); + + connect(qApp, + &QGuiApplication::applicationStateChanged, + this, + [this](Qt::ApplicationState state) { + if (state == Qt::ApplicationActive) { + reevaluateAvailability(); + } + }); } Keychain::~Keychain() @@ -213,12 +223,17 @@ void Keychain::reevaluateAvailability() auto context = [[LAContext alloc] init]; NSError *authError = nil; - m_available = [context canEvaluatePolicy:authPolicy error:&authError]; + const auto available = [context canEvaluatePolicy:authPolicy error:&authError]; - if (!m_available) { - const auto description = QString::fromNSString(authError.localizedDescription); - qDebug() << "Keychain is not available" << description; + // Later this description can be used if needed: + // const auto description = QString::fromNSString(authError.localizedDescription); + + if (m_available == available) { + return; } + + m_available = available; + emit availableChanged(); } Keychain::Status Keychain::hasCredential(const QString &account) const