Android 13 and above requires the notification permission "android.permission.POST_NOTIFICATIONS" to be requested at runtime. Pick-to: 6.6 6.5 Fixes: QTBUG-121668 Change-Id: I38512ffc07c1a3ffe7cddffa937b98332f172d15 Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io> (cherry picked from commit 7fa6d09ca20b27b8350e6e26040372ba70e6244d) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
56 lines
1.9 KiB
C++
56 lines
1.9 KiB
C++
// 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 ¬ification)
|
|
{
|
|
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]
|