Skip to content

Commit 015a751

Browse files
committed
PR review fixes
1 parent 91b72bf commit 015a751

8 files changed

Lines changed: 200 additions & 70 deletions

File tree

android/HardwareUtils_Android.cpp

Lines changed: 6 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class FbListener: public ::firebase::messaging::Listener
5959
virtual void OnMessage(const ::firebase::messaging::Message &message)
6060
{
6161
qDebug() << "Received FCM message";
62-
NotificationService *ns = new NotificationService();
62+
NotificationService *ns = NotificationService::Instance();
6363
ns->handleMessage(message);
6464
}
6565

@@ -81,16 +81,6 @@ static ::firebase::InitResult firebaseInitializeMessaging(::firebase::App *app,
8181
return res;
8282
}
8383

84-
85-
86-
87-
88-
89-
90-
91-
92-
93-
9484
HardwareUtilsAndroid::HardwareUtilsAndroid(QObject *parent):
9585
HardwareUtils(parent),
9686
fcmListener(new FbListener())
@@ -103,7 +93,7 @@ HardwareUtilsAndroid::~HardwareUtilsAndroid()
10393

10494
HardwareUtilsAndroid *HardwareUtilsAndroid::Instance(QObject *parent)
10595
{
106-
return static_cast<HardwareUtilsAndroid*>(HardwareUtils::Instance(parent));
96+
return dynamic_cast<HardwareUtilsAndroid*>(HardwareUtils::Instance(parent));
10797
}
10898

10999
void HardwareUtilsAndroid::platformInit(QQmlApplicationEngine *e)
@@ -174,13 +164,13 @@ void HardwareUtilsAndroid::inputTextDialog(const QString &title, const QString &
174164

175165
void HardwareUtilsAndroid::loadAuthKeychain(QString &email, QString &pass)
176166
{
177-
this->HardwareUtils::loadAuthKeychain(email, pass);
167+
HardwareUtils::loadAuthKeychain(email, pass);
178168
QAndroidJniObject::callStaticMethod<void>("fr/calaos/calaoshome/HardwareUtils", "loadAuthKeychain");
179169
}
180170

181171
void HardwareUtilsAndroid::saveAuthKeychain(const QString &email, const QString &pass)
182172
{
183-
this->HardwareUtils::saveAuthKeychain(email, pass);
173+
HardwareUtils::saveAuthKeychain(email, pass);
184174
QAndroidJniObject jEmail = QAndroidJniObject::fromString(email);
185175
QAndroidJniObject jPass = QAndroidJniObject::fromString(pass);
186176
QAndroidJniObject::callStaticMethod<void>("fr/calaos/calaoshome/HardwareUtils", "saveAuthKeychain", "(Ljava/lang/String;Ljava/lang/String;)V",
@@ -191,7 +181,7 @@ void HardwareUtilsAndroid::saveAuthKeychain(const QString &email, const QString
191181

192182
void HardwareUtilsAndroid::setConfigOption(QString key, QString value)
193183
{
194-
this->HardwareUtils::setConfigOption(key, value);
184+
HardwareUtils::setConfigOption(key, value);
195185
QAndroidJniObject jKey = QAndroidJniObject::fromString(key);
196186
QAndroidJniObject jValue = QAndroidJniObject::fromString(value);
197187
QAndroidJniObject::callStaticMethod<void>("fr/calaos/calaoshome/HardwareUtils", "setConfigOption", "(Ljava/lang/String;Ljava/lang/String;)V",
@@ -200,36 +190,12 @@ void HardwareUtilsAndroid::setConfigOption(QString key, QString value)
200190
);
201191
}
202192

203-
QString HardwareUtilsAndroid::getConfigOption(QString key)
204-
{
205-
return this->HardwareUtils::getConfigOption(key);
206-
}
207-
208193
void HardwareUtilsAndroid::resetAuthKeychain()
209194
{
210-
this->HardwareUtils::resetAuthKeychain();
195+
HardwareUtils::resetAuthKeychain();
211196
QAndroidJniObject::callStaticMethod<void>("fr/calaos/calaoshome/HardwareUtils", "resetAuthKeychain", "()V");
212197
}
213198

214-
215-
216-
217-
218-
219-
220-
221-
222-
223-
224-
225-
226-
227-
228-
229-
230-
231-
232-
233199
// JNI //
234200

235201
static void emitDialogTextValid(JNIEnv *env, jobject obj, jstring text)
@@ -254,7 +220,6 @@ static void emitDialogCancel(JNIEnv *env, jobject obj)
254220

255221
static jstring getDemoUser(JNIEnv *env, jobject obj)
256222
{
257-
Q_UNUSED(env);
258223
Q_UNUSED(obj);
259224
auto stduser = Common::getDemoUser().toStdString();
260225
const char* ret = stduser.c_str();
@@ -263,7 +228,6 @@ static jstring getDemoUser(JNIEnv *env, jobject obj)
263228

264229
static jstring getDemoPass(JNIEnv *env, jobject obj)
265230
{
266-
Q_UNUSED(env);
267231
Q_UNUSED(obj);
268232
auto stdpass = Common::getDemoPass().toStdString();
269233
const char* ret = stdpass.c_str();
@@ -272,7 +236,6 @@ static jstring getDemoPass(JNIEnv *env, jobject obj)
272236

273237
static jstring getDemoHost(JNIEnv *env, jobject obj)
274238
{
275-
Q_UNUSED(env);
276239
Q_UNUSED(obj);
277240
auto stdhost = Common::getDemoHost().toStdString();
278241
const char* ret = stdhost.c_str();

android/HardwareUtils_Android.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@ class HardwareUtilsAndroid: public HardwareUtils
3030

3131
virtual void resetAuthKeychain();
3232

33-
virtual QString getConfigOption(QString key);
34-
3533
enum NetworkStatus
3634
{
3735
NotConnected = 0,

android/NotificationService.cpp

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#include "notificationservice.h"
2+
#include <QtAndroidExtras/QAndroidJniObject>
3+
#include <QtAndroidExtras/QAndroidJniEnvironment>
4+
#include <jni.h>
5+
#include <QSettings>
6+
#include <QDebug>
7+
#include <QtAndroid>
8+
#include <firebase/messaging.h>
9+
#include <QCoreApplication>
10+
#include "HardwareUtils_Android.h"
11+
#include "../src/Application.h"
12+
13+
NotificationService *NotificationService::Instance(QObject *parent)
14+
{
15+
static NotificationService *instance = new NotificationService(parent);
16+
return instance;
17+
}
18+
19+
NotificationService::NotificationService(QObject *parent)
20+
: QObject(parent)
21+
{
22+
connect(this, SIGNAL(notificationChanged()), this, SLOT(updateAndroidNotification()));
23+
}
24+
25+
void NotificationService::setNotification(const QString &title, const QString &body, const QString &uuid)
26+
{
27+
notifTitle = title;
28+
notifBody = body;
29+
notifEventUUID = uuid;
30+
31+
emit notificationChanged();
32+
}
33+
34+
void NotificationService::handleMessage(const firebase::messaging::Message &message)
35+
{
36+
QString eventUUID;
37+
if (message.data.find("event_uuid") != message.data.end()) {
38+
eventUUID = QString::fromStdString(message.data.at("event_uuid"));
39+
}
40+
QString title = QString::fromStdString(message.data.at("title").c_str());
41+
QString body = QString::fromStdString(message.data.at("body").c_str());
42+
43+
this->setNotification(title, body, eventUUID);
44+
}
45+
46+
void NotificationService::updateAndroidNotification()
47+
{
48+
QAndroidJniObject javaTitle = QAndroidJniObject::fromString(notifTitle);
49+
QAndroidJniObject javaBody= QAndroidJniObject::fromString(notifBody);
50+
QAndroidJniObject javaUUID = QAndroidJniObject::fromString(notifEventUUID);
51+
52+
QAndroidJniObject::callStaticMethod<void>(
53+
"fr/calaos/calaoshome/NotificationService",
54+
"notify",
55+
"(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V",
56+
QtAndroid::androidContext().object(),
57+
javaTitle.object<jstring>(),
58+
javaBody.object<jstring>(),
59+
javaUUID.object<jstring>()
60+
);
61+
}

android/build.gradle

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -76,32 +76,7 @@ android {
7676
minSdkVersion 26
7777
targetSdkVersion 29
7878
}
79-
/*
80-
buildTypes {
81-
release {
8279

83-
}
84-
85-
debug {
86-
87-
}
88-
}
89-
90-
flavorDimensions "version"
91-
92-
productFlavors {
93-
debug {
94-
dimension "version"
95-
applicationIdSuffix ".debug"
96-
versionNameSuffix "-debug"
97-
}
98-
demo {
99-
dimension "version"
100-
applicationIdSuffix ".demo"
101-
versionNameSuffix "-demo"
102-
}
103-
}
104-
*/
10580
sourceSets {
10681
main {
10782
manifest.srcFile 'AndroidManifest.xml'

android/notificationservice.h

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#ifndef NOTIFICATIONSERVICE_H
2+
#define NOTIFICATIONSERVICE_H
3+
4+
#include <QObject>
5+
#include <firebase/messaging.h>
6+
7+
class NotificationService : public QObject
8+
{
9+
Q_OBJECT
10+
public:
11+
static NotificationService *Instance(QObject *parent = 0);
12+
13+
explicit NotificationService(QObject *parent = 0);
14+
15+
void setNotification(const QString &title, const QString &body, const QString &uuid);
16+
void handleMessage(const firebase::messaging::Message &message);
17+
18+
signals:
19+
void notificationChanged();
20+
21+
private slots:
22+
void updateAndroidNotification();
23+
24+
private:
25+
void registerNativeMethods();
26+
QString notifTitle;
27+
QString notifBody;
28+
QString notifEventUUID;
29+
};
30+
31+
#endif // NOTIFICATIONSERVICE_H
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package fr.calaos.calaoshome;
2+
3+
public class Common {
4+
public static String getDemoUser()
5+
{
6+
return HardwareUtilsNatives.getDemoUser();
7+
}
8+
9+
public static String getDemoPass()
10+
{
11+
return HardwareUtilsNatives.getDemoPass();
12+
}
13+
14+
public static String getDemoHost()
15+
{
16+
return HardwareUtilsNatives.getDemoHost();
17+
}
18+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package fr.calaos.calaoshome;
2+
3+
import android.util.Log;
4+
5+
public class Logger {
6+
public static final String TAG = "[LOGGER]fr.calaos.calaoshome";
7+
8+
static void debug(String m) {
9+
Log.d(TAG, m);
10+
}
11+
12+
static void error(String m) {
13+
Log.e(TAG, m);
14+
}
15+
16+
static void verbose(String m) {
17+
Log.v(TAG, m);
18+
}
19+
20+
static void warning(String m) {
21+
Log.w(TAG, m);
22+
}
23+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package fr.calaos.calaoshome;
2+
3+
import android.app.Notification;
4+
import android.app.NotificationManager;
5+
import android.content.Context;
6+
import android.content.Intent;
7+
import android.app.PendingIntent;
8+
import android.graphics.Color;
9+
import android.graphics.BitmapFactory;
10+
import android.app.NotificationChannel;
11+
import android.util.Log;
12+
import android.app.Notification.*;
13+
import android.graphics.Bitmap;
14+
import java.net.URL;
15+
import java.io.IOException;
16+
import fr.calaos.calaoshome.HardwareUtils;
17+
18+
public class NotificationService
19+
{
20+
private static NotificationManager m_notificationManager;
21+
private static Notification.Builder m_builder;
22+
23+
public NotificationService() {}
24+
25+
public static void notify(Context context, String title, String body, String eventUUID) {
26+
try {
27+
m_notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
28+
29+
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
30+
int importance = NotificationManager.IMPORTANCE_DEFAULT;
31+
NotificationChannel notificationChannel = new NotificationChannel("Qt", "Qt Notifier", importance);
32+
m_notificationManager.createNotificationChannel(notificationChannel);
33+
m_builder = new Notification.Builder(context, notificationChannel.getId());
34+
} else {
35+
m_builder = new Notification.Builder(context);
36+
}
37+
38+
m_builder.setSmallIcon(R.drawable.icon)
39+
.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.icon))
40+
.setContentTitle(title)
41+
.setContentText(body)
42+
.setDefaults(Notification.DEFAULT_SOUND);
43+
44+
if (!eventUUID.isEmpty()) {
45+
try {
46+
URL url = new URL(HardwareUtils._context.getNotificationPictureURL(eventUUID));
47+
Logger.debug("notification picture at "+url.toString());
48+
Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
49+
m_builder.setStyle(new Notification.BigPictureStyle().bigPicture(bmp));
50+
}
51+
catch (IOException e) {
52+
Logger.error(e.toString());
53+
}
54+
}
55+
56+
m_notificationManager.notify(0, m_builder.build());
57+
} catch (Exception e) {
58+
e.printStackTrace();
59+
}
60+
}
61+
}

0 commit comments

Comments
 (0)