From 22b072962e2b2a511911cdfa5cad3b0517c20f56 Mon Sep 17 00:00:00 2001 From: Peter Serwylo Date: Sat, 27 Jun 2015 10:12:26 +1000 Subject: [PATCH] WIP: Don't show self in Bonjour peer list. Implement UI for peer list. Peers are shown as proper list items now, subject to feedback from Carrie. TODO: Need to figure out how to combine bluetooth and bonjour with same fingerprint. --- F-Droid/res/drawable-hdpi/circle.png | Bin 0 -> 498 bytes F-Droid/res/drawable-ldpi/circle.png | Bin 0 -> 351 bytes F-Droid/res/drawable-mdpi/circle.png | Bin 0 -> 370 bytes F-Droid/res/drawable-xhdpi/circle.png | Bin 0 -> 625 bytes F-Droid/res/drawable-xxhdpi/circle.png | Bin 0 -> 1390 bytes F-Droid/res/drawable-xxxhdpi/circle.png | Bin 0 -> 2170 bytes F-Droid/res/drawable/circle.png | Bin 0 -> 625 bytes F-Droid/res/layout/swap_peer_list_item.xml | 45 ++++++++++++++++++ F-Droid/res/values/colors.xml | 1 + .../src/org/fdroid/fdroid/UpdateService.java | 16 +++++-- .../fdroid/fdroid/localrepo/SwapManager.java | 2 +- .../fdroid/localrepo/peers/BluetoothPeer.java | 6 ++- .../fdroid/localrepo/peers/BonjourFinder.java | 15 +++++- .../fdroid/localrepo/peers/BonjourPeer.java | 4 +- .../fdroid/views/swap/StartSwapView.java | 8 +++- 15 files changed, 85 insertions(+), 12 deletions(-) create mode 100644 F-Droid/res/drawable-hdpi/circle.png create mode 100644 F-Droid/res/drawable-ldpi/circle.png create mode 100644 F-Droid/res/drawable-mdpi/circle.png create mode 100644 F-Droid/res/drawable-xhdpi/circle.png create mode 100644 F-Droid/res/drawable-xxhdpi/circle.png create mode 100644 F-Droid/res/drawable-xxxhdpi/circle.png create mode 100644 F-Droid/res/drawable/circle.png create mode 100644 F-Droid/res/layout/swap_peer_list_item.xml diff --git a/F-Droid/res/drawable-hdpi/circle.png b/F-Droid/res/drawable-hdpi/circle.png new file mode 100644 index 0000000000000000000000000000000000000000..2cad3645bca469041284ab2f5d6793dcf4b8c8d7 GIT binary patch literal 498 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+uenMVO6iP5s=4O z;1O92wCOqsGdgL^t^f+Mmw5WRvfpQu<}|V{@mszRD0INn#W6(VeD5Sfze5EwZt?YV z7CL_wn{Z%7H%r+b8CwpEYfEw}*k^MzhiBCCO}!xT^Sb%|n$zEnekwknXd2A*;E1%f zmK~#!fZ?3zTQ@2fZr)gu*zx7mrCZnTZ;^|U+H11?n;5%z)6S>z+Sj*Ul9`|Db8!df zwL6m^^@SR!PP)_*8DQWhxR^^|j{Dr=f+yN5OJtg5v0HKDvT9k}ihq^dZT{wb z>(;Y>UzwB3mh^h}ZEvlc3cJ|D&ahqF`|aXE^PRi`7eB5&pbqqlYKdz^NlIc#s#S7P zDv)9@GB7mNH89gPG7mAZv@$iYGPTq;G_W!-m~70?jG`eoKP5A*61Rp&dE55`HAsSN t2+mI{DNig)WhgH%*UQYyE>2D?NY%?PN}v7CMhd8i!PC{xWt~$(697d9s<;3E literal 0 HcmV?d00001 diff --git a/F-Droid/res/drawable-ldpi/circle.png b/F-Droid/res/drawable-ldpi/circle.png new file mode 100644 index 0000000000000000000000000000000000000000..ff147a8b8c2a8a9859da0578db6852e43f6d6eb5 GIT binary patch literal 351 zcmeAS@N?(olHy`uVBq!ia0vp^tRT$60wmSb-sJ%)mUKs7M+SzC{oH>NL6Qo|9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fg!Ib3f?!v&Zs#nC6V4Ur6YJU@!I9sef5KSfvei)`|1CZI;u64!{5l*E!$tK_0o zAjM#0U}&mqV5Vzi9%5i=Wol?;V4!Vi03;W7>UW`N$jwj5OsmAL;lh>aWbP0l+XkKx0GV2 literal 0 HcmV?d00001 diff --git a/F-Droid/res/drawable-mdpi/circle.png b/F-Droid/res/drawable-mdpi/circle.png new file mode 100644 index 0000000000000000000000000000000000000000..30d6fa9d57ddc42f58715b2e2a42d008fe4e3cc8 GIT binary patch literal 370 zcmeAS@N?(olHy`uVBq!ia0vp^93afW0wnX;%77#TOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>H=O_WNwooW=}y;_7b$g&aIx978y+=bqijdq6?JIk0={ zp3*!Pjhj#Nn&&GyF-^ICvsJf+vrEZ9C~cFEPE%}$Raed~ldsDC^Dn+P^OWm}bK4st zw^1T?Hqb2964!{5l*E!$tK_0oAjM#0U}&mqV5Vzi9%5i=Wol?;V4!Vi03;W7>UW`N z$jwj5OsmAL;lh>aWbP0l+XkKmaAxT literal 0 HcmV?d00001 diff --git a/F-Droid/res/drawable-xhdpi/circle.png b/F-Droid/res/drawable-xhdpi/circle.png new file mode 100644 index 0000000000000000000000000000000000000000..bdb13ba713331f8f5ad9363bb60340c7b2f50e63 GIT binary patch literal 625 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 literal 0 HcmV?d00001 diff --git a/F-Droid/res/drawable/circle.png b/F-Droid/res/drawable/circle.png new file mode 100644 index 0000000000000000000000000000000000000000..211bb48b89b4efa84569b2654c3c55a0d4f3df3e GIT binary patch literal 625 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-GzZ+Rj;xUkjGiz z5m^kh={g8AI%&+V01C2~c>21s-)EENG_qp$oUXyZz-aI3;uzv_eCgD^eoTP^t>@=* zX>8fxl-%*n%iVGL9`>6TW<_Z3>#%F=JT^aEVOy8S5q1Hw4Ban`KXT4!y<^&4?O(g! zxLAF%u^;E5kn0P-g4IHbrG}$(pw!+(Or< z^{FIUzGm(*2)0eH^<1?g&FVz2chKRGuSPe_-&RPznRRUs&$YAM(^GzZdSvhGtlwOI zdG+*z2fjQ=y&&lJV&kcEcYMTmzMgNb5_sa~VUtrCO)+d|R|w05&-}Q1XT|ap!D@Tt zyUR{}33_~fW5jeLnQ60+9R6h7o#1+))kJ*WwhXD|Jwgu^)kXg8_b)jd66}2S#h!kX z0QXq;KX1)9D;L*q=#{tu3|-X{*NBpo#FA921ejWnf_H!m=GjLvDUbW?Cg~4K9*ErERK(!v>gTe~DWM4f0{`gQ literal 0 HcmV?d00001 diff --git a/F-Droid/res/layout/swap_peer_list_item.xml b/F-Droid/res/layout/swap_peer_list_item.xml new file mode 100644 index 000000000..c47aaf3a6 --- /dev/null +++ b/F-Droid/res/layout/swap_peer_list_item.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/F-Droid/res/values/colors.xml b/F-Droid/res/values/colors.xml index 5bc4e07e5..762421be7 100644 --- a/F-Droid/res/values/colors.xml +++ b/F-Droid/res/values/colors.xml @@ -21,5 +21,6 @@ #00b9e6 #bbbbbb #4a4a4a + #bbbbbb \ No newline at end of file diff --git a/F-Droid/src/org/fdroid/fdroid/UpdateService.java b/F-Droid/src/org/fdroid/fdroid/UpdateService.java index fcd910327..5d5f44596 100644 --- a/F-Droid/src/org/fdroid/fdroid/UpdateService.java +++ b/F-Droid/src/org/fdroid/fdroid/UpdateService.java @@ -153,9 +153,11 @@ public class UpdateService extends IntentService implements ProgressListener { } public void hideDialog() { - dialog.hide(); - dialog.dismiss(); - dialog = null; + if (dialog != null) { + dialog.hide(); + dialog.dismiss(); + dialog = null; + } } @Override @@ -220,9 +222,15 @@ public class UpdateService extends IntentService implements ProgressListener { } public static UpdateReceiver updateRepoNow(String address, Context context) { + return updateRepoNow(address, context, true); + } + + public static UpdateReceiver updateRepoNow(String address, Context context, boolean showDialog) { Intent intent = new Intent(context, UpdateService.class); UpdateReceiver receiver = new UpdateReceiver(new Handler()); - receiver.showDialog(context); + if (showDialog) { + receiver.showDialog(context); + } intent.putExtra(EXTRA_RECEIVER, receiver); if (!TextUtils.isEmpty(address)) { intent.putExtra(EXTRA_ADDRESS, address); diff --git a/F-Droid/src/org/fdroid/fdroid/localrepo/SwapManager.java b/F-Droid/src/org/fdroid/fdroid/localrepo/SwapManager.java index 7f81042fa..9b8a70a15 100644 --- a/F-Droid/src/org/fdroid/fdroid/localrepo/SwapManager.java +++ b/F-Droid/src/org/fdroid/fdroid/localrepo/SwapManager.java @@ -148,7 +148,7 @@ public class SwapManager { Log.e(TAG, "Oops, got a different peer to swap with than initially planned."); } - return UpdateService.updateRepoNow(peer.getRepoAddress(), context); + return UpdateService.updateRepoNow(peer.getRepoAddress(), context, false); } /** diff --git a/F-Droid/src/org/fdroid/fdroid/localrepo/peers/BluetoothPeer.java b/F-Droid/src/org/fdroid/fdroid/localrepo/peers/BluetoothPeer.java index e2d7def0f..096e81b62 100644 --- a/F-Droid/src/org/fdroid/fdroid/localrepo/peers/BluetoothPeer.java +++ b/F-Droid/src/org/fdroid/fdroid/localrepo/peers/BluetoothPeer.java @@ -3,6 +3,8 @@ package org.fdroid.fdroid.localrepo.peers; import android.bluetooth.BluetoothDevice; import android.os.Parcel; +import org.fdroid.fdroid.R; + // TODO: Still to be implemented. public class BluetoothPeer implements Peer { @@ -19,12 +21,12 @@ public class BluetoothPeer implements Peer { @Override public String getName() { - return "Bluetooth: " + device.getName(); + return device.getName(); } @Override public int getIcon() { - return android.R.drawable.stat_sys_data_bluetooth; + return R.drawable.ic_bluetooth_white; } @Override diff --git a/F-Droid/src/org/fdroid/fdroid/localrepo/peers/BonjourFinder.java b/F-Droid/src/org/fdroid/fdroid/localrepo/peers/BonjourFinder.java index bb0e50770..cfffddc11 100644 --- a/F-Droid/src/org/fdroid/fdroid/localrepo/peers/BonjourFinder.java +++ b/F-Droid/src/org/fdroid/fdroid/localrepo/peers/BonjourFinder.java @@ -5,6 +5,10 @@ import android.net.wifi.WifiManager; import android.os.AsyncTask; import android.util.Log; +import org.fdroid.fdroid.FDroidApp; +import org.fdroid.fdroid.Utils; +import org.fdroid.fdroid.localrepo.LocalRepoKeyStore; + import java.io.IOException; import java.net.InetAddress; @@ -106,9 +110,18 @@ public class BonjourFinder extends PeerFinder implements ServiceLis addFDroidService(event); } + /** + * Broadcasts the fact that a Bonjour peer was found to swap with. + * Checks that the service is an F-Droid service, and also that it is not the F-Droid service + * for this device (by comparing its signing fingerprint to our signing fingerprint). + */ private void addFDroidService(ServiceEvent event) { final ServiceInfo serviceInfo = event.getInfo(); - if (serviceInfo.getPropertyString("type").startsWith("fdroidrepo")) { + final String type = serviceInfo.getPropertyString("type"); + final String fingerprint = serviceInfo.getPropertyString("fingerprint"); + final boolean isFDroid = type != null && type.startsWith("fdroidrepo"); + final boolean isSelf = FDroidApp.repo != null && fingerprint != null && fingerprint.equalsIgnoreCase(FDroidApp.repo.fingerprint); + if (isFDroid && !isSelf) { foundPeer(new BonjourPeer(serviceInfo)); } } diff --git a/F-Droid/src/org/fdroid/fdroid/localrepo/peers/BonjourPeer.java b/F-Droid/src/org/fdroid/fdroid/localrepo/peers/BonjourPeer.java index fabb89d66..8f0e5b91c 100644 --- a/F-Droid/src/org/fdroid/fdroid/localrepo/peers/BonjourPeer.java +++ b/F-Droid/src/org/fdroid/fdroid/localrepo/peers/BonjourPeer.java @@ -21,12 +21,12 @@ public class BonjourPeer implements Peer { @Override public String getName() { - return "Bonjour: " + serviceInfo.getName(); + return serviceInfo.getName(); } @Override public int getIcon() { - return R.drawable.wifi; + return R.drawable.ic_network_wifi_white; } @Override diff --git a/F-Droid/src/org/fdroid/fdroid/views/swap/StartSwapView.java b/F-Droid/src/org/fdroid/fdroid/views/swap/StartSwapView.java index a232325cb..7a46c40a8 100644 --- a/F-Droid/src/org/fdroid/fdroid/views/swap/StartSwapView.java +++ b/F-Droid/src/org/fdroid/fdroid/views/swap/StartSwapView.java @@ -6,6 +6,8 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffColorFilter; import android.os.Build; import android.support.annotation.ColorRes; import android.support.annotation.NonNull; @@ -22,6 +24,7 @@ import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CompoundButton; +import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.ProgressBar; @@ -72,11 +75,12 @@ public class StartSwapView extends LinearLayout implements SwapWorkflowActivity. @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { - convertView = LayoutInflater.from(getContext()).inflate(android.R.layout.two_line_list_item, parent, false); + convertView = LayoutInflater.from(getContext()).inflate(R.layout.swap_peer_list_item, parent, false); } Peer peer = getItem(position); - ((TextView)convertView.findViewById(android.R.id.text1)).setText(peer.getName()); + ((TextView)convertView.findViewById(R.id.peer_name)).setText(peer.getName()); + ((ImageView)convertView.findViewById(R.id.icon)).setImageDrawable(getResources().getDrawable(peer.getIcon())); return convertView; }