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 b4f046b8a4..3997eacb9d 100644
--- a/app/src/main/java/com/termux/app/activities/SettingsActivity.java
+++ b/app/src/main/java/com/termux/app/activities/SettingsActivity.java
@@ -17,6 +17,7 @@
import com.termux.app.models.UserAction;
import com.termux.shared.interact.ShareUtils;
import com.termux.shared.packages.PackageUtils;
+import com.termux.shared.settings.preferences.TermuxAPIAppSharedPreferences;
import com.termux.shared.settings.preferences.TermuxTaskerAppSharedPreferences;
import com.termux.shared.termux.AndroidUtils;
import com.termux.shared.termux.TermuxConstants;
@@ -55,17 +56,27 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.root_preferences, rootKey);
+ configureTermuxAPIPreference(context);
configureTermuxTaskerPreference(context);
configureAboutPreference(context);
configureDonatePreference(context);
}
+ private void configureTermuxAPIPreference(@NonNull Context context) {
+ Preference termuxAPIPreference = findPreference("termux_api");
+ if (termuxAPIPreference != null) {
+ TermuxAPIAppSharedPreferences preferences = TermuxAPIAppSharedPreferences.build(context, false);
+ // If failed to get app preferences, then likely app is not installed, so do not show its preference
+ termuxAPIPreference.setVisible(preferences != null);
+ }
+ }
+
private void configureTermuxTaskerPreference(@NonNull Context context) {
- Preference termuxTaskerPrefernce = findPreference("termux_tasker");
- if (termuxTaskerPrefernce != null) {
+ Preference termuxTaskerPreference = findPreference("termux_tasker");
+ if (termuxTaskerPreference != null) {
TermuxTaskerAppSharedPreferences preferences = TermuxTaskerAppSharedPreferences.build(context, false);
// If failed to get app preferences, then likely app is not installed, so do not show its preference
- termuxTaskerPrefernce.setVisible(preferences != null);
+ termuxTaskerPreference.setVisible(preferences != null);
}
}
diff --git a/app/src/main/java/com/termux/app/fragments/settings/TermuxAPIPreferencesFragment.java b/app/src/main/java/com/termux/app/fragments/settings/TermuxAPIPreferencesFragment.java
new file mode 100644
index 0000000000..de8508e97d
--- /dev/null
+++ b/app/src/main/java/com/termux/app/fragments/settings/TermuxAPIPreferencesFragment.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.TermuxAPIAppSharedPreferences;
+
+@Keep
+public class TermuxAPIPreferencesFragment extends PreferenceFragmentCompat {
+
+ @Override
+ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
+ Context context = getContext();
+ if (context == null) return;
+
+ PreferenceManager preferenceManager = getPreferenceManager();
+ preferenceManager.setPreferenceDataStore(TermuxAPIPreferencesDataStore.getInstance(context));
+
+ setPreferencesFromResource(R.xml.termux_api_preferences, rootKey);
+ }
+
+}
+
+class TermuxAPIPreferencesDataStore extends PreferenceDataStore {
+
+ private final Context mContext;
+ private final TermuxAPIAppSharedPreferences mPreferences;
+
+ private static TermuxAPIPreferencesDataStore mInstance;
+
+ private TermuxAPIPreferencesDataStore(Context context) {
+ mContext = context;
+ mPreferences = TermuxAPIAppSharedPreferences.build(context, true);
+ }
+
+ public static synchronized TermuxAPIPreferencesDataStore getInstance(Context context) {
+ if (mInstance == null) {
+ mInstance = new TermuxAPIPreferencesDataStore(context);
+ }
+ return mInstance;
+ }
+
+}
diff --git a/app/src/main/java/com/termux/app/fragments/settings/termux_api/DebuggingPreferencesFragment.java b/app/src/main/java/com/termux/app/fragments/settings/termux_api/DebuggingPreferencesFragment.java
new file mode 100644
index 0000000000..0a4fee3f1b
--- /dev/null
+++ b/app/src/main/java/com/termux/app/fragments/settings/termux_api/DebuggingPreferencesFragment.java
@@ -0,0 +1,101 @@
+package com.termux.app.fragments.settings.termux_api;
+
+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.TermuxAPIAppSharedPreferences;
+
+@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_api_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) {
+ TermuxAPIAppSharedPreferences preferences = TermuxAPIAppSharedPreferences.build(context, true);
+ if (preferences == null) return;
+
+ com.termux.app.fragments.settings.termux.DebuggingPreferencesFragment.
+ setLogLevelListPreferenceData(logLevelListPreference, context, preferences.getLogLevel());
+ loggingCategory.addPreference(logLevelListPreference);
+ }
+ }
+}
+
+class DebuggingPreferencesDataStore extends PreferenceDataStore {
+
+ private final Context mContext;
+ private final TermuxAPIAppSharedPreferences mPreferences;
+
+ private static DebuggingPreferencesDataStore mInstance;
+
+ private DebuggingPreferencesDataStore(Context context) {
+ mContext = context;
+ mPreferences = TermuxAPIAppSharedPreferences.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());
+ 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));
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 353da4536f..2fb9e5a0f8 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -183,11 +183,18 @@
+
+ &TERMUX_API_APP_NAME;
+ Preferences for &TERMUX_API_APP_NAME; app
+
+
+
&TERMUX_TASKER_APP_NAME;
Preferences for &TERMUX_TASKER_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 39c6093ed0..b625198bfa 100644
--- a/app/src/main/res/xml/root_preferences.xml
+++ b/app/src/main/res/xml/root_preferences.xml
@@ -6,6 +6,13 @@
app:summary="@string/termux_preferences_summary"
app:fragment="com.termux.app.fragments.settings.TermuxPreferencesFragment"/>
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/xml/termux_api_preferences.xml b/app/src/main/res/xml/termux_api_preferences.xml
new file mode 100644
index 0000000000..285ec2cbdc
--- /dev/null
+++ b/app/src/main/res/xml/termux_api_preferences.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
diff --git a/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxAPIAppSharedPreferences.java b/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxAPIAppSharedPreferences.java
new file mode 100644
index 0000000000..7b720ac739
--- /dev/null
+++ b/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxAPIAppSharedPreferences.java
@@ -0,0 +1,79 @@
+package com.termux.shared.settings.preferences;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.SharedPreferences;
+
+import androidx.annotation.NonNull;
+
+import com.termux.shared.logger.Logger;
+import com.termux.shared.packages.PackageUtils;
+import com.termux.shared.settings.preferences.TermuxPreferenceConstants.TERMUX_API_APP;
+import com.termux.shared.termux.TermuxConstants;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+public class TermuxAPIAppSharedPreferences {
+
+ private final Context mContext;
+ private final SharedPreferences mSharedPreferences;
+
+
+ private static final String LOG_TAG = "TermuxAPIAppSharedPreferences";
+
+ private TermuxAPIAppSharedPreferences(@Nonnull Context context) {
+ mContext = context;
+ mSharedPreferences = getPrivateSharedPreferences(mContext);
+ }
+
+ /**
+ * Get the {@link Context} for a package name.
+ *
+ * @param context The {@link Context} to use to get the {@link Context} of the
+ * {@link TermuxConstants#TERMUX_API_PACKAGE_NAME}.
+ * @return Returns the {@link TermuxAPIAppSharedPreferences}. This will {@code null} if an exception is raised.
+ */
+ @Nullable
+ public static TermuxAPIAppSharedPreferences build(@NonNull final Context context) {
+ Context termuxTaskerPackageContext = PackageUtils.getContextForPackage(context, TermuxConstants.TERMUX_API_PACKAGE_NAME);
+ if (termuxTaskerPackageContext == null)
+ return null;
+ else
+ return new TermuxAPIAppSharedPreferences(termuxTaskerPackageContext);
+ }
+
+ /**
+ * Get the {@link Context} for a package name.
+ *
+ * @param context The {@link Activity} to use to get the {@link Context} of the
+ * {@link TermuxConstants#TERMUX_API_PACKAGE_NAME}.
+ * @param exitAppOnError If {@code true} and failed to get package context, then a dialog will
+ * be shown which when dismissed will exit the app.
+ * @return Returns the {@link TermuxAPIAppSharedPreferences}. This will {@code null} if an exception is raised.
+ */
+ public static TermuxAPIAppSharedPreferences build(@NonNull final Context context, final boolean exitAppOnError) {
+ Context termuxTaskerPackageContext = PackageUtils.getContextForPackageOrExitApp(context, TermuxConstants.TERMUX_API_PACKAGE_NAME, exitAppOnError);
+ if (termuxTaskerPackageContext == null)
+ return null;
+ else
+ return new TermuxAPIAppSharedPreferences(termuxTaskerPackageContext);
+ }
+
+ private static SharedPreferences getPrivateSharedPreferences(Context context) {
+ if (context == null) return null;
+ return SharedPreferenceUtils.getPrivateSharedPreferences(context, TermuxConstants.TERMUX_API_DEFAULT_PREFERENCES_FILE_BASENAME_WITHOUT_EXTENSION);
+ }
+
+
+
+ public int getLogLevel() {
+ return SharedPreferenceUtils.getInt(mSharedPreferences, TERMUX_API_APP.KEY_LOG_LEVEL, Logger.DEFAULT_LOG_LEVEL);
+ }
+
+ public void setLogLevel(Context context, int logLevel) {
+ logLevel = Logger.setLogLevel(context, logLevel);
+ SharedPreferenceUtils.setInt(mSharedPreferences, TERMUX_API_APP.KEY_LOG_LEVEL, logLevel, false);
+ }
+
+}
diff --git a/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxBootAppSharedPreferences.java b/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxBootAppSharedPreferences.java
new file mode 100644
index 0000000000..762740c9f7
--- /dev/null
+++ b/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxBootAppSharedPreferences.java
@@ -0,0 +1,79 @@
+package com.termux.shared.settings.preferences;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.SharedPreferences;
+
+import androidx.annotation.NonNull;
+
+import com.termux.shared.logger.Logger;
+import com.termux.shared.packages.PackageUtils;
+import com.termux.shared.settings.preferences.TermuxPreferenceConstants.TERMUX_BOOT_APP;
+import com.termux.shared.termux.TermuxConstants;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+public class TermuxBootAppSharedPreferences {
+
+ private final Context mContext;
+ private final SharedPreferences mSharedPreferences;
+
+
+ private static final String LOG_TAG = "TermuxBootAppSharedPreferences";
+
+ private TermuxBootAppSharedPreferences(@Nonnull Context context) {
+ mContext = context;
+ mSharedPreferences = getPrivateSharedPreferences(mContext);
+ }
+
+ /**
+ * Get the {@link Context} for a package name.
+ *
+ * @param context The {@link Context} to use to get the {@link Context} of the
+ * {@link TermuxConstants#TERMUX_BOOT_PACKAGE_NAME}.
+ * @return Returns the {@link TermuxBootAppSharedPreferences}. This will {@code null} if an exception is raised.
+ */
+ @Nullable
+ public static TermuxBootAppSharedPreferences build(@NonNull final Context context) {
+ Context termuxTaskerPackageContext = PackageUtils.getContextForPackage(context, TermuxConstants.TERMUX_BOOT_PACKAGE_NAME);
+ if (termuxTaskerPackageContext == null)
+ return null;
+ else
+ return new TermuxBootAppSharedPreferences(termuxTaskerPackageContext);
+ }
+
+ /**
+ * Get the {@link Context} for a package name.
+ *
+ * @param context The {@link Activity} to use to get the {@link Context} of the
+ * {@link TermuxConstants#TERMUX_BOOT_PACKAGE_NAME}.
+ * @param exitAppOnError If {@code true} and failed to get package context, then a dialog will
+ * be shown which when dismissed will exit the app.
+ * @return Returns the {@link TermuxBootAppSharedPreferences}. This will {@code null} if an exception is raised.
+ */
+ public static TermuxBootAppSharedPreferences build(@NonNull final Context context, final boolean exitAppOnError) {
+ Context termuxTaskerPackageContext = PackageUtils.getContextForPackageOrExitApp(context, TermuxConstants.TERMUX_BOOT_PACKAGE_NAME, exitAppOnError);
+ if (termuxTaskerPackageContext == null)
+ return null;
+ else
+ return new TermuxBootAppSharedPreferences(termuxTaskerPackageContext);
+ }
+
+ private static SharedPreferences getPrivateSharedPreferences(Context context) {
+ if (context == null) return null;
+ return SharedPreferenceUtils.getPrivateSharedPreferences(context, TermuxConstants.TERMUX_BOOT_DEFAULT_PREFERENCES_FILE_BASENAME_WITHOUT_EXTENSION);
+ }
+
+
+
+ public int getLogLevel() {
+ return SharedPreferenceUtils.getInt(mSharedPreferences, TERMUX_BOOT_APP.KEY_LOG_LEVEL, Logger.DEFAULT_LOG_LEVEL);
+ }
+
+ public void setLogLevel(Context context, int logLevel) {
+ logLevel = Logger.setLogLevel(context, logLevel);
+ SharedPreferenceUtils.setInt(mSharedPreferences, TERMUX_BOOT_APP.KEY_LOG_LEVEL, logLevel, false);
+ }
+
+}
diff --git a/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxFloatAppSharedPreferences.java b/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxFloatAppSharedPreferences.java
new file mode 100644
index 0000000000..93bed91df0
--- /dev/null
+++ b/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxFloatAppSharedPreferences.java
@@ -0,0 +1,79 @@
+package com.termux.shared.settings.preferences;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.SharedPreferences;
+
+import androidx.annotation.NonNull;
+
+import com.termux.shared.logger.Logger;
+import com.termux.shared.packages.PackageUtils;
+import com.termux.shared.settings.preferences.TermuxPreferenceConstants.TERMUX_FLOAT_APP;
+import com.termux.shared.termux.TermuxConstants;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+public class TermuxFloatAppSharedPreferences {
+
+ private final Context mContext;
+ private final SharedPreferences mSharedPreferences;
+
+
+ private static final String LOG_TAG = "TermuxFloatAppSharedPreferences";
+
+ private TermuxFloatAppSharedPreferences(@Nonnull Context context) {
+ mContext = context;
+ mSharedPreferences = getPrivateSharedPreferences(mContext);
+ }
+
+ /**
+ * Get the {@link Context} for a package name.
+ *
+ * @param context The {@link Context} to use to get the {@link Context} of the
+ * {@link TermuxConstants#TERMUX_FLOAT_PACKAGE_NAME}.
+ * @return Returns the {@link TermuxFloatAppSharedPreferences}. This will {@code null} if an exception is raised.
+ */
+ @Nullable
+ public static TermuxFloatAppSharedPreferences build(@NonNull final Context context) {
+ Context termuxTaskerPackageContext = PackageUtils.getContextForPackage(context, TermuxConstants.TERMUX_FLOAT_PACKAGE_NAME);
+ if (termuxTaskerPackageContext == null)
+ return null;
+ else
+ return new TermuxFloatAppSharedPreferences(termuxTaskerPackageContext);
+ }
+
+ /**
+ * Get the {@link Context} for a package name.
+ *
+ * @param context The {@link Activity} to use to get the {@link Context} of the
+ * {@link TermuxConstants#TERMUX_FLOAT_PACKAGE_NAME}.
+ * @param exitAppOnError If {@code true} and failed to get package context, then a dialog will
+ * be shown which when dismissed will exit the app.
+ * @return Returns the {@link TermuxFloatAppSharedPreferences}. This will {@code null} if an exception is raised.
+ */
+ public static TermuxFloatAppSharedPreferences build(@NonNull final Context context, final boolean exitAppOnError) {
+ Context termuxTaskerPackageContext = PackageUtils.getContextForPackageOrExitApp(context, TermuxConstants.TERMUX_FLOAT_PACKAGE_NAME, exitAppOnError);
+ if (termuxTaskerPackageContext == null)
+ return null;
+ else
+ return new TermuxFloatAppSharedPreferences(termuxTaskerPackageContext);
+ }
+
+ private static SharedPreferences getPrivateSharedPreferences(Context context) {
+ if (context == null) return null;
+ return SharedPreferenceUtils.getPrivateSharedPreferences(context, TermuxConstants.TERMUX_FLOAT_DEFAULT_PREFERENCES_FILE_BASENAME_WITHOUT_EXTENSION);
+ }
+
+
+
+ public int getLogLevel() {
+ return SharedPreferenceUtils.getInt(mSharedPreferences, TERMUX_FLOAT_APP.KEY_LOG_LEVEL, Logger.DEFAULT_LOG_LEVEL);
+ }
+
+ public void setLogLevel(Context context, int logLevel) {
+ logLevel = Logger.setLogLevel(context, logLevel);
+ SharedPreferenceUtils.setInt(mSharedPreferences, TERMUX_FLOAT_APP.KEY_LOG_LEVEL, logLevel, false);
+ }
+
+}
diff --git a/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxPreferenceConstants.java b/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxPreferenceConstants.java
index 074aa60232..952eed4005 100644
--- a/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxPreferenceConstants.java
+++ b/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxPreferenceConstants.java
@@ -1,7 +1,7 @@
package com.termux.shared.settings.preferences;
/*
- * Version: v0.11.0
+ * Version: v0.12.0
*
* Changelog
*
@@ -48,6 +48,11 @@
* - 0.11.0 (2021-07-08)
* - Added following to `TERMUX_APP`:
* `KEY_DISABLE_TERMINAL_MARGIN_ADJUSTMENT`.
+ *
+ * - 0.12.0 (2021-08-27)
+ * - Added `TERMUX_API_APP.KEY_LOG_LEVEL`, `TERMUX_BOOT_APP.KEY_LOG_LEVEL`,
+ * `TERMUX_FLOAT_APP.KEY_LOG_LEVEL`, `TERMUX_STYLING_APP.KEY_LOG_LEVEL`,
+ * `TERMUX_Widget_APP.KEY_LOG_LEVEL`.
*/
/**
@@ -115,7 +120,7 @@ public static final class TERMUX_APP {
/**
- * Defines the key for current termux log level.
+ * Defines the key for current log level.
*/
public static final String KEY_LOG_LEVEL = "log_level";
@@ -147,13 +152,85 @@ public static final class TERMUX_APP {
}
+
+
+ /**
+ * Termux API app constants.
+ */
+ public static final class TERMUX_API_APP {
+
+ /**
+ * Defines the key for current log level.
+ */
+ public static final String KEY_LOG_LEVEL = "log_level";
+
+ }
+
+
+
+ /**
+ * Termux Boot app constants.
+ */
+ public static final class TERMUX_BOOT_APP {
+
+ /**
+ * Defines the key for current log level.
+ */
+ public static final String KEY_LOG_LEVEL = "log_level";
+
+ }
+
+
+
+ /**
+ * Termux Float app constants.
+ */
+ public static final class TERMUX_FLOAT_APP {
+
+ /**
+ * Defines the key for current log level.
+ */
+ public static final String KEY_LOG_LEVEL = "log_level";
+
+ }
+
+
+
+ /**
+ * Termux Styling app constants.
+ */
+ public static final class TERMUX_STYLING_APP {
+
+ /**
+ * Defines the key for current log level.
+ */
+ public static final String KEY_LOG_LEVEL = "log_level";
+
+ }
+
+
+
/**
* Termux Tasker app constants.
*/
public static final class TERMUX_TASKER_APP {
/**
- * Defines the key for current termux log level.
+ * Defines the key for current log level.
+ */
+ public static final String KEY_LOG_LEVEL = "log_level";
+
+ }
+
+
+
+ /**
+ * Termux Widget app constants.
+ */
+ public static final class TERMUX_WIDGET_APP {
+
+ /**
+ * Defines the key for current log level.
*/
public static final String KEY_LOG_LEVEL = "log_level";
diff --git a/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxStylingAppSharedPreferences.java b/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxStylingAppSharedPreferences.java
new file mode 100644
index 0000000000..df7a975837
--- /dev/null
+++ b/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxStylingAppSharedPreferences.java
@@ -0,0 +1,79 @@
+package com.termux.shared.settings.preferences;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.SharedPreferences;
+
+import androidx.annotation.NonNull;
+
+import com.termux.shared.logger.Logger;
+import com.termux.shared.packages.PackageUtils;
+import com.termux.shared.settings.preferences.TermuxPreferenceConstants.TERMUX_STYLING_APP;
+import com.termux.shared.termux.TermuxConstants;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+public class TermuxStylingAppSharedPreferences {
+
+ private final Context mContext;
+ private final SharedPreferences mSharedPreferences;
+
+
+ private static final String LOG_TAG = "TermuxStylingAppSharedPreferences";
+
+ private TermuxStylingAppSharedPreferences(@Nonnull Context context) {
+ mContext = context;
+ mSharedPreferences = getPrivateSharedPreferences(mContext);
+ }
+
+ /**
+ * Get the {@link Context} for a package name.
+ *
+ * @param context The {@link Context} to use to get the {@link Context} of the
+ * {@link TermuxConstants#TERMUX_STYLING_PACKAGE_NAME}.
+ * @return Returns the {@link TermuxStylingAppSharedPreferences}. This will {@code null} if an exception is raised.
+ */
+ @Nullable
+ public static TermuxStylingAppSharedPreferences build(@NonNull final Context context) {
+ Context termuxTaskerPackageContext = PackageUtils.getContextForPackage(context, TermuxConstants.TERMUX_STYLING_PACKAGE_NAME);
+ if (termuxTaskerPackageContext == null)
+ return null;
+ else
+ return new TermuxStylingAppSharedPreferences(termuxTaskerPackageContext);
+ }
+
+ /**
+ * Get the {@link Context} for a package name.
+ *
+ * @param context The {@link Activity} to use to get the {@link Context} of the
+ * {@link TermuxConstants#TERMUX_STYLING_PACKAGE_NAME}.
+ * @param exitAppOnError If {@code true} and failed to get package context, then a dialog will
+ * be shown which when dismissed will exit the app.
+ * @return Returns the {@link TermuxStylingAppSharedPreferences}. This will {@code null} if an exception is raised.
+ */
+ public static TermuxStylingAppSharedPreferences build(@NonNull final Context context, final boolean exitAppOnError) {
+ Context termuxTaskerPackageContext = PackageUtils.getContextForPackageOrExitApp(context, TermuxConstants.TERMUX_STYLING_PACKAGE_NAME, exitAppOnError);
+ if (termuxTaskerPackageContext == null)
+ return null;
+ else
+ return new TermuxStylingAppSharedPreferences(termuxTaskerPackageContext);
+ }
+
+ private static SharedPreferences getPrivateSharedPreferences(Context context) {
+ if (context == null) return null;
+ return SharedPreferenceUtils.getPrivateSharedPreferences(context, TermuxConstants.TERMUX_STYLING_DEFAULT_PREFERENCES_FILE_BASENAME_WITHOUT_EXTENSION);
+ }
+
+
+
+ public int getLogLevel() {
+ return SharedPreferenceUtils.getInt(mSharedPreferences, TERMUX_STYLING_APP.KEY_LOG_LEVEL, Logger.DEFAULT_LOG_LEVEL);
+ }
+
+ public void setLogLevel(Context context, int logLevel) {
+ logLevel = Logger.setLogLevel(context, logLevel);
+ SharedPreferenceUtils.setInt(mSharedPreferences, TERMUX_STYLING_APP.KEY_LOG_LEVEL, logLevel, false);
+ }
+
+}
diff --git a/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxTaskerAppSharedPreferences.java b/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxTaskerAppSharedPreferences.java
index 412c9b2299..b8a7b69c1d 100644
--- a/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxTaskerAppSharedPreferences.java
+++ b/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxTaskerAppSharedPreferences.java
@@ -52,7 +52,7 @@ public static TermuxTaskerAppSharedPreferences build(@NonNull final Context cont
* {@link TermuxConstants#TERMUX_TASKER_PACKAGE_NAME}.
* @param exitAppOnError If {@code true} and failed to get package context, then a dialog will
* be shown which when dismissed will exit the app.
- * @return Returns the {@link TermuxAppSharedPreferences}. This will {@code null} if an exception is raised.
+ * @return Returns the {@link TermuxTaskerAppSharedPreferences}. This will {@code null} if an exception is raised.
*/
public static TermuxTaskerAppSharedPreferences build(@NonNull final Context context, final boolean exitAppOnError) {
Context termuxTaskerPackageContext = PackageUtils.getContextForPackageOrExitApp(context, TermuxConstants.TERMUX_TASKER_PACKAGE_NAME, exitAppOnError);
diff --git a/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxWidgetAppSharedPreferences.java b/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxWidgetAppSharedPreferences.java
new file mode 100644
index 0000000000..44447d3f2e
--- /dev/null
+++ b/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxWidgetAppSharedPreferences.java
@@ -0,0 +1,79 @@
+package com.termux.shared.settings.preferences;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.SharedPreferences;
+
+import androidx.annotation.NonNull;
+
+import com.termux.shared.logger.Logger;
+import com.termux.shared.packages.PackageUtils;
+import com.termux.shared.settings.preferences.TermuxPreferenceConstants.TERMUX_WIDGET_APP;
+import com.termux.shared.termux.TermuxConstants;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+public class TermuxWidgetAppSharedPreferences {
+
+ private final Context mContext;
+ private final SharedPreferences mSharedPreferences;
+
+
+ private static final String LOG_TAG = "TermuxWidgetAppSharedPreferences";
+
+ private TermuxWidgetAppSharedPreferences(@Nonnull Context context) {
+ mContext = context;
+ mSharedPreferences = getPrivateSharedPreferences(mContext);
+ }
+
+ /**
+ * Get the {@link Context} for a package name.
+ *
+ * @param context The {@link Context} to use to get the {@link Context} of the
+ * {@link TermuxConstants#TERMUX_WIDGET_PACKAGE_NAME}.
+ * @return Returns the {@link TermuxWidgetAppSharedPreferences}. This will {@code null} if an exception is raised.
+ */
+ @Nullable
+ public static TermuxWidgetAppSharedPreferences build(@NonNull final Context context) {
+ Context termuxTaskerPackageContext = PackageUtils.getContextForPackage(context, TermuxConstants.TERMUX_WIDGET_PACKAGE_NAME);
+ if (termuxTaskerPackageContext == null)
+ return null;
+ else
+ return new TermuxWidgetAppSharedPreferences(termuxTaskerPackageContext);
+ }
+
+ /**
+ * Get the {@link Context} for a package name.
+ *
+ * @param context The {@link Activity} to use to get the {@link Context} of the
+ * {@link TermuxConstants#TERMUX_WIDGET_PACKAGE_NAME}.
+ * @param exitAppOnError If {@code true} and failed to get package context, then a dialog will
+ * be shown which when dismissed will exit the app.
+ * @return Returns the {@link TermuxWidgetAppSharedPreferences}. This will {@code null} if an exception is raised.
+ */
+ public static TermuxWidgetAppSharedPreferences build(@NonNull final Context context, final boolean exitAppOnError) {
+ Context termuxTaskerPackageContext = PackageUtils.getContextForPackageOrExitApp(context, TermuxConstants.TERMUX_WIDGET_PACKAGE_NAME, exitAppOnError);
+ if (termuxTaskerPackageContext == null)
+ return null;
+ else
+ return new TermuxWidgetAppSharedPreferences(termuxTaskerPackageContext);
+ }
+
+ private static SharedPreferences getPrivateSharedPreferences(Context context) {
+ if (context == null) return null;
+ return SharedPreferenceUtils.getPrivateSharedPreferences(context, TermuxConstants.TERMUX_WIDGET_DEFAULT_PREFERENCES_FILE_BASENAME_WITHOUT_EXTENSION);
+ }
+
+
+
+ public int getLogLevel() {
+ return SharedPreferenceUtils.getInt(mSharedPreferences, TERMUX_WIDGET_APP.KEY_LOG_LEVEL, Logger.DEFAULT_LOG_LEVEL);
+ }
+
+ public void setLogLevel(Context context, int logLevel) {
+ logLevel = Logger.setLogLevel(context, logLevel);
+ SharedPreferenceUtils.setInt(mSharedPreferences, TERMUX_WIDGET_APP.KEY_LOG_LEVEL, logLevel, false);
+ }
+
+}