use header for plugins pref

This commit is contained in:
Philipp Schaefer 2013-09-10 14:29:09 +02:00
parent 3f9af18ba5
commit eb8784ddd3
9 changed files with 190 additions and 81 deletions

View File

@ -73,7 +73,12 @@
</activity> </activity>
<activity <activity
android:name="com.cradle.iitc_mobile.IITC_Settings" android:name=".IITC_PreferenceActivity"
android:theme="@style/AppBaseTheme"
android:label="@string/app_name"
android:configChanges="orientation|keyboard|keyboardHidden|screenSize"/>
<activity
android:name="com.cradle.iitc_mobile.IITC_PluginPreferenceActivity"
android:theme="@style/AppBaseTheme" android:theme="@style/AppBaseTheme"
android:label="@string/app_name" android:label="@string/app_name"
android:configChanges="orientation|keyboard|keyboardHidden|screenSize"/> android:configChanges="orientation|keyboard|keyboardHidden|screenSize"/>

View File

@ -8,7 +8,7 @@
-keep class com.cradle.iitc_mobile.IITC_SearchableActivity { <init>(...); } -keep class com.cradle.iitc_mobile.IITC_SearchableActivity { <init>(...); }
# view AndroidManifest.xml #generated:50 # view AndroidManifest.xml #generated:50
-keep class com.cradle.iitc_mobile.IITC_Settings { <init>(...); } -keep class com.cradle.iitc_mobile.IITC_PreferenceActivity { <init>(...); }
# view res/layout/activity_main.xml #generated:6 # view res/layout/activity_main.xml #generated:6
-keep class com.cradle.iitc_mobile.IITC_WebView { <init>(...); } -keep class com.cradle.iitc_mobile.IITC_WebView { <init>(...); }

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android/plugins">
<!-- empty...we will build the prefs in PluginsFragment -->
</PreferenceScreen>

View File

@ -43,8 +43,13 @@
android:title="@string/pref_select_iitc" android:title="@string/pref_select_iitc"
android:defaultValue="local"/> android:defaultValue="local"/>
<PreferenceScreen <PreferenceScreen
android:fragment="com.cradle.iitc_mobile.fragments.PluginsFragment"
android:key="pref_plugins" android:key="pref_plugins"
android:title="@string/pref_plugins" /> android:title="@string/pref_plugins" >
<intent
android:targetPackage="com.cradle.iitc_mobile"
android:targetClass="com.cradle.iitc_mobile.IITC_PluginPreferenceActivity"/>
</PreferenceScreen>
<CheckBoxPreference <CheckBoxPreference
android:key="pref_force_https" android:key="pref_force_https"
android:title="@string/pref_force_https" android:title="@string/pref_force_https"

View File

@ -485,7 +485,7 @@ public class IITC_Mobile extends Activity {
return true; return true;
// start settings activity // start settings activity
case R.id.action_settings: case R.id.action_settings:
Intent intent = new Intent(this, IITC_Settings.class); Intent intent = new Intent(this, IITC_PreferenceActivity.class);
intent.putExtra("iitc_version", mIitcWebView.getWebViewClient() intent.putExtra("iitc_version", mIitcWebView.getWebViewClient()
.getIITCVersion()); .getIITCVersion());
startActivity(intent); startActivity(intent);

View File

@ -1,84 +1,53 @@
package com.cradle.iitc_mobile; package com.cradle.iitc_mobile;
import android.content.pm.PackageInfo; import android.app.ActionBar;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.AssetManager; import android.content.res.AssetManager;
import android.os.Bundle; import android.os.Bundle;
import android.os.Environment; import android.os.Environment;
import android.preference.EditTextPreference; import android.preference.PreferenceActivity;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.PreferenceFragment;
import android.preference.PreferenceScreen;
import android.util.Log; import android.util.Log;
import android.view.MenuItem;
import java.io.File; import java.io.File;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Scanner; import java.util.Scanner;
import java.util.TreeMap;
public class IITC_SettingsFragment extends PreferenceFragment { public class IITC_PluginPreferenceActivity extends PreferenceActivity {
private String mIitcVersion; private List<Header> mHeaders;
private TreeMap<String, ArrayList<IITC_PluginPreference>> mPlugins =
new TreeMap<String, ArrayList<IITC_PluginPreference>>();
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onBuildHeaders(List<Header> target) {
super.onCreate(savedInstanceState); ActionBar bar = getActionBar();
bar.setTitle("IITC Plugins");
mIitcVersion = getArguments().getString("iitc_version"); bar.setDisplayHomeAsUpEnabled(true);
mHeaders = target;
addPreferencesFromResource(R.xml.preferences);
// plugins
setUpPluginPreferenceScreen(); setUpPluginPreferenceScreen();
}
// set build version @Override
ListPreference pref_build_version = (ListPreference) findPreference("pref_build_version"); public boolean onOptionsItemSelected(MenuItem item) {
PackageManager pm = getActivity().getPackageManager(); switch (item.getItemId()) {
String version = "unknown"; // exit settings when home button (iitc icon) is pressed
try { case android.R.id.home:
PackageInfo info = pm.getPackageInfo( onBackPressed();
getActivity().getPackageName(), 0); return true;
version = info.versionName; default:
} catch (NameNotFoundException e) { return super.onOptionsItemSelected(item);
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);
} }
void setUpPluginPreferenceScreen() { void setUpPluginPreferenceScreen() {
PreferenceScreen root = (PreferenceScreen) findPreference("pref_plugins");
// alphabetical order
root.setOrderingAsAdded(false);
root.setPersistent(true);
// get all plugins from asset manager // get all plugins from asset manager
AssetManager am = this.getActivity().getAssets(); AssetManager am = getAssets();
String[] asset_array = null; String[] asset_array = null;
try { try {
asset_array = am.list("plugins"); asset_array = am.list("plugins");
@ -101,7 +70,7 @@ public class IITC_SettingsFragment extends PreferenceFragment {
if (s != null) if (s != null)
src = s.hasNext() ? s.next() : ""; src = s.hasNext() ? s.next() : "";
// now we have all stuff together and can build the pref screen // 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 <storage-path>/IITC_Mobile/plugins/ // load additional plugins from <storage-path>/IITC_Mobile/plugins/
@ -123,12 +92,15 @@ public class IITC_SettingsFragment extends PreferenceFragment {
src = s.hasNext() ? s.next() : ""; src = s.hasNext() ? s.next() : "";
// now we have all stuff together and can build the pref screen // 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) { boolean additional) {
// now parse plugin name, description and category // now parse plugin name, description and category
@ -160,28 +132,41 @@ public class IITC_SettingsFragment extends PreferenceFragment {
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 // now we have all stuff together and can build the pref screen
PreferenceScreen pref_screen; if (mPlugins.containsKey(plugin_cat) == false) {
if (root.findPreference(plugin_cat) == null) { mPlugins.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);
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 // 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.setKey(plugin_key);
plugin_pref.setTitle(plugin_name); plugin_pref.setTitle(plugin_name);
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);
pref_screen.addPreference(plugin_pref); ArrayList<IITC_PluginPreference> list = mPlugins.get(plugin_cat);
list.add(plugin_pref);
}
void addHeaders() {
for (Map.Entry<String, ArrayList<IITC_PluginPreference>> entry : mPlugins.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);
Header newHeader = new Header();
newHeader.title = plugin_cat;
newHeader.fragmentArguments = bundle;
newHeader.fragment = "com.cradle.iitc_mobile.fragments.PluginsFragment";
mHeaders.add(newHeader);
}
} }
} }

View File

@ -4,13 +4,15 @@ import android.app.Activity;
import android.os.Bundle; import android.os.Bundle;
import android.view.MenuItem; import android.view.MenuItem;
public class IITC_Settings extends Activity { import com.cradle.iitc_mobile.fragments.MainSettings;
public class IITC_PreferenceActivity extends Activity {
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
IITC_SettingsFragment settings = new IITC_SettingsFragment(); MainSettings settings = new MainSettings();
// set action bar title // set action bar title
getActionBar().setTitle("IITC Mobile Settings"); getActionBar().setTitle("IITC Mobile Settings");

View File

@ -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);
}
}

View File

@ -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<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);
}
ActionBar bar = getActivity().getActionBar();
String actionBarTitle = getArguments().getString("title");
bar.setTitle("IITC Plugins: " + actionBarTitle);
bar.setDisplayHomeAsUpEnabled(true);
getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
}
}