mirror of
https://github.com/fankes/termux-app.git
synced 2025-09-06 02:35:19 +08:00
Added: Add ResourceUtils to get resource ids from names
This will mainly be used later when MediaViewer gets added.
This commit is contained in:
@@ -0,0 +1,136 @@
|
||||
package com.termux.shared.android.resource;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.termux.shared.data.DataUtils;
|
||||
import com.termux.shared.logger.Logger;
|
||||
|
||||
public class ResourceUtils {
|
||||
|
||||
public static final String RES_TYPE_COLOR = "color";
|
||||
public static final String RES_TYPE_DRAWABLE = "drawable";
|
||||
public static final String RES_TYPE_ID = "id";
|
||||
public static final String RES_TYPE_LAYOUT = "layout";
|
||||
public static final String RES_TYPE_STRING = "string";
|
||||
public static final String RES_TYPE_STYLE = "style";
|
||||
|
||||
|
||||
private static final String LOG_TAG = "ResourceUtils";
|
||||
|
||||
|
||||
/** Wrapper for {@link #getResourceId(Context, String, String, String, boolean)} without {@code defPackage}. */
|
||||
@Nullable
|
||||
public static Integer getResourceId(@NonNull Context context, String name,
|
||||
@Nullable String defType,
|
||||
boolean logErrorMessage) {
|
||||
return getResourceId(context, name, defType, null, logErrorMessage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get resource identifier for the given resource name. A fully qualified resource name is of
|
||||
* the form "package:type/entry". The first two components (package and type) are optional if
|
||||
* defType and defPackage, respectively, are specified here.
|
||||
*
|
||||
* @param context The {@link Context} for operations.
|
||||
* @param name The name of the desired resource.
|
||||
* @param defType Optional default resource type to find, if "type/" is not included in the name.
|
||||
* Can be null to require an explicit type.
|
||||
* @param defPackage Optional default package to find, if "package:" is not included in the name.
|
||||
* Can be null to require an explicit package.
|
||||
* @param logErrorMessage If an error message should be logged if failed to find resource.
|
||||
* @return Returns the resource identifier if found. Otherwise {@code null} if an exception was
|
||||
* raised or resource was not found.
|
||||
*/
|
||||
@Nullable
|
||||
public static Integer getResourceId(@NonNull Context context, String name,
|
||||
@Nullable String defType, @Nullable String defPackage,
|
||||
boolean logErrorMessage) {
|
||||
if (DataUtils.isNullOrEmpty(name)) return null;
|
||||
|
||||
Integer resourceId = null;
|
||||
try {
|
||||
resourceId = context.getResources().getIdentifier(name, defType, defPackage);
|
||||
if (resourceId == 0) resourceId = null;
|
||||
} catch (Exception e) {
|
||||
// Ignore
|
||||
}
|
||||
|
||||
if (resourceId == null && logErrorMessage) {
|
||||
Logger.logError(LOG_TAG, "Resource id not found. name: \"" + name + "\", type: \"" + defType+ "\", package: \"" + defPackage + "\", component \"" + context.getClass().getName() + "\"");
|
||||
}
|
||||
|
||||
return resourceId;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Get resource identifier for the given {@link #RES_TYPE_COLOR} resource name.
|
||||
*
|
||||
* This is a wrapper for {@link #getResourceId(Context, String, String, String, boolean)}.
|
||||
*/
|
||||
@Nullable
|
||||
public static Integer getColorResourceId(@NonNull Context context, String name,
|
||||
@Nullable String defPackage, boolean logErrorMessage) {
|
||||
return getResourceId(context, name, RES_TYPE_COLOR, defPackage, logErrorMessage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get resource identifier for the given {@link #RES_TYPE_DRAWABLE} resource name.
|
||||
*
|
||||
* This is a wrapper for {@link #getResourceId(Context, String, String, String, boolean)}.
|
||||
*/
|
||||
@Nullable
|
||||
public static Integer getDrawableResourceId(@NonNull Context context, String name,
|
||||
@Nullable String defPackage, boolean logErrorMessage) {
|
||||
return getResourceId(context, name, RES_TYPE_DRAWABLE, defPackage, logErrorMessage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get resource identifier for the given {@link #RES_TYPE_ID} resource name.
|
||||
*
|
||||
* This is a wrapper for {@link #getResourceId(Context, String, String, String, boolean)}.
|
||||
*/
|
||||
@Nullable
|
||||
public static Integer getIdResourceId(@NonNull Context context, String name,
|
||||
@Nullable String defPackage, boolean logErrorMessage) {
|
||||
return getResourceId(context, name, RES_TYPE_ID, defPackage, logErrorMessage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get resource identifier for the given {@link #RES_TYPE_LAYOUT} resource name.
|
||||
*
|
||||
* This is a wrapper for {@link #getResourceId(Context, String, String, String, boolean)}.
|
||||
*/
|
||||
@Nullable
|
||||
public static Integer getLayoutResourceId(@NonNull Context context, String name,
|
||||
@Nullable String defPackage, boolean logErrorMessage) {
|
||||
return getResourceId(context, name, RES_TYPE_LAYOUT, defPackage, logErrorMessage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get resource identifier for the given {@link #RES_TYPE_STRING} resource name.
|
||||
*
|
||||
* This is a wrapper for {@link #getResourceId(Context, String, String, String, boolean)}.
|
||||
*/
|
||||
@Nullable
|
||||
public static Integer getStringResourceId(@NonNull Context context, String name,
|
||||
@Nullable String defPackage, boolean logErrorMessage) {
|
||||
return getResourceId(context, name, RES_TYPE_STRING, defPackage, logErrorMessage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get resource identifier for the given {@link #RES_TYPE_STYLE} resource name.
|
||||
*
|
||||
* This is a wrapper for {@link #getResourceId(Context, String, String, String, boolean)}.
|
||||
*/
|
||||
@Nullable
|
||||
public static Integer getStyleResourceId(@NonNull Context context, String name,
|
||||
@Nullable String defPackage, boolean logErrorMessage) {
|
||||
return getResourceId(context, name, RES_TYPE_STYLE, defPackage, logErrorMessage);
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user