332 lines
15 KiB
Java
332 lines
15 KiB
Java
package androidx.preference;
|
|
|
|
import android.content.res.TypedArray;
|
|
import android.graphics.drawable.Drawable;
|
|
import android.os.Handler;
|
|
import android.text.TextUtils;
|
|
import android.util.AttributeSet;
|
|
import android.view.LayoutInflater;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.RestrictTo;
|
|
import androidx.appcompat.content.res.AppCompatResources;
|
|
import androidx.core.view.ViewCompat;
|
|
import androidx.preference.Preference;
|
|
import androidx.preference.PreferenceGroup;
|
|
import androidx.preference.PreferenceManager;
|
|
import androidx.recyclerview.widget.DiffUtil;
|
|
import androidx.recyclerview.widget.RecyclerView;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
public class PreferenceGroupAdapter extends RecyclerView.Adapter<PreferenceViewHolder> implements Preference.OnPreferenceChangeInternalListener, PreferenceGroup.PreferencePositionCallback {
|
|
private Handler mHandler;
|
|
private PreferenceGroup mPreferenceGroup;
|
|
private List<PreferenceResourceDescriptor> mPreferenceResourceDescriptors;
|
|
private List<Preference> mPreferences;
|
|
private Runnable mSyncRunnable = new AnonymousClass1();
|
|
private List<Preference> mVisiblePreferences;
|
|
|
|
/* renamed from: androidx.preference.PreferenceGroupAdapter$1 reason: invalid class name */
|
|
public class AnonymousClass1 implements Runnable {
|
|
public AnonymousClass1() {
|
|
}
|
|
|
|
@Override // java.lang.Runnable
|
|
public void run() {
|
|
PreferenceGroupAdapter.this.updatePreferences();
|
|
}
|
|
}
|
|
|
|
/* renamed from: androidx.preference.PreferenceGroupAdapter$2 reason: invalid class name */
|
|
public class AnonymousClass2 extends DiffUtil.Callback {
|
|
public final /* synthetic */ PreferenceManager.PreferenceComparisonCallback val$comparisonCallback;
|
|
public final /* synthetic */ List val$oldVisibleList;
|
|
public final /* synthetic */ List val$visiblePreferenceList;
|
|
|
|
public AnonymousClass2(List list, List list2, PreferenceManager.PreferenceComparisonCallback preferenceComparisonCallback) {
|
|
this.val$oldVisibleList = list;
|
|
this.val$visiblePreferenceList = list2;
|
|
this.val$comparisonCallback = preferenceComparisonCallback;
|
|
}
|
|
|
|
@Override // androidx.recyclerview.widget.DiffUtil.Callback
|
|
public boolean areContentsTheSame(int i, int i2) {
|
|
return this.val$comparisonCallback.arePreferenceContentsTheSame((Preference) this.val$oldVisibleList.get(i), (Preference) this.val$visiblePreferenceList.get(i2));
|
|
}
|
|
|
|
@Override // androidx.recyclerview.widget.DiffUtil.Callback
|
|
public boolean areItemsTheSame(int i, int i2) {
|
|
return this.val$comparisonCallback.arePreferenceItemsTheSame((Preference) this.val$oldVisibleList.get(i), (Preference) this.val$visiblePreferenceList.get(i2));
|
|
}
|
|
|
|
@Override // androidx.recyclerview.widget.DiffUtil.Callback
|
|
public int getNewListSize() {
|
|
return this.val$visiblePreferenceList.size();
|
|
}
|
|
|
|
@Override // androidx.recyclerview.widget.DiffUtil.Callback
|
|
public int getOldListSize() {
|
|
return this.val$oldVisibleList.size();
|
|
}
|
|
}
|
|
|
|
/* renamed from: androidx.preference.PreferenceGroupAdapter$3 reason: invalid class name */
|
|
public class AnonymousClass3 implements Preference.OnPreferenceClickListener {
|
|
public final /* synthetic */ PreferenceGroup val$group;
|
|
|
|
public AnonymousClass3(PreferenceGroup preferenceGroup) {
|
|
this.val$group = preferenceGroup;
|
|
}
|
|
|
|
@Override // androidx.preference.Preference.OnPreferenceClickListener
|
|
public boolean onPreferenceClick(Preference preference) {
|
|
this.val$group.setInitialExpandedChildrenCount(Integer.MAX_VALUE);
|
|
PreferenceGroupAdapter.this.onPreferenceHierarchyChange(preference);
|
|
PreferenceGroup.OnExpandButtonClickListener onExpandButtonClickListener = this.val$group.getOnExpandButtonClickListener();
|
|
if (onExpandButtonClickListener == null) {
|
|
return true;
|
|
}
|
|
onExpandButtonClickListener.onExpandButtonClick();
|
|
return true;
|
|
}
|
|
}
|
|
|
|
public static class PreferenceResourceDescriptor {
|
|
public String mClassName;
|
|
public int mLayoutResId;
|
|
public int mWidgetLayoutResId;
|
|
|
|
public PreferenceResourceDescriptor(Preference preference) {
|
|
this.mClassName = preference.getClass().getName();
|
|
this.mLayoutResId = preference.getLayoutResource();
|
|
this.mWidgetLayoutResId = preference.getWidgetLayoutResource();
|
|
}
|
|
|
|
public boolean equals(Object obj) {
|
|
if (!(obj instanceof PreferenceResourceDescriptor)) {
|
|
return false;
|
|
}
|
|
PreferenceResourceDescriptor preferenceResourceDescriptor = (PreferenceResourceDescriptor) obj;
|
|
return this.mLayoutResId == preferenceResourceDescriptor.mLayoutResId && this.mWidgetLayoutResId == preferenceResourceDescriptor.mWidgetLayoutResId && TextUtils.equals(this.mClassName, preferenceResourceDescriptor.mClassName);
|
|
}
|
|
|
|
public int hashCode() {
|
|
return this.mClassName.hashCode() + ((((527 + this.mLayoutResId) * 31) + this.mWidgetLayoutResId) * 31);
|
|
}
|
|
}
|
|
|
|
public PreferenceGroupAdapter(PreferenceGroup preferenceGroup) {
|
|
this.mPreferenceGroup = preferenceGroup;
|
|
this.mHandler = new Handler();
|
|
this.mPreferenceGroup.setOnPreferenceChangeInternalListener(this);
|
|
this.mPreferences = new ArrayList();
|
|
this.mVisiblePreferences = new ArrayList();
|
|
this.mPreferenceResourceDescriptors = new ArrayList();
|
|
PreferenceGroup preferenceGroup2 = this.mPreferenceGroup;
|
|
if (preferenceGroup2 instanceof PreferenceScreen) {
|
|
setHasStableIds(((PreferenceScreen) preferenceGroup2).shouldUseGeneratedIds());
|
|
} else {
|
|
setHasStableIds(true);
|
|
}
|
|
updatePreferences();
|
|
}
|
|
|
|
private ExpandButton createExpandButton(PreferenceGroup preferenceGroup, List<Preference> list) {
|
|
ExpandButton expandButton = new ExpandButton(preferenceGroup.getContext(), list, preferenceGroup.getId());
|
|
expandButton.setOnPreferenceClickListener(new AnonymousClass3(preferenceGroup));
|
|
return expandButton;
|
|
}
|
|
|
|
private List<Preference> createVisiblePreferencesList(PreferenceGroup preferenceGroup) {
|
|
ArrayList arrayList = new ArrayList();
|
|
ArrayList arrayList2 = new ArrayList();
|
|
int preferenceCount = preferenceGroup.getPreferenceCount();
|
|
int i = 0;
|
|
for (int i2 = 0; i2 < preferenceCount; i2++) {
|
|
Preference preference = preferenceGroup.getPreference(i2);
|
|
if (preference.isVisible()) {
|
|
if (!isGroupExpandable(preferenceGroup) || i < preferenceGroup.getInitialExpandedChildrenCount()) {
|
|
arrayList.add(preference);
|
|
} else {
|
|
arrayList2.add(preference);
|
|
}
|
|
if (!(preference instanceof PreferenceGroup)) {
|
|
i++;
|
|
} else {
|
|
PreferenceGroup preferenceGroup2 = (PreferenceGroup) preference;
|
|
if (!preferenceGroup2.isOnSameScreenAsChildren()) {
|
|
continue;
|
|
} else if (!isGroupExpandable(preferenceGroup) || !isGroupExpandable(preferenceGroup2)) {
|
|
for (Preference preference2 : createVisiblePreferencesList(preferenceGroup2)) {
|
|
if (!isGroupExpandable(preferenceGroup) || i < preferenceGroup.getInitialExpandedChildrenCount()) {
|
|
arrayList.add(preference2);
|
|
} else {
|
|
arrayList2.add(preference2);
|
|
}
|
|
i++;
|
|
}
|
|
} else {
|
|
throw new IllegalStateException("Nesting an expandable group inside of another expandable group is not supported!");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (isGroupExpandable(preferenceGroup) && i > preferenceGroup.getInitialExpandedChildrenCount()) {
|
|
arrayList.add(createExpandButton(preferenceGroup, arrayList2));
|
|
}
|
|
return arrayList;
|
|
}
|
|
|
|
private void flattenPreferenceGroup(List<Preference> list, PreferenceGroup preferenceGroup) {
|
|
preferenceGroup.sortPreferences();
|
|
int preferenceCount = preferenceGroup.getPreferenceCount();
|
|
for (int i = 0; i < preferenceCount; i++) {
|
|
Preference preference = preferenceGroup.getPreference(i);
|
|
list.add(preference);
|
|
PreferenceResourceDescriptor preferenceResourceDescriptor = new PreferenceResourceDescriptor(preference);
|
|
if (!this.mPreferenceResourceDescriptors.contains(preferenceResourceDescriptor)) {
|
|
this.mPreferenceResourceDescriptors.add(preferenceResourceDescriptor);
|
|
}
|
|
if (preference instanceof PreferenceGroup) {
|
|
PreferenceGroup preferenceGroup2 = (PreferenceGroup) preference;
|
|
if (preferenceGroup2.isOnSameScreenAsChildren()) {
|
|
flattenPreferenceGroup(list, preferenceGroup2);
|
|
}
|
|
}
|
|
preference.setOnPreferenceChangeInternalListener(this);
|
|
}
|
|
}
|
|
|
|
private boolean isGroupExpandable(PreferenceGroup preferenceGroup) {
|
|
return preferenceGroup.getInitialExpandedChildrenCount() != Integer.MAX_VALUE;
|
|
}
|
|
|
|
public Preference getItem(int i) {
|
|
if (i < 0 || i >= getItemCount()) {
|
|
return null;
|
|
}
|
|
return this.mVisiblePreferences.get(i);
|
|
}
|
|
|
|
@Override // androidx.recyclerview.widget.RecyclerView.Adapter
|
|
public int getItemCount() {
|
|
return this.mVisiblePreferences.size();
|
|
}
|
|
|
|
@Override // androidx.recyclerview.widget.RecyclerView.Adapter
|
|
public long getItemId(int i) {
|
|
if (!hasStableIds()) {
|
|
return -1;
|
|
}
|
|
return getItem(i).getId();
|
|
}
|
|
|
|
@Override // androidx.recyclerview.widget.RecyclerView.Adapter
|
|
public int getItemViewType(int i) {
|
|
PreferenceResourceDescriptor preferenceResourceDescriptor = new PreferenceResourceDescriptor(getItem(i));
|
|
int indexOf = this.mPreferenceResourceDescriptors.indexOf(preferenceResourceDescriptor);
|
|
if (indexOf != -1) {
|
|
return indexOf;
|
|
}
|
|
int size = this.mPreferenceResourceDescriptors.size();
|
|
this.mPreferenceResourceDescriptors.add(preferenceResourceDescriptor);
|
|
return size;
|
|
}
|
|
|
|
@Override // androidx.preference.PreferenceGroup.PreferencePositionCallback
|
|
public int getPreferenceAdapterPosition(Preference preference) {
|
|
int size = this.mVisiblePreferences.size();
|
|
for (int i = 0; i < size; i++) {
|
|
Preference preference2 = this.mVisiblePreferences.get(i);
|
|
if (preference2 != null && preference2.equals(preference)) {
|
|
return i;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
@Override // androidx.preference.PreferenceGroup.PreferencePositionCallback
|
|
public int getPreferenceAdapterPosition(String str) {
|
|
int size = this.mVisiblePreferences.size();
|
|
for (int i = 0; i < size; i++) {
|
|
if (TextUtils.equals(str, this.mVisiblePreferences.get(i).getKey())) {
|
|
return i;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
public void onBindViewHolder(@NonNull PreferenceViewHolder preferenceViewHolder, int i) {
|
|
getItem(i).onBindViewHolder(preferenceViewHolder);
|
|
}
|
|
|
|
@Override // androidx.recyclerview.widget.RecyclerView.Adapter
|
|
@NonNull
|
|
public PreferenceViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
|
|
PreferenceResourceDescriptor preferenceResourceDescriptor = this.mPreferenceResourceDescriptors.get(i);
|
|
LayoutInflater from = LayoutInflater.from(viewGroup.getContext());
|
|
TypedArray obtainStyledAttributes = viewGroup.getContext().obtainStyledAttributes((AttributeSet) null, R.styleable.BackgroundStyle);
|
|
Drawable drawable = obtainStyledAttributes.getDrawable(R.styleable.BackgroundStyle_android_selectableItemBackground);
|
|
if (drawable == null) {
|
|
drawable = AppCompatResources.getDrawable(viewGroup.getContext(), 17301602);
|
|
}
|
|
obtainStyledAttributes.recycle();
|
|
View inflate = from.inflate(preferenceResourceDescriptor.mLayoutResId, viewGroup, false);
|
|
if (inflate.getBackground() == null) {
|
|
ViewCompat.setBackground(inflate, drawable);
|
|
}
|
|
ViewGroup viewGroup2 = (ViewGroup) inflate.findViewById(16908312);
|
|
if (viewGroup2 != null) {
|
|
int i2 = preferenceResourceDescriptor.mWidgetLayoutResId;
|
|
if (i2 != 0) {
|
|
from.inflate(i2, viewGroup2);
|
|
} else {
|
|
viewGroup2.setVisibility(8);
|
|
}
|
|
}
|
|
return new PreferenceViewHolder(inflate);
|
|
}
|
|
|
|
@Override // androidx.preference.Preference.OnPreferenceChangeInternalListener
|
|
public void onPreferenceChange(Preference preference) {
|
|
int indexOf = this.mVisiblePreferences.indexOf(preference);
|
|
if (indexOf != -1) {
|
|
notifyItemChanged(indexOf, preference);
|
|
}
|
|
}
|
|
|
|
@Override // androidx.preference.Preference.OnPreferenceChangeInternalListener
|
|
public void onPreferenceHierarchyChange(Preference preference) {
|
|
this.mHandler.removeCallbacks(this.mSyncRunnable);
|
|
this.mHandler.post(this.mSyncRunnable);
|
|
}
|
|
|
|
@Override // androidx.preference.Preference.OnPreferenceChangeInternalListener
|
|
public void onPreferenceVisibilityChange(Preference preference) {
|
|
onPreferenceHierarchyChange(preference);
|
|
}
|
|
|
|
public void updatePreferences() {
|
|
for (Preference preference : this.mPreferences) {
|
|
preference.setOnPreferenceChangeInternalListener(null);
|
|
}
|
|
ArrayList arrayList = new ArrayList(this.mPreferences.size());
|
|
this.mPreferences = arrayList;
|
|
flattenPreferenceGroup(arrayList, this.mPreferenceGroup);
|
|
List<Preference> list = this.mVisiblePreferences;
|
|
List<Preference> createVisiblePreferencesList = createVisiblePreferencesList(this.mPreferenceGroup);
|
|
this.mVisiblePreferences = createVisiblePreferencesList;
|
|
PreferenceManager preferenceManager = this.mPreferenceGroup.getPreferenceManager();
|
|
if (preferenceManager == null || preferenceManager.getPreferenceComparisonCallback() == null) {
|
|
notifyDataSetChanged();
|
|
} else {
|
|
DiffUtil.calculateDiff(new AnonymousClass2(list, createVisiblePreferencesList, preferenceManager.getPreferenceComparisonCallback())).dispatchUpdatesTo(this);
|
|
}
|
|
for (Preference preference2 : this.mPreferences) {
|
|
preference2.clearWasDetached();
|
|
}
|
|
}
|
|
}
|