package com.moez.QKSMS.ui.view; import android.content.Context; import android.content.SharedPreferences; import android.preference.SwitchPreference; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import com.moez.QKSMS.R; /** * Regular android preferences don't have basic functionality when you manually add them to views * other than preferencegroups, this just cleans up some boilerplate code to set ours up */ public class QKSwitchPreference extends SwitchPreference { private SharedPreferences mPrefs; private OnPreferenceClickListener mOnPreferenceClickListener; private boolean mDefaultValue; private QKSwitch mCheckBox; public QKSwitchPreference(Context context, OnPreferenceClickListener onPreferenceClickListener, String key, SharedPreferences prefs, boolean defaultValue, int title, int summary) { super(context); mPrefs = prefs; mOnPreferenceClickListener = onPreferenceClickListener; setKey(key); setEnabled(true); mDefaultValue = prefs.getBoolean(key, defaultValue); if (title != 0) setTitle(title); if (summary != 0) setSummary(summary); } public View getView() { return getView(null, null); } @Override public View getView(View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item_preference, parent, false); convertView.setLayoutParams(new LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); LinearLayout frameLayout = (LinearLayout) convertView.findViewById(android.R.id.widget_frame); LayoutInflater.from(getContext()).inflate(R.layout.view_switch, frameLayout); } super.onBindView(convertView); mCheckBox = (QKSwitch) convertView.findViewById(android.R.id.checkbox); mCheckBox.setChecked(mDefaultValue); convertView.setOnClickListener(v -> { mPrefs.edit().putBoolean(getKey(), !mCheckBox.isChecked()).apply(); mCheckBox.setChecked(!mCheckBox.isChecked()); if (mOnPreferenceClickListener != null) { mOnPreferenceClickListener.onPreferenceClick(QKSwitchPreference.this); } }); return convertView; } @Override public boolean isChecked() { return mCheckBox == null ? super.isChecked() : mCheckBox.isChecked(); } }