package com.afollestad.materialdialogs.prefs;
import android.content.Context;
import android.content.res.TypedArray;
import android.content.res.XmlResourceParser;
import android.preference.Preference;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import com.afollestad.materialdialogs.commons.R;
import java.lang.reflect.Method;
/** @author Aidan Follestad (afollestad) */
class PrefUtil {
private PrefUtil() {}
static void setLayoutResource(
@NonNull Context context, @NonNull Preference preference, @Nullable AttributeSet attrs) {
boolean foundLayout = false;
if (attrs != null) {
for (int i = 0; i < attrs.getAttributeCount(); i++) {
final String namespace = ((XmlResourceParser) attrs).getAttributeNamespace(0);
if (namespace.equals("http://schemas.android.com/apk/res/android")
&& attrs.getAttributeName(i).equals("layout")) {
foundLayout = true;
break;
}
}
}
boolean useStockLayout = false;
if (attrs != null) {
TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.Preference, 0, 0);
try {
useStockLayout = a.getBoolean(R.styleable.Preference_useStockLayout, false);
} finally {
a.recycle();
}
}
if (!foundLayout && !useStockLayout) {
preference.setLayoutResource(R.layout.md_preference_custom);
}
}
static void registerOnActivityDestroyListener(
@NonNull Preference preference,
@NonNull PreferenceManager.OnActivityDestroyListener listener) {
try {
PreferenceManager pm = preference.getPreferenceManager();
Method method =
pm.getClass()
.getDeclaredMethod(
"registerOnActivityDestroyListener",
PreferenceManager.OnActivityDestroyListener.class);
method.setAccessible(true);
method.invoke(pm, listener);
} catch (Exception ignored) {
}
}
static void unregisterOnActivityDestroyListener(
@NonNull Preference preference,
@NonNull PreferenceManager.OnActivityDestroyListener listener) {
try {
PreferenceManager pm = preference.getPreferenceManager();
Method method =
pm.getClass()
.getDeclaredMethod(
"unregisterOnActivityDestroyListener",
PreferenceManager.OnActivityDestroyListener.class);
method.setAccessible(true);
method.invoke(pm, listener);
} catch (Exception ignored) {
}
}
}