From fbf353858eaa5bc2854f64f1d2d2b00a9fe8c13d Mon Sep 17 00:00:00 2001 From: str4d <str4d@mail.i2p> Date: Wed, 15 Jan 2014 17:45:40 +0000 Subject: [PATCH] Added settings page for logging, config option for default log level --- res/values/arrays.xml | 7 ++ res/values/strings.xml | 2 + res/xml/settings_headers.xml | 7 ++ res/xml/settings_headers_legacy.xml | 6 ++ .../i2p/android/router/SettingsActivity.java | 95 ++++++++++++++++--- 5 files changed, 104 insertions(+), 13 deletions(-) diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 3db19a3ba..a8957cda0 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -17,6 +17,13 @@ <item>ERROR</item> <item>All</item> </string-array> + <string-array name="log_levels"> + <item>CRIT</item> + <item>ERROR</item> + <item>WARN</item> + <item>INFO</item> + <item>DEBUG</item> + </string-array> <string-array name="setting0to3"> <item>0</item> <item>1</item> diff --git a/res/values/strings.xml b/res/values/strings.xml index a66b5d318..5191f2ee0 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -79,6 +79,8 @@ <string name="settings_desc_sharePercent">Percentage of bandwidth to share (default=80)</string> <string name="settings_dialog_sharePercent">Percentage of bandwidth to share</string> <string name="settings_desc_upnp">Open firewall ports automatically</string> + <string name="settings_label_logging">Logging</string> + <string name="settings_label_default_log_level">Default log level</string> <string name="settings_label_advanced">Advanced</string> <string name="settings_label_transports">Transports</string> <string name="settings_label_maxConns">Max connections</string> diff --git a/res/xml/settings_headers.xml b/res/xml/settings_headers.xml index 0c66f647b..60af72e6b 100644 --- a/res/xml/settings_headers.xml +++ b/res/xml/settings_headers.xml @@ -14,6 +14,13 @@ android:name="settings" android:value="graphs" /> </header> + <header + android:fragment="net.i2p.android.router.SettingsActivity$SettingsFragment" + android:title="@string/settings_label_logging"> + <extra + android:name="settings" + android:value="logging" /> + </header> <header android:title="@string/label_addressbook"> <intent diff --git a/res/xml/settings_headers_legacy.xml b/res/xml/settings_headers_legacy.xml index 1fe15755b..58ffb507e 100644 --- a/res/xml/settings_headers_legacy.xml +++ b/res/xml/settings_headers_legacy.xml @@ -12,6 +12,12 @@ android:targetClass="net.i2p.android.router.SettingsActivity" android:action="net.i2p.android.router.PREFS_GRAPHS" /> </Preference> + <Preference android:title="@string/settings_label_logging"> + <intent + android:targetPackage="net.i2p.android.router" + android:targetClass="net.i2p.android.router.SettingsActivity" + android:action="net.i2p.android.router.PREFS_LOGGING" /> + </Preference> <Preference android:title="@string/label_addressbook"> <intent android:targetPackage="net.i2p.android.router" diff --git a/src/net/i2p/android/router/SettingsActivity.java b/src/net/i2p/android/router/SettingsActivity.java index f1cae352a..e71e85a3e 100644 --- a/src/net/i2p/android/router/SettingsActivity.java +++ b/src/net/i2p/android/router/SettingsActivity.java @@ -14,23 +14,29 @@ import android.preference.PreferenceManager; import android.preference.PreferenceScreen; import java.util.ArrayList; +import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.SortedSet; +import java.util.TreeSet; + import net.i2p.android.router.R; import net.i2p.android.router.util.Util; import net.i2p.router.RouterContext; import net.i2p.stat.FrequencyStat; import net.i2p.stat.Rate; import net.i2p.stat.RateStat; +import net.i2p.stat.StatManager; +import net.i2p.util.LogManager; import net.i2p.util.OrderedProperties; public class SettingsActivity extends PreferenceActivity { // Actions for legacy settings private static final String ACTION_PREFS_NET = "net.i2p.android.router.PREFS_NET"; private static final String ACTION_PREFS_GRAPHS = "net.i2p.android.router.PREFS_GRAPHS"; + private static final String ACTION_PREFS_LOGGING = "net.i2p.android.router.PREFS_LOGGING"; private static final String ACTION_PREFS_ADVANCED = "net.i2p.android.router.PREFS_ADVANCED"; @SuppressWarnings("deprecation") @@ -39,24 +45,40 @@ public class SettingsActivity extends PreferenceActivity { super.onCreate(savedInstanceState); String action = getIntent().getAction(); - if (action != null && action.equals(ACTION_PREFS_NET)) { - addPreferencesFromResource(R.xml.settings_net); - } else if (action != null && action.equals(ACTION_PREFS_GRAPHS)) { - addPreferencesFromResource(R.xml.settings_graphs); - setupGraphSettings(this, getPreferenceScreen()); - } else if (action != null && action.equals(ACTION_PREFS_ADVANCED)) { - addPreferencesFromResource(R.xml.settings_advanced); + if (action != null) { + if (ACTION_PREFS_NET.equals(action)) { + addPreferencesFromResource(R.xml.settings_net); + } else if (ACTION_PREFS_GRAPHS.equals(action)){ + addPreferencesFromResource(R.xml.settings_graphs); + RouterContext ctx = getRouterContext(); + if (ctx != null) + setupGraphSettings(this, getPreferenceScreen(), ctx); + } else if (ACTION_PREFS_LOGGING.equals(action)) { + addPreferencesFromResource(R.xml.settings_logging); + RouterContext ctx = getRouterContext(); + if (ctx != null) + setupLoggingSettings(this, getPreferenceScreen(), ctx); + } else if (ACTION_PREFS_ADVANCED.equals(action)) { + addPreferencesFromResource(R.xml.settings_advanced); + } } else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { // Load the legacy preferences headers addPreferencesFromResource(R.xml.settings_headers_legacy); } } - protected static void setupGraphSettings(Context context, PreferenceScreen ps) { + protected static RouterContext getRouterContext() { List<RouterContext> contexts = RouterContext.listContexts(); if ( !((contexts == null) || (contexts.isEmpty())) ) { - RouterContext _context = contexts.get(0); - Map<String, SortedSet<String>> all = _context.statManager().getStatsByGroup(); + return contexts.get(0); + } + return null; + } + + protected static void setupGraphSettings(Context context, PreferenceScreen ps, RouterContext ctx) { + if (ctx != null) { + StatManager mgr = ctx.statManager(); + Map<String, SortedSet<String>> all = mgr.getStatsByGroup(); for (String group : all.keySet()) { SortedSet<String> stats = all.get(group); if (stats.size() == 0) continue; @@ -69,7 +91,7 @@ public class SettingsActivity extends PreferenceActivity { String description; boolean canBeGraphed = false; boolean currentIsGraphed = false; - RateStat rs = _context.statManager().getRate(stat); + RateStat rs = mgr.getRate(stat); if (rs != null) { description = rs.getDescription(); long period = rs.getPeriods()[0]; // should be the minimum @@ -82,7 +104,7 @@ public class SettingsActivity extends PreferenceActivity { } } } else { - FrequencyStat fs = _context.statManager().getFrequency(stat); + FrequencyStat fs = mgr.getFrequency(stat); if (fs != null) { key = stat; description = fs.getDescription(); @@ -110,6 +132,17 @@ public class SettingsActivity extends PreferenceActivity { } } + protected static void setupLoggingSettings(Context context, PreferenceScreen ps, RouterContext ctx) { + if (ctx != null) { + LogManager mgr = ctx.logManager(); + // TODO: Add other log config settings + } else { + PreferenceCategory noRouter = new PreferenceCategory(context); + noRouter.setTitle(R.string.router_not_running); + ps.addPreference(noRouter); + } + } + @TargetApi(Build.VERSION_CODES.HONEYCOMB) @Override public void onBuildHeaders(List<Header> target) { @@ -131,6 +164,9 @@ public class SettingsActivity extends PreferenceActivity { // List to store stats for graphing List<String> statSummaries = new ArrayList<String>(); + // List to store Log settings + Map<String, String> logSettings = new HashMap<String, String>(); + Map<String, ?> all = preferences.getAll(); Iterator<String> iterator = all.keySet().iterator(); // get values from the Map and make them strings. @@ -151,6 +187,8 @@ public class SettingsActivity extends PreferenceActivity { if (checked.equals("true")) { statSummaries.add(stat); } + } else if ( x.startsWith("logger.")) { + logSettings.put(x, all.get(x).toString()); } else if(! x.startsWith("DO_NOT_SAVE")) { // Disabled? @SuppressWarnings("deprecation") @@ -191,10 +229,34 @@ public class SettingsActivity extends PreferenceActivity { if ( !((contexts == null) || (contexts.isEmpty())) ) { RouterContext _context = contexts.get(0); _context.router().saveConfig(props, null); + + // Merge in new log settings + saveLoggingChanges(_context, logSettings); } + + // Store the settings in Android super.onPause(); } + private void saveLoggingChanges(RouterContext ctx, Map<String, String> logSettings) { + boolean shouldSave = false; + + for (String key : logSettings.keySet()) { + if ("logger.defaultLevel".equals(key)) { + String defaultLevel = logSettings.get(key); + String oldDefault = ctx.logManager().getDefaultLimit(); + if (!defaultLevel.equals(oldDefault)) { + shouldSave = true; + ctx.logManager().setDefaultLimit(defaultLevel); + } + } + } + + if (shouldSave) { + ctx.logManager().saveConfig(); + } + } + @TargetApi(Build.VERSION_CODES.HONEYCOMB) public static class SettingsFragment extends PreferenceFragment { @Override @@ -206,7 +268,14 @@ public class SettingsActivity extends PreferenceActivity { addPreferencesFromResource(R.xml.settings_net); } else if ("graphs".equals(settings)) { addPreferencesFromResource(R.xml.settings_graphs); - setupGraphSettings(getActivity(), getPreferenceScreen()); + RouterContext ctx = getRouterContext(); + if (ctx != null) + setupGraphSettings(getActivity(), getPreferenceScreen(), ctx); + } else if ("logging".equals(settings)) { + addPreferencesFromResource(R.xml.settings_logging); + RouterContext ctx = getRouterContext(); + if (ctx != null) + setupLoggingSettings(getActivity(), getPreferenceScreen(), ctx); } else if ("advanced".equals(settings)) { addPreferencesFromResource(R.xml.settings_advanced); } -- GitLab