summaryrefslogtreecommitdiffstats
path: root/examples/corelib/platform/androidnotifier/notificationclient.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/corelib/platform/androidnotifier/notificationclient.cpp')
-rw-r--r--examples/corelib/platform/androidnotifier/notificationclient.cpp55
1 files changed, 55 insertions, 0 deletions
diff --git a/examples/corelib/platform/androidnotifier/notificationclient.cpp b/examples/corelib/platform/androidnotifier/notificationclient.cpp
new file mode 100644
index 0000000000..aa6093c29c
--- /dev/null
+++ b/examples/corelib/platform/androidnotifier/notificationclient.cpp
@@ -0,0 +1,55 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "notificationclient.h"
+
+#include <QtCore/qjniobject.h>
+#include <QtCore/qcoreapplication.h>
+#include <QtCore/private/qandroidextras_p.h>
+
+using namespace Qt::StringLiterals;
+
+NotificationClient::NotificationClient(QObject *parent)
+ : QObject(parent)
+{
+ if (QNativeInterface::QAndroidApplication::sdkVersion() >= __ANDROID_API_T__) {
+ const auto notificationPermission = "android.permission.POST_NOTIFICATIONS"_L1;
+ auto requestResult = QtAndroidPrivate::requestPermission(notificationPermission);
+ if (requestResult.result() != QtAndroidPrivate::Authorized) {
+ qWarning() << "Failed to acquire permission to post notifications "
+ "(required for Android 13+)";
+ }
+ }
+
+ connect(this, &NotificationClient::notificationChanged,
+ this, &NotificationClient::updateAndroidNotification);
+}
+
+void NotificationClient::setNotification(const QString &notification)
+{
+ if (m_notification == notification)
+ return;
+
+//! [notification changed signal]
+ m_notification = notification;
+ emit notificationChanged();
+//! [notification changed signal]
+}
+
+QString NotificationClient::notification() const
+{
+ return m_notification;
+}
+
+//! [Send notification message to Java]
+void NotificationClient::updateAndroidNotification()
+{
+ QJniObject javaNotification = QJniObject::fromString(m_notification);
+ QJniObject::callStaticMethod<void>(
+ "org/qtproject/example/androidnotifier/NotificationClient",
+ "notify",
+ "(Landroid/content/Context;Ljava/lang/String;)V",
+ QNativeInterface::QAndroidApplication::context(),
+ javaNotification.object<jstring>());
+}
+//! [Send notification message to Java]