From eb8784ddd3a1430d3f902850f1fe318404765dc4 Mon Sep 17 00:00:00 2001 From: Philipp Schaefer Date: Tue, 10 Sep 2013 14:29:09 +0200 Subject: [PATCH] use header for plugins pref --- mobile/AndroidManifest.xml | 7 +- mobile/proguard-project.txt | 2 +- mobile/res/xml/pluginspreference.xml | 5 + mobile/res/xml/preferences.xml | 7 +- .../com/cradle/iitc_mobile/IITC_Mobile.java | 2 +- ...ava => IITC_PluginPreferenceActivity.java} | 135 ++++++++---------- ...ings.java => IITC_PreferenceActivity.java} | 6 +- .../iitc_mobile/fragments/MainSettings.java | 63 ++++++++ .../fragments/PluginsFragment.java | 44 ++++++ 9 files changed, 190 insertions(+), 81 deletions(-) create mode 100644 mobile/res/xml/pluginspreference.xml rename mobile/src/com/cradle/iitc_mobile/{IITC_SettingsFragment.java => IITC_PluginPreferenceActivity.java} (52%) rename mobile/src/com/cradle/iitc_mobile/{IITC_Settings.java => IITC_PreferenceActivity.java} (86%) create mode 100644 mobile/src/com/cradle/iitc_mobile/fragments/MainSettings.java create mode 100644 mobile/src/com/cradle/iitc_mobile/fragments/PluginsFragment.java diff --git a/mobile/AndroidManifest.xml b/mobile/AndroidManifest.xml index dd0fd9f1..4f2584ac 100644 --- a/mobile/AndroidManifest.xml +++ b/mobile/AndroidManifest.xml @@ -73,7 +73,12 @@ + diff --git a/mobile/proguard-project.txt b/mobile/proguard-project.txt index 34f9866f..ff7f7030 100644 --- a/mobile/proguard-project.txt +++ b/mobile/proguard-project.txt @@ -8,7 +8,7 @@ -keep class com.cradle.iitc_mobile.IITC_SearchableActivity { (...); } # view AndroidManifest.xml #generated:50 --keep class com.cradle.iitc_mobile.IITC_Settings { (...); } +-keep class com.cradle.iitc_mobile.IITC_PreferenceActivity { (...); } # view res/layout/activity_main.xml #generated:6 -keep class com.cradle.iitc_mobile.IITC_WebView { (...); } diff --git a/mobile/res/xml/pluginspreference.xml b/mobile/res/xml/pluginspreference.xml new file mode 100644 index 00000000..67cac7dd --- /dev/null +++ b/mobile/res/xml/pluginspreference.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/mobile/res/xml/preferences.xml b/mobile/res/xml/preferences.xml index 0398bddd..62674c9b 100644 --- a/mobile/res/xml/preferences.xml +++ b/mobile/res/xml/preferences.xml @@ -43,8 +43,13 @@ android:title="@string/pref_select_iitc" android:defaultValue="local"/> + android:title="@string/pref_plugins" > + + mHeaders; + private TreeMap> mPlugins = + new TreeMap>(); @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - mIitcVersion = getArguments().getString("iitc_version"); - - addPreferencesFromResource(R.xml.preferences); - - // plugins + public void onBuildHeaders(List
target) { + ActionBar bar = getActionBar(); + bar.setTitle("IITC Plugins"); + bar.setDisplayHomeAsUpEnabled(true); + mHeaders = target; setUpPluginPreferenceScreen(); + } - // set build version - ListPreference pref_build_version = (ListPreference) findPreference("pref_build_version"); - PackageManager pm = getActivity().getPackageManager(); - String version = "unknown"; - try { - PackageInfo info = pm.getPackageInfo( - getActivity().getPackageName(), 0); - version = info.versionName; - } catch (NameNotFoundException e) { - e.printStackTrace(); + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + // exit settings when home button (iitc icon) is pressed + case android.R.id.home: + onBackPressed(); + return true; + default: + return super.onOptionsItemSelected(item); } - pref_build_version.setSummary(version); - - // set iitc version - ListPreference pref_iitc_version = (ListPreference) findPreference("pref_iitc_version"); - pref_iitc_version.setSummary(mIitcVersion); - - // set iitc source - EditTextPreference pref_iitc_source = (EditTextPreference) findPreference("pref_iitc_source"); - pref_iitc_source - .setOnPreferenceChangeListener(new OnPreferenceChangeListener() { - @Override - public boolean onPreferenceChange(Preference preference, - Object newValue) { - preference.setSummary(getString(R.string.pref_select_iitc_sum) + - " " + newValue); - // TODO: update mIitcVersion when iitc source has - // changed - return true; - } - }); - // first init of summary - String pref_iitc_source_sum = getString(R.string.pref_select_iitc_sum) - + " " + pref_iitc_source.getText(); - pref_iitc_source.setSummary(pref_iitc_source_sum); } void setUpPluginPreferenceScreen() { - PreferenceScreen root = (PreferenceScreen) findPreference("pref_plugins"); - // alphabetical order - root.setOrderingAsAdded(false); - root.setPersistent(true); // get all plugins from asset manager - AssetManager am = this.getActivity().getAssets(); + AssetManager am = getAssets(); String[] asset_array = null; try { asset_array = am.list("plugins"); @@ -101,7 +70,7 @@ public class IITC_SettingsFragment extends PreferenceFragment { if (s != null) src = s.hasNext() ? s.next() : ""; // now we have all stuff together and can build the pref screen - addPluginPreference(root, src, anAsset_array, false); + addPluginPreference(src, anAsset_array, false); } // load additional plugins from /IITC_Mobile/plugins/ @@ -123,12 +92,15 @@ public class IITC_SettingsFragment extends PreferenceFragment { src = s.hasNext() ? s.next() : ""; // now we have all stuff together and can build the pref screen - addPluginPreference(root, src, file.toString(), true); + addPluginPreference(src, file.toString(), true); } } + + // now finally add the headers + addHeaders(); } - void addPluginPreference(PreferenceScreen root, String src, String plugin_key, + void addPluginPreference(String src, String plugin_key, boolean additional) { // now parse plugin name, description and category @@ -160,28 +132,41 @@ public class IITC_SettingsFragment extends PreferenceFragment { if (additional) plugin_cat = "[User] " + plugin_cat; // now we have all stuff together and can build the pref screen - PreferenceScreen pref_screen; - if (root.findPreference(plugin_cat) == null) { + if (mPlugins.containsKey(plugin_cat) == false) { + mPlugins.put(plugin_cat, new ArrayList()); Log.d("iitcm", "create " + plugin_cat + " and add " + plugin_name); - pref_screen = getPreferenceManager().createPreferenceScreen(root.getContext()); - pref_screen.setTitle(plugin_cat); - pref_screen.setKey(plugin_cat); - // alphabetical order - pref_screen.setOrderingAsAdded(false); - pref_screen.setPersistent(true); - root.addPreference(pref_screen); - } else { - Log.d("iitcm", "add " + plugin_name + " to " + plugin_cat); - pref_screen = (PreferenceScreen) findPreference(plugin_cat); } // now build a new checkable preference for the plugin - IITC_PluginPreference plugin_pref = new IITC_PluginPreference(pref_screen.getContext()); + IITC_PluginPreference plugin_pref = new IITC_PluginPreference(this); plugin_pref.setKey(plugin_key); plugin_pref.setTitle(plugin_name); plugin_pref.setSummary(plugin_desc); plugin_pref.setDefaultValue(false); plugin_pref.setPersistent(true); - pref_screen.addPreference(plugin_pref); + ArrayList list = mPlugins.get(plugin_cat); + list.add(plugin_pref); + } + + void addHeaders() { + for (Map.Entry> entry : mPlugins.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); + Header newHeader = new Header(); + newHeader.title = plugin_cat; + newHeader.fragmentArguments = bundle; + newHeader.fragment = "com.cradle.iitc_mobile.fragments.PluginsFragment"; + mHeaders.add(newHeader); + } } } diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_Settings.java b/mobile/src/com/cradle/iitc_mobile/IITC_PreferenceActivity.java similarity index 86% rename from mobile/src/com/cradle/iitc_mobile/IITC_Settings.java rename to mobile/src/com/cradle/iitc_mobile/IITC_PreferenceActivity.java index 4ac7efe6..ad222eff 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_Settings.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_PreferenceActivity.java @@ -4,13 +4,15 @@ import android.app.Activity; import android.os.Bundle; import android.view.MenuItem; -public class IITC_Settings extends Activity { +import com.cradle.iitc_mobile.fragments.MainSettings; + +public class IITC_PreferenceActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - IITC_SettingsFragment settings = new IITC_SettingsFragment(); + MainSettings settings = new MainSettings(); // set action bar title getActionBar().setTitle("IITC Mobile Settings"); diff --git a/mobile/src/com/cradle/iitc_mobile/fragments/MainSettings.java b/mobile/src/com/cradle/iitc_mobile/fragments/MainSettings.java new file mode 100644 index 00000000..f26c18cc --- /dev/null +++ b/mobile/src/com/cradle/iitc_mobile/fragments/MainSettings.java @@ -0,0 +1,63 @@ +package com.cradle.iitc_mobile.fragments; + +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; +import android.os.Bundle; +import android.preference.EditTextPreference; +import android.preference.ListPreference; +import android.preference.Preference; +import android.preference.Preference.OnPreferenceChangeListener; +import android.preference.PreferenceFragment; + +import com.cradle.iitc_mobile.R; + +public class MainSettings extends PreferenceFragment { + + private String mIitcVersion; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + mIitcVersion = getArguments().getString("iitc_version"); + + addPreferencesFromResource(R.xml.preferences); + + // set build version + ListPreference pref_build_version = (ListPreference) findPreference("pref_build_version"); + PackageManager pm = getActivity().getPackageManager(); + String version = "unknown"; + try { + PackageInfo info = pm.getPackageInfo( + getActivity().getPackageName(), 0); + version = info.versionName; + } catch (NameNotFoundException e) { + e.printStackTrace(); + } + pref_build_version.setSummary(version); + + // set iitc version + ListPreference pref_iitc_version = (ListPreference) findPreference("pref_iitc_version"); + pref_iitc_version.setSummary(mIitcVersion); + + // set iitc source + EditTextPreference pref_iitc_source = (EditTextPreference) findPreference("pref_iitc_source"); + pref_iitc_source + .setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, + Object newValue) { + preference.setSummary(getString(R.string.pref_select_iitc_sum) + + " " + newValue); + // TODO: update mIitcVersion when iitc source has + // changed + return true; + } + }); + // first init of summary + String pref_iitc_source_sum = getString(R.string.pref_select_iitc_sum) + + " " + pref_iitc_source.getText(); + pref_iitc_source.setSummary(pref_iitc_source_sum); + } +} diff --git a/mobile/src/com/cradle/iitc_mobile/fragments/PluginsFragment.java b/mobile/src/com/cradle/iitc_mobile/fragments/PluginsFragment.java new file mode 100644 index 00000000..c52007ed --- /dev/null +++ b/mobile/src/com/cradle/iitc_mobile/fragments/PluginsFragment.java @@ -0,0 +1,44 @@ +package com.cradle.iitc_mobile.fragments; + +import android.app.ActionBar; +import android.os.Bundle; +import android.preference.PreferenceFragment; + +import com.cradle.iitc_mobile.IITC_PluginPreference; +import com.cradle.iitc_mobile.R; + +import java.util.ArrayList; + +public class PluginsFragment extends PreferenceFragment { + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + 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); + } + + ActionBar bar = getActivity().getActionBar(); + String actionBarTitle = getArguments().getString("title"); + bar.setTitle("IITC Plugins: " + actionBarTitle); + bar.setDisplayHomeAsUpEnabled(true); + getActivity().getActionBar().setDisplayHomeAsUpEnabled(true); + } + +}