better node selection (#701)

merge-requests/3/head
wow nero 4 years ago committed by GitHub
parent 08f815e830
commit 82b25df7ad
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -59,6 +59,7 @@ import java.text.NumberFormat;
import java.util.Collection; import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.Objects;
import java.util.Set; import java.util.Set;
import timber.log.Timber; import timber.log.Timber;
@ -214,9 +215,15 @@ public class NodeFragment extends Fragment
nodeItem.setFavourite(true); nodeItem.setFavourite(true);
activityCallback.setFavouriteNodes(nodeList); activityCallback.setFavouriteNodes(nodeList);
} }
nodeItem.setSelected(true); AsyncTask.execute(() -> {
activityCallback.setNode(nodeItem); // this marks it as selected & saves it as well activityCallback.setNode(nodeItem); // this marks it as selected & saves it as well
nodesAdapter.dataSetChanged(); // to refresh test results nodeItem.setSelecting(false);
try {
Objects.requireNonNull(getActivity()).runOnUiThread(() -> nodesAdapter.allowClick(true));
} catch (NullPointerException ex) {
// it's ok
}
});
} }
// open up edit dialog // open up edit dialog

@ -36,6 +36,8 @@ import java.util.Comparator;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import lombok.Getter;
import lombok.Setter;
import okhttp3.HttpUrl; import okhttp3.HttpUrl;
import okhttp3.MediaType; import okhttp3.MediaType;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
@ -49,12 +51,21 @@ public class NodeInfo extends Node {
final static public int MIN_MAJOR_VERSION = 14; final static public int MIN_MAJOR_VERSION = 14;
final static public String RPC_VERSION = "2.0"; final static public String RPC_VERSION = "2.0";
@Getter
private long height = 0; private long height = 0;
@Getter
private long timestamp = 0; private long timestamp = 0;
@Getter
private int majorVersion = 0; private int majorVersion = 0;
@Getter
private double responseTime = Double.MAX_VALUE; private double responseTime = Double.MAX_VALUE;
@Getter
private int responseCode = 0; private int responseCode = 0;
@Getter
private boolean tested = false; private boolean tested = false;
@Getter
@Setter
private boolean selecting = false;
public void clear() { public void clear() {
height = 0; height = 0;
@ -65,10 +76,6 @@ public class NodeInfo extends Node {
tested = false; tested = false;
} }
public boolean isTested() {
return tested;
}
static public NodeInfo fromString(String nodeString) { static public NodeInfo fromString(String nodeString) {
try { try {
return new NodeInfo(nodeString); return new NodeInfo(nodeString);
@ -118,26 +125,6 @@ public class NodeInfo extends Node {
super(); super();
} }
public long getHeight() {
return height;
}
public long getTimestamp() {
return timestamp;
}
public int getMajorVersion() {
return majorVersion;
}
public double getResponseTime() {
return responseTime;
}
public int getResponseCode() {
return responseCode;
}
public boolean isSuccessful() { public boolean isSuccessful() {
return (responseCode >= 200) && (responseCode < 300); return (responseCode >= 200) && (responseCode < 300);
} }

@ -112,6 +112,7 @@ public class NodeInfoAdapter extends RecyclerView.Adapter<NodeInfoAdapter.ViewHo
class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener { class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
final ImageButton ibBookmark; final ImageButton ibBookmark;
final View pbBookmark;
final TextView tvName; final TextView tvName;
final TextView tvIp; final TextView tvIp;
final ImageView ivPing; final ImageView ivPing;
@ -120,6 +121,7 @@ public class NodeInfoAdapter extends RecyclerView.Adapter<NodeInfoAdapter.ViewHo
ViewHolder(View itemView) { ViewHolder(View itemView) {
super(itemView); super(itemView);
ibBookmark = itemView.findViewById(R.id.ibBookmark); ibBookmark = itemView.findViewById(R.id.ibBookmark);
pbBookmark = itemView.findViewById(R.id.pbBookmark);
tvName = itemView.findViewById(R.id.tvName); tvName = itemView.findViewById(R.id.tvName);
tvIp = itemView.findViewById(R.id.tvAddress); tvIp = itemView.findViewById(R.id.tvAddress);
ivPing = itemView.findViewById(R.id.ivPing); ivPing = itemView.findViewById(R.id.ivPing);
@ -161,6 +163,7 @@ public class NodeInfoAdapter extends RecyclerView.Adapter<NodeInfoAdapter.ViewHo
itemView.setClickable(itemsClickable); itemView.setClickable(itemsClickable);
itemView.setEnabled(itemsClickable); itemView.setEnabled(itemsClickable);
ibBookmark.setClickable(itemsClickable); ibBookmark.setClickable(itemsClickable);
pbBookmark.setVisibility(nodeItem.isSelecting() ? View.VISIBLE : View.INVISIBLE);
showStar(); showStar();
} }
@ -169,7 +172,10 @@ public class NodeInfoAdapter extends RecyclerView.Adapter<NodeInfoAdapter.ViewHo
if (listener != null) { if (listener != null) {
int position = getAdapterPosition(); // gets item position int position = getAdapterPosition(); // gets item position
if (position != RecyclerView.NO_POSITION) { // Check if an item was deleted, but the user clicked it before the UI removed it if (position != RecyclerView.NO_POSITION) { // Check if an item was deleted, but the user clicked it before the UI removed it
listener.onInteraction(view, nodeItems.get(position)); final NodeInfo node = nodeItems.get(position);
node.setSelecting(true);
allowClick(false);
listener.onInteraction(view, node);
} }
} }
} }

@ -7,18 +7,31 @@
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
android:background="@drawable/selector_login"> android:background="@drawable/selector_login">
<ImageButton <FrameLayout
android:id="@+id/ibBookmark" android:id="@+id/flBookmark"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentStart="true" android:layout_alignParentStart="true"
android:layout_centerInParent="true" android:layout_centerInParent="true">
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp" <ImageButton
android:padding="12dp" android:id="@+id/ibBookmark"
android:background="?android:attr/selectableItemBackgroundBorderless" android:layout_width="wrap_content"
android:gravity="center" android:layout_height="wrap_content"
android:src="@drawable/ic_favorite_border_24dp" /> android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:background="?android:attr/selectableItemBackgroundBorderless"
android:gravity="center"
android:padding="12dp"
android:src="@drawable/ic_favorite_border_24dp" />
<ProgressBar
android:id="@+id/pbBookmark"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="invisible" />
</FrameLayout>
<LinearLayout <LinearLayout
android:id="@+id/llNode" android:id="@+id/llNode"
@ -28,7 +41,7 @@
android:layout_centerInParent="true" android:layout_centerInParent="true"
android:layout_margin="8dp" android:layout_margin="8dp"
android:layout_toStartOf="@+id/ivPing" android:layout_toStartOf="@+id/ivPing"
android:layout_toEndOf="@id/ibBookmark" android:layout_toEndOf="@id/flBookmark"
android:gravity="start" android:gravity="start"
android:orientation="vertical"> android:orientation="vertical">

Loading…
Cancel
Save