Added: Add UriScheme and move UriUtils to com.termux.shared.net package

This commit is contained in:
agnostic-apollo
2021-10-26 00:46:54 +05:00
parent 37b9bcf5af
commit 549a772d45
5 changed files with 54 additions and 25 deletions

View File

@@ -0,0 +1,100 @@
package com.termux.shared.net;
import android.net.Uri;
import androidx.annotation.NonNull;
import com.termux.shared.data.DataUtils;
import com.termux.shared.file.FileUtils;
import com.termux.shared.models.net.UriScheme;
public class UriUtils {
/**
* Get the full file path from a {@link Uri}.
*
* If the {@link Uri} was created from file path with {@link Uri#parse(String)}, like "am"
* command "-d" option does, and the path contained a "#", then anything after it would become
* the fragment and {@link Uri#getPath()} will only return the path before it, which would be
* invalid. The fragment must be manually appended to the path to get the full path.
*
* If the {@link Uri} was created with {@link Uri.Builder} and path was set
* with {@link Uri.Builder#path(String)}, then "#" will automatically be encoded to "%23"
* and separate fragment will not exist.
*
* @param uri The {@link Uri} to get basename from.
* @return Returns the file path if found, otherwise {@code null}.
*/
public static String getUriFilePath(Uri uri) {
if (uri == null) return null;
String path = uri.getPath();
if (DataUtils.isNullOrEmpty(path)) return null;
String fragment = uri.getFragment();
return path + (DataUtils.isNullOrEmpty(fragment) ? "" : "#" + fragment);
}
/**
* Get the file basename from a {@link Uri}. The file basename is anything after last forward
* slash "/" in the path, or the path itself if its not found.
*
* @param uri The {@link Uri} to get basename from.
* @param withFragment If the {@link Uri} fragment should be included in basename.
* @return Returns the file basename if found, otherwise {@code null}.
*/
public static String getUriFileBasename(Uri uri, boolean withFragment) {
if (uri == null) return null;
String path;
if (withFragment) {
path = getUriFilePath(uri);
} else {
path = uri.getPath();
if (DataUtils.isNullOrEmpty(path)) return null;
}
return FileUtils.getFileBasename(path);
}
/**
* Get {@link UriScheme#SCHEME_FILE} {@link Uri} for path.
*
* @param path The path for the {@link Uri}.
* @return Returns the {@link Uri}.
*/
public static Uri getFileUri(@NonNull String path) {
return new Uri.Builder().scheme(UriScheme.SCHEME_FILE).path(path).build();
}
/**
* Get {@link UriScheme#SCHEME_FILE} {@link Uri} for path.
*
* @param authority The authority for the {@link Uri}.
* @param path The path for the {@link Uri}.
* @return Returns the {@link Uri}.
*/
public static Uri getFileUri(@NonNull String authority, @NonNull String path) {
return new Uri.Builder().scheme(UriScheme.SCHEME_FILE).authority(authority).path(path).build();
}
/**
* Get {@link UriScheme#SCHEME_CONTENT} {@link Uri} for path.
*
* @param path The path for the {@link Uri}.
* @return Returns the {@link Uri}.
*/
public static Uri getContentUri(@NonNull String path) {
return new Uri.Builder().scheme(UriScheme.SCHEME_CONTENT).path(path).build();
}
/**
* Get {@link UriScheme#SCHEME_CONTENT} {@link Uri} for path.
*
* @param authority The authority for the {@link Uri}.
* @param path The path for the {@link Uri}.
* @return Returns the {@link Uri}.
*/
public static Uri getContentUri(@NonNull String authority, @NonNull String path) {
return new Uri.Builder().scheme(UriScheme.SCHEME_CONTENT).authority(authority).path(path).build();
}
}