From 244e811291917058033d2ae054a6262fdf74869c Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Wed, 19 Sep 2018 00:06:14 -0400 Subject: [PATCH] Remove icon padding in preference screen Courtesy of https://stackoverflow.com/a/51568782 --- .../magisk/fragments/SettingsFragment.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/app/src/full/java/com/topjohnwu/magisk/fragments/SettingsFragment.java b/app/src/full/java/com/topjohnwu/magisk/fragments/SettingsFragment.java index 2768b219b..0ce6e9402 100644 --- a/app/src/full/java/com/topjohnwu/magisk/fragments/SettingsFragment.java +++ b/app/src/full/java/com/topjohnwu/magisk/fragments/SettingsFragment.java @@ -1,5 +1,6 @@ package com.topjohnwu.magisk.fragments; +import android.annotation.SuppressLint; import android.content.Context; import android.content.SharedPreferences; import android.content.res.Resources; @@ -42,8 +43,11 @@ import androidx.preference.ListPreference; import androidx.preference.Preference; import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceFragmentCompat; +import androidx.preference.PreferenceGroupAdapter; import androidx.preference.PreferenceScreen; +import androidx.preference.PreferenceViewHolder; import androidx.preference.SwitchPreference; +import androidx.recyclerview.widget.RecyclerView; public class SettingsFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener, @@ -353,4 +357,38 @@ public class SettingsFragment extends PreferenceFragmentCompat public int[] getSubscribedTopics() { return new int[] {Topic.LOCALE_FETCH_DONE}; } + + @Override + protected RecyclerView.Adapter onCreateAdapter(PreferenceScreen preferenceScreen) { + return new PreferenceGroupAdapter(preferenceScreen) { + @SuppressLint("RestrictedApi") + @Override + public void onBindViewHolder(PreferenceViewHolder holder, int position) { + super.onBindViewHolder(holder, position); + Preference preference = getItem(position); + if (preference instanceof PreferenceCategory) + setZeroPaddingToLayoutChildren(holder.itemView); + else { + View iconFrame = holder.itemView.findViewById(R.id.icon_frame); + if (iconFrame != null) { + iconFrame.setVisibility(preference.getIcon() == null ? View.GONE : View.VISIBLE); + } + } + } + }; + } + + private void setZeroPaddingToLayoutChildren(View view) { + if (!(view instanceof ViewGroup)) + return; + ViewGroup viewGroup = (ViewGroup) view; + int childCount = viewGroup.getChildCount(); + for (int i = 0; i < childCount; i++) { + setZeroPaddingToLayoutChildren(viewGroup.getChildAt(i)); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) + viewGroup.setPaddingRelative(0, viewGroup.getPaddingTop(), viewGroup.getPaddingEnd(), viewGroup.getPaddingBottom()); + else + viewGroup.setPadding(0, viewGroup.getPaddingTop(), viewGroup.getPaddingRight(), viewGroup.getPaddingBottom()); + } + } }