From c5a51a364703da0b4f1e0c6bf214c73c19156830 Mon Sep 17 00:00:00 2001 From: Philipp Schaefer Date: Wed, 11 Sep 2013 00:04:59 +0200 Subject: [PATCH] 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 --- mobile/AndroidManifest.xml | 4 +- .../IITC_PluginPreferenceActivity.java | 46 ++++++++++--------- .../fragments/PluginsFragment.java | 26 +++++------ 3 files changed, 39 insertions(+), 37 deletions(-) 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); }