made the plugin prefs container static. finished plugin headers. this has multiple advantages:

1) it is enough to parse the plugins only on first start of this
activity (not on every start of the preferences or this activity)
2) actionbar control (not possible with nested preferences)
3) it looks more fancy on tablets
This commit is contained in:
Philipp Schaefer 2013-09-11 00:04:59 +02:00
parent c5d3f300fe
commit c5a51a3647
3 changed files with 39 additions and 37 deletions

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.cradle.iitc_mobile" package="com.cradle.iitc_mobile"
android:versionCode="42" android:versionCode="44"
android:versionName="0.5.8"> android:versionName="0.6">
<uses-sdk <uses-sdk
android:minSdkVersion="14" android:minSdkVersion="14"

View File

@ -20,8 +20,8 @@ import java.util.TreeMap;
public class IITC_PluginPreferenceActivity extends PreferenceActivity { public class IITC_PluginPreferenceActivity extends PreferenceActivity {
private List<Header> mHeaders; private List<Header> mHeaders;
private TreeMap<String, ArrayList<IITC_PluginPreference>> mPlugins = // we use a tree map to have a map with alphabetical order
new TreeMap<String, ArrayList<IITC_PluginPreference>>(); private static TreeMap<String, ArrayList<IITC_PluginPreference>> sPlugins = null;
@Override @Override
public void onBuildHeaders(List<Header> target) { public void onBuildHeaders(List<Header> target) {
@ -29,7 +29,14 @@ public class IITC_PluginPreferenceActivity extends PreferenceActivity {
bar.setTitle("IITC Plugins"); bar.setTitle("IITC Plugins");
bar.setDisplayHomeAsUpEnabled(true); bar.setDisplayHomeAsUpEnabled(true);
mHeaders = target; mHeaders = target;
setUpPluginPreferenceScreen(); // since the plugins container is static,
// it is enough to parse the plugin only on first start.
if (sPlugins == null) {
Log.d("iitcm", "opened plugin prefs the first time since app start -> parse plugins");
sPlugins = new TreeMap<String, ArrayList<IITC_PluginPreference>>();
setUpPluginPreferenceScreen();
}
addHeaders();
} }
@Override @Override
@ -44,6 +51,11 @@ public class IITC_PluginPreferenceActivity extends PreferenceActivity {
} }
} }
// called by Plugins Fragment
public static ArrayList<IITC_PluginPreference> getPluginPreference(String key) {
return sPlugins.get(key);
}
void setUpPluginPreferenceScreen() { void setUpPluginPreferenceScreen() {
// get all plugins from asset manager // get all plugins from asset manager
@ -95,9 +107,6 @@ public class IITC_PluginPreferenceActivity extends PreferenceActivity {
addPluginPreference(src, file.toString(), true); addPluginPreference(src, file.toString(), true);
} }
} }
// now finally add the headers
addHeaders();
} }
void addPluginPreference(String src, String plugin_key, void addPluginPreference(String src, String plugin_key,
@ -131,9 +140,11 @@ public class IITC_PluginPreferenceActivity extends PreferenceActivity {
// add [User] tag to additional plugins // add [User] tag to additional plugins
if (additional) if (additional)
plugin_cat = "[User] " + plugin_cat; plugin_cat = "[User] " + plugin_cat;
// now we have all stuff together and can build the pref screen
if (mPlugins.containsKey(plugin_cat) == false) { // now we have all stuff together and can build the preference
mPlugins.put(plugin_cat, new ArrayList<IITC_PluginPreference>()); // first check if we need a new category
if (sPlugins.containsKey(plugin_cat) == false) {
sPlugins.put(plugin_cat, new ArrayList<IITC_PluginPreference>());
Log.d("iitcm", "create " + plugin_cat + " and add " + plugin_name); Log.d("iitcm", "create " + plugin_cat + " and add " + plugin_name);
} }
@ -144,24 +155,17 @@ public class IITC_PluginPreferenceActivity extends PreferenceActivity {
plugin_pref.setSummary(plugin_desc); plugin_pref.setSummary(plugin_desc);
plugin_pref.setDefaultValue(false); plugin_pref.setDefaultValue(false);
plugin_pref.setPersistent(true); plugin_pref.setPersistent(true);
ArrayList<IITC_PluginPreference> list = mPlugins.get(plugin_cat); ArrayList<IITC_PluginPreference> list = sPlugins.get(plugin_cat);
list.add(plugin_pref); list.add(plugin_pref);
} }
void addHeaders() { void addHeaders() {
for (Map.Entry<String, ArrayList<IITC_PluginPreference>> entry : mPlugins.entrySet()) { // every fragment handles 1 plugin category
// push the category to the fragment and add the header to the list
for (Map.Entry<String, ArrayList<IITC_PluginPreference>> entry : sPlugins.entrySet()) {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
String plugin_cat = entry.getKey(); String plugin_cat = entry.getKey();
bundle.putString("title", plugin_cat); bundle.putString("category", plugin_cat);
ArrayList<String> pluginIds = new ArrayList<String>();
for (IITC_PluginPreference pref : entry.getValue()) {
pluginIds.add(pref.getKey());
ArrayList<String> plugin_vals = new ArrayList<String>();
plugin_vals.add(pref.getTitle().toString());
plugin_vals.add(pref.getSummary().toString());
bundle.putStringArrayList(pref.getKey(), plugin_vals);
}
bundle.putStringArrayList("ids", pluginIds);
Header newHeader = new Header(); Header newHeader = new Header();
newHeader.title = plugin_cat; newHeader.title = plugin_cat;
newHeader.fragmentArguments = bundle; newHeader.fragmentArguments = bundle;

View File

@ -5,6 +5,7 @@ import android.os.Bundle;
import android.preference.PreferenceFragment; import android.preference.PreferenceFragment;
import com.cradle.iitc_mobile.IITC_PluginPreference; import com.cradle.iitc_mobile.IITC_PluginPreference;
import com.cradle.iitc_mobile.IITC_PluginPreferenceActivity;
import com.cradle.iitc_mobile.R; import com.cradle.iitc_mobile.R;
import java.util.ArrayList; import java.util.ArrayList;
@ -15,28 +16,25 @@ public class PluginsFragment extends PreferenceFragment {
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
// just a dummy to get the preferenceScreen
addPreferencesFromResource(R.xml.pluginspreference); addPreferencesFromResource(R.xml.pluginspreference);
// alphabetical order // alphabetical order
getPreferenceScreen().setOrderingAsAdded(false); getPreferenceScreen().setOrderingAsAdded(false);
// add plugin checkboxes // get plugins category for this fragments and plugins list
ArrayList<String> ids = getArguments().getStringArrayList("ids"); String category = getArguments().getString("category");
for (String id : ids) { ArrayList<IITC_PluginPreference> prefs =
String title = getArguments().getStringArrayList(id).get(0); IITC_PluginPreferenceActivity.getPluginPreference(category);
String desc = getArguments().getStringArrayList(id).get(1);
IITC_PluginPreference plugin_pref = new IITC_PluginPreference(getActivity()); // add plugin checkbox preferences
plugin_pref.setKey(id); for (IITC_PluginPreference pref : prefs) {
plugin_pref.setTitle(title); getPreferenceScreen().addPreference(pref);
plugin_pref.setSummary(desc);
plugin_pref.setDefaultValue(false);
plugin_pref.setPersistent(true);
getPreferenceScreen().addPreference(plugin_pref);
} }
// set action bar stuff
ActionBar bar = getActivity().getActionBar(); ActionBar bar = getActivity().getActionBar();
String actionBarTitle = getArguments().getString("title"); bar.setTitle("IITC Plugins: " + category);
bar.setTitle("IITC Plugins: " + actionBarTitle);
bar.setDisplayHomeAsUpEnabled(true); bar.setDisplayHomeAsUpEnabled(true);
getActivity().getActionBar().setDisplayHomeAsUpEnabled(true); getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
} }