From e0027ed34e430941ca8f69da485031ed6ba39663 Mon Sep 17 00:00:00 2001 From: FalsinSoft Date: Fri, 29 Mar 2019 16:31:33 +0100 Subject: [PATCH] Added notification small icon --- QtAndroidTools/QAndroidNotification.cpp | 64 ++++++++++++++++-- QtAndroidTools/QAndroidNotification.h | 14 ++-- .../qtandroidtools/AndroidNotification.java | 28 +++++++- .../qtatoolsdemo_notification_icon1.png | Bin 0 -> 1109 bytes .../qtatoolsdemo_notification_icon2.png | Bin 0 -> 1098 bytes .../qtatoolsdemo_notification_icon1.png | Bin 0 -> 537 bytes .../qtatoolsdemo_notification_icon2.png | Bin 0 -> 534 bytes .../qtatoolsdemo_notification_icon1.png | Bin 0 -> 1155 bytes .../qtatoolsdemo_notification_icon2.png | Bin 0 -> 1152 bytes .../qtatoolsdemo_notification_icon1.png | Bin 0 -> 2259 bytes .../qtatoolsdemo_notification_icon2.png | Bin 0 -> 2265 bytes .../qtatoolsdemo_notification_icon1.png | Bin 0 -> 2422 bytes .../qtatoolsdemo_notification_icon2.png | Bin 0 -> 2400 bytes .../tools/AndroidNotification.qml | 27 +++++++- 14 files changed, 118 insertions(+), 15 deletions(-) create mode 100644 QtAndroidToolsDemo/android/res/drawable-hdpi/qtatoolsdemo_notification_icon1.png create mode 100644 QtAndroidToolsDemo/android/res/drawable-hdpi/qtatoolsdemo_notification_icon2.png create mode 100644 QtAndroidToolsDemo/android/res/drawable-mdpi/qtatoolsdemo_notification_icon1.png create mode 100644 QtAndroidToolsDemo/android/res/drawable-mdpi/qtatoolsdemo_notification_icon2.png create mode 100644 QtAndroidToolsDemo/android/res/drawable-xhdpi/qtatoolsdemo_notification_icon1.png create mode 100644 QtAndroidToolsDemo/android/res/drawable-xhdpi/qtatoolsdemo_notification_icon2.png create mode 100644 QtAndroidToolsDemo/android/res/drawable-xxhdpi/qtatoolsdemo_notification_icon1.png create mode 100644 QtAndroidToolsDemo/android/res/drawable-xxhdpi/qtatoolsdemo_notification_icon2.png create mode 100644 QtAndroidToolsDemo/android/res/drawable-xxxhdpi/qtatoolsdemo_notification_icon1.png create mode 100644 QtAndroidToolsDemo/android/res/drawable-xxxhdpi/qtatoolsdemo_notification_icon2.png diff --git a/QtAndroidTools/QAndroidNotification.cpp b/QtAndroidTools/QAndroidNotification.cpp index ef46e2b..7faf21f 100644 --- a/QtAndroidTools/QAndroidNotification.cpp +++ b/QtAndroidTools/QAndroidNotification.cpp @@ -31,7 +31,7 @@ int QAndroidNotification::m_InstancesCounter = 0; QAndroidNotification::QAndroidNotification(QQuickItem *parent) : QQuickItem(parent), m_JavaNotification("com/falsinsoft/qtandroidtools/AndroidNotification", - "(Landroid/app/Activity;)V", + "(Landroid/app/Activity;I)V", QtAndroid::androidActivity().object(), m_InstancesCounter), m_InstanceIndex(m_InstancesCounter++) @@ -49,6 +49,26 @@ const QMap& QAndroidNotification::Instances() return m_pInstancesMap; } +void QAndroidNotification::show(const QString &title, const QString &content) +{ + if(m_JavaNotification.isValid() && m_SmallIconName.isEmpty() == false) + { + m_JavaNotification.callMethod("show", + "(Ljava/lang/String;Ljava/lang/String;)V", + QAndroidJniObject::fromString(title).object(), + QAndroidJniObject::fromString(content).object() + ); + } +} + +void QAndroidNotification::cancel() +{ + if(m_JavaNotification.isValid()) + { + m_JavaNotification.callMethod("cancel"); + } +} + const QString& QAndroidNotification::getChannelName() const { return m_ChannelName; @@ -66,14 +86,14 @@ void QAndroidNotification::setChannelName(const QString &ChannelName) } } -const QString& QAndroidNotification::getSourceLargeIcon() const +const QString& QAndroidNotification::getLargeIconSource() const { - return m_SourceLargeIcon; + return m_LargeIconSource; } -void QAndroidNotification::setSourceLargeIcon(const QString &SourceLargeIcon) +void QAndroidNotification::setLargeIconSource(const QString &LargeIconSource) { - const QImage LargeIcon(SourceLargeIcon); + const QImage LargeIcon((LargeIconSource.length() > 5 && LargeIconSource.left(5) == "qrc:/") ? LargeIconSource.right(LargeIconSource.length() - 3) : LargeIconSource); QAndroidJniObject AndroidBitmap; if(LargeIcon.isNull() == false) @@ -87,7 +107,39 @@ void QAndroidNotification::setSourceLargeIcon(const QString &SourceLargeIcon) "(Landroid/graphics/Bitmap;)V", AndroidBitmap.object() ); - m_SourceLargeIcon = SourceLargeIcon; + m_LargeIconSource = LargeIconSource; + } +} + +const QString& QAndroidNotification::getSmallIconName() const +{ + return m_SmallIconName; +} + +void QAndroidNotification::setSmallIconName(const QString &SmallIconName) +{ + const QAndroidJniObject Activity = QtAndroid::androidActivity(); + QAndroidJniObject PackageName, PackageManager, Resources; + int ResourceId; + + PackageManager = Activity.callObjectMethod("getPackageManager", "()Landroid/content/pm/PackageManager;"); + PackageName = Activity.callObjectMethod("getPackageName", "()Ljava/lang/String;"); + Resources = Activity.callObjectMethod("getResources", "()Landroid/content/res/Resources;"); + + ResourceId = Resources.callMethod("getIdentifier", + "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I", + QAndroidJniObject::fromString(SmallIconName).object(), + QAndroidJniObject::fromString("drawable").object(), + PackageName.object() + ); + + if(m_JavaNotification.isValid() && ResourceId != 0) + { + m_JavaNotification.callMethod("setSmallIconResourceId", + "(I)V", + ResourceId + ); + m_SmallIconName = SmallIconName; } } diff --git a/QtAndroidTools/QAndroidNotification.h b/QtAndroidTools/QAndroidNotification.h index 46ac15f..1b3a638 100644 --- a/QtAndroidTools/QAndroidNotification.h +++ b/QtAndroidTools/QAndroidNotification.h @@ -30,7 +30,8 @@ class QAndroidNotification : public QQuickItem { Q_PROPERTY(QString channelName READ getChannelName WRITE setChannelName) - Q_PROPERTY(QString sourceLargeIcon READ getSourceLargeIcon WRITE setSourceLargeIcon) + Q_PROPERTY(QString largeIconSource READ getLargeIconSource WRITE setLargeIconSource) + Q_PROPERTY(QString smallIconName READ getSmallIconName WRITE setSmallIconName) Q_OBJECT public: @@ -39,8 +40,13 @@ public: const QString& getChannelName() const; void setChannelName(const QString &ChannelName); - const QString& getSourceLargeIcon() const; - void setSourceLargeIcon(const QString &SourceLargeIcon); + const QString& getLargeIconSource() const; + void setLargeIconSource(const QString &LargeIconSource); + const QString& getSmallIconName() const; + void setSmallIconName(const QString &SmallIconName); + + Q_INVOKABLE void show(const QString &title, const QString &content); + Q_INVOKABLE void cancel(); static const QMap& Instances(); @@ -50,7 +56,7 @@ private: static int m_InstancesCounter; const int m_InstanceIndex; QString m_ChannelName; - QString m_SourceLargeIcon; + QString m_LargeIconSource, m_SmallIconName; QAndroidJniObject ImageToAndroidBitmap(const QImage &img); }; diff --git a/QtAndroidTools/src/com/falsinsoft/qtandroidtools/AndroidNotification.java b/QtAndroidTools/src/com/falsinsoft/qtandroidtools/AndroidNotification.java index e296272..5e7b3db 100644 --- a/QtAndroidTools/src/com/falsinsoft/qtandroidtools/AndroidNotification.java +++ b/QtAndroidTools/src/com/falsinsoft/qtandroidtools/AndroidNotification.java @@ -31,26 +31,48 @@ import android.os.Build; import android.graphics.Bitmap; import android.app.NotificationChannel; import android.app.NotificationManager; +import android.support.v4.app.NotificationManagerCompat; import android.support.v4.app.NotificationCompat; public class AndroidNotification { private final String NOTIFICATION_CHANNEL_ID; private final Activity mActivityInstance; + private final int mNotificationId; + private int mSmallIconResourceId = 0; private Bitmap mLargeIcon = null; public AndroidNotification(Activity ActivityInstance, int InstanceId) { NOTIFICATION_CHANNEL_ID = (ActivityInstance.getClass().getName() + Integer.toString(InstanceId)); mActivityInstance = ActivityInstance; + mNotificationId = InstanceId; } - public void show(String content) + public void show(String title, String content) { - NotificationCompat.Builder notification = new NotificationCompat.Builder(mActivityInstance, NOTIFICATION_CHANNEL_ID); + NotificationCompat.Builder AppNotification = new NotificationCompat.Builder(mActivityInstance, NOTIFICATION_CHANNEL_ID); + NotificationManagerCompat Manager = NotificationManagerCompat.from(mActivityInstance); - if(mLargeIcon != null) notification.setLargeIcon(mLargeIcon); + AppNotification.setSmallIcon(mSmallIconResourceId); + AppNotification.setContentTitle(title); + AppNotification.setContentText(content); + AppNotification.setPriority(NotificationCompat.PRIORITY_DEFAULT); + if(mLargeIcon != null) AppNotification.setLargeIcon(mLargeIcon); + + Manager.notify(mNotificationId, AppNotification.build()); + } + + public void cancel() + { + NotificationManagerCompat Manager = NotificationManagerCompat.from(mActivityInstance); + Manager.cancel(mNotificationId); + } + + public void setSmallIconResourceId(int iconId) + { + mSmallIconResourceId = iconId; } public void setLargeIcon(Bitmap icon) diff --git a/QtAndroidToolsDemo/android/res/drawable-hdpi/qtatoolsdemo_notification_icon1.png b/QtAndroidToolsDemo/android/res/drawable-hdpi/qtatoolsdemo_notification_icon1.png new file mode 100644 index 0000000000000000000000000000000000000000..66e625e04b4e55bdb8f4fb1f206872f7ead7c076 GIT binary patch literal 1109 zcmV-b1giUqP)`xk#VR|#wiut8)#V6%0*JREy>ABY$X+gZQS>v zF-9)Mpi+W9rku=_2oZHOL1*UI;@p?_dgqy$cl?OzzymMOIrrTEJ?DSVInO&|#{Wey z7mLt=mFek7@7n$;5KZVr9}eRi{D5E5^J9AV1$Ltg&36JwGrDmcBN#Kaj3wLe(1V$` z3(TX~hs(u=Be;Mw_%%Ie(z}tu_6k14(p!znGdNmAWH_a(4_mM{rLi;p-i%!sz@;K$ z$FP3d(Mn)8;kUx!0M=n4S|?fGiUsLFhl&IJo6$FU?=c8IP`^rN*E8#Rm8@FJF0 zfhj;eh8OUx3esXVPNzKwu{>9<6ypQYBs(YC>~;xOWKkT#s(&@04l!I!n6f(nsC%-M zm89NWES@C_T6;;(DK?#**0f<(q1%*^`b0_UHZgV**M659ul>WK6db^-vI;&4m^RTS z4v4z6IMcP@4fR`l1b3GXcB>c00W8RL?RYbB>1Jxur)vtb?YjRx_$y6MQBho$|Kl|H8-7}n*i62C0H)LGFGMEOO%cB bzbtG?7J_6hc)2d#GlNGp1A8lxC9v5Y0%Z?P6r z?i83ua1hr@2ae)0F5;K;Tui@>mUM@42#asmD^KEN$saRJbt#P9>3s|KU;tN3 z9y^5%llE2uvl+jY3=UvD=A(U_{q2~SE_AGPq2Cke=0PPxIhbMW#7xvCVW)-;>`0!? zL2YcxmdKft+2%j+5~enNqrcm1$2JURcE6Y~r&6d6W-cC1U>b&J5}?`=sKQfYI6Q9X zL}_2kHtf6|&s5lN$1B-||3qIS<(lX-g$!V3X}ufIVPO-8FA!DOljlmxsgJUAzOVFB zI;`j)L!z2$X>BTA$Mv-SGaj!>$^?8B&L-XKcoWmI^*&rl>!awc0@Rf^7awP-v9D}oMgmbF?w2KU0`$!!0KHWKXj!JyhTXW4)<4Cp za=Z%3376yLB6B>uC2j`RS4ZN*X9C#L&lFn%?$``xD)F$T9x{8BZ#b|f| zi>tttKs}1*@sx_B#cEtgXP(9Kd~v0q55$n{Zgkk460FF)cpj_%)quJLxoQ})y8x(n zypWZXdP|c=YnUdQT}OIvYWNB^Q6%-5a#D8)+DVlC9^=!C=~#-V@rEE@heQK>2Fp~m zglvBscBxnG3Cu1l?Nx7#1DMyqSSMZ+eW~c&xm*`zybBLCu<iT@E3aceOa zPGy@0@iOL!9BSy92A=9ndtVe>x{$B1q*+57N}GoS)9Y|+B!7F!GlSUFw5=4nEhSK6 zg6Z{%#BCdAf14=nwIYFUmcVS&D3K=swNZQ>3xy%p!_e(Umroo97;NE QeE}L4x9`MK=+s2;s_|f)W(%+o*)-)`eb!P$z_3M9HZT!q8QV zZXjx*Pz!%8zWH#}^G~4~csI{H?=$nw%sXFC&;K-3a2K;!$5xzm%wZUntBQ|eS7&Qr z>@vbtJjY209ODpcn2EEBgYcEMh-x?DuhXS%47K48qMrCWZG%MSrA?u?i!biQM7p=s zia46eGIg2e#W0Mg`?Y3-vZ32$=D3M_ZG>yMmA>R&07q!&H+1li_=ZYYATt zt&L3H3UH=Xy}LC`hgSWc1}IB(p_x|*uoPOG8Jr97AYnCp#?v-pkAw3dVf&%AkcqcA+E5+=?8{7zPHT81O`JIF@ zr#2zIM8)c8;A@-@&dz=X51p=x`>kran1YP!ZrN2sytI{0O zh0?SLvXnA9Qat}<#f(pfe?K)8RyvBG3sh5V#ZI=@vgTa`sbB>2*icMS9h+EC{6o6W b`fu1DQ&7u87r3-_00000NkvXXu0mjfFc|wW literal 0 HcmV?d00001 diff --git a/QtAndroidToolsDemo/android/res/drawable-mdpi/qtatoolsdemo_notification_icon2.png b/QtAndroidToolsDemo/android/res/drawable-mdpi/qtatoolsdemo_notification_icon2.png new file mode 100644 index 0000000000000000000000000000000000000000..9eff58fbabc2569ffb6665a4664dbb1f97891335 GIT binary patch literal 534 zcmV+x0_pvUP)Hg21_^P)g^MV$#EqfL z=mnyUx(Pom&K&Nf_gt?+HSpVf=R4n-Gc#wpy8fr3h6k9z8n)uCVHN|Z-Bf%CyRNo9 z3|~jMj^{WJfm0k~71Qxna1_4M7Etd*{Cx`AMt>WA9~z0j(>6&|UfLwOJNV*mjHkH8 zD&kOT%j9*27t1h~;zwE$%7Jc|mE#T`wheCQ@JbTO`;^{-+858rWPWuLZc8ux@<7cTBcOFcH3wxRvmw z&|1&rtpKO1`rWBvDzqB^G(p*-OT)ZDg2m9<$lz>%M-@Sju!+y{-r#Ws_b{~PGdK|7 zDf$xLk5}P4!+yN8z+U5a;`eB-=}=BkOKaEA{Lwb?OL5$?P#>1V_cpM4n&p9uHwnX< zHm*1w-|(VMzn=wX6i+ly#b{N)LP|2Gvtw5e@zR#BBJTw8Tya}^+wgm$EoJ4OF14m2 z$zrPLMDhDCDRz7+{D*0vVkYgyFC-dKT*a&Gpt9#3B&lH#b68hwSOXiFk45Ob>c3&X Y0rlU-9E&$!-2eap07*qoM6N<$f`G&T{{R30 literal 0 HcmV?d00001 diff --git a/QtAndroidToolsDemo/android/res/drawable-xhdpi/qtatoolsdemo_notification_icon1.png b/QtAndroidToolsDemo/android/res/drawable-xhdpi/qtatoolsdemo_notification_icon1.png new file mode 100644 index 0000000000000000000000000000000000000000..c0cbe2d086127ca6a45ba989852499ac41b58842 GIT binary patch literal 1155 zcmV-}1bq96P)6bEpx&k`*a^{HhhC=DVpOhlAE)LEk%I7kf|ln%r!6C7wtHgM1&=mQFDB9b_3 zrbHka*d#D23#}A$(4cts{H%P}`Zd_cIGwxpz307mpHIR+Ja}CGYpws@d+oK?-e=61 z+xQ;=)3FSzu^yX?zxBm$%h5a9I{yX6Vga_|EA?>#+prKlqanNpOYrR=MCWj-SectM z5KO|)T@YTyFPJjY;Cwmkq~|-K57%Vi33=L`IwAG$-W`2+&rwn z{z7aHhcKaA;_t?%nLwAM&3Nw+{LYeAv_IqfnBk^WG4na`2Ztg&h%vKRkqDm;YbC^K z)0Ap^qqB$FaT?elPOHO1b-E>R_B)>Fmhd3vQd|k*?i{S6Nm{E-b0o!=VlNG14`6Ct z2R-6Czj=hUmo>Z)#P7qnI>t)^i+WsGZ}j6>>8(`|kyg z;guTVqx^;g0k;=_R(QMGIj^?Fk<*6!>3OQg0FGvC`vv<9dn>#jBi@b6NENFxB93Q7 zd{|=u?`Lek&+s1&xU(bTvVb^0>)tp{T^48|YdQ5myJq$!&x@ zgl`JoG0f{EzGQnpJ}Ycb;^8*jiGi-Q5pjKmblpv?{q3N&z1S3yswM0EC}<6VvlVSE zr9B!z-zaDeQFj2<6l&f=DRj9`3PqcE(kSSy>WVh;x`?ai2F0Vmr9(!46PeoCza|OcrC-L_FZS> z_NMg0P{sgeWw@tHyvtZK2=PzjLdpK8NR-sx{87=gyPe~O!E$ZMa2MdW60eE3abFw% z_ux(cZ9^{Nkqm!hpl5Nr0rW_3m1Xo}W`_S{We_*;30}n-JcAut?*OD#cq-$28h)+t z&k6QP)iA0?`(^S@T8YzvO(&ey=5nI7jV99_R}Filht?`KbggTNkl-| zl7Vf4AhXDd!Cbf~#x#}6xz?w}^G>`z_q=!Bd*@z9!Y^DH?tITV-}C%9&v~9ZZQ5P@ zkAQhti%r;yoyBKs@!dKMPqohffB`&=-S}F4oW&ljz~EE}AH-^W+kxmRoGWJL_9TLt zxYz^XIex+Hev99Q8#M*p#3hWPS<_|=d;1~$UVPLha1%$c5z8S(6cYSZke_)_dOLF_Tisq0`+ zT<3T8S$kQ-OF{fm4An7S9T*?g!!=(+Lj#8b9gk0BIH0vXxGJbN1@~pVhZnmL`Fvsf zN;I;VUyOPgBW-6vYRq!%33x*|lkrYykF5g*h@ z;H?VVA1e5d1>8juacw|cR^fD5YpuQ}SjU0w0DjMGo1v)0UlQnA9}zbN#93{GEXOwm z?=+T9B)(+(5I!$#zsDnOxHAG>n0a{(3H-OXFBkk_gy2Z_NMg0P{tS* zP7q)LK4~Mm3MW*Yz9rxD@MmUspq;^rAkeNh{N?yDuo;ma1m3~h_)u!Xa-7GbZTxQ! zY*w{PU{HFiEaNg31l;-fxy1WNY7d@JF~!n)K8e3eb{EAh`&|5*X}N%VDibISqiS?G z7v72{iC=E>PNs`7Nx8`JD#X8;rvBB8kTMr&Hk- ziHv_%NRJ3P4tDGOSm5l2bg%7cpCm1teB?=+zPnhME}fcWI zEwuv?Mx{2q;~(y%Lu$L$Qdt&1Z&Kn*!KUMQMIh4Dzbjq9mtaQVV}{h2t(Dq?{Ddvz z-`46K zQhi8drPLZk%~};kZ~&{OM0f=0AX+5-3b`3Or1pGI@%I*Nz+!jEUHdM2fqwx)E#4%e SSK`h90000w6><%qHMj`veH~@ z)iVBQy0vtc1WT4kD1!h&+%Q2vX}$o$f%E(H$Mu{#!E-;)^Lsnz)XsN%wzIQyU-xxg z_kCaY^>&{jLk2O3LHs`f9TWf6LW0FcLRlC7!@89Md?u@DiTHeVC8Y z{ViwRz!)sVGdPe5)@pQ#owos>!nppHyAE{zN6Xi8pU=j$Atb?PA7hhH|h|mhF7o(E3iPU z_-tI5eY0^XZo-{-1TU-a*uE)tQ{USr;mb@GS8x@D9K$|5fH@f6z?{Qy3GT<9jAoTZ zd0w~}ed9xAjDAoU;xZh@8nNA{w2+5MSca$Yb_G73#pR7GOudYCWXf5C69o))V?92L z_q36psaPU*av4AC#O`h1P7=rJ=@Mp+;HSct3~d`T|KVvU&KF1TP>GT@U|PEv=~QlW zx^RbfZ{>XchT=BmPU$9`*6PVm7q?XkHSEC0S~_uKyk3v3iVgTLw8{k#PT*2;m8X>R zH(b|}30nYMg})Xk=`Gx@70#sakhc^}wgcB0K+(0x9?Zkv3wF^9xT4vKIz{-9LYDz> ztWv2rNH&$h0cqU+;M|up)OUBBY zTq&v#d3c~?>}cgltrJ+;fP(JAJ0-Mh3XWMuXJumSKX6SM6CI*%mFHa5FsEdEr{YMz zM?v3gKtW%Te>{4lyMlr)O7M6>81i%mLR2sBPE7ua3VsisD-ojIN31Z#A~wN}#Q6Kr zSu}XOsCedKRYgG-3xk=$A8}Tl`sukH|4=~p7`{-E*24)JkK&A?ffJ=2sudL{KSNx( zdB#*K;=Ph<>tCI&C4Ly%FzmaP>fm<_n6aCNHF z9*3_9pK7~E;w@5iG)|>)Lqf(qif(DqQSn;Nz#1-VR=9xzykEYbcLY<522PcKG>&3+ zAIi{H-~#yxz#66(4LnD_AM=*~q2RO(n2G&~W0saPQ&3*4GN_pO(6VpIcqNX;`GUli^~@3{_QV#(N9^3xsN zA{$!Va3Ly^FC{d5e+A}OIMvyFRV4A7Zav8s@tSNQdZVU7o(cCRWZR=k`CRxyPZkiF zR5Jd3^6TQ;M5VLvn3m8UhPm={P8*dJ1VqXtwfJik`9Qshj1Xrzm9$@0Vf@Wv*PM*q z_?(igUx9F+k)P~3AR_w0q&serPTK!aRWl%tLn^9&N{P|MSYhn*&ib49JwBpZhH{wL zd5_BXe!KAm{3v=cH$fOFy1Y4+M`8c z?0S*@P2D&>%K4@8+qDCqly2eKqTZ$|(cYhGd0B_^E70i3gnYGtR&Uhm_`Ci1cA0WA zKBkMZP6~x)BSmza=nl=p3DFZ++Jh*XAZ`|=;#NFQ=oSrIpH{I48sCy`&D*TeZZnaZ zOqE&=;kJr&Mu-N2d+^UDl=FtDYt2-#&M*ABRHgU0swL+H@iC%XJ%uh@Unk9pnWFa9 zp_l_=7Zkb}Idjcb+(5NTvz_?jnZWjfNw$ifz`A;c#7#F(bj3a>N;+$^?{WMLUlLAX zT?SO#e3y%^jTCle^EcIEM3@nrO(s+h&^XtvhJe?9w zTG3IfiH6B*TQXsDyw1&bPSJ(%TO~1DBNLAk`H~_WQ^7}S7lc7Bd-AzM3+i(z2BwOu zzi4$1iJrjo^uY@o;cHD7M!cvmsax!<@_4IBW-b?wVv&+gh!XZ9EqvvZ!_Oq)A+J{a z1fl1h##P$AyG1T$j&vx}8*hrtz!EJy^TH_|O}hGUfD5v%AwaYr-_FlMQ8tHoXD7dSaez3AZq0o2oHH?_VdLe zU|lM5$lH`RXZ6P0;RXMnz+A1jh=&uQ*icO%%08->3%u>T2)sBSD4M*Q_`Wm}EoA``ep z*s}h8Bi{(bj=E7aX|EQQh hFEQRA1~G`X;a}l#Oxj?H*bD#w002ovPDHLkV1k$ORC@pb literal 0 HcmV?d00001 diff --git a/QtAndroidToolsDemo/android/res/drawable-xxhdpi/qtatoolsdemo_notification_icon2.png b/QtAndroidToolsDemo/android/res/drawable-xxhdpi/qtatoolsdemo_notification_icon2.png new file mode 100644 index 0000000000000000000000000000000000000000..e7c4a850e6f2d54c3a6d99f6ba571da1b1af5756 GIT binary patch literal 2265 zcmV;~2qyQ5P)4PbyfHbrznO30z3I&Z(pgd9tub3wC5EIitR7hJXHORvR;fsPM)->^f z5haF*Mk8P}5{(j+S|W`=1sZB;2igeI%A**dw6ycMKR>K9+RmJP&OP@vqnUqllAD>k z_g-tAz1Ci@eJ4y9$2i9E{{(blDrR6NX5(1&U|#mj&Hgq!`_7DPOxI}B-xgp}CV+Es z74E>#@MpY$H?R+bsAZpb;YF;+&+%1Ujm4P&CyzE?O#@SK30C7_Y{PzyqYvBh2-aW; z4jpYiD+AN86i?vwjImauPwc!6_zb3xHs7T{H_pf7LR~tA8lDonb=qjlVFZLKeH1^y z-VO?8IQHR3IMY~BJsg3R*wh4LLx%aC?Ae$7tx;^jjW}wwh0~4iN&6yQ%ZGN%%6e#SvVOK=$KR+>Ns^sev^Q!RfdQJF+?J zc`45d7o#&iR7U7Wgdr}&9;_4FeNGE$n1xk%6uax7<0&j^9j0 zJ>K6&dU~)z?Bp_f){EWSzMUl0>hTg{_TnC4OD49BnE%o=5hn`Od$&YL8!)$Bgmf#n zIeoZAySH*aeG_q=a;J174sZ41M~KrZg&KNsSxXmgjMj^>S+N2Cu~xYN!Uj(F%(^k?7?FEtzZ{z#o5g+)Gfk?6#9$- zwMqdOD$XAK6o)ml!1>a#)n44vLVnr;;Rd8mxBXbs=)}{coxwqIlz05JstR$seOuZ! zc^WesnRuym?DHf}X#+oP0ZtIv%RJPuyy}EgM6xRndxVFabON)twnStRcL)dVW=v@T zvy(-b@dS3_kGK?v6pZP@wIYDc!$wtXkw`qfo{;uB1>pmZ5-HX^y?+u5s)^*FxsS)6 za^~HOZ{g^Iv2#SKHt#gvh0E(DVp7Ino=3VLH>?9eaOSzC1Vd&p41w^>IMY#CA?QMcTItsW%H~~jQs~LC?ldv)UEQIs~XNK8Q-lq z(jOAg*BcPf?ef**Kn&I)pi>hx4hTb@&OnIjYVG|#2mlIkwpV%N;_1y)w%eQ z;>gWYht2pvoifRrdk&t~j7$}_>@iV-*?>C> z-%kB=Psf*qPqjrP@vc>*8YAbpB*EhjMW?jrsCXl1U=3$B%iLH2J}BSM+l!u}fj#n7 zV;>fFkcYMcC(BO&)^L2$zo1U>?idu=(Bg&*QIXu9knmj%64jLn=3=4ejbbZ4p3T)z8;jVXdDx+z^11MZ9x0e) zRz-p);luce*d5Jc01t>3y-MY7kupiW{B??apaUkEED}elr2VRjM14X;^JSUFDi{*71B9FhIB)MsNJG`QdBtX!l&e`R81tvZ&ybLDh|UJMKvNXknYduDXM04 z;nUJBJeyQ)suJz}sg{@ZI59D9qA>J%dEec*4<}V3X2O4phWE&?j&2tRK<-P+#;#59 zLPfJNH0gBF9h!#$(Gxg=AdwdRrIBxYmnc6s+-@SOCZ9J_Z3ppN3Dw6pq+9cz(`dJu zaN<&>mUnSo&X~^{*)sDsZcwigET(BPK8Jq|TjM=kpY#2zrR`Y1dP~j;Vy201^%VMW z@vt$&ySfHN6IRO_Co{V8T3Y_@fL)Dq6gN;ksM$_@aZO-L!6KVQPv9hx>wRq4^9y{a zX{n5)Yk|0;FnqnUMYH=N(Y2AnHeoB9>zfuQ+Ktk!BQ?=5xmcVQ6Nf)7l1UzIBi71j zSdJfMVGh4mzbmei>ekDFqJ0T2m z*_F>;EvV0>2<1L5Qgq)oTuHpTbx#BNrxf_;%$)`SfPbFFKps9BDP9}4+mmnCY;VR zyNjJPSMf1AgrVz}FNx-*Q#GE;Ss?N`+tq(=%1rMbKI+k~If z+M~Qt2xszaardE_Ush-q{UUr=Y>eKYKTIUsp3&U3?ndw&E*JjV*!~d|QD0jwjQB3C z$wd!GzsLk`61Hq~@5na-v7;^*P1q^N=X&Efbgb=4(N2X-q;y+})zt^B9qV>=EI@&@V5{7k<{9 n>^nzhV@4&$8^<`t(Kh@Wk4#l3ot}xG00000NkvXXu0mjfWll_k literal 0 HcmV?d00001 diff --git a/QtAndroidToolsDemo/android/res/drawable-xxxhdpi/qtatoolsdemo_notification_icon1.png b/QtAndroidToolsDemo/android/res/drawable-xxxhdpi/qtatoolsdemo_notification_icon1.png new file mode 100644 index 0000000000000000000000000000000000000000..2ed74e039e224ea2d27c299746e268672bc43db8 GIT binary patch literal 2422 zcmV-+35oWJP)4K8(Mgkvv?!`Nm<)!&a4@GGV`k2;AJ%&~Idjf=)_$Jnec$tr^H0vFll<3zuf3nW z*Is+={mz;-gBi?V1~Zt!3}!GESb+Vp5EtTlEXH$q8~?+G&fglW#PfI*H{c>1ivzGt zzuPnIfi18b&cc$8W81S_8Jn&Dvd5 zdx6`rOTYcs2qJ`B*=I*K!TSbreZc1UnfB)SwW1?m!LxV*58zJRf&1~em_C+@eZnU# z*@o*3O6V#=yXP7>f&wsf@$9NfV9PvQ_g_{_!hc%VpY)WHyr?6%G#;2U_irsEISr`WsG>2*5d z102^6%^N|C{8Hx+;Y@5c4fM~&smi0ZAsp3j@uhSA2Hb}&`zm|_V2+6W*B5re-u)81 zpwRil_;Fvv762FEiE9ZW zg;KJ%-PkK(3*~pX9~j_#3U4bNZZ63nz-4t_kQpiUJ zaN3y+oq@M1+4j4-CE{qgl=83vT5z)v1p*%>JE8rlNbWFYg8>LN>jLM9L}3+P&|)rY z^cXRN`&u(PO@UjJzPPweqc0^44w;5K+-?AGCj7CiEn~;Xg`H=%VsHR}?(g43HC znk_f_pHz@o6Z!r>iWqy1Sh!!qZ?!phPTZaw@Ty2Rti=jEhA$WL+?(*ra!oS5qG&2p zw{v&_=gFo%E_@3I))qav-Q7A4nG7R1yMXVYgkRQShbE%0Oc;4mvX^m0f{!>p+^M$k zjqR4i@h24UX1;>k>Wbb%?i}@yB;S@|n#tnfTEZu`{mTNo?@1Q(V&5d^m+FY#EkQgi znFYl01x^@6EPP|TC)BWeRRRBe)q%=urJ@(8&ij0*AY{ZPH5}16rz97x zjK}2#{IlhZ z3F%Rouzhxc-6fb)$iJuRY(YLlD(+-Wg|)?AnDto|MJ8(as}}Q0n1@Fac2{A~nl@Hf za9>eEc6|le$~q!D+}q)wCLS^C@Mm497ZM@kgC-qfHvY|qacqP~7A zJkh2iAp4){xj z&)zK|d$fXVX&2ivkPyXKQ{nF=WH(fhz1_vO3?xi_;1BnfkX=+k_DL7pGLTSxt7cIN z*|8O56qKTD>cFn5)6u7t5FU`|fLjVhep}Q8P4w5>J65wkJN27P&xr~Os^o4A9abW4 zn?#QeDLay!sx;)+X>lz9znDT#y2w}@G_6QRiIwH@nAcgY^Ie#?;*D!W17Fq~#IyP06+{4PIpYJ66w5X2IJrcwp zV)Fvd-7EOsQt(yPf$HkKeG9l|s}4V5zdAza$z4e*Dx}5f6@07k)ndWbcK1pDCGW4!aw&k5x+o-1-fH+ z=iuK7-j~Ir9>pU_ERNq7FKks|nZiN=tQ|IO2u`Yq7(j=bkul^ zh-qbAQr|>)RXyitG6fVyiBlQOd<84j=xs3_l~l~Ng~!yq4kf0>D!fsLdoqLPCL48o zP5#YrMomZ7!G#JJ+%Z}+Ctq-B9sbFT&K3nsRalP;8rb;?epkz-IXt4yWr@%AohBEQ zysYi&KKUCiA8T;QPIUHBqRys`7uDC}5BQb_Hx@<4Gy8^6cdqQpt^7Jdw{OAT?zkL( zl7FWG{wppIUZI62#Y8y%R?_xEP3=u3WEc5S@UA9TG&i=$GyZA$G5II$^XU_SMC=g2w2aEvC-QVajCApB^KBJg~Po zT(66j;_Zd`TAZFbPM)vih%dVnmYK7*% zDYHtyqMcHReL^;ETZIwv*}pD!rAtJj?j~_cc1_3D-J(SN1u+0V*4~c@-KE!YejC6^ z>aPpa0ju>Yz0fU)jOJZ^c4Qqqq+dVI&<%*Mq3RODbim6t)h9T`dkq(hJkoUfF;60M zd#P#gyEZ+6sE}JO_ZD-vuwLxS+o@g{H2A!p=e9mL{~qkDY2D7I0-ohkCV|UnGd?w?oC^eT9gmo))|1iHe3t#4+eUL~3IZPQhUYWdk)R5L4Hd;?!z^ ocw%{4WL9S|gBi?V1~bUw|BsBn(S&ll&Hw-a07*qoM6N<$g3TANga7~l literal 0 HcmV?d00001 diff --git a/QtAndroidToolsDemo/android/res/drawable-xxxhdpi/qtatoolsdemo_notification_icon2.png b/QtAndroidToolsDemo/android/res/drawable-xxxhdpi/qtatoolsdemo_notification_icon2.png new file mode 100644 index 0000000000000000000000000000000000000000..d54942854aff3c2a4026e43e1c619aa02617dd49 GIT binary patch literal 2400 zcmV-m37__fP)@xYEa0GDBD$FX%`3{T@K9E3S-+dCtGA?%DB@o|j~FTxhwBt2zAZTq1W;B>r< zjXiYyWPFU}IJa$o^bEMDXyk=up zTqzA~S**j{x_H$J99zNpPvJN{c+92c@n|WnQ3fM8rD>j7z=?RTq~lN0QtaIs^fCkS zAG zvNIhz6K{3U_WPS6ahh04c~l?0aHEh41l9%zq5h>v>@a1EJ_t3-0#`_h!Xmt=#$49; zF=7M{*QRua0(S*{ab2BCUk)f7F#~tFO#p8N{PB8S%1##xJ1?z8VIKfr3HW0S7gtp@ zBsTk>l95=G^8J63V(j(Oi~BYFTAgd>)b=dKzom4;My$l2@!3o{4+Z@4hANp}sc0%v zw{ud4%&+QxT=+JQE=_uRy$5t0G9AWnd4{}W0)E+qy{eGDF`(or!BNJ^0ePh3!+lB< z-&$`@96vupZsaMryDaG)#m-TW3(DI`T4tj7Ln-1@>;7ei-uDHId2x79=BLV#J|G}? zR4@yOvooA9j>_k+*r$Zv3xcv|i=}1`D?|LUfZ%Yfi|>_i#Fw*)Z>{(E5_)gUkiQ@x z?}jqOmlg=!B%|&gKPusf1=+;6);qt1-k)d4-$ikt@>(wGVa0i$H8Mg*e7l4rD(95M zqLs<`L5BPxv25wyIi!ya2)sAb5yxdZVT&3Hp~PnBWX#Ld@w0%;<8uVg3kb}rSd(VT zqZv*J&%%K2%QN&Y#dewU4^f;gh-XNpo~&-znC*pG|F5EmL=AsaV_pe!@W+7O)i|W2 zj&%jH7v>1NwLsXaG9){)_rO0*J!3ZEFB+&9l0wGcn?9ZVk_wwYyjkG0_(6^0YOz<# z5}lx9KA!0ie^bg09a&XwK=0hnK)lh>yG+%jS(5uwfzO`F5mr=k@?2HI+Zq&y?eSGZ zs;}>cCz~^+KY<4ee6~e2Gb%Mfcf+F%+tYWz?FBv~8dxaagx%M$J$(oKA}|2MQDH>` zkhKZ>Bmg(pIRNVm1U=HQJ$(n<78rn?qr!?dOHVXxPu~F#6!>gR#!L8x0%6MlivA zN8oOO5gpNB725!RTK=Xu|RhU`H@46ajcN4kr(1ZsdVOGd>&`u z0(>98l~)8@s;d!41Y~bkrCU^5n6V}pmZ~??jq+~U4A=;Z`4M5dJY%q9(Db&%Wp3b3rb#5cXgk5hs#H%*c(Wf zUUa*$aB;1KyW8@UE<84vVxuNyJfnM+W?FW|-uya5_nh?G?{@kAGkTENo5bgdE_{AE z>AS_lfiP2CeT4Y@heUCL3c)`QaXx*)x9 zqig=Sefhn>6-n-{xGQ8L*5Znuk}Lr!)Xd4uu9th-RU_HC(&iJtN%$WI;A=TxKmNbkMvM!J+4eHK@?jjwaN6v7k z!+LG6`9+Z0P^%b8>TG{k>Oe2mx7*>ezf?4}QuY6oS*@*TCl}H_A)2-=!kF~fzbWlX zmr5sCw@Yn7H+OVBAeD%}C{2Km)K}Vazh1}rbpYon|6Z60Sf^L%g{FW5r5V(3cuZS= z&d>y;r=h5cVJ6@e+v*jZ(tQorNqMB1^k<%=%4$Q)nx7_L7?X}cpOsP@i=@Vm6ZFdls$U>2T{}sqR>RU2%QGUgI=}z}3^2d|QTz`Jk)kgw S-XpaD0000