|
|
|
package org.transdroid.core.gui.settings;
|
|
|
|
|
|
|
|
import android.os.Bundle;
|
|
|
|
|
|
|
|
import androidx.annotation.XmlRes;
|
|
|
|
import androidx.appcompat.app.AppCompatActivity;
|
|
|
|
import androidx.appcompat.app.AppCompatCallback;
|
|
|
|
import androidx.preference.Preference;
|
|
|
|
import androidx.preference.PreferenceFragmentCompat;
|
|
|
|
import androidx.preference.PreferenceManager;
|
|
|
|
import androidx.preference.PreferenceManagerBinder;
|
|
|
|
import androidx.preference.PreferenceScreen;
|
|
|
|
|
|
|
|
public class PreferenceCompatActivity extends AppCompatActivity implements AppCompatCallback, PreferenceFragmentCompat.OnPreferenceStartScreenCallback {
|
|
|
|
|
|
|
|
private PreferenceFragmentCompat fragment;
|
|
|
|
|
|
|
|
public void addPreferencesFromResource(@XmlRes int preferencesResId) {
|
|
|
|
fragment = new RootPreferencesFragment(preferencesResId);
|
|
|
|
getSupportFragmentManager().beginTransaction().replace(android.R.id.content, fragment).commitNow();
|
|
|
|
}
|
|
|
|
|
|
|
|
public PreferenceManager getPreferenceManager() {
|
|
|
|
return fragment.getPreferenceManager();
|
|
|
|
}
|
|
|
|
|
|
|
|
public PreferenceScreen getPreferenceScreen() {
|
|
|
|
return fragment.getPreferenceScreen();
|
|
|
|
}
|
|
|
|
|
|
|
|
public Preference findPreference(CharSequence key) {
|
|
|
|
return fragment.findPreference(key);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean onPreferenceStartScreen(PreferenceFragmentCompat caller, PreferenceScreen pref) {
|
|
|
|
LowerPreferencesFragment lowerFragment = new LowerPreferencesFragment(pref);
|
|
|
|
getSupportFragmentManager().beginTransaction().replace(android.R.id.content, lowerFragment).addToBackStack("lower").commit();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static class RootPreferencesFragment extends PreferenceFragmentCompat {
|
|
|
|
|
|
|
|
private int preferencesResId;
|
|
|
|
|
|
|
|
public RootPreferencesFragment(int preferencesResId) {
|
|
|
|
this.preferencesResId = preferencesResId;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
|
|
|
addPreferencesFromResource(preferencesResId);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static class LowerPreferencesFragment extends PreferenceFragmentCompat {
|
|
|
|
|
|
|
|
private PreferenceScreen prefs;
|
|
|
|
|
|
|
|
public LowerPreferencesFragment() {
|
|
|
|
}
|
|
|
|
|
|
|
|
public LowerPreferencesFragment(PreferenceScreen prefs) {
|
|
|
|
this.prefs = prefs;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
|
|
|
if (prefs != null) {
|
|
|
|
// Update the already loaded preferences with this fragment's manager to handle dialog clicks, etc.
|
|
|
|
for (int i = 0; i < prefs.getPreferenceCount(); i++) {
|
|
|
|
PreferenceManagerBinder.bind(prefs.getPreference(i), getPreferenceManager());
|
|
|
|
}
|
|
|
|
setPreferenceScreen(prefs);
|
|
|
|
prefs = null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|