diff --git a/app/build.gradle b/app/build.gradle index d20ca36..5103bd5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,6 +25,6 @@ dependencies { compile 'com.android.support:appcompat-v7:23.1.1' compile 'com.android.support:cardview-v7:23.1.1' compile 'com.android.support:recyclerview-v7:23.1.1' - compile 'com.github.XhinLiang.MDPreference:mdpreference:0.2.3@aar' - compile 'com.github.XhinLiang.MDPreference:material:0.2.3@aar' + compile 'com.github.XhinLiang.MDPreference:mdpreference:0.3.0@aar' + compile 'com.github.XhinLiang.MDPreference:material:0.3.0@aar' } diff --git a/mdpreference/src/main/java/io/github/xhinliang/mdpreference/DialogPreference.java b/mdpreference/src/main/java/io/github/xhinliang/mdpreference/DialogPreference.java index f94f48f..9030a44 100644 --- a/mdpreference/src/main/java/io/github/xhinliang/mdpreference/DialogPreference.java +++ b/mdpreference/src/main/java/io/github/xhinliang/mdpreference/DialogPreference.java @@ -25,12 +25,10 @@ public abstract class DialogPreference extends Preference { protected Dialog mDialog; private void init(Context context, AttributeSet attrs) { - mDialogTitle = getAndroidAttribute(attrs, "dialogTitle", (String) getTitle()); - mDialogMessage = getAndroidAttribute(attrs, "dialogMessage", null); - mPositiveButtonText = getAndroidAttribute(attrs, "positiveButtonText", - (String) context.getText(R.string.confirm)); - mNegativeButtonText = getAndroidAttribute(attrs, "negativeButtonText", - (String) context.getText(R.string.cancel)); + mDialogTitle = getStringAttribute(attrs, "dialogTitle", (String) getTitle()); + mDialogMessage = getStringAttribute(attrs, "dialogMessage", null); + mPositiveButtonText = getStringAttribute(attrs, "positiveButtonText", context.getString(android.R.string.ok)); + mNegativeButtonText = getStringAttribute(attrs, "negativeButtonText", context.getString(android.R.string.cancel)); } public DialogPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { diff --git a/mdpreference/src/main/java/io/github/xhinliang/mdpreference/Preference.java b/mdpreference/src/main/java/io/github/xhinliang/mdpreference/Preference.java index d95f015..c549ef9 100644 --- a/mdpreference/src/main/java/io/github/xhinliang/mdpreference/Preference.java +++ b/mdpreference/src/main/java/io/github/xhinliang/mdpreference/Preference.java @@ -113,9 +113,37 @@ public void setIcon(Drawable icon) { this.icon = icon; } - public String getAndroidAttribute(AttributeSet attrs, String name, String defaultValue) { - if (attrs == null || attrs.getAttributeValue("http://schemas.android.com/apk/res/android", name) == null) + public String getAndroidAttribute(AttributeSet attrs, String name) { + if (attrs.getAttributeValue("http://schemas.android.com/apk/res/android", name) != null) + return attrs.getAttributeValue("http://schemas.android.com/apk/res/android", name); + return null; + } + + + /** + * Get a resource ID from a string + * @link https://github.com/android/platform_frameworks_base/blob/master/libs/androidfw/ResourceTypes.cpp#L62 + */ + public int formatResourceId(String value) { + if (value != null && value.matches("^@[0-9]+$")) { + // A valid resource ID string starts with "@" and is followed by an integer whose first two bytes are either 0x01 or 0x07 + int resId = Integer.parseInt(value.substring(1, value.length()), 10); + if (Integer.toHexString(resId).length() != 8 || resId >> 24 != 0x01 || resId >> 24 != 0x7f) { + return resId; + } + } + return -1; + } + + public String getStringAttribute(AttributeSet attrs, String name, String defaultValue) { + String value = getAndroidAttribute(attrs, name); + if (value == null) { return defaultValue; - return attrs.getAttributeValue("http://schemas.android.com/apk/res/android", name); + } + int resId = formatResourceId(value); + if (resId == -1) { + return value; + } + return getContext().getString(resId); } } diff --git a/mdpreference/src/main/res/values/strings.xml b/mdpreference/src/main/res/values/strings.xml index f43db31..7f9ba60 100644 --- a/mdpreference/src/main/res/values/strings.xml +++ b/mdpreference/src/main/res/values/strings.xml @@ -1,5 +1,3 @@ MaterialPreference - Cancel - Confirm