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"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.cradle.iitc_mobile"
android:versionCode="42"
android:versionName="0.5.8">
android:versionCode="44"
android:versionName="0.6">
<uses-sdk
android:minSdkVersion="14"

View File

@ -20,8 +20,8 @@ import java.util.TreeMap;
public class IITC_PluginPreferenceActivity extends PreferenceActivity {
private List<Header> mHeaders;
private TreeMap<String, ArrayList<IITC_PluginPreference>> mPlugins =
new TreeMap<String, ArrayList<IITC_PluginPreference>>();
// we use a tree map to have a map with alphabetical order
private static TreeMap<String, ArrayList<IITC_PluginPreference>> sPlugins = null;
@Override
public void onBuildHeaders(List<Header> target) {
@ -29,8 +29,15 @@ public class IITC_PluginPreferenceActivity extends PreferenceActivity {
bar.setTitle("IITC Plugins");
bar.setDisplayHomeAsUpEnabled(true);
mHeaders = target;
// 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
public boolean onOptionsItemSelected(MenuItem item) {
@ -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() {
// get all plugins from asset manager
@ -95,9 +107,6 @@ public class IITC_PluginPreferenceActivity extends PreferenceActivity {
addPluginPreference(src, file.toString(), true);
}
}
// now finally add the headers
addHeaders();
}
void addPluginPreference(String src, String plugin_key,
@ -131,9 +140,11 @@ public class IITC_PluginPreferenceActivity extends PreferenceActivity {
// add [User] tag to additional plugins
if (additional)
plugin_cat = "[User] " + plugin_cat;
// now we have all stuff together and can build the pref screen
if (mPlugins.containsKey(plugin_cat) == false) {
mPlugins.put(plugin_cat, new ArrayList<IITC_PluginPreference>());
// now we have all stuff together and can build the preference
// 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);
}
@ -144,24 +155,17 @@ public class IITC_PluginPreferenceActivity extends PreferenceActivity {
plugin_pref.setSummary(plugin_desc);
plugin_pref.setDefaultValue(false);
plugin_pref.setPersistent(true);
ArrayList<IITC_PluginPreference> list = mPlugins.get(plugin_cat);
ArrayList<IITC_PluginPreference> list = sPlugins.get(plugin_cat);
list.add(plugin_pref);
}
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();
String plugin_cat = entry.getKey();
bundle.putString("title", 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);
bundle.putString("category", plugin_cat);
Header newHeader = new Header();
newHeader.title = plugin_cat;
newHeader.fragmentArguments = bundle;

View File

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