From 4953b1269c7e1f11d433f4bb15128474f05a7b20 Mon Sep 17 00:00:00 2001 From: agnostic-apollo Date: Sat, 4 Sep 2021 08:33:30 +0500 Subject: [PATCH] Added: Add log level setting in Termux Settings for termux-widget --- .../app/activities/SettingsActivity.java | 11 ++ .../TermuxWidgetPreferencesFragment.java | 49 +++++++++ .../DebuggingPreferencesFragment.java | 101 ++++++++++++++++++ app/src/main/res/values/strings.xml | 6 ++ app/src/main/res/xml/root_preferences.xml | 7 ++ .../termux_widget_debugging_preferences.xml | 15 +++ .../res/xml/termux_widget_preferences.xml | 8 ++ 7 files changed, 197 insertions(+) create mode 100644 app/src/main/java/com/termux/app/fragments/settings/TermuxWidgetPreferencesFragment.java create mode 100644 app/src/main/java/com/termux/app/fragments/settings/termux_widget/DebuggingPreferencesFragment.java create mode 100644 app/src/main/res/xml/termux_widget_debugging_preferences.xml create mode 100644 app/src/main/res/xml/termux_widget_preferences.xml diff --git a/app/src/main/java/com/termux/app/activities/SettingsActivity.java b/app/src/main/java/com/termux/app/activities/SettingsActivity.java index 2e8121eb..3ffbaad9 100644 --- a/app/src/main/java/com/termux/app/activities/SettingsActivity.java +++ b/app/src/main/java/com/termux/app/activities/SettingsActivity.java @@ -20,6 +20,7 @@ import com.termux.shared.packages.PackageUtils; import com.termux.shared.settings.preferences.TermuxAPIAppSharedPreferences; import com.termux.shared.settings.preferences.TermuxFloatAppSharedPreferences; import com.termux.shared.settings.preferences.TermuxTaskerAppSharedPreferences; +import com.termux.shared.settings.preferences.TermuxWidgetAppSharedPreferences; import com.termux.shared.termux.AndroidUtils; import com.termux.shared.termux.TermuxConstants; import com.termux.shared.termux.TermuxUtils; @@ -60,6 +61,7 @@ public class SettingsActivity extends AppCompatActivity { configureTermuxAPIPreference(context); configureTermuxFloatPreference(context); configureTermuxTaskerPreference(context); + configureTermuxWidgetPreference(context); configureAboutPreference(context); configureDonatePreference(context); } @@ -91,6 +93,15 @@ public class SettingsActivity extends AppCompatActivity { } } + private void configureTermuxWidgetPreference(@NonNull Context context) { + Preference termuxWidgetPreference = findPreference("termux_widget"); + if (termuxWidgetPreference != null) { + TermuxWidgetAppSharedPreferences preferences = TermuxWidgetAppSharedPreferences.build(context, false); + // If failed to get app preferences, then likely app is not installed, so do not show its preference + termuxWidgetPreference.setVisible(preferences != null); + } + } + private void configureAboutPreference(@NonNull Context context) { Preference aboutPreference = findPreference("about"); if (aboutPreference != null) { diff --git a/app/src/main/java/com/termux/app/fragments/settings/TermuxWidgetPreferencesFragment.java b/app/src/main/java/com/termux/app/fragments/settings/TermuxWidgetPreferencesFragment.java new file mode 100644 index 00000000..b87e93e5 --- /dev/null +++ b/app/src/main/java/com/termux/app/fragments/settings/TermuxWidgetPreferencesFragment.java @@ -0,0 +1,49 @@ +package com.termux.app.fragments.settings; + +import android.content.Context; +import android.os.Bundle; + +import androidx.annotation.Keep; +import androidx.preference.PreferenceDataStore; +import androidx.preference.PreferenceFragmentCompat; +import androidx.preference.PreferenceManager; + +import com.termux.R; +import com.termux.shared.settings.preferences.TermuxWidgetAppSharedPreferences; + +@Keep +public class TermuxWidgetPreferencesFragment extends PreferenceFragmentCompat { + + @Override + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + Context context = getContext(); + if (context == null) return; + + PreferenceManager preferenceManager = getPreferenceManager(); + preferenceManager.setPreferenceDataStore(TermuxWidgetPreferencesDataStore.getInstance(context)); + + setPreferencesFromResource(R.xml.termux_widget_preferences, rootKey); + } + +} + +class TermuxWidgetPreferencesDataStore extends PreferenceDataStore { + + private final Context mContext; + private final TermuxWidgetAppSharedPreferences mPreferences; + + private static TermuxWidgetPreferencesDataStore mInstance; + + private TermuxWidgetPreferencesDataStore(Context context) { + mContext = context; + mPreferences = TermuxWidgetAppSharedPreferences.build(context, true); + } + + public static synchronized TermuxWidgetPreferencesDataStore getInstance(Context context) { + if (mInstance == null) { + mInstance = new TermuxWidgetPreferencesDataStore(context); + } + return mInstance; + } + +} diff --git a/app/src/main/java/com/termux/app/fragments/settings/termux_widget/DebuggingPreferencesFragment.java b/app/src/main/java/com/termux/app/fragments/settings/termux_widget/DebuggingPreferencesFragment.java new file mode 100644 index 00000000..919f159e --- /dev/null +++ b/app/src/main/java/com/termux/app/fragments/settings/termux_widget/DebuggingPreferencesFragment.java @@ -0,0 +1,101 @@ +package com.termux.app.fragments.settings.termux_widget; + +import android.content.Context; +import android.os.Bundle; + +import androidx.annotation.Keep; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.preference.ListPreference; +import androidx.preference.PreferenceCategory; +import androidx.preference.PreferenceDataStore; +import androidx.preference.PreferenceFragmentCompat; +import androidx.preference.PreferenceManager; + +import com.termux.R; +import com.termux.shared.settings.preferences.TermuxWidgetAppSharedPreferences; + +@Keep +public class DebuggingPreferencesFragment extends PreferenceFragmentCompat { + + @Override + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + Context context = getContext(); + if (context == null) return; + + PreferenceManager preferenceManager = getPreferenceManager(); + preferenceManager.setPreferenceDataStore(DebuggingPreferencesDataStore.getInstance(context)); + + setPreferencesFromResource(R.xml.termux_widget_debugging_preferences, rootKey); + + configureLoggingPreferences(context); + } + + private void configureLoggingPreferences(@NonNull Context context) { + PreferenceCategory loggingCategory = findPreference("logging"); + if (loggingCategory == null) return; + + ListPreference logLevelListPreference = findPreference("log_level"); + if (logLevelListPreference != null) { + TermuxWidgetAppSharedPreferences preferences = TermuxWidgetAppSharedPreferences.build(context, true); + if (preferences == null) return; + + com.termux.app.fragments.settings.termux.DebuggingPreferencesFragment. + setLogLevelListPreferenceData(logLevelListPreference, context, preferences.getLogLevel(true)); + loggingCategory.addPreference(logLevelListPreference); + } + } +} + +class DebuggingPreferencesDataStore extends PreferenceDataStore { + + private final Context mContext; + private final TermuxWidgetAppSharedPreferences mPreferences; + + private static DebuggingPreferencesDataStore mInstance; + + private DebuggingPreferencesDataStore(Context context) { + mContext = context; + mPreferences = TermuxWidgetAppSharedPreferences.build(context, true); + } + + public static synchronized DebuggingPreferencesDataStore getInstance(Context context) { + if (mInstance == null) { + mInstance = new DebuggingPreferencesDataStore(context); + } + return mInstance; + } + + + + @Override + @Nullable + public String getString(String key, @Nullable String defValue) { + if (mPreferences == null) return null; + if (key == null) return null; + + switch (key) { + case "log_level": + return String.valueOf(mPreferences.getLogLevel(true)); + default: + return null; + } + } + + @Override + public void putString(String key, @Nullable String value) { + if (mPreferences == null) return; + if (key == null) return; + + switch (key) { + case "log_level": + if (value != null) { + mPreferences.setLogLevel(mContext, Integer.parseInt(value), true); + } + break; + default: + break; + } + } + +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5b27549d..204e3bcf 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -211,6 +211,12 @@ + + &TERMUX_WIDGET_APP_NAME; + Preferences for &TERMUX_WIDGET_APP_NAME; app + + + About diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index 31b657a2..0ec8b14d 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -27,6 +27,13 @@ app:isPreferenceVisible="false" app:fragment="com.termux.app.fragments.settings.TermuxTaskerPreferencesFragment"/> + + + + + + + + + + diff --git a/app/src/main/res/xml/termux_widget_preferences.xml b/app/src/main/res/xml/termux_widget_preferences.xml new file mode 100644 index 00000000..aaf01953 --- /dev/null +++ b/app/src/main/res/xml/termux_widget_preferences.xml @@ -0,0 +1,8 @@ + + + + +