diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/list/UriPartsModule.java b/app/src/main/java/com/trianguloy/urlchecker/modules/list/UriPartsModule.java index 4ed6a6e..79e57f3 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/modules/list/UriPartsModule.java +++ b/app/src/main/java/com/trianguloy/urlchecker/modules/list/UriPartsModule.java @@ -18,13 +18,12 @@ import com.trianguloy.urlchecker.url.UrlData; import com.trianguloy.urlchecker.utilities.methods.AndroidUtils; import com.trianguloy.urlchecker.utilities.methods.Inflater; import com.trianguloy.urlchecker.utilities.methods.JavaUtils; +import com.trianguloy.urlchecker.utilities.methods.JavaUtils.Supplier; import java.util.ArrayList; import java.util.List; -/** - * This module shows all parts of the url decoded - */ +/** This module shows all parts of the url decoded */ public class UriPartsModule extends AModuleData { @Override @@ -81,7 +80,7 @@ class UriPartsDialog extends AModuleDialog { urlQuerySanitizer.setUnregisteredParameterValueSanitizer(v -> v); urlQuerySanitizer.parseQuery(uri.getQuery() // this will fix issues with the parser decoding twice - .replace("%","%25")); + .replace("%", "%25")); } // domain elements @@ -98,14 +97,17 @@ class UriPartsDialog extends AModuleDialog { if (!pathSegments.isEmpty()) { var paths = addGroup("Paths", pathSegments.size(), uri.buildUpon().path(null)); for (var i = 0; i < pathSegments.size(); i++) { - var pathSegment = pathSegments.get(i); - - var builder = uri.buildUpon(); - builder.path(null); - for (int newI = 0; newI < pathSegments.size(); newI++) { - if (newI != i) builder.appendPath(pathSegments.get(newI)); - } - addPart("/", pathSegment, paths, builder); + int removeI = i; + // append the path + addPart("/", pathSegments.get(i), paths, () -> { + // generate the same url without this path + var builder = uri.buildUpon(); + builder.path(null); + for (int newI = 0; newI < pathSegments.size(); newI++) { + if (newI != removeI) builder.appendPath(pathSegments.get(newI)); + } + return builder.build().toString(); + }); } } @@ -114,14 +116,17 @@ class UriPartsDialog extends AModuleDialog { if (!parameters.isEmpty()) { var queries = addGroup("Parameters", parameters.size(), uri.buildUpon().query(null)); for (var i = 0; i < parameters.size(); i++) { - // generate same url but without this parameter - var builder = uri.buildUpon(); - builder.query(null); - for (var j = 0; j < parameters.size(); j++) { - if (i != j) builder.appendQueryParameter(parameters.get(j).mParameter, parameters.get(j).mValue); - } + int removeI = i; // append the parameter - addPart(parameters.get(i).mParameter, parameters.get(i).mValue, queries, builder); + addPart(parameters.get(i).mParameter, parameters.get(i).mValue, queries, () -> { + // generate same url but without this parameter + var builder = uri.buildUpon(); + builder.query(null); + for (var newI = 0; newI < parameters.size(); newI++) { + if (newI != removeI) builder.appendQueryParameter(parameters.get(newI).mParameter, parameters.get(newI).mValue); + } + return builder.build().toString(); + }); } } @@ -134,9 +139,7 @@ class UriPartsDialog extends AModuleDialog { setVisibility(box.getChildCount() > 0); } - /** - * Adds a collapsible group - */ + /** Adds a collapsible group */ 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); @@ -163,10 +166,8 @@ class UriPartsDialog extends AModuleDialog { return group; } - /** - * Adds a part - */ - private void addPart(String name, String value, LinearLayout container, Uri.Builder onDelete) { + /** Adds a part */ + private void addPart(String name, String value, LinearLayout container, Supplier onDelete) { if (value == null) return; // create row var part = Inflater.inflate(R.layout.uri_part, container); @@ -186,20 +187,13 @@ class UriPartsDialog extends AModuleDialog { // configure delete var delete_view = part.