diff --git a/mobile/AndroidManifest.xml b/mobile/AndroidManifest.xml index 4f2584ac..982befec 100644 --- a/mobile/AndroidManifest.xml +++ b/mobile/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="44" + android:versionName="0.6"> mHeaders; - private TreeMap> mPlugins = - new TreeMap>(); + // we use a tree map to have a map with alphabetical order + private static TreeMap> sPlugins = null; @Override public void onBuildHeaders(List
target) { @@ -29,7 +29,14 @@ public class IITC_PluginPreferenceActivity extends PreferenceActivity { bar.setTitle("IITC Plugins"); bar.setDisplayHomeAsUpEnabled(true); 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>(); + setUpPluginPreferenceScreen(); + } + addHeaders(); } @Override @@ -44,6 +51,11 @@ public class IITC_PluginPreferenceActivity extends PreferenceActivity { } } + // called by Plugins Fragment + public static ArrayList 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()); + + // 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()); 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 list = mPlugins.get(plugin_cat); + ArrayList list = sPlugins.get(plugin_cat); list.add(plugin_pref); } void addHeaders() { - for (Map.Entry> 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> entry : sPlugins.entrySet()) { Bundle bundle = new Bundle(); String plugin_cat = entry.getKey(); - bundle.putString("title", plugin_cat); - ArrayList pluginIds = new ArrayList(); - for (IITC_PluginPreference pref : entry.getValue()) { - pluginIds.add(pref.getKey()); - ArrayList plugin_vals = new ArrayList(); - 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; diff --git a/mobile/src/com/cradle/iitc_mobile/fragments/PluginsFragment.java b/mobile/src/com/cradle/iitc_mobile/fragments/PluginsFragment.java index c52007ed..96094054 100644 --- a/mobile/src/com/cradle/iitc_mobile/fragments/PluginsFragment.java +++ b/mobile/src/com/cradle/iitc_mobile/fragments/PluginsFragment.java @@ -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 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 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); }