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 3997eacb..2e8121eb 100644 --- a/app/src/main/java/com/termux/app/activities/SettingsActivity.java +++ b/app/src/main/java/com/termux/app/activities/SettingsActivity.java @@ -18,6 +18,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.TermuxFloatAppSharedPreferences; import com.termux.shared.settings.preferences.TermuxTaskerAppSharedPreferences; import com.termux.shared.termux.AndroidUtils; import com.termux.shared.termux.TermuxConstants; @@ -57,6 +58,7 @@ public class SettingsActivity extends AppCompatActivity { setPreferencesFromResource(R.xml.root_preferences, rootKey); configureTermuxAPIPreference(context); + configureTermuxFloatPreference(context); configureTermuxTaskerPreference(context); configureAboutPreference(context); configureDonatePreference(context); @@ -71,6 +73,15 @@ public class SettingsActivity extends AppCompatActivity { } } + private void configureTermuxFloatPreference(@NonNull Context context) { + Preference termuxFloatPreference = findPreference("termux_float"); + if (termuxFloatPreference != null) { + TermuxFloatAppSharedPreferences preferences = TermuxFloatAppSharedPreferences.build(context, false); + // If failed to get app preferences, then likely app is not installed, so do not show its preference + termuxFloatPreference.setVisible(preferences != null); + } + } + private void configureTermuxTaskerPreference(@NonNull Context context) { Preference termuxTaskerPreference = findPreference("termux_tasker"); if (termuxTaskerPreference != null) { diff --git a/app/src/main/java/com/termux/app/fragments/settings/TermuxFloatPreferencesFragment.java b/app/src/main/java/com/termux/app/fragments/settings/TermuxFloatPreferencesFragment.java new file mode 100644 index 00000000..ee0bacb4 --- /dev/null +++ b/app/src/main/java/com/termux/app/fragments/settings/TermuxFloatPreferencesFragment.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.TermuxFloatAppSharedPreferences; + +@Keep +public class TermuxFloatPreferencesFragment extends PreferenceFragmentCompat { + + @Override + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + Context context = getContext(); + if (context == null) return; + + PreferenceManager preferenceManager = getPreferenceManager(); + preferenceManager.setPreferenceDataStore(TermuxFloatPreferencesDataStore.getInstance(context)); + + setPreferencesFromResource(R.xml.termux_float_preferences, rootKey); + } + +} + +class TermuxFloatPreferencesDataStore extends PreferenceDataStore { + + private final Context mContext; + private final TermuxFloatAppSharedPreferences mPreferences; + + private static TermuxFloatPreferencesDataStore mInstance; + + private TermuxFloatPreferencesDataStore(Context context) { + mContext = context; + mPreferences = TermuxFloatAppSharedPreferences.build(context, true); + } + + public static synchronized TermuxFloatPreferencesDataStore getInstance(Context context) { + if (mInstance == null) { + mInstance = new TermuxFloatPreferencesDataStore(context); + } + return mInstance; + } + +} diff --git a/app/src/main/java/com/termux/app/fragments/settings/termux_float/DebuggingPreferencesFragment.java b/app/src/main/java/com/termux/app/fragments/settings/termux_float/DebuggingPreferencesFragment.java new file mode 100644 index 00000000..a52f7857 --- /dev/null +++ b/app/src/main/java/com/termux/app/fragments/settings/termux_float/DebuggingPreferencesFragment.java @@ -0,0 +1,126 @@ +package com.termux.app.fragments.settings.termux_float; + +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.TermuxFloatAppSharedPreferences; + +@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_float_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) { + TermuxFloatAppSharedPreferences preferences = TermuxFloatAppSharedPreferences.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 TermuxFloatAppSharedPreferences mPreferences; + + private static DebuggingPreferencesDataStore mInstance; + + private DebuggingPreferencesDataStore(Context context) { + mContext = context; + mPreferences = TermuxFloatAppSharedPreferences.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; + } + } + + @Override + public void putBoolean(String key, boolean value) { + if (mPreferences == null) return; + if (key == null) return; + + switch (key) { + case "terminal_view_key_logging_enabled": + mPreferences.setTerminalViewKeyLoggingEnabled(value, true); + break; + default: + break; + } + } + + @Override + public boolean getBoolean(String key, boolean defValue) { + if (mPreferences == null) return false; + switch (key) { + case "terminal_view_key_logging_enabled": + return mPreferences.isTerminalViewKeyLoggingEnabled(true); + default: + return false; + } + } + +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2fb9e5a0..d60cd374 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -189,6 +189,12 @@ + + &TERMUX_FLOAT_APP_NAME; + Preferences for &TERMUX_FLOAT_APP_NAME; app + + + &TERMUX_TASKER_APP_NAME; Preferences for &TERMUX_TASKER_APP_NAME; app diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index b625198b..31b657a2 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -13,6 +13,13 @@ app:isPreferenceVisible="false" app:fragment="com.termux.app.fragments.settings.TermuxAPIPreferencesFragment"/> + + + + + + + + + + + + diff --git a/app/src/main/res/xml/termux_float_preferences.xml b/app/src/main/res/xml/termux_float_preferences.xml new file mode 100644 index 00000000..9378ae1b --- /dev/null +++ b/app/src/main/res/xml/termux_float_preferences.xml @@ -0,0 +1,8 @@ + + + + +