Added: Add `SettingsProviderUtils` to get `Setting` global, secure and system namespace values

This commit is contained in:
agnostic-apollo 2022-06-12 02:35:46 +05:00
parent 03e1d14e1e
commit 42eee49d30
1 changed files with 99 additions and 0 deletions

View File

@ -0,0 +1,99 @@
package com.termux.shared.android;
import android.content.Context;
import android.provider.Settings;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.termux.shared.logger.Logger;
public class SettingsProviderUtils {
private static final String LOG_TAG = "SettingsProviderUtils";
/** The namespaces for {@link Settings} provider. */
public enum SettingNamespace {
/** The {@link Settings.Global} namespace */
GLOBAL,
/** The {@link Settings.Secure} namespace */
SECURE,
/** The {@link Settings.System} namespace */
SYSTEM
}
/** The type of values for {@link Settings} provider. */
public enum SettingType {
FLOAT,
INT,
LONG,
STRING,
URI
}
/**
* Get settings key value from {@link SettingNamespace} namespace and of {@link SettingType} type.
*
* @param context The {@link Context} for operations.
* @param namespace The {@link SettingNamespace} in which to get key value from.
* @param type The {@link SettingType} for the key.
* @param key The {@link String} name for key.
* @param def The {@link Object} default value for key.
* @return Returns the key value. This will be {@code null} if an exception is raised.
*/
@Nullable
public static Object getSettingsValue(@NonNull Context context, @NonNull SettingNamespace namespace,
@NonNull SettingType type, @NonNull String key, @Nullable Object def) {
try {
switch (namespace) {
case GLOBAL:
switch (type) {
case FLOAT:
return Settings.Global.getFloat(context.getContentResolver(), key);
case INT:
return Settings.Global.getInt(context.getContentResolver(), key);
case LONG:
return Settings.Global.getLong(context.getContentResolver(), key);
case STRING:
return Settings.Global.getString(context.getContentResolver(), key);
case URI:
return Settings.Global.getUriFor(key);
}
case SECURE:
switch (type) {
case FLOAT:
return Settings.Secure.getFloat(context.getContentResolver(), key);
case INT:
return Settings.Secure.getInt(context.getContentResolver(), key);
case LONG:
return Settings.Secure.getLong(context.getContentResolver(), key);
case STRING:
return Settings.Secure.getString(context.getContentResolver(), key);
case URI:
return Settings.Secure.getUriFor(key);
}
case SYSTEM:
switch (type) {
case FLOAT:
return Settings.System.getFloat(context.getContentResolver(), key);
case INT:
return Settings.System.getInt(context.getContentResolver(), key);
case LONG:
return Settings.System.getLong(context.getContentResolver(), key);
case STRING:
return Settings.System.getString(context.getContentResolver(), key);
case URI:
return Settings.System.getUriFor(key);
}
}
} catch (Settings.SettingNotFoundException e) {
// Ignore
} catch (Exception e) {
Logger.logError(LOG_TAG, "Failed to get \"" + key + "\" key value from settings \"" + namespace.name() + "\" namespace of type \"" + type.name() + "\"");
}
return def;
}
}