From d25ebdc818d469f6707fd12f63f83e2c61f89f5c Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Tue, 2 Oct 2018 12:08:01 -0700 Subject: [PATCH] Fix indentation in preference fragments. Unfortunately, while there does exist an XML property to disable the indentation, it's bugged for category headings, so we have to do this silly thing where we strip the padding in the adapter. Hopefully they'll fix the bug and we can move to use the sanctioned property. See: https://issuetracker.google.com/issues/111662669 Fixes #8233 --- .../CorrectedPreferenceFragment.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/org/thoughtcrime/securesms/preferences/CorrectedPreferenceFragment.java b/src/org/thoughtcrime/securesms/preferences/CorrectedPreferenceFragment.java index 848af5490d..c311ff4d4b 100644 --- a/src/org/thoughtcrime/securesms/preferences/CorrectedPreferenceFragment.java +++ b/src/org/thoughtcrime/securesms/preferences/CorrectedPreferenceFragment.java @@ -1,12 +1,21 @@ package org.thoughtcrime.securesms.preferences; +import android.annotation.SuppressLint; import android.os.Bundle; import android.support.v4.app.DialogFragment; +import android.support.v4.view.ViewCompat; import android.support.v7.preference.Preference; +import android.support.v7.preference.PreferenceCategory; import android.support.v7.preference.PreferenceFragmentCompat; +import android.support.v7.preference.PreferenceGroupAdapter; +import android.support.v7.preference.PreferenceScreen; +import android.support.v7.preference.PreferenceViewHolder; +import android.support.v7.widget.RecyclerView; import android.view.View; +import android.view.ViewGroup; +import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.CustomDefaultPreference; import org.thoughtcrime.securesms.preferences.widgets.ColorPickerPreference; import org.thoughtcrime.securesms.preferences.widgets.ColorPickerPreferenceDialogFragmentCompat; @@ -44,5 +53,33 @@ public abstract class CorrectedPreferenceFragment extends PreferenceFragmentComp } } + @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; + for (int i = 0; i < viewGroup.getChildCount(); i++) { + setZeroPaddingToLayoutChildren(viewGroup.getChildAt(i)); + ViewCompat.setPaddingRelative(viewGroup, 0, viewGroup.getPaddingTop(), ViewCompat.getPaddingEnd(viewGroup), viewGroup.getPaddingBottom()); + } + } }