You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
2.8 KiB
79 lines
2.8 KiB
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; |
|
} |
|
} |
|
} |
|
}
|
|
|