termux-app
113 строк · 3.4 Кб
1package com.termux.shared.net.url;
2
3import androidx.annotation.Nullable;
4
5import com.termux.shared.data.DataUtils;
6import com.termux.shared.logger.Logger;
7
8import java.net.MalformedURLException;
9import java.net.URL;
10
11public class UrlUtils {
12
13/** The parts of a {@link URL}. */
14public enum UrlPart {
15AUTHORITY,
16FILE,
17HOST,
18REF,
19FRAGMENT,
20PATH,
21PORT,
22PROTOCOL,
23QUERY,
24USER_INFO
25}
26
27private static final String LOG_TAG = "UrlUtils";
28
29/**
30* Join a url base and destination.
31*
32* @param base The base url to open.
33* @param destination The destination url to open.
34* @param logError If an error message should be logged.
35* @return Returns the joined {@link String} Url, otherwise {@code null}.
36*/
37@Nullable
38public static String joinUrl(final String base, String destination, boolean logError) {
39if (DataUtils.isNullOrEmpty(base)) return null;
40try {
41return new URL(new URL(base), destination).toString();
42} catch (MalformedURLException e) {
43if (logError)
44Logger.logError(LOG_TAG, "Failed to join url base \"" + base + "\" and destination \"" + destination + "\": " + e.getMessage());
45return null;
46}
47}
48
49/**
50* Get {@link URL} from url string.
51*
52* @param urlString The urlString string.
53* @return Returns the {@link URL} if a valid urlString, otherwise {@code null}.
54*/
55@Nullable
56public static URL getUrl(String urlString) {
57if (DataUtils.isNullOrEmpty(urlString)) return null;
58try {
59return new URL(urlString);
60} catch (MalformedURLException e) {
61return null;
62}
63}
64
65/**
66* Get a {@link URL} part from url string.
67*
68* @param urlString The urlString string.
69* @param urlPart The part to get.
70* @return Returns the {@link URL} part if a valid urlString and part, otherwise {@code null}.
71*/
72@Nullable
73public static String getUrlPart(String urlString, UrlPart urlPart) {
74URL url = getUrl(urlString);
75if (url == null) return null;
76switch (urlPart) {
77case AUTHORITY:
78return url.getAuthority();
79case FILE:
80return url.getFile();
81case HOST:
82return url.getHost();
83case REF:
84case FRAGMENT:
85return url.getRef();
86case PATH:
87return url.getPath();
88case PORT:
89return String.valueOf(url.getPort());
90case PROTOCOL:
91return url.getProtocol();
92case QUERY:
93return url.getQuery();
94case USER_INFO:
95return url.getUserInfo();
96default:
97return null;
98}
99}
100
101/** Remove "https://www.", "https://", "www.", etc */
102public static String removeProtocol(String urlString) {
103if (urlString == null) return null;
104return urlString.replaceFirst("^(http[s]?://www\\.|http[s]?://|www\\.)","");
105}
106
107public static boolean areUrlsEqual(String url1, String url2) {
108if (url1 == null && url2 == null) return true;
109if (url1 == null || url2 == null) return false;
110return UrlUtils.removeProtocol(url1).replaceAll("/+$", "").equals(UrlUtils.removeProtocol(url2).replaceAll("/+$", ""));
111}
112
113}
114