From 98cc7488e69000f0a5ae71c18f91a45ddd0aafd4 Mon Sep 17 00:00:00 2001 From: Voltra <25990549+Voltra@users.noreply.github.com> Date: Mon, 27 Oct 2025 02:54:06 +0100 Subject: [PATCH] feat(android): quick launch tile (#2676) --- app/android/app/src/main/AndroidManifest.xml | 20 +++- .../localsend/localsend_app/MainActivity.kt | 15 ++- .../localsend_app/QuickTileService.kt | 101 ++++++++++++++++++ .../ic_launcher_quicktile_foreground.png | Bin 0 -> 3301 bytes .../ic_launcher_quicktile_foreground.png | Bin 0 -> 1905 bytes .../ic_launcher_quicktile_foreground.png | Bin 0 -> 4713 bytes .../ic_launcher_quicktile_foreground.png | Bin 0 -> 7712 bytes .../ic_launcher_quicktile_foreground.png | Bin 0 -> 11052 bytes app/assets/img/logo-512-white.png | Bin 0 -> 6234 bytes 9 files changed, 133 insertions(+), 3 deletions(-) create mode 100644 app/android/app/src/main/kotlin/org/localsend/localsend_app/QuickTileService.kt create mode 100644 app/android/app/src/main/res/mipmap-hdpi/ic_launcher_quicktile_foreground.png create mode 100644 app/android/app/src/main/res/mipmap-mdpi/ic_launcher_quicktile_foreground.png create mode 100644 app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_quicktile_foreground.png create mode 100644 app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_quicktile_foreground.png create mode 100644 app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_quicktile_foreground.png create mode 100644 app/assets/img/logo-512-white.png diff --git a/app/android/app/src/main/AndroidManifest.xml b/app/android/app/src/main/AndroidManifest.xml index b9449e88..baa30b3b 100644 --- a/app/android/app/src/main/AndroidManifest.xml +++ b/app/android/app/src/main/AndroidManifest.xml @@ -1,5 +1,4 @@ - + @@ -14,6 +13,8 @@ + + @@ -65,6 +66,21 @@ + + + + + + + + = Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + // Starting from `Build.VERSION_CODES.UPSIDE_DOWN_CAKE` we can + // no longer start and collapse an Intent. We need to use a + // PendingIntent instead. + // + // The request code can be used to identify the pending intent + // request if needed. We don't, hence the 0. + // + // The launch intent used for the tile doesn't need any data + // thus we mark it as immutable to ensure maximal reuse. + startActivityAndCollapse( + PendingIntent.getActivity(this, 0, launchIntent, + PendingIntent.FLAG_IMMUTABLE) + ) + } else { + // For any version below `Build.VERSION_CODES.UPSIDE_DOWN_CAKE` + // we can simply start the intent directly. + startActivityAndCollapse(launchIntent) + } + } + catch (e:Exception){ + Log.w(this.javaClass.toString(),"Exception $e") + } + } + + private fun getLaunchIntent(): Intent { + // Getting the launch intent from the package manager is the optimal + // way to get the proper intent to launch the app. + val cleanIntent = packageManager.getLaunchIntentForPackage(packageName) + + return if (cleanIntent != null) { + cleanIntent + } else { + // If we can't get the launch intent from the PM, then we default + // back to creating one by instantiating the app intent ourself. + val dirtyIntent = MainActivity.createDefaultIntent(this) + dirtyIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK + dirtyIntent + } + } + + private fun appIsAlreadyRunning(): Boolean { + val info = ActivityManager.RunningAppProcessInfo() + ActivityManager.getMyMemoryState(info) + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + info.importance != ActivityManager.RunningAppProcessInfo.IMPORTANCE_CACHED + } else { + info.importance != ActivityManager.RunningAppProcessInfo.IMPORTANCE_BACKGROUND + } + } +} \ No newline at end of file diff --git a/app/android/app/src/main/res/mipmap-hdpi/ic_launcher_quicktile_foreground.png b/app/android/app/src/main/res/mipmap-hdpi/ic_launcher_quicktile_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..511a86105dd7295115e0ecc5f4ceea86802bef7c GIT binary patch literal 3301 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 literal 0 HcmV?d00001 diff --git a/app/android/app/src/main/res/mipmap-mdpi/ic_launcher_quicktile_foreground.png b/app/android/app/src/main/res/mipmap-mdpi/ic_launcher_quicktile_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..6e8159431a9a1e21400c794048c4b09687862d44 GIT binary patch literal 1905 zcmV-%2afoOP)a4-Z?xN(s(q_`qr7Xdd1DNG0{(x!A9QoAu2{}m2tjByvzr$}QADMPAo z5If;G0wTs1cV}C_c2}Cbk8YLdzPEeY)#}Ht^gbXgpWe*AnbGddy!p=P(j~`n9LI4S z$8j9TaU92S9LI4S$8j9TaU92SwvS&!*f~5tzS)hUZ+lVn-Mc7y7DCt`BuP;C+sHnP zlH{4ae?%J6l85H&EP<9)c03%u)`lrdVtKskbZ%;aL+_gUMu{|=c>t{~NgAgvi>Gkedg|?|!>tp^>8^z3a+Wr1*Yv6BA27|Bd|9ii^ zeEEs}dyUucr|D+>evHAg!$a(}RN# z)OOiCZMCi?qftEV3%=o_+HNI>?e=aw8vQX{L0}E`&Km4JwO=+|lWVI#`1p1(*j4+j zq8rDztS-inK*cKPXSH7yTwDD~!PgsVzZLv>bo7;dlOwH>l(-kipJ|#^(Mggo@Ijpd ze8zW8v(Z?&Z(P(^HcGpvX;zIr{_f$6ItTd9(?Qd0B=iFz=P_s;*|+;kO|vfW1)tQ( zls5gZrr9VMX=M#Cz=qvN|8%>bYMOO}Pxz+(0%h6Q(Iayi9lB4bYhz8gsL?3XM$Xfi zfNEh=YTZ~9@DX3td0@h?_Kk)R&m@8vyOR;zWj-R<78zVW`@1y5|!`-|l}e(~P! zfFC+>d>@-u2v;?I8PY!O+(3k~5mHn8#zI_93u(lR#MHJZgAjI;;qaj~%CTmghgIzH z+kXGyn|}Xe&95koU_(Zu5&u-%#zHWa_#7c0q6kb(nd_)s5&k|o`DhrzlaZm7R)UB; z?5_Jz^DhE(M9M%}2%%B7S;6W?LY%HjxT$CTpjA*uYrg_*^3>}Tg|e(8-dTIBVlVfS zECM&nm=S@Hu650SM0*DTPt%_aBcOc2#AAFVR%Qpw=_KxaC{gVhyv9C&P~T^3DzB&M4# z&Y^a-g$`GtV^+H?=;$@=x?ljL{$;^{O4Bm%QoGs`GKTdGebp`thSHjLT`gcQ9>;X!ed2cap^|EGZ3CryV|0` z-*6fjEgbwM@G9w74gqNOD-Sc@Ndw&fr*Bg5SC>~YGjIAnBS?wZANTI3A zD=glzh{s|ci+cKb5t_Jw$zm;wwk+N@Y5@~iCbzQBEfE+CMi;9=EJ}M`fhi!1*xCbI zT!hm=mMI`rkksk*ost9>k~R-2a+!kC^e*Fl6QnGK5qPRdqv4Qq?wS3t9`wzZ3j^j9v<2a7v rIF92uj^j9v<2a7vIF92u&X)5p&Pb5K3z+%(00000NkvXXu0mjf;ZvPh literal 0 HcmV?d00001 diff --git a/app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_quicktile_foreground.png b/app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_quicktile_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..a8b331d245bf60d212b7cac53f712701d901ce16 GIT binary patch literal 4713 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 R)D{wrv4N?6&8;Vq{|9Q+N$LOq literal 0 HcmV?d00001 diff --git a/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_quicktile_foreground.png b/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_quicktile_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..dcfbcc318b25bd467785252a1b9fd47b05cb15e9 GIT binary patch literal 7712 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 literal 0 HcmV?d00001 diff --git a/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_quicktile_foreground.png b/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_quicktile_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..be7d6d090a85bc0bfaff02704ac65e2801c381a2 GIT binary patch literal 11052 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

1Z;8DC zM`@n|`fk&T++19}ltY%U(Z0?321QR9p^UPcqI%Fpd&kEu!NLswLK5hX$>)L?ukB8QV(n{PJ{yVixwQ^jLO>euEcY%Q zCPH)z3i^Ir<{}75)JwXVS2oh}a!0bpTuN&8YN5-?*${SGdnT#@TBw;H;+Yzq#c=cD z(p{H>qyKixaLB5~Oyk|(Z2OhM3_$pyr|pWLOL`<%Pr==&jv?=qO;(aqoG{aSWw;Xj z0jRzNjq~hw{`3eJX7ZQm0q++VCr`3NW%twkHkxh6?d@wlmJf@L>I>^+bciA1ADe2L z>OvvLd;kjWqG=wl%A;PCD8}atFIEpAX(7A z&SYDz{`6F^GG5A(kx9KlEh(<}`hVMvn3!Qp3Y|;~rHa9gKAivtH58?TA zkjQ%J{_gKEPVrIKobUU=-rz9-{c`v0Lc0fW45x&DvKUiCw{0oJ$;EB2SjKO^i()QbiDpCJ;wXh(s|(S z*=7d~b9VV4Jv-r~^6v1k?~32F6V3-R;1`{%#&h{_w?(r_l>X0s#H9AWU}eK%=0|AE z#VXr)GD+_hD~kNpS2-gL20+vk3u@XaZ6(l++u!{U;?T4)XWm{HB`~zML(7VI6Y_XB zM%q$GTZ{wL-SR+XzT)dtrUJ*+s$5XI?>nwL|AEnk(MyH_7`X?{o_J%z?DnFP-Rb`Z z4BC7eLFk|rC&EwZG&Z}wet2f^S(1`MN>|MP%bza{Y|_gxu$N=HFnJbL2s;2vTcaKy z>0RQ-A+cy!*^2oOQ%1t}C)Oe`4e`TnsatZ{9O8c$UsF5>x_BiK3~RDr;zIjbeq*EK zE?D>QgauKrI}5?h=Bg#7Gr=|jG3Zovi^H?6XM%{H>so!HH z%th7u`hb_`q=Lef1=o5{D+JI#2J_Zlnnv(LQx&*xXQ}2^hkPvLEilsHE$bV5%gZH`bilWGD)Bh z&;ZZq&#h>F4_Sv&y0;6Gn)Rmp)#=|mM9Ya}2WGC%BK^wSf};T^+}x}2>} z7CYtLB71a4cN`ev8rmsLhbf%KJkJJ`JMr=FH0@&oWuJ^?BvAr}T2qWNO!ShV!SuVd zE!V;ODD9;BRY#PDUmtBQcXR(6!<8JOsom+tKy8z|=%$~|HYE||w2%QR&^QXTS|77} zM#ShBo~WJr<;NVk#cb!)?pHq5QTrQKdfSwl(Y@BJxw5ArxO_?j#+~7xk-EBikm=0y#P348Y8dGxcbCZ7nM3 zun3EvzVH*V4bu75lapuyk53bM`Cp zB(KLz{9F9JqI>q?fe4t;gOf;wU>I+#rDfM)=ePj?#5cnn{5HU3pU1t3FV$B?(!gJD zB^UL|ofeU+9I5VQkI-s&ZaFHhG!mBN2IXqsGjYY36;NtOxDc?uzuX>mTs*q!TWsTv z&L|#Tk_BZEmxzDm(Vgu}ns@c%o_sO?g`1B7r8O{0rRXTqL7GfVJm!bJ{3||7|8LA> d{`hkWsaw9D8T#I~>nv}ouB`RA;Gx<3{{x+$PTT+h literal 0 HcmV?d00001 diff --git a/app/assets/img/logo-512-white.png b/app/assets/img/logo-512-white.png new file mode 100644 index 0000000000000000000000000000000000000000..865f4565d41fceed21a8241fcfea7b1d9ea26df7 GIT binary patch literal 6234 zcmdT|cT`i!_n-HYkOINblunQq5GhI*G@(e55|EBcKtVuO5LqdU@PGh{w53^)H6Q{a zN)YTU2}KsA7*Uj>fT(~9qJmN-zv%9s-#Op&`}g<9cg~r)ckbM|ckX*{K5yopq&wRZ z39p0uElMQwBbxgw# z4{aCd+zj%z54N}00ysej17sl#fCQX_pvwKj3!(xP2=!C`BRqWw1|$LX71YoS^iO%1 zfd5fWX8|xJ2>xICA5MW_C=UzJ0!_UwTlFB;-&TKk#IXLhR4Cwo6j)#v{;BC^Y9iqN znWe9%_hWQ(99gr>KPeJ`^)2?+H22tjGo>E_hnmEJgu~F2#94kbwl$CX$)>omZ)C#7 zSG(>;AEWC_+AV%QuL88#Ln#F?S_6Y~CXmicl1((Jk#5M?f5CtrG&17CF*5!0f~G7} z8g44xJ~bAVa%OBVvhdo1-+gax{g;xF;ojagoW@^0?f(AJ(<>1p_>aOdaMO*CbH+=b zp6^@znjA7YYFe+av?w;_$QNmGX;^x|ye5N|yOFB|rBAQTE}Dv%$f9`0R*V8sJE-Po z8x|S8am)@$7Gl%ZRRBXl8!OH@1BLfuG^rRtdkrmp0LaZH>q6;{*vT8(W$r$Om-BJo#h1g;{7A2@pfzd16cUV5+SF>Hfh@J)QZxsHt(l@QNdhd*1 z#Mg{Z_xH>?eedDiDEC7a?xsJF^7{0P#mhON8q96Ou{!^xMLy)+pn~4cJ)OSlua=3q z{qcLUi)c$tX?2`)mWM87yJ)r4Sg7Z%kNOs#9|4rx^7%vh&}+mK3c0l{A-=Ha5UT3Q zlFjA0xS5t$LmAdS-$gHkSyci4#mCKKbF#e)i55jU<0H*pp`nU_31vq$SZ=^~8cNL# z)15x`pX6rBj9RNIr>I!TM;Ly8_(9qHI=;~l!-zi1w={+POBNhOqN>$ z*#p83vMHGnvWcfq|jj?2>#dV}+z zUst7^o*x(rSm#iZQZq|?=i|5@**TClUdeiYkDefY6vM(FyL?+WVf(HarncphsiPDk zG?4M7gY{*Fo=A|u43utKNjJ=*y%lDp$#hGMQTZh$*k)IQmLvNEjX%YhV3$XyM8`UH z7=J(wMolqaXT?10{}Ov}@H@Fj70Q|CJlKuM9iX@SKa=T}|IvS`z{R*x0&}3<=-Bx1 zsCCcu3HFlu_YoOb-qfJxZu0dMtGb#qeKM;Gon>pr=HRxgxl(M<&WKMjWK}=r(wbKU zcX4xmn3(7?p9R%!&3Ogqg@_5w!rtRN6Xe%)eP7V0o#G)+wX|VBqzDO9^KICf!giN& zo-*y;kX=1`Lk2%0M+EI1Bw~f3+~dzm#Bll(8D9=f9ZylgnDF?uuLy3N7;oM@r$VB8 z6b}*)=Iwz{5r{MeJdolNK9c{0y#v5&H2KEy^F+R)rV` z28mxIa<5OO>13HnNvl#nhgTO2j{chI7sz`FrJ~7~_jVBND_s)|&wpvn3O(XBq(=NG!X$r(X84BBU6$i;UZ-g9B)^z)UZSE=x)09l5WP0Ze@m1=6Z9R+hCEZnguwpb;i!WMoR|gKy;`; zvxfXSza^d42mR9fQ-QwY-E1 zr?awvdmM^D;KhydMTYZ`&EeFRW=C-(3T8w416kl+2K4Z&%@m1!T%6qaSU8+2X`}|^ zymwByTi5D7lgcX@2u6*w@2u4-HMggCNBMWW72cb&pZ^d)DvP#dpTfc=8&Y-7UwHES zdAere*tK=x9!w?mt`QlXOvm&MjI&8-#Fr;PGyb;lRx!dvMfT zk&K>_j#Lo+7rGh=nii%ne}lv->LecS-v{CYW!>AfpJ7;X>XtUOfqsbQMgE0>#QHm- zP^IFU63a}zUK{k(0j&dKZ7^?9i{&6xzX>?ip|yh6HNd=2VJzPXwif8QhSLfrUW9p5 zHLS1>wkB}8CZcsvxB%vjy=TQ&vMHeFDoHB@p9=E^w8}Em*&4v~ccTEd z3#bUX=RW7OdgGBnjb`;-Nu}c*GJDaB-Cljk$+JoCGY+J_*mu7x>D-hC7qd33G%lC= zaA9&yJ$P-{+6zkjK9Sl>dMWSD**dB_K9Q;(kNb2xb^YM1*swshDc7Za;r0a23e=zy z2E<@FCfdxBG1j(zS(vxu(6}rUy-a(tEn&zK3+)?u{9y7=a*e%R*#_(H<+ih*ZzVq; zHDk~;aAEn)r_s1&rwkeu3srZkXupG%vn|EwfZQR~cF2qDn zoi_R0Z7DlLnw2RwdQ>)tX!P4TPOolG|wxTI?_dGN>3Pqbqs168gU#s##zFr6`qe?Kh5HB0hs=bC* zayk9ANw%6ibeW@-mJ{iH(S$3b0k|JX7TrPe{FGWFL_RBoYecKnh)Gh7j#%Y6qR_r6 z;{A36p82ZG>h4H4gIjIS{61^CIb8uI$F0wX;r1)`T~60KMXxyL2^skh(*9S}=zQlU zfxT4lyzuh<2V$)6($q6HzIC`;1gc?isED&9Hjl10yd%r1%-0$dVs5XNiL$HCpLs_o z^l#LnzIFtz0^BYNR}A(L=6RZ8pFW$sL63$>eO9e$tTQk(PX`wfM=rp<0J* zVU4vrQrQ3kO_D2W@?P{jB#__zsc%=4S^7lT!9%c$Cz2HX^HetvyPU=#ObGttge5n- z@|b!DK~gXi5IkOmiBRGVD(Gszz_?zNSSzu@1EcI2@}c$S4NR^xGZGc*K|3Ke^br># zL5)msz!~RxN-@35e$iq(AxTdIFb*EHe`K$eF1-(tVEmR@9;DbgXpdBYUpBlPMzaW; z8msSYZECdb`rS85i|&RLrxsi+fez!0gf6|$lVsV%TbiV_hq1M&U5gkT%h)b0is(s-A)fS#$+WF6IBna6bHosGOVUO^mb6 z!`jsfU4a{4;CA6`1(N(n8Hc3E5yDB__j_A5=hmA1X4W(lOIbwky9iQpYe}ud&BVUwddIQ?bRhr;?=tXxCcm~_m(k1L_2oFwD zeV{KvkNxx9rH=Wp-~8^+&8q9t3u`J|ky8JdN_U0!NJz7vmL)Y5oZ^ScGdCA&!&JCq z^*uvMuwhcvFCuCGezn8qbbc<78Z!0Qy>quZ zVb2kd#F8h z_1DQwa$BLo>Pi8u6u1)%Xp|>;4ie1xOGj!hrGgI{mnB0|=#|Pv>bS2Cb0$}Okp8>% zw~5#`?!@d=QU5VUoW(;-BwLvL`%c_9_|yk63FOjMQjgBwV_*YrK>%k@1h_|GdyPyG z$=SihReSsz2 zo6-eJ$Cz9p<>VZa^ddV=5jGcv&rMdICf_uzPV`c&+8gh9bDlJIFV#1K?w33@!CEd| zYBuV|I?YQ`t5 zuT|Lv;LEf*vqmiJnt}=}{Q^TjGUF}AJr4=~a=~c5WA=#ehrhBw$1%v=cgHcbUJ&pw zLX;s98EV>QhCNd1mH&?Q`?-8Oz-=5!4o1&HdtSm`@+xKQE6>Qy)L)A6iBhNuu!E8 zcf#qlC1Oe#Q2ahBqs(0*@QYKNWpHxE<1<4csCe6B5<5PQ7bhI*Wnff?XX3n9Y`@)8 zInz0AvC8qGaJk0z_;afzPUgyswaI6|sgnsC4;sjkGJ3uq{C;PH{#zz`QR(ZxbW6b* z&UL^&>E>%fwFk!)dRDf_e*#Ay%qb_}L^}ssg(Rm>@sts*2(szP zhw68&V)1L&PZBAEGRlxq;`Fziu>k5s7Q)+DyY4K96faem2h{v6T~YCy$iHpb$K$)L z+2iR^SJG=Ci#iE$dS?FGX|r{O;;bo?)zjAlqvP(g=e3Uw_GVsxDJH?{1ep$fQ%LNr zKVx?Zy>UkrESZJMkd7>iGAGBs8<)Fz^W=+M{Z2f+aDa@`k#90#_=ItK7Eg!$S?VQ zQ4WWWJQy2&YoLI=?gp|OkYfl`24|gh;keCCUY^X;x`k!vnr zbhro8XO2ENr1bnbhA_$3Wv7_D7QL%_Gj~5~{wtpfJtRt>{?4$g1D?`cDn!r~-W%}q zKBuB+o16^G$9d)&?xBTYvSh(N8BOZaW#rBU#>gZ$Ra0dpsTN?H(Ie?8Z`(L6_c-;i zygs)-04dC56wyT1ldB-G(tafSgL^{@%u4{BtB0 z%B)M@dxU{}T)RM~>Y+rx^0P+9X6-~}7^};XpZhtRcAKSgtW4)0uK)WQ9Q5T-CO9HO zPTM$fey&@LoC(PUgHeWpKG& zuPsa?QSI%A$7V(Bnt`XDP?0VpP`6u>)s#kw5YghSdt0UFfsCum#-Fm*&5TGYTa}+6 z(8IxfCt80@*`lhtFn!3O&37$Do@qf@VEUkeu-iJr{HyPgTZ*nB6>VVKMChoSyjJ74kCR z!FS*Lz*7DQY({^^Hh8>A+ZZjCl=jwv_pQfwn;fHFunLz(g|2yliE1Ub!1F3r`)O+H z{ttc5+%W~^r>pq14Tc_~*FvsgyGzm9e+aRyrL-`yFY%w^h!Iu8=5rUG+%XtjnDtn! zNPk3HH`P={s{*=L|EjX}F_+=b&CVw#z8jodvcAQy@Ps`%ZB;`&E$*B%>tp=`E0^F1 zOYVO2!K!c4m7Yk|CT2nubLR3u8|f>lHlFrb+Or;vZuUO%Hp_6ES-#mU2m~$xB&t+ko?ytg;E9(^wFZs1C{78`19S*(FBDfOVFkZ6NzcrGN5G61E zHp@Sm2#H!9Jjqp;f8_%1I^c}Pu`w{uHIOZ194mnw7H1OU1X-o%d`kF3e6t`^Ra&u0 zsLt{5*e-C_PTFV!w literal 0 HcmV?d00001