From 3d114cd85f2f50c0bc4ff4277cc9cafd7215e141 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Wed, 21 Feb 2024 13:47:01 -0300 Subject: [PATCH] Remove dead NFC (Android Beam) code --- .../fdroid/nearby/SwapWorkflowActivity.java | 44 +----------------- app/src/full/res/drawable-hdpi/nfc_touch.png | Bin 9073 -> 0 bytes app/src/full/res/drawable-ldpi/nfc_touch.png | Bin 1589 -> 0 bytes app/src/full/res/drawable-mdpi/nfc_touch.png | Bin 3374 -> 0 bytes app/src/full/res/drawable-xhdpi/nfc_touch.png | Bin 11153 -> 0 bytes app/src/full/res/layout/swap_nfc.xml | 37 --------------- app/src/main/AndroidManifest.xml | 5 -- .../java/org/fdroid/fdroid/NfcHelper.java | 25 ---------- .../fdroid/fdroid/NfcNotEnabledActivity.java | 42 ----------------- .../fdroid/views/AppDetailsActivity.java | 11 ----- .../views/AppDetailsRecyclerViewAdapter.java | 6 --- .../fdroid/views/main/MainActivity.java | 4 -- .../views/repos/RepoDetailsActivity.java | 30 ------------ app/src/main/res/drawable/ic_nfc.xml | 10 ---- .../main/res/menu/repo_details_activity.xml | 5 -- app/src/main/res/values/strings.xml | 5 -- .../fdroid/views/AppDetailsAdapterTest.java | 10 ---- 17 files changed, 1 insertion(+), 233 deletions(-) delete mode 100644 app/src/full/res/drawable-hdpi/nfc_touch.png delete mode 100644 app/src/full/res/drawable-ldpi/nfc_touch.png delete mode 100644 app/src/full/res/drawable-mdpi/nfc_touch.png delete mode 100644 app/src/full/res/drawable-xhdpi/nfc_touch.png delete mode 100644 app/src/full/res/layout/swap_nfc.xml delete mode 100644 app/src/main/java/org/fdroid/fdroid/NfcHelper.java delete mode 100644 app/src/main/java/org/fdroid/fdroid/NfcNotEnabledActivity.java delete mode 100644 app/src/main/res/drawable/ic_nfc.xml diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/SwapWorkflowActivity.java b/app/src/full/java/org/fdroid/fdroid/nearby/SwapWorkflowActivity.java index f0b827778..34fed2e54 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/SwapWorkflowActivity.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/SwapWorkflowActivity.java @@ -29,7 +29,6 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Button; -import android.widget.CheckBox; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; @@ -56,7 +55,6 @@ import com.google.zxing.integration.android.IntentResult; import org.fdroid.fdroid.BuildConfig; import org.fdroid.fdroid.FDroidApp; -import org.fdroid.fdroid.NfcHelper; import org.fdroid.fdroid.Preferences; import org.fdroid.fdroid.R; import org.fdroid.fdroid.Utils; @@ -211,8 +209,6 @@ public class SwapWorkflowActivity extends AppCompatActivity { nextStep = R.layout.swap_select_apps; } else if (currentView.getLayoutResId() == R.layout.swap_join_wifi) { nextStep = R.layout.swap_start_swap; - } else if (currentView.getLayoutResId() == R.layout.swap_nfc) { - nextStep = R.layout.swap_join_wifi; } else if (currentView.getLayoutResId() == R.layout.swap_select_apps) { if (!backstack.isEmpty() && backstack.peek() == R.layout.swap_start_swap) { nextStep = R.layout.swap_start_swap; @@ -309,10 +305,6 @@ public class SwapWorkflowActivity extends AppCompatActivity { menuInflater.inflate(R.menu.swap_next, menu); setUpNextButton(menu, R.string.next, R.drawable.ic_arrow_forward); return true; - } else if (currentView.getLayoutResId() == R.layout.swap_nfc) { - menuInflater.inflate(R.menu.swap_next, menu); - setUpNextButton(menu, R.string.skip, R.drawable.ic_arrow_forward); - return true; } return super.onPrepareOptionsMenu(menu); @@ -342,8 +334,6 @@ public class SwapWorkflowActivity extends AppCompatActivity { onAppsSelected(); } else if (currentLayoutResId == R.layout.swap_join_wifi) { inflateSwapView(R.layout.swap_select_apps); - } else if (currentLayoutResId == R.layout.swap_nfc) { - inflateSwapView(R.layout.swap_wifi_qr); } } @@ -527,11 +517,6 @@ public class SwapWorkflowActivity extends AppCompatActivity { if (currentSwapViewLayoutRes == R.layout.swap_start_swap) { showIntro(); return; - } else if (currentSwapViewLayoutRes == R.layout.swap_nfc) { - if (!attemptToShowNfc()) { - inflateSwapView(R.layout.swap_wifi_qr); - return; - } } else if (currentSwapViewLayoutRes == R.layout.swap_connecting) { // TODO: Properly decide what to do here (i.e. returning to the activity after it was connecting)... inflateSwapView(R.layout.swap_start_swap); @@ -624,8 +609,6 @@ public class SwapWorkflowActivity extends AppCompatActivity { } else if (currentView.getLayoutResId() == R.layout.swap_wifi_qr) { setUpFromWifi(); setUpQrScannerButton(); - } else if (currentView.getLayoutResId() == R.layout.swap_nfc) { - setUpNfcView(); } else if (currentView.getLayoutResId() == R.layout.swap_select_apps) { LocalRepoService.create(this, getSwapService().getAppsToSwap()); } else if (currentView.getLayoutResId() == R.layout.swap_connecting) { @@ -730,7 +713,7 @@ public class SwapWorkflowActivity extends AppCompatActivity { hasPreparedLocalRepo = true; if (getSwapService().isConnectingWithPeer()) { startSwappingWithPeer(); - } else if (!attemptToShowNfc()) { + } else { inflateSwapView(R.layout.swap_wifi_qr); } } @@ -740,23 +723,6 @@ public class SwapWorkflowActivity extends AppCompatActivity { inflateSwapView(R.layout.swap_connecting); } - private boolean attemptToShowNfc() { - // TODO: What if NFC is disabled? Hook up with NfcNotEnabledActivity? Or maybe only if they - // click a relevant button? - - // Even if they opted to skip the message which says "Touch devices to swap", - // we still want to actually enable the feature, so that they could touch - // during the wifi qr code being shown too. - boolean nfcMessageReady = NfcHelper.setPushMessage(this, Utils.getSharingUri(FDroidApp.repo)); - - // TODO move all swap-specific preferences to a SharedPreferences instance for SwapWorkflowActivity - if (Preferences.get().showNfcDuringSwap() && nfcMessageReady) { - inflateSwapView(R.layout.swap_nfc); - return true; - } - return false; - } - public void swapWith(Peer peer) { getSwapService().swapWith(peer); inflateSwapView(R.layout.swap_select_apps); @@ -1405,14 +1371,6 @@ public class SwapWorkflowActivity extends AppCompatActivity { } } - private void setUpNfcView() { - CheckBox dontShowAgain = container.findViewById(R.id.checkbox_dont_show); - if (dontShowAgain != null) { - dontShowAgain.setOnCheckedChangeListener((buttonView, isChecked) - -> Preferences.get().setShowNfcDuringSwap(!isChecked)); - } - } - private void setUpConnectingProgressText(String message) { TextView progressText = container.findViewById(R.id.progress_text); if (progressText != null && message != null) { diff --git a/app/src/full/res/drawable-hdpi/nfc_touch.png b/app/src/full/res/drawable-hdpi/nfc_touch.png deleted file mode 100644 index 1bdb4415105f0c9ded0f7044dd5b1b8c856ba9f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9073 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 diff --git a/app/src/full/res/drawable-ldpi/nfc_touch.png b/app/src/full/res/drawable-ldpi/nfc_touch.png deleted file mode 100644 index eca6ddcb8840091cabe896b67784d79e688f4dcd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1589 zcmV-52Fm$~P)bS=AJYpmR zQCwqXBQ!Kp>G;1>+E5dW&-gXLu6ijN3AKzhG5Kl}dC}0D*86Lluk|+A;5VOG?eIvM z;3J>=+?Os8fVrMnxA}XRT>Q zY36-7e)fi`&a$IUIvD8$4|~xMHsMA^BQFlL(g5w8>M0lb&?et{&V7zCL|dJVb-pJo z@w|;dQk=CaMRtn1$LVQ2)(19Nrl-cb+tbyS_{3Kpa)ryy@S88Jc8mR8;R_ujJ4M{- zj5IFh4$M=U74BD6Cn@6;t7WuD5BFw$?{)74sR@{`w1Now6( z`K_*XJ3ZXsMk5rD-00{&2bk?*$+)WHb$=M`cHcSO0CknhI02J9=yK25BXVPf+f~)g zTIZ_}p^|5CfD z8{6`l-P5Rn^Ue3FO?XyYFS<6eP|9QnCDFz1%%$GWH8;b!M0 ze+O8tUTjSb(_E`;r0nK*thcA5e5_Su;WAgGw|W5?pD3uS|?A z+~nM}>I)rdjzhN?eXU$*q{VJiD-!Mi3pDqt%OfKtJm#>pjC1U2jOPrB9B%iZQkt1$ zo`FiLYZZ83YmZy3T-FX5o!-zX_KR@6>mrA@?3@bvXjz!s~Z`(+LdWk-aO-y|6FKi zQ`1~Z>gRZ?O}3L{wHxPe@91u*2R&eLfQDs|F>p#@rK;7qG5 zaIvE-!<9OE%DK+>jDC>|^{vq>jhk4bqhg+LU=p`UH;2`RB~e{_xXC1+;xPM~reuWk z%t@7+cWTT0-)D5q35MzZ&Lb z4=A4Q%l$VB&+-ZF4ohNl3~)x)4IjK*v+b( z{j8jxN+&b)=E1r1~Z~Asys9Tqzx4wJmi-uIHJ1os{-m=h&9?%;#qV z9cY$hvJCO0=IJ81)>M^pJ#;+b&^db?cDWVWM=sQ|($EOK zt<*~IY^fKjX|{tRp`%qEGS56+B3JsEr)Go$Ow-33u{Djni%ob}Bj>nFx`B0dkptC? z3{=rp5k=hKbUl3>TT{+NhdI=t_EOPME7ghuP()`n9pstFPVJXMV*f02jGQk^EiWqV$NIFG`u@u*e@>t#gXvkq_zU z42b+P&{IyxUvgcn(J1oIP|r9%Kgo@?K*cBs!#wR&B_j_G^OzD*Fa}uX9AzRaC%aqG zC@4LxaZdKnzd9jlCr!cf%N=Bt%u_ucHOC>)hc zab@Ou+S42rqi}Tfv_X-9&emudh2=_jC>FU=&2rFf)fasSPtTGn>N9Tu^6`Y&0YQa?2hC;tnU zr^HXp!*u)nOO=-tHy1M;qxfH}Jf(h|6jv1g{~2l;PKzcEF$Xgpt0?{z=;a~b+Ao?o z3o{(6IQ~^AH&j{jw>;hG)fe|a|D&sY9qp)szN77;U9*LHq0T;_N1>Z zvB1en*Zg$6+dOq@%{A5$I<2O>dh>ng9)Gc?b+pfB<4qmsV$YhaO2VfG$C@y}1dS%T z!Oh-Pr^1zb+bc(THD-C;4Sr#ieo7(~>uXy-b)DDERHM1Yc8@jT4;qZMfg;8F`?=3# z+~hb*(=*GZj<>CMNddmtgslsAooaGS1 zbcyfiU_GOq>_MMeq~3CqO>m(T9B*2xsKq`r)<1BEvM7{(CYo%$^qyxb8u56t4u?C; zxyJa$GC-Z19BLPP`>89vt|mJxKX8{n+TCD1Jb?G~i$dw|6Ms*ar`Y)#!HarC*xuu& zs+Lyg0k?YJ0uAcT@rE1xylGY@e=UE*bi>zVa3@$|=SZ=o>0qi6+IaxE)tK%DmpQ=} zdMnAXC*0=(-J)>L(&+!BlbDX~162;z-dJgkmigLK&UKg(y00q#>ZnXRyE@Tnjx;Fp zp|25kFx^z6BE?VDfzu;g2xzd#CmwXN(Kcx5k*>(k%tfOb?>baTw2U1*a_$RG4aHWZB3|c+F{MMPi1#ne_AF5Mn{{jQYOmFKGO>E$6Q*9KhW2(8fO9yU$^oa&(FX&=R zvvF#H=h8)avBD*!4TsK`zD+&YmrrEXOtiSGJ&*Bo2Msws26jK}rKIi2SLXmm=1 zUuv+#o>2hjYw**^QsR1bj%!H}eO`kLn{ODpd62~YO6_0){u~8xjs`zZ-P$rvRHTn~ ztJ|8tw!-Pn7rMPI1n{A9_} z&vr`Og^30fF!ye=!hw-+m|EA`-Z$!9rCa1?Ex)jZLrqoVa=p_Bxk~}m`B8*FX|&Kz zktdyuwZsmok*RW@_ICBDS|{cV2}+!<-kA~h^@Rp^8xkvV9*N5%>~4vSUq_y-<$co) zOHHXIp3))0e&(5M)7%@&6w{5$W|uedw$VzG#qku0XLT{yXShXa-lxV4@9LWhyYoG- zYlJe_YV^lw&ZQb$oRl-f-RjJ7p5fZ->aQwE{M``kJdAg&6?w6TN{_C*_>A-quj`dP z+w0tzV|cx9sXbGR;Y8Ch$>W|$6-R~rBAkM`wuu%?*6AgRB4Gp5yl<`S(p>JY9CtaB z%(hwj3S>Js_`7PArl}>-=)?&7sZj67dGC4|zloJt-&7wc&mM6#Zp$%YysFv}InI(H z_O`nnd<=|6xJF5|m@;=;o=(U%G~IjIqqr|X<7WMHKX)1fi8;22a4Ozap6BDshsx9O-U82N z`wqX6ab|>Fog)3;wUzfY8fOQ^(Tx2q22kM+10oFaSNr8PxT95jD1Cjhy9$qF-emww3Se9MQDl6zAPw$~Zex9IVEznwEo0G@Zvz(kT5- zsYp-jJHt$T>d)ykr;oS5Jcmc<<^&IU$xU`@d5KEgsLnBw;(O{{swl~V2S+$kts7F~ zVwh+BQK?bxv{=R`&a!3FZr#g#aFa4U-Drgxi!_?*Xhki4uz%TnTSbaL%Qz+5@p@E+ z-6HH_nI}?d+z}dFuQ)uJcQE5s`gMksI`AGj} zVWYthvmNK>&9`NQjm`FYDqcBUt>g^V(M~QiQ8h9EX4+UgkEwQOd`EldYA{~kXaR?* zad$c+YVRRc_Kxr9?JYA6k1*I*zD)ICY;LxX4N9FG1MKG%*SOkeV2TZO^O{+PCkf;k zb$%W#;JoIyGJU;krjgm@_n|4)kI>5-X4@ovhk8`KKSd6@c^=HRxlW$7KyqnvkP2_; z*MbJqYZlreQfy?FY=SY+=f1Iagm&(;JPEDIrEalFc8F$l_9&=wP=p&-j^ny{qN#hZ z8jiBu1U;HJS{$)27E7ijRdZKD~7SPD*!@DmMgk{sL)Q{~lF zM=KpYpsr~Nq&Q8ZlOk3sZ$S3{x1!lyMjyA!_`>lzHam6S2M;K-u^B!#aHS1nf)$R6 zRj`FwKDADy=-@%iW!oVJ``YIQW>@)i$tq9i>vEMU-C$%YmG$-}_{1O`J*CpT zkFKg`?8` z4Dx}6c3H);c->;V^1N=%-vt!ATD=n@7b9J14ko$FPweGLF9JBfso15S(>)SR zQ~7G8k&|PZmPPj**}2hWvZJJ@*UYwY(#Ov@F>+I8C)fK{gN$mm5?<0nUvFDr$4J=N z6qAh1eV7@qCf8rWDECR;0dz7!(jIbxdRMICz*K68AG+FuUQq{No*g2bsZr9=N^V&v zM-Glx?d4o2iy|E)1!(VK6?RV|+=>>wAt_R9KNSEPotABee{687ExXYB$$Cy0>@C%f zYf;p{({kA*XW!&nl;?Bv^Lps$VKt6TZQYMF-`SKnTgHRB#%gKjUe)$V%ByyFA?3|A zD%%&nRaqn)X}PD<=YoUGGu;j?Y;cUT*bXc8UT#v7e|Z^yZ8|My_$)QNeZ8u}A*tuW zFRbu~mPJ2M2i?@p%-;e z+LRf;j4;yBe9N0`c!bk&UV000Kkl%O_595&b*|PUS|q#KU!W+-fz|d=?hS9{TVB(Z z-JU8ur&~H8c}vEpzR_T=({+y)(%yrX*(-V6`ovTl8suvY`Ig5y5eE3kESp4%EsZtD zH}0~BvS=~I4)$AJlU=XMIGqjfnc7&j96xnKRei4qd!qc&OidO!Ti~B4e=of87sq57{F$$xb zXDzX7v=IYLG|P5TDCcVQw`e0qt29QpD3tx0R#>-a6V6R8M1@iAO-t<`Z9oq%B)qLtXeV$bLrtwVng;yFX3RXAR~YZSNU za6EICX-E69&N#T9>dEvjRF~AmN)c@wqb1#YV?N9qacQvk^B^_Eg0Z# zjb1h+@|L`8434&=zlZQ}A(2RTFIr&RXiGNql8g)Tzf>xAr3Sx@wq=xWE%W`zo5L*k zxX#hGoM5SMY#n(r$S3C5I@*@@E|l>^zN=7)Yc={qv^4`fuimNo#&Soh$v$YcExVdw zj(zgpnrHYxd9*df{-oA(`bG;S?;P`N8EsE5N z{u%W4ie>hWJlI>MCv=H_1}AECk)phU#plUC9&2m1v%nkr`Y4GTzjNh6`OG)sqcBi$uSqp*OKNH;97OG$$?>LRK1(z!^(64L$t z-VgV$xOdK(4-;q3%yZ6snE0fpqecv%17Kia5NoI_8(?5y%KXPY1la#+zDr7JU|?Wl z=xG_L{3kyBAN?N!|638jmn9_luQ4zJ40H@Jv|IPrs|2&2ZX8Umc*e7z-Ho#B@>=^S z1Bi216ez|71|CUYA}FtoCJYU3C-s4Px>GuYTIq{4nyYXS1Ru(zL6mvyja8|RD~d@q zf22kb`>^pmKAhd^Q|f0~u}jCmZ{?oD*ktD}+X;TZRm=WXxRV^1Gq>%f9X7tkyZ=Kg z6zoRb9TjrYuv3FW{!3ym--dDe%sINKvpSR?g_M(e-#larbNy*XXFT{L<|{+MD@p(Q z-!T;HA7Q3)g*~U*8|8s`?e_6#Z$yr1_)A>FnxLTS!^{ATyZN;k| zX`Q=~vazY~y5&XMrg{kHSN+Vxnpoql(=NJH;?}0|XXe2p($#!vRu>HuJ^^zCO|@08 zt;%7o#951^M^d&!mp@?W0`Ds3fHT8TSY8~9Ti)qPqFoZeb#59R~9wH?P#S-sriqzYc{!7uDq*^>K{ zwv#Sp+Kk8E#2nAAL8__srHg|=z#t5m_~jmrQkF4&(hhRzxxQytIJlu^ZW{i;B&@5cc*7_ zuYeJ27uV?=)Q|5`M8P-5Pt<`|m`p0ISETov)7~8R)QvHTOPC-s%TB6c-x52ly zAkJa_vETJZq(98R>v&oxSG0DKTPXg0A@&dX z5vPq*$f*9oJssKr)|dvdRtu;cZfRHKy470AbbodHEj<&3$h=yaO_P9eu*`mJn?xjJ z)-hN=(HPf`MYSf0yU$%zP)f4QT35jC^EE@kxCixMY`~s(@5QBbz`oV5`3L?qOTB}h zFBc>FgHOf{zv6a6?^mTpp%dL>veEu#6vyn}B(8ZfA530|(O1-+H0E3xX!?O~UP^fC zKoA20)A^0R0L|ov2kLfOguv#&{Ld;cIA6dnBr%SGi^z zibddG!*)14R5iUzq|-U($Lb&kdIX#^-9&)1hg*f{yi zApLgI?SCoh2lLsPo0Gssw~F6a4y2E#UgmB7KqQ5 z75%5Thtb7rqNthKS+PQGWiGU0!V-0Nyqb!^+m&iy^=srMk|?HiAZY@R%dO>3t@fSy zeCrnRE{<+d7n(=lys+c1{K7=;n>`u(Euc8Ap38_&h3)!}(x+KMeLLX|-qm`^T_T4yy?-z^RX2VA z=P!;$EyIC^cPSz*XacfspS8!bmei-8@X=4g**S`P1ooR2ZeB5K$Z7^1o9d!rdKz|SE46nLWke@z;oGqUB4s5bk43e&VuJ96!{4eaiSik_ ztUPt8IZu)MZKa= z7&JNB{^?3y{jgc22D~gWl24HuWwBHpY$Az#P=0&A#aRFs27(xq`!+egPtSf3r}eSf zxM!?*AryLh{}4Eh$}HwB_&DXXFaALo^1e06yypElvmY;K_Co}YOyiWAHprq9=QnNK zFuIDP=^~MwGq<90XGsFX8k~n9#jI=*B}wNqV11m~D!gS4k-BnATiWt=YG>Nf+wBH3U}z2^C}^&lSvN0rzyXo&UK>^EURahC5HKR}J!p@#W#m zbyTNPkm|%P60h7_Rf1x@q<-lBMW(Qd=*9pph?d%8P3lS}~WB_A+vWA~?V6 znd9;;$nCd8odggOUeD3P;EzWYKaSU{ANc=0k7>$a`k46-X-0yg0*$V>Dgob@ws(aA zRhfNyG!%HcNwHMVVG2*LO-)q`nOO?Tf3cp-^8-Fj@TO~`B-(dkEdl4nbXd>0@%2k0 zDgG4x2W)gSkHCk)x>7D?yD`J~1C*O?uFow!FenrsK-7b0NSYTjETnfUBy&k2K10S8 zP6BCL&l&)lHeiO-oOv$e-+AwACto+0kjqF!=fU8SHQ3Y3UT@@#nNeOtr9U!k-aZAo z%Ewq|+-sc75+cLm3D!E7pTIw=4VDE`rnX##k%b{PibG=+$mgqWD%v#4*C~iNLFW}` zgt`(lY_ML!^-1Dc`dUQ`{pxK&UT=Kr>flQ6Rtm5#7OKJuvdYh?C?rN~nq|l(X=ht9 zC+^R7)%Chd=cpD$fF6sR$+uCxM3Mrf)d!k!6_3mi47OzjySkdTnU!};_1uOVP3|R< z>Ex=4>YDI#E}07%2!}F(b-5m+*K_Sri5$8oAm{DpIpr@AceGW)7*J}M>j~1G+R&wp z=N{WD-caZty>Cu`cO(v01fMQ@_8U{3y|-XDVn{x@YfW+95oWtBiFmCo>v3SXm;oxq z!bEaj5;6c+^?20OiO!ZXG_}1D=%p1j1&yjTwCpl2eq&Y)5rh?;81<^uPq9iiV-HsC zr4nn-e4eTk?2M^%qLz94Igb?MOs`(|1?X4+aAt=_?R6MUMW*yH)ht{D4&-8@G7@Qz zf=BEj=L?UPi&J!pN}!wI#(5#s@8}O}JoiykzlTem6fwLQ*Te`~A2K3hvL9VDKv`J+ zmCv-_3w`M0jM5yGq`=xXFeelWEcKC1;;(2J?@#puk-g`Ctb6;~4WM>ZYD>*!!&HX0 zr{~dXy${+cJ^v@T?*MAGeIQipEIh>LFKyf>qt=&VjEVD8%(Ce4YFdkO3H6WcVPP1l zR8-mt=ujN>09SQwF>JE~dlmOMNlJbA3e0ts4p>X*V5pNRQMVUA_0T}K6kJQ9ix;>k zy@S-iobDonLDO<2LOYMoiN!7#&A=^BN?P3-#O5*21tj~@Y&^^);AQJS8^Cb!k56l^ zaK@N%`<8~kPJr>BdWukw>!6=wmH;aQ#%+D=Fk*smUe6D4a?q2Siz^G0c9eeC16ZoU zbvt^&*DT^M1T{*7>yHbu9|Hwfd4>HVLre%3OxuhlHxW->A0~A7jBS{9q+^pJJ-ho{mlo1gg6yFi`lg5@-+A8!R1YUs`UwV0;ec^9`vy4 zGaPAdg=r4R6yjEbB!56kg=qLB2>h<3$-)0)Z!fhAXpiZYWR*;M{Rps`$t)ue9RqqR zPuxRwvn5KgI&{h>Z4epd!M?_K{^qE2LkE_Zjt60RcN8UXA4v_u1iDnh<^s#gMko39C zZ-$&_cSquYUmv@8MINaFxuL;1-3Dz-li1-^!KB-Q`nz%V#@o`&;@zSqPa2$7{|q-0 z;yfem)F0#6YyL{Ff1s1-ctFG@yLGKy_-_S zUcduzm!y-YX$xN7f35aSc|L5<wAvosK%y)+CGOj1Dn_2?i%th8!?dX&A5`D! zICDe65G1zkxf=9#p@Y)6yLA)GM^?ZJlR#1rkgQ^aZV(qwcaZT&-4@QaR3E*R$xwF; zwewSCfQc5hm~%Myf!H8B&~zQU%sz>Ve0?@5G-UX>+Md4hjGY_&hk^Xxiz^M_<59!) znFNTVOGe<@UAa!$BEFJNX;jM;B>MP?*f;0xFuh^*iV=6S%hodmmz~MCNe*bwgXeEh z6ahL0uTbaPnH_tug*?}dAcb9;(g4{~mzR(^Th|I-<1GS+SA#1%ZZA!Y!v#8axKeA+ zU3v0FXke%H0Bfk##Z}fq(XRBmsk8Y38BRz2IMGs{*D1sV>jn`3cPn* zpZ_Zc6M`XO=Ma3?&5?#nA%Ify6*XMi?F+>%QovWi+evfNyM?w?O``jO^y`D79n6kK zRkVDqXxTrK*fb;;>mlezRc?zIxq*O?@%!;I;hF9D$Wl~RokNsxG6(%kT;{o8h7{M2 zT(;EgNX7L8^Hp<}@hsMqnY_mK>i!!p zF;3!HrVM$Jp4D6GSv#cBht@8|jNA7g*@F#Tj*Pex&O?H|vTKf%#n7d23LulP&Z$uu z{Nv-vE3Da(bLcOC()uroJlX}ERS@w)_am&$7a5S6cWHOLxmKd*PsEwR#1s|opd^Mo zbO3wyu6R$EA-f3*lN$KfJOJ4xQ||>6`56FrA=3)GVOTO(WRO$6T{lxsdWvt0JnSmD zQ`v4w@5tAVsvF$t*u#VIL>h|dY`DJS-p2}r&GgA9(d)mQzZ5Vscxuf}`N&r&`z#)! zDvH#r)V8bjHAam#V7%hPpx4Q85E*0|j$+Ifv0PyIr3lykro`tVTxTrwZ2Uz5tO4^q zN3FB(Oa!q)Eo0w(E?!|=r1aA1Ua?d79QLI6>e08}nE}oZk+G32t?%2J?ffwl^F#SE z>PoDy=y-AGdSH+Vxk`dRA71K0I3y7-g= zU>C7{SJg8|dM}NAMt#RhTt5208lpE?I2`=1vuP!#u5OYG!$F0F+i@l&dn)bS8w5D+g?Grje6_qd~G(I5Q zw$SZfGAQ3EYT$yv7a9#~nstf2Bg2})GkDcWMbR{;Z#x@X8R#efP8$10B*0j$2x$y> zYH1AH!y+m_YFA&9BmQpE80HU5zj=Wh0gU>6)F_+X`59sVS8(CxOBYi_YzOyONfSpC z2CaN}Z1$9{LWQdA1Ma+FwX*h8$%>?A*aR5(k0ZfIpVW!yt#y)rUjqN)se@^oK@Y}x ztYy+vv<18JsMeCF3#C@?WSc7Wg-xr7UjW0l0pH^5?~P;zuHQVbw0NXQy$Az`jp>v} zHMxR!w|%HNb)j%wuCL{S!KaMoHFQ~z-u5DyPh`shl8|IQGY?TfM3&;r5SF*)gzC5g zEf2?|h(C)!xsr=ZuZ2`&6yk?+yGs?C7wyI6>Ef+FB#~3#P2#_%KaWRmED`3uqCF~g zz2@2xupQ1kCuSE|}CTr}>kt4TW1`e8WBejSGos z$lV(@wji$NX#c+d&xEJ2luHmh1Wk-rKc;7jLl}B7*&4pWyGL>$S(EaJJOb85yTkQO ziC`95T#A=!bvHjT7k5oMvJ~gGeK^>a3qSYuM#;r~K>=@_5S$A%j@Qr(8fS{G(eiDc zgc^JHGLs82NCj$0Xa9ljvhbQ9soXOtbaI5^?!ld#w?I7jmX0>rd=uZ+&U83yET(0e^`KJv~XyRA>Y>*8JV^#GeP{sUf|D&mCL2dySxkfLvas5 z7gD}YOT3#YapAIQRq2`J)LN}kP^91fyU*c4v6UKT&tNhCO(jbnh1IIs-l5t4et(ST zuaY#JY+piZfUeMrDZLPF*GRtpK{$4YKp+ICid}q|cI3kwsG0M;aTj*rdxc6mwNbF*eKxBOmx~34gggyFZl6Naq!oXBr^*iQ)r5wUfDQ`MPjmhv z%Q;wTI>AxACwYy@v7M`k| z0eEB-tJa&-E;*Q^8s_VtlZPiFvfpHkc>vU+_1rb5JvIERf`4A4E&G4MY94m_;00jn zD>c&^MHif;WP$RDMHnI2>2+>h#Au7S-)9Y;F7g+5y!}tI1fkZBzB{bz!EeDgq@8|t zj;fJvihPC27Z%!yETK@7!OOtR;7Egwrb5mRcCg*Gb&nKE+Ofe+*~Ew7hbg%_X&da-~236$HH5 z5|bF#Wt#oCzJ5t8G>V*Z=7esNY#L0<<4b&n`^?I82=|o_7LB5hF)0DZ(Nn}oGcqRD z*0@|!og)5QC$zWeHr-a$M*Q6()`qlJw;fq z*@v!z6*FqqM%l!LR*v0w*1^wk#EkH4zh{IjjHIXZ8d6(u7W~fh>@ru=_LA}l*?69q z>*r7Av^b!D48-9Wr~zQ?l?imcL%O}wKhu$)_icWgjMiv28ZaN!6dLILvq3lWEU#^J z_kuLW3cPWE|FR36r2}NnXnTE7-Z^c5-$jaeP=yK}-Z_vZc5ThF5Lp%?e9l;HGn<-x z0tLl;v3b4>^8WE}k@QH~+W5fGY6a=~$suTWhxch5Zc5LA%24Qm2Zgy+6`WPtTtkiaL?$!@I!i_4n}-$6X_v|3?j3vMVoiP3fQ(&s;aUJ-#6_ zLBpJxq<#C9z6+gCPxugklM$SO^$5XNZF6@154>)GW&xoo7mv%e1Hew6%~9D)QUwL) z?|uyY&O{JN6cP>elSC9fHU9bTAvOvP*M`0T+4lKLQ54ffn4#z{Cf+Sjn7CW~ga>D_ zs(DTizDwMo)I(kV?wa}#i#px)LoAQxRR5J~ZV1?spSEu7&QGKz8vFRt-- z)npoiSrscO?7VWjJ&&&111|RErT|m=diV2JZ^@mcaxUf$1E7lX?|#y>IO|zotFV2p z3_V@b_(LYd+nx}zU2@+EVr%Wp@RgoBJ$LZE6SofE(IhzOp; zAC(Ek%6zcC!Km6J-H(dlG;|D!1D;G)E^tO1qEmf;VRCq^;qyb8yRpxxJQ{6ho#M3d zbji3jrYWhwP+NPGyJ2!DS{gRw$ZLJKMQ%qTJ}oQNP4XHAN$~dMcelpRH`W`H$GEyz z9(A3*Itd{q(OnBn57!D`S^WTXQw&069hCX4o%p#K*v@vgt=05(3D_%d@X^EKoo&?y zZ~#`K>!mBmcdUxyZaTq%;4*&}+y9ngezg1E_xEvjeGj)jQvyqsubo1EE~HyCGW}LY zemj_-r;LzC;+;c%80yTOLl~7`x>;Wyo)jgy94ul7mMqJXzF27Gc}E;YkAzq(h%JsZ z_etmAVZM&8{G{7L&Lh;cmKlh@JToM=BsX}_=g=1qZy(UJAz7sd%*F8-X-0Pyi6(A0 zg(H^_R#3HZ$n<>z*;YQt%LZf_09PXR_o_&~kB25o%9}*j=6>uzVKk>CSs@trD~_tc zxAt=t#!1LG25P33 zN!Pg|tY)V^&t|Q9rN|;hXHwF7j43jC@ry%XAHe;`ACt*$#xO>42xiQkQA7wB4DQC* zQKrhh_R&vRTeWBfO>;N@$Ci zRuS>88&`I$dJ53Kcg?B{r~x`38%h9`_OV^j?jGtUPC?RdCj4h4lup(M5=jBW2)go400>X{W@c5nwB9vWaC~ZE@2Ogf4WMo+s@+ z6(@<*r%EtVM&z_9;;fD5EZWUMjtYu2fct+hU5YGrDt`6;#jG!0jEGo?x8#CEDnFcDDukpUnj2<+ zt9^h_O}j+|^-6LEH|EUgqKScZ6WlgT@wccz0tJOjS2w^*TQpT(b!wE$&D4FBl?t@8 zH)B?GKW;FOJe%e`27yI)) zTO`*F0z^MR%QKUSj8}Qfh?; z6oo)(Bv?A#)|8t@FqA{G5MLVVk{&1JWiI1$K2{R6TIeSbR&<##5|Sd38BI%mFt9;+GAF{@-F9N()-y3dJ|TW-|40QM%tHI$lJ{8XfEMoqQ#u3JG2W z+tdk(&{0g_6JH2dzFyMjreGFmFSDj7MwgLvlQ_D+130ez`wO zCiIIRQIuldB&%7*6&q7|CkHVp$aF-CZ1mRFl4ypW@k{M|hh%hO)^y{5_iO-Xkz)yk(b~=IK={DB4q~ z`A7R}TRowetSWrOg;9k5%T2DT6U{HTLH^pEwWQ|glGhtEjq2`5I%P+SjxZ4%KBH4pNRHmi2z+B2G~q%b`&eQaCX_&2bzCyk z7w}JQKrcB=K&<1X65ljFCb53*Ot9;hF*5=)lN^;SBukloTzKK-sB8z(GMppmWqL!lY!$re(zGXFi(eG0HF9 zb;g6#W^8yGOfixSPMOsV@7b}J2W*W6=g)GldNV8$FKYibcz5}Mdxp`)Lxgeh0dz1O za*5rE=~ax48}Cb6x%9kQeENb#OA9f7%Y|o#JkrQmp--%ZQ!f z+SI5AS8WK*6SImw>1}d*;;akUSERpC{fA=@Z;A^B^9vq08!lDLqe&FLET5~Tz5+mE z!kmN|ZtzDHkS9?wBo>QL%p38Bf~iWWu|yW+{Vr?3U%d~rh3TqY=)#;t?u`SE16GzRP&bH9mtzX;RsNH-ULl@|jMN?(f6HR}~$qm06g z%b&|2=7@{sS!u_oZhy{M1y!)pP9K+nL!X0cT#HmC%N-^yZQg20PMIdf6sVlKih~Z^ z=x(^w2L&%=Ray#FeP2>ErEc6j+;7%BCd35v{M2m^OJ_^2`I6?BAbramo*JHRViZ{*o~Z6b}#g=r zhnK@n=#stlKrh`Wq~A2xU8Jo?7-ntm$$rU+zAx_|Z9m^R4gZpNsnWx42S&SW;oHyvYLOMRMGsrtdfobQ8|Vi=-Ty zLuhDG0+U@s1m4iqgo_hueVO=^bF)Jf2fG=*p-l7%(oD&h>Eq=0A=9{%^I)}OAA0LR r0SzWeMig($ZjFF<&N7hco^TAWmR-W|@zsC7wHO*II?8p5wjci=W+fd= diff --git a/app/src/full/res/layout/swap_nfc.xml b/app/src/full/res/layout/swap_nfc.xml deleted file mode 100644 index c970ab430..000000000 --- a/app/src/full/res/layout/swap_nfc.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 483c294d8..8355c4a22 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -260,11 +260,6 @@ android:screenOrientation="fullSensor" tools:replace="screenOrientation" /> - - 0 due to incompatible apps resulting in an empty list. - callbacks.disableAndroidBeam(); progressLayout.setVisibility(View.GONE); // Set Install button and hide second button buttonPrimaryView.setText(R.string.menu_install); buttonPrimaryView.setEnabled(true); buttonPrimaryView.setOnClickListener(v -> callbacks.installApk(suggestedApk)); } else if (app.isInstalled(context)) { - callbacks.enableAndroidBeam(); if (app.canAndWantToUpdate(suggestedApk) && suggestedApk != null) { buttonPrimaryView.setText(R.string.menu_upgrade); buttonPrimaryView.setOnClickListener(v -> callbacks.installApk(suggestedApk)); diff --git a/app/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java b/app/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java index d803909da..e11e60f13 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java +++ b/app/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java @@ -48,7 +48,6 @@ import com.google.android.material.bottomnavigation.BottomNavigationView; import org.fdroid.fdroid.AppUpdateStatusManager; import org.fdroid.fdroid.FDroidApp; -import org.fdroid.fdroid.NfcHelper; import org.fdroid.fdroid.Preferences; import org.fdroid.fdroid.R; import org.fdroid.fdroid.UpdateService; @@ -195,9 +194,6 @@ public class MainActivity extends AppCompatActivity { FDroidApp.checkStartTor(this, Preferences.get()); - // AppDetailsActivity and RepoDetailsActivity set different NFC actions, so reset here - NfcHelper.setAndroidBeam(this, getApplication().getPackageName()); - NearbyViewBinder.updateExternalStorageViews(this); } diff --git a/app/src/main/java/org/fdroid/fdroid/views/repos/RepoDetailsActivity.java b/app/src/main/java/org/fdroid/fdroid/views/repos/RepoDetailsActivity.java index f90994cd2..a2addf27f 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/repos/RepoDetailsActivity.java +++ b/app/src/main/java/org/fdroid/fdroid/views/repos/RepoDetailsActivity.java @@ -45,8 +45,6 @@ import org.fdroid.database.Repository; import org.fdroid.database.RepositoryDao; import org.fdroid.download.Mirror; import org.fdroid.fdroid.FDroidApp; -import org.fdroid.fdroid.NfcHelper; -import org.fdroid.fdroid.NfcNotEnabledActivity; import org.fdroid.fdroid.R; import org.fdroid.fdroid.UpdateService; import org.fdroid.fdroid.Utils; @@ -206,12 +204,6 @@ public class RepoDetailsActivity extends AppCompatActivity { super.onDestroy(); } - private void setNfc() { - if (NfcHelper.setPushMessage(this, Utils.getSharingUri(repo))) { - findViewById(android.R.id.content).post(() -> onNewIntent(getIntent())); - } - } - @Override public void onResume() { super.onResume(); @@ -228,8 +220,6 @@ public class RepoDetailsActivity extends AppCompatActivity { LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, new IntentFilter(UpdateService.LOCAL_ACTION_STATUS)); - // FDroid.java and AppDetailsActivity set different NFC actions, so reset here - setNfc(); processIntent(getIntent()); } @@ -286,10 +276,6 @@ public class RepoDetailsActivity extends AppCompatActivity { } else if (itemId == R.id.menu_delete) { promptForDelete(); return true; - } else if (itemId == R.id.menu_enable_nfc) { - intent = new Intent(this, NfcNotEnabledActivity.class); - startActivity(intent); - return true; } else if (itemId == R.id.action_share) { intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); @@ -303,26 +289,10 @@ public class RepoDetailsActivity extends AppCompatActivity { @Override public boolean onPrepareOptionsMenu(Menu menu) { - prepareNfcMenuItems(menu); prepareShareMenuItems(menu); return true; } - private void prepareNfcMenuItems(Menu menu) { - NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this); - MenuItem menuItem = menu.findItem(R.id.menu_enable_nfc); - - if (nfcAdapter == null) { - menuItem.setVisible(false); - return; - } - - boolean needsEnableNfcMenuItem; - needsEnableNfcMenuItem = false; // TODO remove NFC code - - menuItem.setVisible(needsEnableNfcMenuItem); - } - private void prepareShareMenuItems(Menu menu) { if (!TextUtils.isEmpty(repo.getAddress())) { if (!TextUtils.isEmpty(repo.getCertificate())) { diff --git a/app/src/main/res/drawable/ic_nfc.xml b/app/src/main/res/drawable/ic_nfc.xml deleted file mode 100644 index 68eae50c7..000000000 --- a/app/src/main/res/drawable/ic_nfc.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/menu/repo_details_activity.xml b/app/src/main/res/menu/repo_details_activity.xml index 3d064a35c..52d663a53 100644 --- a/app/src/main/res/menu/repo_details_activity.xml +++ b/app/src/main/res/menu/repo_details_activity.xml @@ -8,11 +8,6 @@ android:icon="@drawable/ic_share" android:title="@string/menu_share" app:showAsAction="ifRoom|withText" /> - Version by %s Delete - Enable NFC Send… Prompt to send crash reports Gather data about crashes and ask to send them to the developer @@ -551,10 +550,6 @@ This often occurs with apps installed via Google Play or other sources, if they F-Droid can search for repos and mirrors on your SD Card, but needs your permission to do so. Try it - - Touch to swap - If your friend has F-Droid and NFC turned on touch your devices together. - Join the same Wi-Fi as your friend To swap using Wi-Fi, ensure you are on the same network. If you don\'t have access to the same network, one of you can create a Wi-Fi Hotspot. diff --git a/app/src/test/java/org/fdroid/fdroid/views/AppDetailsAdapterTest.java b/app/src/test/java/org/fdroid/fdroid/views/AppDetailsAdapterTest.java index 8c657074b..aa321347c 100644 --- a/app/src/test/java/org/fdroid/fdroid/views/AppDetailsAdapterTest.java +++ b/app/src/test/java/org/fdroid/fdroid/views/AppDetailsAdapterTest.java @@ -113,16 +113,6 @@ public class AppDetailsAdapterTest { return false; } - @Override - public void enableAndroidBeam() { - - } - - @Override - public void disableAndroidBeam() { - - } - @Override public void openUrl(String url) {