mirror of
https://github.com/TrianguloY/UrlChecker.git
synced 2024-09-19 20:02:16 +02:00
parent
95472046d4
commit
491cd17c64
@ -17,6 +17,7 @@ import com.trianguloy.urlchecker.modules.DescriptionConfig;
|
||||
import com.trianguloy.urlchecker.url.UrlData;
|
||||
import com.trianguloy.urlchecker.utilities.AndroidUtils;
|
||||
import com.trianguloy.urlchecker.utilities.Inflater;
|
||||
import com.trianguloy.urlchecker.utilities.JavaUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
@ -52,6 +53,7 @@ public class UriPartsModule extends AModuleData {
|
||||
class UriPartsDialog extends AModuleDialog {
|
||||
|
||||
private LinearLayout box;
|
||||
private final List<String> expandedGroups = new ArrayList<>();
|
||||
|
||||
public UriPartsDialog(MainDialog dialog) {
|
||||
super(dialog);
|
||||
@ -77,7 +79,7 @@ class UriPartsDialog extends AModuleDialog {
|
||||
|
||||
// domain elements
|
||||
if (uri.getAuthority() != null || uri.getScheme() != null) {
|
||||
var domain = addGroup("Domain", null);
|
||||
var domain = addGroup("Domain", -1, null);
|
||||
addPart("scheme", uri.getScheme(), domain, null);
|
||||
addPart("user info", uri.getUserInfo(), domain, null);
|
||||
addPart("host", uri.getHost(), domain, null);
|
||||
@ -87,7 +89,7 @@ class UriPartsDialog extends AModuleDialog {
|
||||
// paths
|
||||
var pathSegments = uri.getPathSegments();
|
||||
if (pathSegments.size() > 0) {
|
||||
var paths = addGroup("Paths (" + pathSegments.size() + ")", uri.buildUpon().path(null));
|
||||
var paths = addGroup("Paths", pathSegments.size(), uri.buildUpon().path(null));
|
||||
for (var i = 0; i < pathSegments.size(); i++) {
|
||||
var pathSegment = pathSegments.get(i);
|
||||
|
||||
@ -103,7 +105,7 @@ class UriPartsDialog extends AModuleDialog {
|
||||
// queries
|
||||
var queryParts = getQueryParts(uri);
|
||||
if (queryParts.size() > 0) {
|
||||
var queries = addGroup("Queries (" + queryParts.size() + ")", uri.buildUpon().query(null));
|
||||
var queries = addGroup("Queries", queryParts.size(), uri.buildUpon().query(null));
|
||||
for (var queryPart : queryParts) {
|
||||
var builder = uri.buildUpon();
|
||||
builder.query(null);
|
||||
@ -118,7 +120,7 @@ class UriPartsDialog extends AModuleDialog {
|
||||
|
||||
// fragment
|
||||
if (uri.getFragment() != null) {
|
||||
var fragment = addGroup("Fragment", uri.buildUpon().fragment(null));
|
||||
var fragment = addGroup("Fragment", -1, uri.buildUpon().fragment(null));
|
||||
addPart("#", uri.getFragment(), fragment, null);
|
||||
}
|
||||
|
||||
@ -126,14 +128,14 @@ class UriPartsDialog extends AModuleDialog {
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a collapsible group, removes it
|
||||
* Adds a collapsible group
|
||||
*/
|
||||
private LinearLayout addGroup(String name, Uri.Builder onDelete) {
|
||||
private LinearLayout addGroup(String name, int size, Uri.Builder onDelete) {
|
||||
var title = Inflater.inflate(R.layout.uri_part, box);
|
||||
title.findViewById(R.id.key).setVisibility(View.GONE);
|
||||
|
||||
var name_view = title.<TextView>findViewById(R.id.value);
|
||||
name_view.setText(name);
|
||||
name_view.setText(name + (size <= -1 ? "" : " (" + size + ")"));
|
||||
AndroidUtils.setAsClickable(name_view);
|
||||
|
||||
var delete_view = title.<Button>findViewById(R.id.delete);
|
||||
@ -141,13 +143,16 @@ class UriPartsDialog extends AModuleDialog {
|
||||
else delete_view.setOnClickListener(v -> setUrl(onDelete.build().toString()));
|
||||
|
||||
var group = Inflater.<LinearLayout>inflate(R.layout.dialog_parts, box);
|
||||
group.setVisibility(View.GONE);
|
||||
group.setVisibility(expandedGroups.contains(name) ? View.VISIBLE : View.GONE);
|
||||
AndroidUtils.toggleableListener(
|
||||
title,
|
||||
v -> group.setVisibility(group.getVisibility() == View.GONE ? View.VISIBLE : View.GONE),
|
||||
v -> AndroidUtils.setStartDrawables(name_view,
|
||||
group.getVisibility() != View.GONE ? R.drawable.arrow_down : R.drawable.arrow_right
|
||||
)
|
||||
v -> JavaUtils.toggleContains(expandedGroups, name),
|
||||
v -> {
|
||||
group.setVisibility(expandedGroups.contains(name) ? View.VISIBLE : View.GONE);
|
||||
AndroidUtils.setStartDrawables(name_view,
|
||||
expandedGroups.contains(name) ? R.drawable.arrow_down : R.drawable.arrow_right
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
return group;
|
||||
|
@ -4,6 +4,7 @@ import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
@ -49,14 +50,14 @@ public interface JavaUtils {
|
||||
* Applies a filter to both strings to check if all words of keywords are in body.
|
||||
* The order does not matter.
|
||||
*/
|
||||
static boolean containsWords(String body, String keywords){
|
||||
static boolean containsWords(String body, String keywords) {
|
||||
JavaUtils.Function<String, String> filter = s -> s.toUpperCase().replaceAll("[\\s-_]+", " ");
|
||||
// Match all words
|
||||
String[] words = filter.apply(keywords).split(" ");
|
||||
body = filter.apply(body);
|
||||
boolean match = true;
|
||||
for (String str : words) {
|
||||
if (!body.contains(str)){
|
||||
if (!body.contains(str)) {
|
||||
match = false;
|
||||
break;
|
||||
}
|
||||
@ -68,10 +69,19 @@ public interface JavaUtils {
|
||||
* Returns the object, or default if null
|
||||
* java.util.Optional requires api 24
|
||||
*/
|
||||
static <T> T valueOrDefault(T value, T defaultValue){
|
||||
static <T> T valueOrDefault(T value, T defaultValue) {
|
||||
return value == null ? defaultValue : value;
|
||||
}
|
||||
|
||||
/**
|
||||
* if the element is present in the list, removes it
|
||||
* if not, adds it
|
||||
*/
|
||||
static <E> void toggleContains(Collection<E> list, E element) {
|
||||
if (list.contains(element)) list.remove(element);
|
||||
else list.add(element);
|
||||
}
|
||||
|
||||
/**
|
||||
* java.util.function.Consumer requires api 24
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user