[network/kdeconnect-android] src/main: [RunCommand] Add menu entry to "Clear output"

Albert Vaca Cintora <[email protected]>
Newsgroups gmane.comp.kde.cvs
Message-ID <[email protected]>
Git commit 9c2e8a14f26ca994c552c5651e70d6decbc2655c by Albert Vaca Cintora.
Committed on 09/08/2026 at 14:22.
Pushed by albertvaka into branch 'master'.

[RunCommand] Add menu entry to "Clear output"

BUG: 523918

M  +5    -0    src/main/java/org/kde/kdeconnect/plugins/runcommand/RunCommandPlugin.java
M  +40   -3    src/main/java/org/kde/kdeconnect/plugins/runcommand/RunCommandScreen.kt
M  +1    -0    src/main/res/values/strings.xml

https://invent.kde.org/network/kdeconnect-android/-/commit/9c2e8a14f26ca994c552c5651e70d6decbc2655c

diff --git a/src/main/java/org/kde/kdeconnect/plugins/runcommand/RunCommandPlugin.java b/src/main/java/org/kde/kdeconnect/plugins/runcommand/RunCommandPlugin.java
index 593015cbf..0fcabec6f 100644
--- a/src/main/java/org/kde/kdeconnect/plugins/runcommand/RunCommandPlugin.java
+++ b/src/main/java/org/kde/kdeconnect/plugins/runcommand/RunCommandPlugin.java
@@ -85,6 +85,11 @@ public class RunCommandPlugin extends Plugin {
         return output;
     }
 
+    public void clearOutput() {
+        output.clear();
+        commandLineIndexById.clear();
+    }
+
     public ArrayList<JSONObject> getCommandList() {
         return commandList;
     }
diff --git a/src/main/java/org/kde/kdeconnect/plugins/runcommand/RunCommandScreen.kt b/src/main/java/org/kde/kdeconnect/plugins/runcommand/RunCommandScreen.kt
index 8c9e0f1f2..53e494579 100644
--- a/src/main/java/org/kde/kdeconnect/plugins/runcommand/RunCommandScreen.kt
+++ b/src/main/java/org/kde/kdeconnect/plugins/runcommand/RunCommandScreen.kt
@@ -18,6 +18,8 @@ import androidx.compose.foundation.layout.safeDrawingPadding
 import androidx.compose.foundation.lazy.LazyColumn
 import androidx.compose.foundation.lazy.items
 import androidx.compose.foundation.lazy.rememberLazyListState
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.MoreVert
 import androidx.compose.material3.AlertDialog
 import androidx.compose.material3.Card
 import androidx.compose.material3.CircularProgressIndicator
@@ -90,10 +92,20 @@ fun RunCommandScreen(
         }
     }
 
+    val showOutputCard = commandList.isNotEmpty() &&
+        device.canSendPacketType(RunCommandPlugin.PACKET_TYPE_RUNCOMMAND_OUTPUT)
+
     KdeTheme(context) {
         Scaffold(
             modifier = Modifier.safeDrawingPadding(),
-            topBar = { RunCommandAppBar(device.name, onBackPressedDispatcher) },
+            topBar = {
+                RunCommandAppBar(
+                    name = device.name,
+                    onBackPressedDispatcher = onBackPressedDispatcher,
+                    showClearOutput = showOutputCard,
+                    onClearOutput = { plugin.clearOutput() },
+                )
+            },
             floatingActionButton = {
                 if (plugin.canAddCommand()) {
                     FloatingActionButton(onClick = {
@@ -141,7 +153,7 @@ fun RunCommandScreen(
                         .padding(it)
                         .fillMaxSize()
                 ) {
-                    if (device.canSendPacketType(RunCommandPlugin.PACKET_TYPE_RUNCOMMAND_OUTPUT)) {
+                    if (showOutputCard) {
                         item {
                             OutputCard(outputList, plugin)
                         }
@@ -318,11 +330,36 @@ private fun OutputCard(
 }
 
 @Composable
-fun RunCommandAppBar(name: String, onBackPressedDispatcher: OnBackPressedDispatcher) {
+fun RunCommandAppBar(
+    name: String,
+    onBackPressedDispatcher: OnBackPressedDispatcher,
+    showClearOutput: Boolean,
+    onClearOutput: () -> Unit,
+) {
     KdeTopAppBar(
         title = stringResource(R.string.pref_plugin_runcommand),
         subTitle = name,
         navIconOnClick = { onBackPressedDispatcher.onBackPressed() },
         navIconDescription = stringResource(androidx.appcompat.R.string.abc_action_bar_up_description),
+        actions = {
+            if (showClearOutput) {
+                var menuExpanded by remember { mutableStateOf(false) }
+                IconButton(onClick = { menuExpanded = true }) {
+                    Icon(Icons.Default.MoreVert, stringResource(R.string.extra_options))
+                }
+                DropdownMenu(
+                    expanded = menuExpanded,
+                    onDismissRequest = { menuExpanded = false },
+                ) {
+                    DropdownMenuItem(
+                        text = { Text(stringResource(R.string.runcommand_clear_output)) },
+                        onClick = {
+                            menuExpanded = false
+                            onClearOutput()
+                        },
+                    )
+                }
+            }
+        },
     )
 }
\ No newline at end of file
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index 6f57838f5..2dd035cb0 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -662,6 +662,7 @@ SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted
     <string name="runcommand_output_no_output_desc">The output from the commands will appear here.</string>
     <string name="runcommand_output_no_output">No commands executed</string>
     <string name="runcommand_stop">Stop the current command</string>
+    <string name="runcommand_clear_output">Clear output</string>
 
     <string name="pref_mpris_volume_control_key" translatable="false">mpris_volume_control_enabled</string>
     <string name="pref_mpris_volume_control_title">Hardware volume keys</string>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.