package com.topjohnwu.magisk.base import android.annotation.SuppressLint import android.content.SharedPreferences import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.preference.* import androidx.recyclerview.widget.RecyclerView import org.koin.android.ext.android.inject abstract class BasePreferenceFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPreferenceChangeListener { protected val prefs: SharedPreferences by inject() protected val activity get() = requireActivity() as BaseActivity<*, *> override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { val v = super.onCreateView(inflater, container, savedInstanceState) prefs.registerOnSharedPreferenceChangeListener(this) return v } override fun onDestroyView() { prefs.unregisterOnSharedPreferenceChangeListener(this) super.onDestroyView() } private fun setAllPreferencesToAvoidHavingExtraSpace(preference: Preference) { preference.isIconSpaceReserved = false if (preference is PreferenceGroup) for (i in 0 until preference.preferenceCount) setAllPreferencesToAvoidHavingExtraSpace(preference.getPreference(i)) } override fun setPreferenceScreen(preferenceScreen: PreferenceScreen?) { if (preferenceScreen != null) setAllPreferencesToAvoidHavingExtraSpace(preferenceScreen) super.setPreferenceScreen(preferenceScreen) } override fun onCreateAdapter(preferenceScreen: PreferenceScreen?): RecyclerView.Adapter<*> = object : PreferenceGroupAdapter(preferenceScreen) { @SuppressLint("RestrictedApi") override fun onPreferenceHierarchyChange(preference: Preference?) { if (preference != null) setAllPreferencesToAvoidHavingExtraSpace(preference) super.onPreferenceHierarchyChange(preference) } } }