From 9de6b8a78f537ab8e372e2b53b8008fd8185b62c Mon Sep 17 00:00:00 2001 From: Ramadhan Sjamsani Date: Thu, 21 May 2026 20:01:02 +0800 Subject: [PATCH] Mitra: branded notification sound (halobestie_notif.ogg) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Drops the system notification ding for incoming mitra FCM (Curhat Baru, Permintaan Perpanjang) and plays the HaloBestie audio mark instead. Source: a 2.8s mono AAC inside a 3GPP container the user supplied; converted to 32 KB OGG (Vorbis q5) for Android since the channel-sound API needs `res/raw/.` and OGG is the smallest universally supported short-sound format on Android 5+. - mitra_app: bump notification channel ID from `chat_messages` to `halobestie_chat_v1` (Android binds channel sound at create time on API 26+, so existing installs with the old channel need a fresh ID to pick up the new sound — can't mutate in place). Bind RawResourceAndroidNotificationSound('halobestie_notif') at both channel-create time and per-notification details (latter covers API 24/25 where channels don't exist). - Backend: branch FCM `android.notification.channelId` by recipient type — mitras → `halobestie_chat_v1`, customers → `chat_messages` (unchanged). Customer app keeps system sound until/unless we ship a customer-side sound too. Verified on emulator-5556 via `adb shell dumpsys notification` — the new channel resolves to `android.resource://com.mybestie.mitra/raw/halobestie_notif`. The OGG ships inside the APK (32092 bytes, confirmed via `unzip -l`). Follow-up (iOS): bundle the same sound as `.caf` under ios/Runner + register as a Runner-target resource in pbxproj + reference filename in the APS payload. Deferred until iOS testing comes back into scope. Co-Authored-By: Claude Opus 4.7 (1M context) --- backend/src/services/notification.service.js | 10 +++++++++- .../app/src/main/res/raw/halobestie_notif.ogg | Bin 0 -> 32092 bytes .../notifications/notification_service.dart | 17 ++++++++++++++--- 3 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 mitra_app/android/app/src/main/res/raw/halobestie_notif.ogg diff --git a/backend/src/services/notification.service.js b/backend/src/services/notification.service.js index b418f70..c055961 100644 --- a/backend/src/services/notification.service.js +++ b/backend/src/services/notification.service.js @@ -21,6 +21,14 @@ export const sendPushNotification = async (recipientType, recipientId, { title, if (!user?.fcm_token) return false + // Mitra app ships a branded notification sound on its own channel + // (`halobestie_chat_v1`, declared in mitra_app/lib/core/notifications/ + // notification_service.dart). Customer app keeps the legacy + // `chat_messages` channel until/unless we ship a customer sound too. + const androidChannelId = recipientType === UserType.MITRA + ? 'halobestie_chat_v1' + : 'chat_messages' + try { await admin.messaging().send({ token: user.fcm_token, @@ -33,7 +41,7 @@ export const sendPushNotification = async (recipientType, recipientId, { title, }, android: { priority: 'high', - notification: { channelId: 'chat_messages' }, + notification: { channelId: androidChannelId }, }, apns: { payload: { diff --git a/mitra_app/android/app/src/main/res/raw/halobestie_notif.ogg b/mitra_app/android/app/src/main/res/raw/halobestie_notif.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c36af26a7d806568015c68ba0c124ebc9b7f3d94 GIT binary patch literal 32092 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

5u}cDJzK@4H?2j7TgeV{at>c}qS@P z;enD|Wk3pNA8&@3_cdJkoY;BUO{BD*q4Ht|iYmq|h3(lb+jM{!nU;A-w5s%%%gO4l zKb+qsps|PfR|MwAZ$EQ}jqtsR4o)4DiUj-rkZ%4dZ6!|?34ZnQ!$+jFhQ!Qsr?P_^ z*N;nhz0|$&D77BOons~m+o5m@>A%#?%zxxeLidxLu36zl&a{$hYhdf1xXFH<`|RV^ z0qM8&DPFlf2(kAU)?%-o5VOt)o#={1&KVdLfmn;8V{J?%92-9Ukh=5H`xJqz%S2Cf zi4NnC+~3D3O0YQz8%|K!KT*=>hCG`S>T`oae>I4t$x0Q|f~;)DPu`t2tm7(a5VAFqjg{_fiw+tr(4D@ujiIO*vDP#BCr zqL(SfLtp^c9v~rP2mY}rYjr0{%7I>gmS^?x%SR{0O}3;=bpSu(9yF^q{i_L;Ul&}w z6OF~n4*{OBgW($pUIk952MSj?r|#zanrezLW~wR`yWX0(69n$+ciN}53<*{ zsc`iJ?~k;Dl<8`Hj&_48Wk>qg`GZ+KDLu{|jJAEhUz0T9$yFx-nA_I@IE>~pR>>#6 z8^S7-wQmDc$tSKaM~@qi5pzDbYjlPh14O*!h9$Z^=bGkJ>GyDV&=imG5LQtnAENg+ ztAsc(SES`Ie-=in(7pzHVC>m;IAl@@((0^|9j5AEp>pf1d>&*-l*vs3s6h)jGBnjl zY)(zBc_C_Hb^SaTndq@f-Rj%?H2TAjAi()mxZdyHPsREZpkBckdiHo0A%<_A3C!e^ zHTdEJx@P{gZ_Jv}Pr{QZxMf|s3u~7+Q>>>*oTRWQ!k)!pOR#5aI}?kUF5MW>-TaF_ zA;h2V?td~ruXumY@U+(+SMassVInr(1{yUT_H#Y9`&q;BBLi8%bsmtuiEXZ4KwX%c zzQHbj&SKa|Iq>kkBF4dM?hpVt#WtE&mN6$lPc05&iqv-|&)V+3IJata!ddEneBeUJ_K+dz&-jUc^8`asWlL-3MpDJtUZB1q3!gO3-wwH#L7Bu zs@0MrUDc5p*=nOIO=kjJ$DrV7TA+tQIoQ~KdZO&InPKteXwLPzWKl(vTJCC(F!XlL zYX2r2$5HY`gC*U*%99t zTfZ$XDG-~x>QcId0cnC-oiN}T^r8A~l;uWq#QCsznO;#bNGaf}RI5>f)aec5xfczX ze_wzIreu&AKEPmDok3KtBSrM?IR>ra%o3X5?ZVFpGPPY7f}WTe2zryAL7SGfmB;Br zELls`2u4>3h1kbLCJ#Dl9ugW#{GmqO?}6anj`#EjfSH%AQp++n0L3MG1&6JWMTDQ? z;q}?&@e7NP?z6NAV7&SMmN?Qj%fw-1Yg!b6}X2#Pz~H zh%@MXN67~W!bvzGwugd~_Hj_)k@5}dNSg&z{i!|kCJ8Z6+3|#@;BS-g)>JF}14LqeA`~zlPaX|X+)Z(yVcm0lQe)Kq&a>FU>@2N-YyQe>RH#)GW4t2_N z1FvQ{pSHXDvIFt55W+P+x-ZPAW z_V4Zu=z}nw1we9z+t#ubV+dClhfJ>x(T&`#<~Hi@tkz9uKY1|oWf-d@do{B~Pl#lt zE81!LwvtBfhRmJ9gR-ia_p_G{aSxjt5U<9-X@?wtUE!K-@OOqj}D~ z!}CIn7GZ9DC2APh5V z;nyWJ6(n$*0fH(YuBgeeRiu;7 z&GZy5os#=qY;yBejPLPgExj1Z!gH@mPI39pY7JF)5=S!Iw>8Hyne>sQAadNJG4+rB z9f@kXXU)RKQ3{b;biS)mw@h@Qy`5YU?^NX)3{&rr#(5md+{5JQ0ep{sd`t?@-$dUD zC3Nvs-b8d}cfURzeJaxt;GXp#pzqU>7ndx7l>h@>-TUQs%cFI${telhrJK9mm7{~g z?)k8UlIvtq5voPEMB+`;-*@1TKR%cALp|HivAxxS+K+nJSXFHyWQ3rSqHcJ(Av_N5 z0e(0{cq0%^Qb^s#gynVhBf)(AX8{zbw5Dw$h_P5}!ap_&VoF+MM2=~Y!|Y)_|8r^c za=JU)S%~@7Zry~Nys|4kAiM|HzZecBk%0M$_&-?v2a8*(* zQ*sdJhWCyDXkmHtdyx;JMC5);1e6_Bb~~gjZhC-^{w98z6lp`4dr?TS365x9ADzJW z5Ef8333uT(uS7V}LQD5*A`6N+R?J<0>fsn&v8!hTU+*oCwd&paP~rmnahlxH6iw@v z)ZB>qZpFlOi0R$w}?(ik04E&PR8HDU zT>_GZyHxQZbv3J5jCirHQCN(BWgaOMWjN3Qtsx@u)Eff&e*rWI2i3HUC1X@dNS|um z{(ck2#o{PCT39*f4Q<;*BZUcto)_p2}6bJ*|+6ab}B;adkJcU`a;c3 z!nG1Umh8j;5MRf@XJ3`m8?m+N3Ne-?U`hK2nR};W1W$^|$d-GS@Di6+JK++cMfH1O zHa3%(>UX$hS*=iRy1+yyQU^sSmTuN-<7jxDZPfa{cAgYU&kaFjV|>nrS+%6un{=v| zg6#u`83$c0BQk}|i73^bp3#s4wE)E`phfXb^jPfzzBu$c2Q>u^ zp#$|P8rYo^p%s|+DqNK#tQx_F@N_HoB^0HY+{ScjeKtsY8na)>_ti}4C2bi-Yo0Up zR*4}kGsd9zz-XaUv*hRjH#M=Y!>jKjBv!29>dlrr6^cdBrl{O~_WS^!+}$sX$0p{S z=#q|TI*Fi@?Y49)sv65cE;CSpTvkqzMVdm1)p;TdFwts*d62M63t9u1V*BbF;Z{3# z!Ul@WJY#d%%BGj>!l2-Ai9-KF3#e;oMp2?#ozG=%@yGy7b|LIV-ag?rOh-ag4PXH} z*Gcn2wp`e#Pkvjmmo1S2lwznqi z&5f?qMR_gYTNyF1*Y!mQ8^a4cuTo{OvFfi6ZZ&(j;xwOA4u^dlo=98_2Pa-&;MCr- zi46@jFzLx%c~*{2ScY*m^MUiNt|!a)_kL>bS>~+a=MS05qqoE8XQ`rX<(ykhsc9`h zm16j%_AEgt_ityo!o4ORwcE8GXw59aQo3n|G+skDVz$8ng`^Szw>fJK8|^1;034ak z2kyt-P&rVpa}s<S~2kg%yUf2UxwAu z0z1TU39hU<414C2`q;_ww%k)moZ}d%G7RCHW2;-8K`c3I$|+~a-;-1EFO@MX_Ui8A z{06p1Op%NUqy%k8WyREgA7>kEuDMU0wLpP3t#EmY^h1gnj{}D0-v8yMsb)<$e46+F zRIJ12?K{oB#So)(K1$=I^QhM|u^f$lo(RtE{&2CuH>3Oj-V)bXSa1af7v*#KN}H{f?|l>sJFh!|WNQ75edPJ}Dn zo*KIb{zRpE0POLq2ULZC+?}&0;5f?Z=owae`O9lMtPVeL_`NiV%YK#~s^mb|0n7n8 zg)eyR;BEj$axx%k?{k>Q0aqii^=9AU^5mCFR#qsTkT4&t^(X{{*DLtHM*^cUzq{jz zW5w3YEPBB55pS>XOHbhyhudF-UjWSUxCn%)OCZ?a7SJhiiZg50lp^G&!qP0v`2#BR zZewy{wzKxu0mSX32Ao_j>~e3uO5l=@GnzfA5^Fb&Is%6VwsmEOU-`oKFxWlORsrM< zBLv126)41uJ3vaPvw)rr<0~RklrsKb%q|N0d8`1Yw1lw2JNIK9%;_+f%mL~#QKLHl z4v?k3(XBW7da>`iD}H>nf{ugZJ=-78{vIw|Ac7#sp9S9qJ@n)M_i`hL^ast?dFnyI4;Tx46U$++{O{XppN0bL1+2q49KgVJ|ItZ?6H201 zNNK~}t26%;RUT}w`U zrB5R>h@D&|?Gey9SH*P*fS!)S-^woY5WCRM4dml-=6$Tq5^2Ze>6)zeld=HqIV}Czwtw%+|lr1Uw)+^+-UxF2s z>$1`I_3haCb6`-CL~`04KbHXSp2+vrGiCw=-q`gj-cJ{o;&n3=IDUTs0hmslfNF6( z3_{`#Isij!K%3gg#1%kw06^3SKzHCm;D`bt=R>)=0(HOCiU7|0c>^WD^3{y#5zP6= zSGrV#FdQTlNZ9+mX?_(HN(09q6Qe|F6Q7p|1#w&eb(^;k6Iruz2^|<4XKOEhp^U&& zB7GHSM6z! zvk(vl{@B&L7$@S#Op58A2006)-p^gqu0q_6^91<%Dm>d8=wz86RU;|JIAc3d< z3*h4htRkQ|pKE$S>yuYj(0f!qrvrtPwi0hsk{m9xAXY?=vWs}-6hEKU#H)KfU163x zlf6fqn?mU7g#tvVQa)*mJ}Gj46V0PK1R+a#?QJ|P`7XY>wpR3C?Qe525jR`IQO6h|MgO*6cENrId2a?`i;ncIlVE}%} zWj0>-G@mp1cuvR3i8JmmfB^u2qv5NV@DjinD8R3JfWj>WL?@rp&P;Z@ zz5XLGjjKZR(OnUbiK&F;!h22CY`4i51ihaFK+5ljy^{d3mU~75_b3#q*}?#%a!`E*D{{`p?vw#HDa&;mhwH`)a;) z??i=Cn3EIM(FO!KVV&{PfEAQ4$1qGkQynrGJOT*-3r<_T3P3f~kKiRd2!PU@0Pz3L zLg%(_VKLql(hfx)&O>Z5>=+xJO9=~~N2C*|1Gu-_W4@P_^D>%GV8C`w1r*`E-DTYc ze|a?-@nRyPgG*J*rs)ix8gv|dxOz9jVqL6$2%>*T0N$weJW-tE9y|GXPY2m3K*s$A z0000u7Z~Fb^Key+aoEcOJg`6=`a&ib)c9Ee(co7Nz?TH95x~a{OX0w~y#UY>%bgrR z$>~s}#+K#J|C10+)GrN8cOcfKWNZ$wS4k>~6tOpz$&~XToBGp~8)yQA$UHhm58qxG zFg%3`;^dv0Uf&NTiSF;}fMPA4LFZz1Qv)R#L)zhNZ#+yz>9Jnq5(dstq7NUs1+YKQ%>~$009100-h4i1qu%4 z2e=Y&0RT4eX%1io=zJOsuz|qM0Z&1)y4uKNtgGd1)tuKrS@%M+|DY-yo3fs0^X?Agvc|^rMUjFSdrd80D!-D0nY?D z7Z^igK0u!Un*kg6s-qnMY@kqy9RL;}@p2SafG<-5j6U8d3xFPs#uNa8<^yR_SpQNe zT=rk6DHP~hPeDDzIulC?p;VsV?~cdL?xF$;^G792DCzgE96R7ZJ2GMWPymYa9001@ zyVc?zYB&)}r@UTFX0oa>DB(FF5K1W&(>+Rcwb}?6{&SpqRZZl{&2!^3J_sRQf9MGS zK-V%3V;9rQh8J`8GW1| z0H@vm`ncJFJx&)*{q<|db$kF)G;gvzEacW>!n**zsP#O|Sz(>Q=a<=v*Zl(s;7|7f z>^YpPV+{rU0h|L4uz46c2mp+Uu#z5d000}n0)S!(@Gv>RA^+Zp1t{$Jl>@7Q-v`tS z2kXwE5{eF80tT$^Q=%b^m9}@)O5&jQZ);Gx$IAr#D?Q_9@Ld?z?Xi;Mltr~)+V@=ju zXB^A_c@Y5Bs?&_0q&)8&0GJRL%|+EFWBHkY1nghx0Ehwr{51kjVhQLuxCc`zgn3VX2t3I>3D(pq97LKFbUVgZQvO?<$?;Uqr>5}@BR4$wF- zEQf&jgW@VB+8>&76JKe+?36pOwsRyZ{xlsx!ls&{0vJ^mNiD-BL>1umgfvC*+)d|% zkm-3#xJw0s{c-q!Us044002Zkt5G!osBmi=dpTU`NV|F*12ls6FrV`d^w1daks4KH z`c!cdWFi1aGSa=X82z9|`3M8}>j%GK+lOID7gO>`nI*lLEfi6xfBcfr23l=bTtOo% z?*cC{4G5sE^m^tQk$@QhzQ~QdsCze;;MZod0=z$f06yLT`hW)oKnV&wfEU0+Ve>H3 zE`hoY2LTQS*ns5aC|ZCI*A37f_h*P?5hv@d1Qr0+>JESv5 zak{cnl=jy}YAHd&4lXMNLWpac%9bMSdA^21K{Wzut)i-Y2xW+=QeIVwK@gfk<#$vC zoA3o!W3q=HIrv~mwxH1rDo|RE14f2-UwL3Ngg2Rs@Aaqu*1M4p<^WB|a|bses0=0QKcLs z;CvMi1^)ov0uCB`(Etw)4*+B1b8i7aDhfb{AlPbUjQhP}tI*L=y$^w%OfNeYOL4cX5OKb*!|4cGvH0RZ*mhRd2cb(!VraT@J)0eA6{ zp}&3jVZ+->yVe0yJ+YE82+RTi-l+8?t$UG&0Q>j!Wr zfd@Qv0JcOE5Db!eAmx1iU%*Ki%6i& z5u)mP6%I_DaeA?)6+!q{*IvI%Uj~4e{C^=LFeSROJah5uEbB((T&S?<-0$Uk-7C>w zlC-`FsIZf4`OoX;q<6Q=00374Akb=O9_bV<%8T3yKBOsUFUO1aYmU@zTR_0Cp{93t zy?9v$<=v%9F4|RF1rrJY9;q#e7WYIeem#%55&&oMe*goXdjQu14-SASDEJ3(3*ez} z1U7(x1ry8zO`GO=eOggy;AU?EeD!4{03yB#OGzMsWs3y>ApT_Gc*LJasa}Zwtdx{W z+RjK33Rv2AsYpa?Jmm?X;;Plq#zudM^6qJ8{v|X80O(?8uK(nD0pOaXRicHl3^9^a<1#%b|;>gS*bAZUz4W`O%=*gXh}Jwign8$jVj^!09t z;=iB&zGn)M0A_h5HUI!(EdRIm|1d7YROb4d9nV7uZCgI@;3*49xr!ll5-PY5@hc62 zQI=)v0>GMFS2~{3zf}`HsjZL}>miHe_r|&s4*h-s3;+N;xB-koLw^Z)0+1+d1Xi^{ z!I<+bVJkr1QWyZ2ArepqP!I6fFNhWZkS^pvsVb&dp#l`MIaH*CNVjc5C?GAT7E8eJ zM-xye&+8#XrR`m{5dfJyhL^)a0oN>eOdsn&S~mo)*lnCI1Xpf#V+Dao-TWv~0O51N zCOaZT9wPj3nh5{^15BT=+Hyw;^QUVao;^6~ixDkBHoOT{l*j8=u;I#aw-Cwb6){NE zFnlpN%gD(D0N_Uec3bN>kdfww#s~^}M2x2GqX?>bpA%G!K)LVedPdCv<)A?V0e+cH zP!{Wf%;~p1J!uDB6aE1J4F6;TCMO;|01Ln+wh0AT0?eU6U*lUss4veH0KZ-u5C^`F zD4<|#Pcs%o1j-GDN&v7qc_J<<{IbUhRlI+?L5cd3=Bqq~k|96y)&uE|HOR8}o^~WwpB~pSiHQMP%HP~PfW-3(PiJRS00jHr0RR91003W{drJfW z005pGuJ|SP@95*v>F?s^-O|+A;Mv*Q)g>k~Gw0XZ&(_(|($&q>$<)to-iS>krO)$w z?CJA9QOc5&)}ns^0qnn*fX|6z1T}zLgaqIK2L%i0jq1WVVkpNHiURJRCIEO3y9BnR z_U0%9kOEzOnH8MiXCoq^(B&T%aV^XTHdU4!r4R06qLfh0 zb=zj9E)0Vv49ooOlCrm`(gHA&T?DT8&g|l2Y$_7_{{R5oK&+dM z9hB_=?L0tV;$;={U=m^qfScbBF!<&1E0XP}%K4{{UQ$S}+fAh?rvIIsPD4D1*?LN$ zpeQsMkB^tMm8uTaTe8~Y;3>Oz=Lh@DP3w552V&!M|0<0Tflk)$_sE)T8Kho*L~6=@ ztHUraNRK(#S5>dQGBfO2M8qTY zM^(~WTeK{MKs%~0rxtn&|NGGr1i%uw6b~nu6GQBqok7tj+3dlT0NE*Zc+mbR`$NHK zweP8ce&%wa1KzkCAyLdvm?)(n90ZX>C#*q2(;QA>X?ot9&l0x2~Bgukngu>@s z#qm(B+jfFX>~@}x?8IW|r>A*92Oc@x6PbD-Vg#F<@4mfaVV<&3 z0jdjkt(;iy6F$@F{pofzN4lPl6*FDYwL8x@*@)#$o9BC)jcU56knm3x%yx6?KYpgF z?Zz@XpJh5-D&M*h@roCfglM1>FIh_ub|Rd{sZJ5i;&-e8v@`(Z7w_jEssR9?${#UA z8ej)!?KSc!+Pz31%O_!zw-sNH3xd#yGpulDy{W7@mwDRQQ7<^HP5a81>XA!Y9~W^f zZd3Q0P%DQ}~&Xkt{r5K=7ht)t0`vhM;7NWcMzWANXd@Y&0rZE&-tZ66! zK1p0ERXRkp2puXI@4cOYtri&oYV49WXfNP0`1b!Q2f zUiQM??$Rf40W^GG(!U!M`tQ7%1=Y!$MKz~kP~4fU!MG9@!}pHKy41uSsC;#>&T1Gk z0e(1)UJB{(K?$^}5c)m64bL5*1H#!0fUdGj3+;rW2irO2rkz-)XOCIa9C6uv(LUw0 z*j}|xymEP}rg%&~kSNbL`4LoNelWFoM>lUBoi}i+PPbV2p&QZ8oZ1Ar?4RtL2jBV@ zmfxvb`EC%c*UDFTnlu<4CFr6NnVBcW(27H%{cXTOn504gX%^l)w^$PpXPay@BX}$- z(u2o>YrBCuQRaqZzrU#gW4E1M4+(G~G+)o?zUAxDJKWOxqS=EjCoKhPULN3{Skm&h zX%>c@ayA{r)u$fXU*`3~RFwfCGiB9e zaRZscH{IciRf@_ z#*^FS!1iX9UWh)pD;94-59sU1O@jw4b0T%;@;8VMN}LXd;ORWa=)40oqstr^8PaCF zptKD;0A8qTjzK*zgR6%m_ZU7KItVAd7!DahG&v>cee0n1WYGSW40E)5pD)eNO&9D| zVbD#AZS7f8Fx!`JK20-1iidQy#;*h`kq84QgBBZ@8_+S z>bS0jsC3ZN^g&hYtCnLgiJ&Yf;}-y4sk=-Jynz5};d(Y&Q2^-}?v-QVm)45#51%sT zydB<5%-q{}U9U_o#+Z34x$NRb^12Zjmh#DG>>9XMATxnix1)a(j>wzaC^)D*X{W{= zvI3zIr_7I5YGqx*(~a~U~ z3E;i!C4pE;KM!fzCKa_#wAPCD^fS`u(6@os+%o3+;ywM-e7@Ut=~gwPEt=bGiBvpZ^kXlA)Na__XU5k6#mwR?Va zPHt}ufno6E%oP^{^=Zv#53|~0t%qS~%%YqoEx{&CSG-zl_P&ehMqAKi!6JxKwH{{Y zt1pZ4ax)krLm`@~=C#X@8R3gVFM9#fpW1s3nL@1IfWGU8JUKx)H@B#Sb{p*|gwk4B ziADc01%L7kMRE9%Jd~`J@MDw-o%$_d3=b#mf^R$SRJR^2$mSQ9b$!J#z(%wJT+W%5AcF8A^mP;E^?~{UfcmwdKINtAoZYsc zrIm&19dP%c|EQDwnN6L-Oy0vO~H)l$JD{&rlOW|?G}+qvJ4)(HUG3JM^!(j zq1qNW6jO}3@JgPAp704Y1240*jo=Mom8*XSyHAN%D~N+EL6{ICM=qtv45~FOOY%tl z$qvw|hQoa!(XoB1wh7|!YIGM!0NxmU6$pp|$*|^KS+BiS0gP$BVos6yilj%se?1xa zaqaow)u#)V_s=iA+_FACE5WX1Gkut)BHA9=H!KNbcv{?qGKm9R#64U&HOk%$>%bf- z2RmnXplsb_WP={vdr$Suzc2JC%!2rLqs=`2Oko}~KPGeL6yra=1lJ*mnDC}n*OqTC zl;U$p$wgUC4M>?ynJ(eS53C5F0_0L?HLME2l+9mK%DARTaowXrdlKR^RENS6RiuyE zlwBRV&iXE?AvKaDWwSzbTr+fsPIB(^LHPD7w7#h6We6ru3 z)L{}%`pRRnypUG(^xO7jx@Y9=4u5`PeW1?w_pYU%51yT#Ng zG_0cxKNtA5Wi1||7}B8|O!O+dxI$vtBHcu%2)_vz(G?HX-H5(XYH z$^cqyw-`JYI<{&+uBp~~E$R$v^9n|n$O9E8ZL}YKps$(?D_{&si4AlF?ip|btAW{J z5hX-aAA5V=X4^}kY&;9pMF9ZVD%q1)k+r4WES4MjU51fr3tLRy++Q)Bw_sY0of`1>>k5Tf9ypMv_fjZRXkZ{X_qe;9?4+qgqESjK#9nLgv1DjU zppoe3a{_W*7XAKZ<1l@_3nz01pPtf;I7hXYZb$#EJz01 zF;ZG>ZugFZ%3ae*0M=JL(}dDKHzsi3`P(^%atP?;h5=*R%2i4kpDm^N^EWfH(p$c| znbVh(!G=wL^V{69WY3-0r)wP)a=A)tATlnQpyio-6r##hNbGchsUnj0m6I%jY%X~@ zdv{y1I9jWXvxk6XAoEdb4znW{-{CaHr@^7HYSh7tCKyTevCvRdm^B9@V;p|^OuX5e ziLcaGdZQLhCE>?RFgAI#zA0rY2E-2vD_hy!~PXRE-;48fg6Q z-#{h{r?292l`Yj_ZLeQ{tQMF1y>jR|M*G_X7Nx--h7-R6;#q8ZS6pH&WUz*UC*}M4 zA5T5?F|^2@V|zeoYud^#%B2-kyjQ!N@;y(C-CW$tjW)fyel`ES`P*@Ave}#)3>44( zsCC$rjddE3F%3z&1)+XQ*+ZMIHHF8tb<`ykliJKkL%vVl0chL>-n!%cd49B_Xh4$b z&b_~vSOrk=0nLxlT32K6z;I9slaip3NF9~df*JP6nPJ!e|IZ9&GhGOX6Up}K)kDBq ze+(=*Z6t#A-QQUM&3}LM_ga%S9VJpyeX2yp9q@+p|H{0~u9oO=obA5J5u6ru(K@Vc zdat@#;>xl!8w5UCd@d#I0&=eQEt4$ucEgd20NSz2FHMZ3&=fxPA#os|h13K8=tE_> zw=yREH{;E?HFe#q7OP(se25(*mX8q5v^K!_$h@3yO{Bq{4bxOwS$1T2?+Ufn1V{Sv z>Qd5Kel0D~t+v|XU#9S(hw16gf>__i)qH$AvB6<46@fesUA;RiSF@y&5LNUgF?~ec zH!gd)*k}OEs!=B_+3R2Q+>rNa;m%FP+))pFp0iyNRP!^&9s%n(00+ldRJRh`w=xx+v2RB_v zF>D5o{7UqEtZTAA%>`AnD#A_4kMm*apI2R^zpw(~+~ZcCn!c+wp^7;XM8pz=S-2UZ5$=`x^)uhMI6tFdu}*3L zTveFg?xTWn(1iPLFZVMvIvPL1-PFWK9a=k7lIL4%_bL6zQC*b>-O|(Ak9+A$5`Zv{ z`Wpb;z?f4n3846-N8(L)B zFWNP_$<;Vf>N;Efa;v=4DOf6*XG#teWnGat{j7%Ndxcsl0WGUmS*9A_k>CjKzhzxKM$A+LS@cg*0`$ZL+Ind1&$j)j<}{Qbpn zMOk%~*5Z#OFJbau>U2B=W+#!_W*8nYlFI=PkRC#zQ=3KEMf@G=0RBjPj7RDgFoEgT zNk5hW#<40^B>IVB;OVAH%ge=>vfug=dC2zJpUKBt|Ah0s(d^HiH2=4tUxFq}L=#yn z?Brx{(8H6pj!|URsCJEPvR#uP2D`d6sSO1Vx-ZA^(+VZWUpJyJEm?(&D?+GgTX9&O z*|-rC{}9wjEC4aXa8GyZAljscvi=)p;>itvP%`Bmf}NHS-Xbv~@*)i$>YpaE>A(QKz7}pB7@wV-fCIlW?{215BuIOxF zxL(k^G6LH2{Up)aFU`RB=G?Cj#(~r0gBkhn%BI|SEv+L`y zC8HZFK8eU5lXnXNW4(KpDK3Wxa(5Eh(6aoD_xD7XIQYV3tch#j?!T);v>r?9l$?o2 zxxWxgPFpgQ7=n`4`9V#Ge>$xV^2HfV2>&*Js-z>T9YM3<85z2yVX~hx>@@PVJ z;qSfQP#9iPnN7jLnL@(v9H5xv>kcZErYmWjoW4bW@T7bFwIRxQ-%uU^en`C4BjN}c z!0@(2Ab=xbtkjQvQJX|&;L7OaQ-Ep^{RPo;b)((~e*Vva_D~+VP19?6(#gU>7>c_K zgP52gE(nDch9Jjpv^(UU&PS|Albu+1x)l#v3Db$*l)Z~zAy~(zYZ%<4;$GtOy`3Wp zp@@oK#w&WA5uBjpeAD1_7%Y5RFD)A%m9AMjc-^f-8Z&^zfm+bQ7PGe&0s;TiF-^Qt zWHN+K$y(;E)FW4|Zp8JUl$j@Nz}T!3^q`J!sS1Tt3ABRKAMre0Kq(1KXQc+620lnU z%NgATG;A4`i_E4Qt97wyglP=};}^5u=FA;zdEb&>51#w$V1>4PtoG=u4@FU*X_Ko>w{u7}GCDIfn6)A?26aszqj;=Y<7#2Nbc2LQfEypETc zBj5y#vSoj+egR>HVO5>>(>1!t$@bHqX;Y&LdY4Z*a>jt3fRBM8ZuY@$N$ zqT_}r{0fMQ!U6A-YYDC|zPWk>uwgRR*)$NV8_yN#E_BRh8cw>!&Q4yAN6yeDTLHdE zJjYx76;utY3|AJD4*pP8E~&)x%28l%|BE>XGGElwwC&<@;e&+jkM<3@xkG5lE>&Eu z?vzu|nBg%D(RYaVL9p&lnovhbnJyU!FguihOGy>{<4#FA+Pb^AVWSq8Qzb9ayYtCb z-Yw~0a-?Tn4a8OgU|B;{rv;QS8IdQWke1urF#M?AF2`Y~cx&;<87Zp;$el$n%sMw$ z7N&w4Phx{Hm^j_>TZE3|=L41I9BPe8-z8KyPt6`yXbr@O_EarkXF~!WNqnxCm?Pi- z!!27w4j!PYExA=>$%=u~p-UGYJ^a`uQ?3pE^XItaBR7*TukUj!yCx*;o5wIS_gwKt z)zp#8MoH7fXmFQD9TzT4IC$WdqYb^^U87#|p**)p4^=jbV}Kh2lFcaTw<)p*X0W=* zd2q{#$iFRnVFgkXnlp*Wj+zAt1#Ji7)kHlw;wn}xc%4Xz=>CPfqc*{LY&*ZAKq}8m z_&@%xYPz5W260%o=gLaFKgQi2jn4Yt%Cxy5s8n>|bq|@}O3WMxcOtgo4%qoi zq@$P`>fm+B2IvfS0gN?9-;c5@OM$c7IBz`~dhfy1)KB9FXXEheG2g~p?`d+)s|8+S z8%qY74qFu7D@LLsvZ#XUo?eKink*0;ik|sxL7SfU#dBd72myyNe}v3BdbDsI%C7VK z^%j~4`K4(Tu4l-Y)k#ewF)N$UpKaDbP0rH_57`!r%bp&{K4{^*v}@%F4g@qz!;-MX zoGt5pgCvF}sP0i1;388^V}K^|*DL#i2qXoi#mLSzl6@{xCqHvtco((*zy^M1{Qa0` z*{vp;Z3{Q9Z9=CPP!%Zv006Mn^5DCSuigf2Ir!w=pw~ZczV?3e^}o;U9(*#DIv>oH z&y0t3=!2@y initialize(GoRouter router) async { @@ -64,6 +71,9 @@ class NotificationService { channelDescription: _channel.description, importance: Importance.high, priority: Priority.high, + // API 26+ ignores this in favor of the channel's sound; included for + // the API 24/25 path where channels don't exist yet. + sound: const RawResourceAndroidNotificationSound('halobestie_notif'), ), iOS: const DarwinNotificationDetails( presentAlert: true, @@ -106,6 +116,7 @@ class NotificationService { priority: Priority.high, playSound: true, enableVibration: true, + sound: const RawResourceAndroidNotificationSound('halobestie_notif'), ), iOS: const DarwinNotificationDetails( presentAlert: true,