mirror of
https://github.com/fankes/termux-app.git
synced 2025-09-07 03:05:18 +08:00
Add support for setting Termux:Tasker log level from TermuxSettings
This commit is contained in:
@@ -3,6 +3,7 @@ package com.termux.app.activities;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
import androidx.appcompat.app.ActionBar;
|
import androidx.appcompat.app.ActionBar;
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
@@ -13,6 +14,7 @@ import com.termux.app.models.ReportInfo;
|
|||||||
import com.termux.app.models.UserAction;
|
import com.termux.app.models.UserAction;
|
||||||
import com.termux.shared.interact.ShareUtils;
|
import com.termux.shared.interact.ShareUtils;
|
||||||
import com.termux.shared.packages.PackageUtils;
|
import com.termux.shared.packages.PackageUtils;
|
||||||
|
import com.termux.shared.settings.preferences.TermuxTaskerAppSharedPreferences;
|
||||||
import com.termux.shared.termux.TermuxConstants;
|
import com.termux.shared.termux.TermuxConstants;
|
||||||
import com.termux.shared.termux.TermuxUtils;
|
import com.termux.shared.termux.TermuxUtils;
|
||||||
|
|
||||||
@@ -44,17 +46,29 @@ public class SettingsActivity extends AppCompatActivity {
|
|||||||
public static class RootPreferencesFragment extends PreferenceFragmentCompat {
|
public static class RootPreferencesFragment extends PreferenceFragmentCompat {
|
||||||
@Override
|
@Override
|
||||||
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
||||||
|
Context context = getContext();
|
||||||
|
if (context == null) return;
|
||||||
|
|
||||||
setPreferencesFromResource(R.xml.root_preferences, rootKey);
|
setPreferencesFromResource(R.xml.root_preferences, rootKey);
|
||||||
|
|
||||||
configureAboutPreference();
|
configureTermuxTaskerPreference(context);
|
||||||
configureDonatePreference();
|
configureAboutPreference(context);
|
||||||
|
configureDonatePreference(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void configureAboutPreference() {
|
private void configureTermuxTaskerPreference(@NonNull Context context) {
|
||||||
Context context = getContext();
|
Preference termuxTaskerPrefernce = findPreference("termux_tasker");
|
||||||
Preference about = findPreference("about");
|
if (termuxTaskerPrefernce != null) {
|
||||||
if (context != null && about != null) {
|
TermuxTaskerAppSharedPreferences preferences = TermuxTaskerAppSharedPreferences.build(context, false);
|
||||||
about.setOnPreferenceClickListener(preference -> {
|
// If failed to get app preferences, then likely app is not installed, so do not show its preference
|
||||||
|
termuxTaskerPrefernce.setVisible(preferences != null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void configureAboutPreference(@NonNull Context context) {
|
||||||
|
Preference aboutPreference = findPreference("about");
|
||||||
|
if (aboutPreference != null) {
|
||||||
|
aboutPreference.setOnPreferenceClickListener(preference -> {
|
||||||
String title = "About";
|
String title = "About";
|
||||||
|
|
||||||
StringBuilder aboutString = new StringBuilder();
|
StringBuilder aboutString = new StringBuilder();
|
||||||
@@ -74,10 +88,9 @@ public class SettingsActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void configureDonatePreference() {
|
private void configureDonatePreference(@NonNull Context context) {
|
||||||
Context context = getContext();
|
Preference donatePreference = findPreference("donate");
|
||||||
Preference donate = findPreference("donate");
|
if (donatePreference != null) {
|
||||||
if (context != null && donate != null) {
|
|
||||||
String signingCertificateSHA256Digest = PackageUtils.getSigningCertificateSHA256DigestForPackage(context);
|
String signingCertificateSHA256Digest = PackageUtils.getSigningCertificateSHA256DigestForPackage(context);
|
||||||
if (signingCertificateSHA256Digest != null) {
|
if (signingCertificateSHA256Digest != null) {
|
||||||
// If APK is a Google Playstore release, then do not show the donation link
|
// If APK is a Google Playstore release, then do not show the donation link
|
||||||
@@ -85,14 +98,14 @@ public class SettingsActivity extends AppCompatActivity {
|
|||||||
// Check Fund solicitations: https://pay.google.com/intl/en_in/about/policy/
|
// Check Fund solicitations: https://pay.google.com/intl/en_in/about/policy/
|
||||||
String apkRelease = TermuxUtils.getAPKRelease(signingCertificateSHA256Digest);
|
String apkRelease = TermuxUtils.getAPKRelease(signingCertificateSHA256Digest);
|
||||||
if (apkRelease == null || apkRelease.equals(TermuxConstants.APK_RELEASE_GOOGLE_PLAYSTORE_SIGNING_CERTIFICATE_SHA256_DIGEST)) {
|
if (apkRelease == null || apkRelease.equals(TermuxConstants.APK_RELEASE_GOOGLE_PLAYSTORE_SIGNING_CERTIFICATE_SHA256_DIGEST)) {
|
||||||
donate.setVisible(false);
|
donatePreference.setVisible(false);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
donate.setVisible(true);
|
donatePreference.setVisible(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
donate.setOnPreferenceClickListener(preference -> {
|
donatePreference.setOnPreferenceClickListener(preference -> {
|
||||||
ShareUtils.openURL(context, TermuxConstants.TERMUX_DONATE_URL);
|
ShareUtils.openURL(context, TermuxConstants.TERMUX_DONATE_URL);
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
@@ -16,8 +16,11 @@ public class TermuxPreferencesFragment extends PreferenceFragmentCompat {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
||||||
|
Context context = getContext();
|
||||||
|
if (context == null) return;
|
||||||
|
|
||||||
PreferenceManager preferenceManager = getPreferenceManager();
|
PreferenceManager preferenceManager = getPreferenceManager();
|
||||||
preferenceManager.setPreferenceDataStore(TermuxPreferencesDataStore.getInstance(getContext()));
|
preferenceManager.setPreferenceDataStore(TermuxPreferencesDataStore.getInstance(context));
|
||||||
|
|
||||||
setPreferencesFromResource(R.xml.termux_preferences, rootKey);
|
setPreferencesFromResource(R.xml.termux_preferences, rootKey);
|
||||||
}
|
}
|
||||||
|
@@ -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.TermuxTaskerAppSharedPreferences;
|
||||||
|
|
||||||
|
@Keep
|
||||||
|
public class TermuxTaskerPreferencesFragment extends PreferenceFragmentCompat {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
||||||
|
Context context = getContext();
|
||||||
|
if (context == null) return;
|
||||||
|
|
||||||
|
PreferenceManager preferenceManager = getPreferenceManager();
|
||||||
|
preferenceManager.setPreferenceDataStore(TermuxTaskerPreferencesDataStore.getInstance(context));
|
||||||
|
|
||||||
|
setPreferencesFromResource(R.xml.termux_tasker_preferences, rootKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class TermuxTaskerPreferencesDataStore extends PreferenceDataStore {
|
||||||
|
|
||||||
|
private final Context mContext;
|
||||||
|
private final TermuxTaskerAppSharedPreferences mPreferences;
|
||||||
|
|
||||||
|
private static TermuxTaskerPreferencesDataStore mInstance;
|
||||||
|
|
||||||
|
private TermuxTaskerPreferencesDataStore(Context context) {
|
||||||
|
mContext = context;
|
||||||
|
mPreferences = TermuxTaskerAppSharedPreferences.build(context, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static synchronized TermuxTaskerPreferencesDataStore getInstance(Context context) {
|
||||||
|
if (mInstance == null) {
|
||||||
|
mInstance = new TermuxTaskerPreferencesDataStore(context);
|
||||||
|
}
|
||||||
|
return mInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -4,6 +4,7 @@ import android.content.Context;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
||||||
import androidx.annotation.Keep;
|
import androidx.annotation.Keep;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.preference.ListPreference;
|
import androidx.preference.ListPreference;
|
||||||
import androidx.preference.PreferenceCategory;
|
import androidx.preference.PreferenceCategory;
|
||||||
@@ -20,20 +21,32 @@ public class DebuggingPreferencesFragment extends PreferenceFragmentCompat {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
||||||
|
Context context = getContext();
|
||||||
|
if (context == null) return;
|
||||||
|
|
||||||
PreferenceManager preferenceManager = getPreferenceManager();
|
PreferenceManager preferenceManager = getPreferenceManager();
|
||||||
preferenceManager.setPreferenceDataStore(DebuggingPreferencesDataStore.getInstance(getContext()));
|
preferenceManager.setPreferenceDataStore(DebuggingPreferencesDataStore.getInstance(context));
|
||||||
|
|
||||||
setPreferencesFromResource(R.xml.termux_debugging_preferences, rootKey);
|
setPreferencesFromResource(R.xml.termux_debugging_preferences, rootKey);
|
||||||
|
|
||||||
PreferenceCategory loggingCategory = findPreference("logging");
|
configureLoggingPreferences(context);
|
||||||
|
}
|
||||||
|
|
||||||
if (loggingCategory != null) {
|
private void configureLoggingPreferences(@NonNull Context context) {
|
||||||
final ListPreference logLevelListPreference = setLogLevelListPreferenceData(findPreference("log_level"), getContext());
|
PreferenceCategory loggingCategory = findPreference("logging");
|
||||||
|
if (loggingCategory == null) return;
|
||||||
|
|
||||||
|
ListPreference logLevelListPreference = findPreference("log_level");
|
||||||
|
if (logLevelListPreference != null) {
|
||||||
|
TermuxAppSharedPreferences preferences = TermuxAppSharedPreferences.build(context, true);
|
||||||
|
if (preferences == null) return;
|
||||||
|
|
||||||
|
setLogLevelListPreferenceData(logLevelListPreference, context, preferences.getLogLevel());
|
||||||
loggingCategory.addPreference(logLevelListPreference);
|
loggingCategory.addPreference(logLevelListPreference);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ListPreference setLogLevelListPreferenceData(ListPreference logLevelListPreference, Context context) {
|
public static ListPreference setLogLevelListPreferenceData(ListPreference logLevelListPreference, Context context, int logLevel) {
|
||||||
if (logLevelListPreference == null)
|
if (logLevelListPreference == null)
|
||||||
logLevelListPreference = new ListPreference(context);
|
logLevelListPreference = new ListPreference(context);
|
||||||
|
|
||||||
@@ -43,8 +56,8 @@ public class DebuggingPreferencesFragment extends PreferenceFragmentCompat {
|
|||||||
logLevelListPreference.setEntryValues(logLevels);
|
logLevelListPreference.setEntryValues(logLevels);
|
||||||
logLevelListPreference.setEntries(logLevelLabels);
|
logLevelListPreference.setEntries(logLevelLabels);
|
||||||
|
|
||||||
logLevelListPreference.setValue(String.valueOf(Logger.getLogLevel()));
|
logLevelListPreference.setValue(String.valueOf(logLevel));
|
||||||
logLevelListPreference.setDefaultValue(Logger.getLogLevel());
|
logLevelListPreference.setDefaultValue(Logger.DEFAULT_LOG_LEVEL);
|
||||||
|
|
||||||
return logLevelListPreference;
|
return logLevelListPreference;
|
||||||
}
|
}
|
||||||
|
@@ -16,8 +16,11 @@ public class TerminalIOPreferencesFragment extends PreferenceFragmentCompat {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
||||||
|
Context context = getContext();
|
||||||
|
if (context == null) return;
|
||||||
|
|
||||||
PreferenceManager preferenceManager = getPreferenceManager();
|
PreferenceManager preferenceManager = getPreferenceManager();
|
||||||
preferenceManager.setPreferenceDataStore(TerminalIOPreferencesDataStore.getInstance(getContext()));
|
preferenceManager.setPreferenceDataStore(TerminalIOPreferencesDataStore.getInstance(context));
|
||||||
|
|
||||||
setPreferencesFromResource(R.xml.termux_terminal_io_preferences, rootKey);
|
setPreferencesFromResource(R.xml.termux_terminal_io_preferences, rootKey);
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,101 @@
|
|||||||
|
package com.termux.app.fragments.settings.termux_tasker;
|
||||||
|
|
||||||
|
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.TermuxTaskerAppSharedPreferences;
|
||||||
|
|
||||||
|
@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_tasker_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) {
|
||||||
|
TermuxTaskerAppSharedPreferences preferences = TermuxTaskerAppSharedPreferences.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 TermuxTaskerAppSharedPreferences mPreferences;
|
||||||
|
|
||||||
|
private static DebuggingPreferencesDataStore mInstance;
|
||||||
|
|
||||||
|
private DebuggingPreferencesDataStore(Context context) {
|
||||||
|
mContext = context;
|
||||||
|
mPreferences = TermuxTaskerAppSharedPreferences.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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -170,6 +170,11 @@
|
|||||||
<string name="termux_soft_keyboard_enabled_only_if_no_hardware_on">Soft keyboard will be enabled only if no hardware keyboard is connected.</string>
|
<string name="termux_soft_keyboard_enabled_only_if_no_hardware_on">Soft keyboard will be enabled only if no hardware keyboard is connected.</string>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Termux Tasker App Preferences -->
|
||||||
|
<string name="termux_tasker_preferences_title">&TERMUX_TASKER_APP_NAME;</string>
|
||||||
|
<string name="termux_tasker_preferences_summary">Preferences for &TERMUX_TASKER_APP_NAME; app</string>
|
||||||
|
|
||||||
|
|
||||||
<!-- About Preference -->
|
<!-- About Preference -->
|
||||||
<string name="about_preference_title">About</string>
|
<string name="about_preference_title">About</string>
|
||||||
|
|
||||||
|
@@ -6,6 +6,13 @@
|
|||||||
app:summary="@string/termux_preferences_summary"
|
app:summary="@string/termux_preferences_summary"
|
||||||
app:fragment="com.termux.app.fragments.settings.TermuxPreferencesFragment"/>
|
app:fragment="com.termux.app.fragments.settings.TermuxPreferencesFragment"/>
|
||||||
|
|
||||||
|
<Preference
|
||||||
|
app:key="termux_tasker"
|
||||||
|
app:title="@string/termux_tasker_preferences_title"
|
||||||
|
app:summary="@string/termux_tasker_preferences_summary"
|
||||||
|
app:isPreferenceVisible="false"
|
||||||
|
app:fragment="com.termux.app.fragments.settings.TermuxTaskerPreferencesFragment"/>
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
app:key="about"
|
app:key="about"
|
||||||
app:title="@string/about_preference_title"
|
app:title="@string/about_preference_title"
|
||||||
|
15
app/src/main/res/xml/termux_tasker_debugging_preferences.xml
Normal file
15
app/src/main/res/xml/termux_tasker_debugging_preferences.xml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
|
||||||
|
<PreferenceCategory
|
||||||
|
app:key="logging"
|
||||||
|
app:title="@string/termux_logging_header">
|
||||||
|
|
||||||
|
<ListPreference
|
||||||
|
app:defaultValue="1"
|
||||||
|
app:key="log_level"
|
||||||
|
app:title="@string/termux_log_level_title"
|
||||||
|
app:useSimpleSummaryProvider="true" />
|
||||||
|
|
||||||
|
</PreferenceCategory>
|
||||||
|
|
||||||
|
</PreferenceScreen>
|
8
app/src/main/res/xml/termux_tasker_preferences.xml
Normal file
8
app/src/main/res/xml/termux_tasker_preferences.xml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
|
||||||
|
<Preference
|
||||||
|
app:title="@string/termux_debugging_preferences_title"
|
||||||
|
app:summary="@string/termux_debugging_preferences_summary"
|
||||||
|
app:fragment="com.termux.app.fragments.settings.termux_tasker.DebuggingPreferencesFragment"/>
|
||||||
|
|
||||||
|
</PreferenceScreen>
|
Reference in New Issue
Block a user