From fb9ed51f525249fd1c16e12eb0dacd183c77a14a Mon Sep 17 00:00:00 2001 From: sspanak Date: Mon, 12 Feb 2024 17:37:29 +0200 Subject: [PATCH] finer log level controls --- .../java/io/github/sspanak/tt9/Logger.java | 6 ++- .../github/sspanak/tt9/ime/TraditionalT9.java | 4 +- .../tt9/preferences/PreferencesActivity.java | 2 +- .../tt9/preferences/SettingsStore.java | 8 +++- .../tt9/preferences/items/ItemDropDown.java | 17 +++++--- .../tt9/preferences/items/ItemLogLevel.java | 42 +++++++++++++++++++ .../tt9/preferences/screens/DebugScreen.java | 31 ++++---------- app/src/main/res/xml/prefs_screen_debug.xml | 10 ++--- 8 files changed, 82 insertions(+), 38 deletions(-) create mode 100644 app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemLogLevel.java diff --git a/app/src/main/java/io/github/sspanak/tt9/Logger.java b/app/src/main/java/io/github/sspanak/tt9/Logger.java index 6a80dc07..687de0a9 100644 --- a/app/src/main/java/io/github/sspanak/tt9/Logger.java +++ b/app/src/main/java/io/github/sspanak/tt9/Logger.java @@ -10,8 +10,10 @@ public class Logger { return LEVEL <= Log.DEBUG; } - public static void enableDebugLevel(boolean yes) { - LEVEL = yes ? Log.DEBUG : Log.ERROR; + public static void setLevel(int level) { + if (level >= Log.VERBOSE && level <= Log.ASSERT) { + LEVEL = level; + } } static public void v(String tag, String msg) { diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/TraditionalT9.java b/app/src/main/java/io/github/sspanak/tt9/ime/TraditionalT9.java index dd0e479b..c85eb618 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/TraditionalT9.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/TraditionalT9.java @@ -148,7 +148,7 @@ public class TraditionalT9 extends KeyPadHandler { protected void onInit() { self = this; - Logger.enableDebugLevel(settings.getDebugLogsEnabled()); + Logger.setLevel(settings.getLogLevel()); WordStoreAsync.init(this); @@ -207,7 +207,7 @@ public class TraditionalT9 extends KeyPadHandler { protected void onStart(InputConnection connection, EditorInfo field) { - Logger.enableDebugLevel(settings.getDebugLogsEnabled()); + Logger.setLevel(settings.getLogLevel()); setInputField(connection, field); initTyping(); diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/PreferencesActivity.java b/app/src/main/java/io/github/sspanak/tt9/preferences/PreferencesActivity.java index 64c2ccf1..464602d0 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/PreferencesActivity.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/PreferencesActivity.java @@ -40,7 +40,7 @@ public class PreferencesActivity extends AppCompatActivity implements Preference protected void onCreate(Bundle savedInstanceState) { settings = new SettingsStore(this); applyTheme(); - Logger.enableDebugLevel(settings.getDebugLogsEnabled()); + Logger.setLevel(settings.getLogLevel()); try (LegacyDb db = new LegacyDb(this)) { db.clear(); } WordStoreAsync.init(this); diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/SettingsStore.java b/app/src/main/java/io/github/sspanak/tt9/preferences/SettingsStore.java index 3724163e..412f591b 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/SettingsStore.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/SettingsStore.java @@ -270,7 +270,13 @@ public class SettingsStore { /************* internal settings *************/ - public boolean getDebugLogsEnabled() { return prefs.getBoolean("pref_enable_debug_logs", Logger.isDebugLevel()); } + public int getLogLevel() { + try { + return Integer.parseInt(prefs.getString("pref_log_level", String.valueOf(Logger.LEVEL))); + } catch (NumberFormatException ignored) { + return Logger.LEVEL; + } + } public final static int DICTIONARY_IMPORT_BATCH_SIZE = 5000; // words public final static int DICTIONARY_IMPORT_PROGRESS_UPDATE_TIME = 250; // ms diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemDropDown.java b/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemDropDown.java index ef2edd4e..58dd5f96 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemDropDown.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemDropDown.java @@ -48,12 +48,10 @@ public class ItemDropDown { } public ItemDropDown enableClickHandler() { - if (item == null) { - Logger.w("SectionKeymap.populateItem", "Cannot set a click listener a NULL item. Ignoring."); - return this; + if (item != null) { + item.setOnPreferenceChangeListener(this::onClick); } - item.setOnPreferenceChangeListener(this::onClick); return this; } @@ -74,11 +72,20 @@ public class ItemDropDown { } } - public void preview() { + public ItemDropDown preview() { try { setPreview(values.get(Integer.parseInt(item.getValue()))); } catch (Exception e) { setPreview(""); } + + return this; + } + + public ItemDropDown setValue(String value) { + if (item != null) { + item.setValue(value); + } + return this; } } diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemLogLevel.java b/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemLogLevel.java new file mode 100644 index 00000000..3f735444 --- /dev/null +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemLogLevel.java @@ -0,0 +1,42 @@ +package io.github.sspanak.tt9.preferences.items; + +import android.util.Log; + +import androidx.preference.DropDownPreference; +import androidx.preference.Preference; + +import java.util.LinkedHashMap; + +import io.github.sspanak.tt9.Logger; + +public class ItemLogLevel extends ItemDropDown { + public static final String NAME = "pref_log_level"; + + public ItemLogLevel(DropDownPreference item) { + super(item); + } + + public ItemLogLevel populate() { + LinkedHashMap values = new LinkedHashMap<>(); + values.put(Log.VERBOSE, "Verbose"); + values.put(Log.DEBUG, "Debug"); + values.put(Log.INFO, "Info"); + values.put(Log.WARN, "Warning"); + values.put(Log.ERROR, "Error (default)"); + + super.populate(values); + super.setValue(String.valueOf(Logger.LEVEL)); + + return this; + } + + @Override + protected boolean onClick(Preference preference, Object newKey) { + if (super.onClick(preference, newKey)) { + Logger.setLevel(Integer.parseInt(newKey.toString())); + return true; + } + + return false; + } +} diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/DebugScreen.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/DebugScreen.java index 0c67fdd2..be0b1667 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/DebugScreen.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/DebugScreen.java @@ -15,11 +15,11 @@ import java.io.InputStreamReader; import io.github.sspanak.tt9.Logger; import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.preferences.PreferencesActivity; +import io.github.sspanak.tt9.preferences.items.ItemLogLevel; import io.github.sspanak.tt9.ui.UI; public class DebugScreen extends BaseScreenFragment { private final static String LOG_TAG = "DebugScreen"; - private final static String DEBUG_LOGS_SWITCH = "pref_enable_debug_logs"; private final static String SYSTEM_LOGS_SWITCH = "pref_enable_system_logs"; private final static String LOGS_CONTAINER = "debug_logs_container"; @@ -31,7 +31,7 @@ public class DebugScreen extends BaseScreenFragment { @Override protected void onCreate() { - initLogMessagesSwitch(); + intiLogLevelDropDown(); initSystemLogsSwitch(); enableLogsCopy(); @@ -40,31 +40,18 @@ public class DebugScreen extends BaseScreenFragment { printLogs(includeSystemLogs); } - private void initLogMessagesSwitch() { - SwitchPreferenceCompat msgSwitch = findPreference(DEBUG_LOGS_SWITCH); - if (msgSwitch == null) { - Logger.w(LOG_TAG, "Debug logs switch not found."); - return; - } - - msgSwitch.setChecked(Logger.isDebugLevel()); - msgSwitch.setOnPreferenceChangeListener((Preference p, Object newValue) -> { - Logger.enableDebugLevel((boolean) newValue); - return true; - }); + private void intiLogLevelDropDown() { + (new ItemLogLevel(findPreference(ItemLogLevel.NAME))).populate().preview().enableClickHandler(); } private void initSystemLogsSwitch() { SwitchPreferenceCompat systemLogs = findPreference(SYSTEM_LOGS_SWITCH); - if (systemLogs == null) { - Logger.w(LOG_TAG, "System logs switch not found."); - return; + if (systemLogs != null) { + systemLogs.setOnPreferenceChangeListener((p, newValue) -> { + printLogs((boolean) newValue); + return true; + }); } - - systemLogs.setOnPreferenceChangeListener((p, newValue) -> { - printLogs((boolean) newValue); - return true; - }); } private void printLogs(boolean includeSystemLogs) { diff --git a/app/src/main/res/xml/prefs_screen_debug.xml b/app/src/main/res/xml/prefs_screen_debug.xml index a25d1947..1883f6df 100644 --- a/app/src/main/res/xml/prefs_screen_debug.xml +++ b/app/src/main/res/xml/prefs_screen_debug.xml @@ -7,11 +7,11 @@ app:layout="@layout/pref_text" app:title="@string/pref_category_usage_stats" /> - +