From 45ddbd33206fb44f4105c860289c7c3f97353f9d Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Wed, 19 Sep 2018 17:18:17 +0200 Subject: [PATCH] fix push registering on iOS, improve android push notification icons --- nymea-app/pushnotifications.cpp | 1 + nymea-app/ui/Nymea.qml | 29 +++++++++++++----- packaging/android/notificationicon.svg | 27 +++++++--------- .../ic_stat_notificationicon.png | Bin 1179 -> 919 bytes .../ic_stat_notificationicon.png | Bin 759 -> 578 bytes .../ic_stat_notificationicon.png | Bin 1853 -> 1433 bytes .../ic_stat_notificationicon.png | Bin 2779 -> 2218 bytes .../ic_stat_notificationicon.png | Bin 4295 -> 3429 bytes 8 files changed, 34 insertions(+), 23 deletions(-) diff --git a/nymea-app/pushnotifications.cpp b/nymea-app/pushnotifications.cpp index 610c9701..ce1ea847 100644 --- a/nymea-app/pushnotifications.cpp +++ b/nymea-app/pushnotifications.cpp @@ -64,6 +64,7 @@ QString PushNotifications::token() const void PushNotifications::setAPNSRegistrationToken(const QString &apnsRegistrationToken) { + qDebug() << "Received APNS push notification token:" << apnsRegistrationToken; m_token = apnsRegistrationToken; emit tokenChanged(); } diff --git a/nymea-app/ui/Nymea.qml b/nymea-app/ui/Nymea.qml index 629dbc32..17876859 100644 --- a/nymea-app/ui/Nymea.qml +++ b/nymea-app/ui/Nymea.qml @@ -61,6 +61,13 @@ ApplicationWindow { setupPushNotifications(false) } } + Connections { + target: PushNotifications + onTokenChanged: { + setupPushNotifications(); + } + } + Connections { target: Engine.awsClient onIsLoggedInChanged: { @@ -133,14 +140,22 @@ ApplicationWindow { askForPermissions = true; } - if (Engine.awsClient.isLoggedIn) { - if (!PlatformHelper.hasPermissions) { - if (askForPermissions) { - PlatformHelper.requestPermissions(); - } - } else { - Engine.awsClient.registerPushNotificationEndpoint(PushNotifications.token, PlatformHelper.deviceManufacturer + " " + PlatformHelper.deviceModel, PlatformHelper.deviceSerial); + if (!Engine.awsClient.isLoggedIn) { + print("AWS not logged in. Cannot register for push"); + return; + } + + if (PushNotifications.token.length === 0) { + print("Don't have a token yet. Cannot register for push"); + return; + } + + if (!PlatformHelper.hasPermissions) { + if (askForPermissions) { + PlatformHelper.requestPermissions(); } + } else { + Engine.awsClient.registerPushNotificationEndpoint(PushNotifications.token, PlatformHelper.deviceManufacturer + " " + PlatformHelper.deviceModel, PlatformHelper.deviceSerial); } } diff --git a/packaging/android/notificationicon.svg b/packaging/android/notificationicon.svg index 10b9b96a..adb5fb2b 100644 --- a/packaging/android/notificationicon.svg +++ b/packaging/android/notificationicon.svg @@ -14,7 +14,7 @@ id="svg2" version="1.1" inkscape:version="0.92.3 (2405546, 2018-03-11)" - sodipodi:docname="notificationicon2.svg" + sodipodi:docname="notificationicon.svg" inkscape:export-filename="/home/micha/Develop/nymea-app/packaging/android/res/drawable-mdpi/notifiyicon.png" inkscape:export-xdpi="9" inkscape:export-ydpi="9"> @@ -439,7 +439,7 @@ id="path2390" transform="translate(143.41788,709.27353)" /> @@ -499,7 +499,7 @@ id="path2366" transform="translate(143.41788,709.27353)" /> @@ -539,7 +539,7 @@ id="path2350" transform="translate(143.41788,709.27353)" /> @@ -549,7 +549,7 @@ id="path2346" transform="translate(143.41788,709.27353)" /> @@ -634,7 +634,7 @@ id="path2312" transform="translate(143.41788,709.27353)" /> @@ -644,7 +644,7 @@ id="path2308" transform="translate(143.41788,709.27353)" /> @@ -664,7 +664,7 @@ id="path2300" transform="translate(143.41788,709.27353)" /> @@ -719,12 +719,12 @@ id="path2278" transform="translate(143.41788,709.27353)" /> @@ -734,15 +734,10 @@ id="path2272" transform="translate(143.41788,709.27353)" /> - 1u$Cl8e(>S!8eicX1Rib=wVO(CKc zs3YPi!GH(E3k$j&0x_W=x)_XzkkGm*5F}jt*MYAj^$s^w3g`)79q=fy6nI0@Ps0h70@@IlKMZsM{{d%#Pb6I(4zLu^HeeC( zGcX-k4Lk(g1-<~j0eU56je<)7Z2_JJeBqP8A>c)zH2?;Hzkt1xoM&}M3TQU)GVnMs z6PN?^g>}B%s()Fre}H4aXOe8|y@<9k3Fwz}ryAN6&@*w!BfzRi?EE|Zq2A`RB1&ElYg@;%d!?=EieU`7)ky>A|I^G z%6R^7;6Qx9?*VyquyIrkkRe`)1208#cP4DJDvJRtG|UdoY5=i3^$h+Dv$fK_!helO`VUDEU^v+p_m1xv^G^ zq-8mktbfLGV14eS@xc7Bv(g1l{>Ok*q0;G8SFai<2WG2W`rZT#>3ngY^2O!n*|vR> zeypY``kBH&VV~b~$?u6)U?^ANg0eHaCH+t>OwB+6Wp&)6oU9W7+gA?NCF$3Z0vZdv z9hLKEKzXj&(&iYtoz>2;5_Ck#wSnI(1nVQ0~BQh+`mZFfAcdn|ATR$; z>{57vGh~OPFALMu+K2KNWm)!7lz!>wt=_Y}6%?(ox|2F=n+CiKxD7ZwP~9|JBwZ=0 zQhHsMl`hM&Y*(zf{>htxt!tC??PvkHOTQP*aTDN8vt81eQ2`3;T=uU6J7VazO7cQi zC>ml}&bnuTuYsH1yCwZmh^7%$R(@fYWiJ7*Ik{82PbJufDwI>Isg{y&NZA*)B=!9N X*sOH8qByDyBpvrfP&BA%x%p2}(7FNQ1w%s1yNz<;;EQeZLgill$qF1!_> zi114<0B!@eXq!C!RsvT64@g?o6x#?WBKFOd?g`y0T6y`8!10nksRK0-P(=9I$-wi# zg~0j1K}{=c@q8xmlq7HM80!lt!OU@)f&YLBlKzT_uYf()vQh?dDR6H;P=f%S3M@+a z{{rs<#{##NC`!IR0aGNoEk>;h$bIu*CApoC zlC&fub_NXMJm3T1I0rBx?&PV;{_BU=v6Bk&TvMTl@Q9mPtLE`^&-@0=&cu)B%c{N`0(${Z z7ZVf_698BCT;TEn6`U#Q$(}8X2*2d)0RhiSnvs39cLLlT_y$;AiCHD-i}dv*9$spV z7XimrZGVxZ)2e{Xr0#`5HXrczJp*hCxEh0OnWW`;_L(B)0yhG$0-N*+vj6D2%Ujl$ zIZMHJ16O2E{0&U38Tk=OUq*z19}Jub{0X=Z2b~W4IHn6AW1B7Mk=zci)V<+h7}Ix> zKFdKlA_wJRV0=wg=SW)66_E4Y;6F*Llef%S)qlyfpCyQU=%MVR?P|dI(KV888U~Pq zO^zP%*DWa`!rQlfWeX1h?gKVx08%_&D?mjOkFlxZ*F1!GD}j2WBT|=909^?z zNm4Ya8ko1xBF+bL7n>^S>oTBU@>uAS#MQuvII8`a1*z+6_Q4eoiZRZ;c0SHn?Nn*+L|u`6D65!$H7=cVu$;-qugT9+^$Fs%UZf`50w+--RvyD!mX_t)WyJC15|+X_)5N@(?ziY%zv!w zD^SyEU4&U9TeenhIWS$)dv&X8yxTiCA}k{=1FRaiYFn=KvoN~_xI>cfbhXwBP>~_Y zZ+a@gBU4*fb9m~$1K#mZG5&3!&95GfJ=C<4tlSjf=+r_6<`e%-Nxp0jWt}QC)Ehbm a{STHIS2U%{n$G|L002ovPDHLkU;%<70xN9* diff --git a/packaging/android/res/drawable-mdpi/ic_stat_notificationicon.png b/packaging/android/res/drawable-mdpi/ic_stat_notificationicon.png index 9501aea48280abb65a8fc7948ff6e638a1cf3f90..07896d40e61fbbebb75e90b6c5708f8e158b3670 100644 GIT binary patch delta 553 zcmV+^0@nTa1;PZ7B!3A>L_t(YOSRR@tBqk4$MMf{m-{6-4kFhi28tp?Nyr~S%D_O% zzhG)g`3GDk%7hG@s53wz86lyJ$bdv~g3`G|Nq8cGvj3JzcmHsUMBVj~Rc(JpMqWGuy0r1^u9{;a}kJjWG$!0m`g zDgQ(}z;x`zoPX*;Cd=Ko#zbtxeZ0YA+>MAkBLeb+QpyhGNz#)n*;yDjWOG>%Z*dE+ zaXBJBcM3>(wqkRYXHl)D1P;amWWo!$8WHb@R#>A%gCCVr5|X>zPz|4tg~(Bo@e0?o z>m%Z0Q~3@HXaQxy<2CW@3QbQ^lB}M#(J3ImJA+TP!+#f}2d5+ALDzt4`nhU$HdSh! zrk{+6?Dp2ZvR!t7UgV<7MQBOqV0PNm_DpNMwp)|Le+#3-&ZN~;sAuDjP-W9t?y0<%) rsHN%hKO))POCq9w%sdz=QM>iu9qp4DLJIhC00000NkvXXu0mjf+Y|`Q delta 735 zcmV<50wDdu1os7yB!9k1L_t(YOSRTZsFqa}2Ho7-1MrY#>2uX+hD@OpDSQ6l7642)YqMQjs(W3TzTy>I5Nnqp)_Y+@E~s_x#`a zC+*3Bv)5YhUhjI>`~Bg6KG9XblrjaE;TBwvOOQE-@fkkB!GDPOxnG^W0Hu_>@i4Bz zxqS-!hOe+4J0s$s-ni2MN-2}@EH1~5IC}sV3wGg=h&a}c9|2H{=W7;W87{)3NU8=o z?_gy_{L}>Z0=$R^>gE0T5?A7xI*UO-c16U}(*Q~-i))(==qy}_^Kl$k;8x7TnH@+; z*Q$uvkum=jD}SYAk+(3nmAC=hS|AgVt>27IwY#@*Em9B@TDhNNenbp60N3F|oYxA< zHdB6?n1357j>8P>sSmsqcjBp5XQ{5Ci1?@hSXTquGx-?L;oA!QXA3;#_+15m5GU|t zOL0ll#)x>l0oaYZdUzei0(@Uzmfhv+oAV1&l1XdMW`8Bdx9;~u#83n9Y1Mr1><(dd zrDJlHZByj0O4}CPUhmord=U||#{x*eQ)t39-}bM{8W{HBBTcw&q#%01bSsra=@bzw)&=7?C|0Nj8Na85_UV^wJ>(bWDc z9X^#*E`NxK_Zxupns;$i2f*H{v@@_4n>%6;;EsqmdTQ#Wlw7Qro9!MY`3P>q*VSor zF{h6bmpkxKM5GIxw2EpMsqxovZ=aWC;!dong|}9D_J+TSdm`fR5dbYuN^XZbKyvHT zCQ?B;i}raB%Om24=AWZ|aHds@xUUagxficvNm$E!vb#61CJnBQ*!9WGndBB8NklmrKuuD|bM6tvYd%=!%%NN&y!*z1!%$+ln8(eU?bMKtl z`~O$_*WME>;TB6ce*QlMN-1jt6Cz^nc#2x%2$WI|2KE4EMSsKxc0;QCtfir+j zfcJq1BjT&^K%x-=ftFH^1NQbM@B?srL@Zd`BpMMYrK}IE3+x7L4ophmw*aq1#LtV1 zNK*pa0EYpuC4mEhjetK)C*TF(&4~DY*hHEV*awOz zqA7u0fTMtwfPdcryU>roslX};_|L2jqjVdvAR?@nfm%}nrqHp#8i{6N0>3s>%LuIq zECUP0(WpEM+yQ(U5q}MeMNR3Yk{^cJ1$gJAtPo;+v5q zN+}XvUcwRa>sUxOC9o#2GhnyT+gk%hW#!z|R1v`UnSW-clSBpR>!(rx-^-Tl=d7vy z(iuMUF7OC2ua}55C13;;GVR$+rBi@SJ9y3X5s=`Q%J)qn0nPwEQ$qkdnU3+9$^oBe z>YX1E)>>C zdLdv6oqtqY&GEt?+va|8dFCPzVQS-LI zO(Q+1w=7;;?Pz8Mb%sS>*=*pRTvu__K8=X`S|gBY-+2RYSOZGSK_cBKkXw|$MK;#i5`)hUh+i?-f* z!2F1KxZ6UFYaj{u{Jtq(Mq=T=Gi^*I0X13El=Jy*vleb}mI6F9*^VVKJ0jGW_9BoZ z^xmPsuC;=dgavFmnI28d8cWj+sD(sFb3&En?G0P_Ai8`PzQ3ig(&awYKmt2JVlDs(p6#di{aE3Dlxt z2eHliqvtCkTjpFevO_6a*F?mNJs}?PaDOWVYS9q*Sv5hcB4WW>8>U@lF9Fv@g!9js zt!)AVJ~zFu$5m##jIXVUb!zG4w zW1m;(tOH5B1x$|!&((d|AP8KL)23?+c1Pf`ypk~zdjZ!w`}flC7sYZA1P;mD3iot< zXC4LX-W=E@bXr81Vtv~n2zXwYUPET<^h!p+4*{1&#K(Oj&jkiSKxLkmXN3x<*Dwd< z_LFzYv*2PBgb#^-}}=^5n(Is z+ggu6wo=FKGl3myV(H)}38OJBBChNkecMW02UJQqI;Yg?mO@fSMpb?iIAW|5=s;_r zTD+8^ryZ4@PBm}pEMy5h4;&d0-sJUV14*G83Dx+L9O@+EcWj;y{61kyM1Oep?aKyA zAnU<8xG=@cdsTJ8>&eM&e6uqQ0?tDUnXS`vw0qtKOdXe_M5lZxr8vkLg>&*A>BNX| zwCLLg9)VgtcxLtj;5@HW+L%OLduRl*9_&mLBjUrpU7rgKl|WmdhoS?60NZKJe*nWw WT|k{Ih`9g&002ovPDHLkU;%=P47Jh#=#DJ>W8n_2=H{ia&Zh!6HyTIs-zXHDpehOR* z`~|o%$-mZpz_kphs(S*@1D*x!2s{wj2DnYf#cl=u3|tLd3496obdo;~HDr(hRdsLR z5a2|>*I!5U!b!k~lIW$CWF-Tt>Q2CmfFpt37rgXJmjLw4&wvjCA5CJ&EhS4EP*tuy z7uXxP9dMtePJdW!Q2`eudBL*VmNKBK9u2$?*aJ8L_$u%T;6ckCwBov-0Iy8)-M)Rj z22|C9feV2L0RI7=3S0!dSa@@JAecP@F_FLqMJ_Ei5JgL=k54#jN1<>nekAc0C z{B7Q*xdv3#oq@A~*<>;{pV=;MKKuaimDKZO;3dE#0rzjDe9E#tuR3)Za5(V(IWOvK zXn?@;aNsq-kAUyD+j{Xw0QnE?%?zS8Ra?0Q4!fF!^0hn6GH z2JQuXvwtPtzuTsV0j~!h3*3GKtnkczll*2<*E|DW3%t7nr2f?4|8x_psw|`OA9;}f zzdP`c#(6~8I|3Rg@QL1I`7iK0z%^Dk*Y$~D_m(8@=ro|JyvT0>5qF-9ssivbz4`?Clc@Jp?z|eg=u=9coTn6luL^?iY zfN^R$T&9L!(2!Ve|1sd#E0DXJlU&t2xLtd&kGJp0oUxE=w zYyCbg;l%^%{mt#)J{5-D6(Va@-LJj2I)83x;b?gF;l~S;X!Mi^tl97CJH7pG5`HGh z^C#ljF3gf>DeaSMlU(00N6*{Mx!(rKO4KJOB(VvaGT@!S8~S$6{BF`8m&BSrlByEa z{9E*jqhzisOQ==n@xW6W?^@;xXC|@qP8ndGK4O{O6KnK@)cPP3dcp`3T5nkQ=YPp4 z530)2=}U^%uD2>JBj+SJbk+bH7QtkQh`w*MK?kl&a%)v>)xyClHQVHy2d@TRzC^sw zyU)2vEZtKcI2AZ{$nD!6OXn|vGh4T2Qj5@{vejntb!|%xS&bYbo3LmT5?7VY$$N%q zo7wY`W`xrUiI;Pru@U3*q}}FQZ+}PFai8OpoILA+eSt4-fB`oC(h*syIba(qi`{mD zV|looYN(iVV$oCx*@*mbLE>7j9OVlcDapS5F-w5?dZ@mWU*3-D`pMQ-J;ubhH7s6&3c#hTf>9Ghel zW0>s+JV;{J1whLfCMG;Fi4Bhihyl_AL)7GUqA^sA{~eRah(|K7rL?J#lMF3!>OD2d zapOa(%Gft)ovS+88zL5hlYf&;?Vo3WFJ+u9;^ci7kXi0B9-B8*mh;Pf)NS9es>py1 z%~A4pdZ4*oP_waL#|wJ$lq92mxvDh4lKN)gr7PZE9S+j;z*PU;H5bz5mP5g9s7Nau zgN&OOyEf5zuQokdFZ3CJSavG`f z0RwYFfRhjTZLLeJFn^yDFP8mI)*C{TC$$-nRKRvloap+Tx~i9)7dh|ofzIkm*m+7< zGGMHrsw8Og8o$)^g+re)evy>h__^w;**f31d5{4UhKQ&KIqGYyQ^UlNF1?0`< zoXc?eWD=)&gJdlOCJYf_?R(`rQW1L!iQ#z4C-wEC$j{pd(I^kvHve{OYsrQfu+|OM d+`Ppb@IMz&2~X~jhM52W002ovPDHLkV1jHxpk4p~ diff --git a/packaging/android/res/drawable-xxhdpi/ic_stat_notificationicon.png b/packaging/android/res/drawable-xxhdpi/ic_stat_notificationicon.png index 2b5d206913a3dd12f6d98010c800880e8b819089..67245277265865aad9df108a7a0433ab8e495523 100644 GIT binary patch delta 2207 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