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) { } } }