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 8c871a44..7ca78483 100644
--- a/app/src/main/java/com/termux/app/activities/SettingsActivity.java
+++ b/app/src/main/java/com/termux/app/activities/SettingsActivity.java
@@ -120,7 +120,7 @@ public class SettingsActivity extends AppCompatActivity {
StringBuilder aboutString = new StringBuilder();
aboutString.append(TermuxUtils.getAppInfoMarkdownString(context, TermuxUtils.AppInfoMode.TERMUX_AND_PLUGIN_PACKAGES));
- aboutString.append("\n\n").append(AndroidUtils.getDeviceInfoMarkdownString(context));
+ aboutString.append("\n\n").append(AndroidUtils.getDeviceInfoMarkdownString(context, true));
aboutString.append("\n\n").append(TermuxUtils.getImportantLinksMarkdownString(context));
String userActionName = UserAction.ABOUT.getName();
diff --git a/app/src/main/java/com/termux/app/terminal/TermuxTerminalViewClient.java b/app/src/main/java/com/termux/app/terminal/TermuxTerminalViewClient.java
index 1a3a8c3d..e352c790 100644
--- a/app/src/main/java/com/termux/app/terminal/TermuxTerminalViewClient.java
+++ b/app/src/main/java/com/termux/app/terminal/TermuxTerminalViewClient.java
@@ -755,7 +755,7 @@ public class TermuxTerminalViewClient extends TermuxTerminalViewClientBase {
reportString.append("\n\n").append(TermuxUtils.getAppInfoMarkdownString(mActivity, TermuxUtils.AppInfoMode.TERMUX_PACKAGE));
}
- reportString.append("\n\n").append(AndroidUtils.getDeviceInfoMarkdownString(mActivity));
+ reportString.append("\n\n").append(AndroidUtils.getDeviceInfoMarkdownString(mActivity, true));
if (TermuxBootstrap.isAppPackageManagerAPT()) {
String termuxAptInfo = TermuxUtils.geAPTInfoMarkdownString(mActivity);
diff --git a/termux-shared/src/main/java/com/termux/shared/android/AndroidUtils.java b/termux-shared/src/main/java/com/termux/shared/android/AndroidUtils.java
index bc229f45..bca47578 100644
--- a/termux-shared/src/main/java/com/termux/shared/android/AndroidUtils.java
+++ b/termux-shared/src/main/java/com/termux/shared/android/AndroidUtils.java
@@ -9,6 +9,7 @@ import android.os.Build;
import androidx.annotation.NonNull;
import com.google.common.base.Joiner;
+import com.termux.shared.R;
import com.termux.shared.data.DataUtils;
import com.termux.shared.logger.Logger;
import com.termux.shared.markdown.MarkdownUtils;
@@ -50,7 +51,7 @@ public class AndroidUtils {
AndroidUtils.appendPropertyToMarkdown(markdownString,"FILES_DIR", filesDir);
- if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N ) {
+ if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Long userId = PackageUtils.getUserIdForPackage(context);
if (userId == null || userId != 0)
AndroidUtils.appendPropertyToMarkdown(markdownString, "USER_ID", userId);
@@ -99,13 +100,18 @@ public class AndroidUtils {
return markdownString.toString();
}
+ public static String getDeviceInfoMarkdownString(@NonNull final Context context) {
+ return getDeviceInfoMarkdownString(context, false);
+ }
+
/**
* Get a markdown {@link String} for the device info.
*
* @param context The context for operations.
+ * @param addPhantomProcessesInfo If phantom processes info should be added on Android >= 12.
* @return Returns the markdown {@link String}.
*/
- public static String getDeviceInfoMarkdownString(@NonNull final Context context) {
+ public static String getDeviceInfoMarkdownString(@NonNull final Context context, boolean addPhantomProcessesInfo) {
// Some properties cannot be read with {@link System#getProperty(String)} but can be read
// directly by running getprop command
Properties systemProperties = getSystemProperties();
@@ -133,8 +139,16 @@ public class AndroidUtils {
appendPropertyToMarkdown(markdownString, "TAGS", Build.TAGS);
// If on Android >= 12
- if (Build.VERSION.SDK_INT > Build.VERSION_CODES.R)
- appendPropertyToMarkdown(markdownString, "MONITOR_PHANTOM_PROCS", FeatureFlagUtils.getFeatureFlagValueString(context, FeatureFlagUtils.SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS).getName());
+ if (Build.VERSION.SDK_INT > Build.VERSION_CODES.R) {
+ Integer maxPhantomProcesses = PhantomProcessUtils.getActivityManagerMaxPhantomProcesses(context);
+ if (maxPhantomProcesses != null)
+ appendPropertyToMarkdown(markdownString, "MAX_PHANTOM_PROCESSES", maxPhantomProcesses);
+ else
+ appendLiteralPropertyToMarkdown(markdownString, "MAX_PHANTOM_PROCESSES", "- (*" + context.getString(R.string.msg_requires_dump_and_package_usage_stats_permissions) + "*)");
+
+ appendPropertyToMarkdown(markdownString, "MONITOR_PHANTOM_PROCS", PhantomProcessUtils.getFeatureFlagMonitorPhantomProcsValueString(context).getName());
+ appendPropertyToMarkdown(markdownString, "DEVICE_CONFIG_SYNC_DISABLED", PhantomProcessUtils.getSettingsGlobalDeviceConfigSyncDisabled(context));
+ }
markdownString.append("\n\n### Hardware\n");
appendPropertyToMarkdown(markdownString, "MANUFACTURER", Build.MANUFACTURER);
@@ -222,6 +236,14 @@ public class AndroidUtils {
return MarkdownUtils.getSingleLineMarkdownStringEntry(label, value, "-");
}
+ public static void appendLiteralPropertyToMarkdown(StringBuilder markdownString, String label, Object value) {
+ markdownString.append("\n").append(getLiteralPropertyMarkdown(label, value));
+ }
+
+ public static String getLiteralPropertyMarkdown(String label, Object value) {
+ return MarkdownUtils.getLiteralSingleLineMarkdownStringEntry(label, value, "-");
+ }
+
public static String getCurrentTimeStamp() {
diff --git a/termux-shared/src/main/java/com/termux/shared/markdown/MarkdownUtils.java b/termux-shared/src/main/java/com/termux/shared/markdown/MarkdownUtils.java
index 08d8c867..4e1b482e 100644
--- a/termux-shared/src/main/java/com/termux/shared/markdown/MarkdownUtils.java
+++ b/termux-shared/src/main/java/com/termux/shared/markdown/MarkdownUtils.java
@@ -106,6 +106,10 @@ public class MarkdownUtils {
+ public static String getLiteralSingleLineMarkdownStringEntry(String label, Object object, String def) {
+ return "**" + label + "**: " + (object != null ? object.toString() : def) + " ";
+ }
+
public static String getSingleLineMarkdownStringEntry(String label, Object object, String def) {
if (object != null)
return "**" + label + "**: " + getMarkdownCodeForString(object.toString(), false) + " ";
diff --git a/termux-shared/src/main/java/com/termux/shared/termux/crash/TermuxCrashUtils.java b/termux-shared/src/main/java/com/termux/shared/termux/crash/TermuxCrashUtils.java
index 8117af02..1cd4ce06 100644
--- a/termux-shared/src/main/java/com/termux/shared/termux/crash/TermuxCrashUtils.java
+++ b/termux-shared/src/main/java/com/termux/shared/termux/crash/TermuxCrashUtils.java
@@ -324,7 +324,7 @@ public class TermuxCrashUtils implements CrashHandler.CrashHandlerClient {
reportString.append("\n\n").append(TermuxUtils.getAppInfoMarkdownString(currentPackageContext, appInfoMode, currentPackageName));
if (addDeviceInfo)
- reportString.append("\n\n").append(AndroidUtils.getDeviceInfoMarkdownString(currentPackageContext));
+ reportString.append("\n\n").append(AndroidUtils.getDeviceInfoMarkdownString(currentPackageContext, true));
String userActionName = UserAction.CRASH_REPORT.getName();
diff --git a/termux-shared/src/main/java/com/termux/shared/termux/plugins/TermuxPluginUtils.java b/termux-shared/src/main/java/com/termux/shared/termux/plugins/TermuxPluginUtils.java
index 8d83dc0f..cb37ddc3 100644
--- a/termux-shared/src/main/java/com/termux/shared/termux/plugins/TermuxPluginUtils.java
+++ b/termux-shared/src/main/java/com/termux/shared/termux/plugins/TermuxPluginUtils.java
@@ -362,7 +362,7 @@ public class TermuxPluginUtils {
callingPackageName != null ? callingPackageName : currentPackageName));
if (addDeviceInfo)
- reportString.append("\n\n").append(AndroidUtils.getDeviceInfoMarkdownString(currentPackageContext));
+ reportString.append("\n\n").append(AndroidUtils.getDeviceInfoMarkdownString(currentPackageContext, true));
String userActionName = UserAction.PLUGIN_EXECUTION_COMMAND.getName();
diff --git a/termux-shared/src/main/res/values/strings.xml b/termux-shared/src/main/res/values/strings.xml
index c9f1622b..9124a889 100644
--- a/termux-shared/src/main/res/values/strings.xml
+++ b/termux-shared/src/main/res/values/strings.xml
@@ -36,6 +36,7 @@
Attempted to check for permissions that have not been requested in app manifest: %1$s
Attempted to ask for permissions that have not been requested in app manifest: %1$s
The \"%1$s\" package is targeting targetSdkVersion %2$d and is running on android sdk %3$d but has not set requestLegacyExternalStorage to true in app manifest
+ Requires `DUMP` and `PACKAGE_USAGE_STATS` permission