package com.benny.openlauncher.fragment; import android.content.SharedPreferences; import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceFragmentCompat; import android.support.v7.preference.PreferenceGroup; import android.support.v7.widget.Toolbar; import android.util.TypedValue; import com.benny.openlauncher.R; import com.benny.openlauncher.util.AppSettings; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public abstract class SettingsBaseFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener { private static final List<Integer> noRestart = new ArrayList<>(Arrays.asList( R.string.pref_key__gesture_double_tap, R.string.pref_key__gesture_swipe_up, R.string.pref_key__gesture_swipe_down, R.string.pref_key__gesture_pinch_in, R.string.pref_key__gesture_pinch_out )); @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { getPreferenceManager().setSharedPreferencesName("app"); } @Override public void onResume() { super.onResume(); Toolbar toolbar = getActivity().findViewById(R.id.toolbar); if (toolbar != null) toolbar.setTitle(getPreferenceScreen().getTitle()); SharedPreferences sharedPreferences = AppSettings.get().getDefaultPreferences(); sharedPreferences.registerOnSharedPreferenceChangeListener(this); updateIcons(getPreferenceScreen()); updateSummaries(); } @Override public void onPause() { super.onPause(); SharedPreferences sharedPreferences = AppSettings.get().getDefaultPreferences(); sharedPreferences.unregisterOnSharedPreferenceChangeListener(this); } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { updateSummaries(); if (!noRestart.contains(key)) { AppSettings.get().setAppRestartRequired(true); } } public void updateSummaries() { // override in fragments } public void updateIcons(PreferenceGroup prefGroup) { if (prefGroup != null && isAdded()) { int prefCount = prefGroup.getPreferenceCount(); for (int i = 0; i < prefCount; i++) { Preference preference = prefGroup.getPreference(i); if (preference != null) { Drawable drawable = preference.getIcon(); if (drawable != null) { TypedValue color = new TypedValue(); getContext().getTheme().resolveAttribute(android.R.attr.textColor, color, true); drawable.mutate().setColorFilter(getResources().getColor(color.resourceId), PorterDuff.Mode.SRC_IN); } if (preference instanceof PreferenceGroup) { updateIcons((PreferenceGroup) preference); } } } } } }