mirror of
https://github.com/fankes/termux-app.git
synced 2025-09-06 10:45:23 +08:00
Allow users to report an issue from terminal transcript by selection "Report Issue" from context menu
This commit is contained in:
@@ -135,15 +135,14 @@ public final class TermuxActivity extends Activity implements ServiceConnection
|
|||||||
|
|
||||||
private static final int CONTEXT_MENU_SELECT_URL_ID = 0;
|
private static final int CONTEXT_MENU_SELECT_URL_ID = 0;
|
||||||
private static final int CONTEXT_MENU_SHARE_TRANSCRIPT_ID = 1;
|
private static final int CONTEXT_MENU_SHARE_TRANSCRIPT_ID = 1;
|
||||||
private static final int CONTEXT_MENU_PASTE_ID = 3;
|
private static final int CONTEXT_MENU_AUTOFILL_ID = 2;
|
||||||
|
private static final int CONTEXT_MENU_RESET_TERMINAL_ID = 3;
|
||||||
private static final int CONTEXT_MENU_KILL_PROCESS_ID = 4;
|
private static final int CONTEXT_MENU_KILL_PROCESS_ID = 4;
|
||||||
private static final int CONTEXT_MENU_RESET_TERMINAL_ID = 5;
|
private static final int CONTEXT_MENU_STYLING_ID = 5;
|
||||||
private static final int CONTEXT_MENU_STYLING_ID = 6;
|
private static final int CONTEXT_MENU_TOGGLE_KEEP_SCREEN_ON = 6;
|
||||||
private static final int CONTEXT_MENU_HELP_ID = 8;
|
private static final int CONTEXT_MENU_HELP_ID = 7;
|
||||||
private static final int CONTEXT_MENU_TOGGLE_KEEP_SCREEN_ON = 9;
|
private static final int CONTEXT_MENU_SETTINGS_ID = 8;
|
||||||
private static final int CONTEXT_MENU_AUTOFILL_ID = 10;
|
private static final int CONTEXT_MENU_REPORT_ID = 9;
|
||||||
private static final int CONTEXT_MENU_SETTINGS_ID = 11;
|
|
||||||
|
|
||||||
|
|
||||||
private static final int REQUESTCODE_PERMISSION_STORAGE = 1234;
|
private static final int REQUESTCODE_PERMISSION_STORAGE = 1234;
|
||||||
|
|
||||||
@@ -526,6 +525,7 @@ public final class TermuxActivity extends Activity implements ServiceConnection
|
|||||||
menu.add(Menu.NONE, CONTEXT_MENU_TOGGLE_KEEP_SCREEN_ON, Menu.NONE, R.string.action_toggle_keep_screen_on).setCheckable(true).setChecked(mPreferences.getKeepScreenOn());
|
menu.add(Menu.NONE, CONTEXT_MENU_TOGGLE_KEEP_SCREEN_ON, Menu.NONE, R.string.action_toggle_keep_screen_on).setCheckable(true).setChecked(mPreferences.getKeepScreenOn());
|
||||||
menu.add(Menu.NONE, CONTEXT_MENU_HELP_ID, Menu.NONE, R.string.action_open_help);
|
menu.add(Menu.NONE, CONTEXT_MENU_HELP_ID, Menu.NONE, R.string.action_open_help);
|
||||||
menu.add(Menu.NONE, CONTEXT_MENU_SETTINGS_ID, Menu.NONE, R.string.action_open_settings);
|
menu.add(Menu.NONE, CONTEXT_MENU_SETTINGS_ID, Menu.NONE, R.string.action_open_settings);
|
||||||
|
menu.add(Menu.NONE, CONTEXT_MENU_REPORT_ID, Menu.NONE, R.string.action_report_issue);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Hook system menu to show context menu instead. */
|
/** Hook system menu to show context menu instead. */
|
||||||
@@ -546,29 +546,29 @@ public final class TermuxActivity extends Activity implements ServiceConnection
|
|||||||
case CONTEXT_MENU_SHARE_TRANSCRIPT_ID:
|
case CONTEXT_MENU_SHARE_TRANSCRIPT_ID:
|
||||||
mTermuxViewClient.shareSessionTranscript();
|
mTermuxViewClient.shareSessionTranscript();
|
||||||
return true;
|
return true;
|
||||||
case CONTEXT_MENU_PASTE_ID:
|
case CONTEXT_MENU_AUTOFILL_ID:
|
||||||
mTermuxViewClient.doPaste();
|
requestAutoFill();
|
||||||
return true;
|
|
||||||
case CONTEXT_MENU_KILL_PROCESS_ID:
|
|
||||||
showKillSessionDialog(session);
|
|
||||||
return true;
|
return true;
|
||||||
case CONTEXT_MENU_RESET_TERMINAL_ID:
|
case CONTEXT_MENU_RESET_TERMINAL_ID:
|
||||||
resetSession(session);
|
resetSession(session);
|
||||||
return true;
|
return true;
|
||||||
|
case CONTEXT_MENU_KILL_PROCESS_ID:
|
||||||
|
showKillSessionDialog(session);
|
||||||
|
return true;
|
||||||
case CONTEXT_MENU_STYLING_ID:
|
case CONTEXT_MENU_STYLING_ID:
|
||||||
showStylingDialog();
|
showStylingDialog();
|
||||||
return true;
|
return true;
|
||||||
|
case CONTEXT_MENU_TOGGLE_KEEP_SCREEN_ON:
|
||||||
|
toggleKeepScreenOn();
|
||||||
|
return true;
|
||||||
case CONTEXT_MENU_HELP_ID:
|
case CONTEXT_MENU_HELP_ID:
|
||||||
startActivity(new Intent(this, HelpActivity.class));
|
startActivity(new Intent(this, HelpActivity.class));
|
||||||
return true;
|
return true;
|
||||||
case CONTEXT_MENU_SETTINGS_ID:
|
case CONTEXT_MENU_SETTINGS_ID:
|
||||||
startActivity(new Intent(this, SettingsActivity.class));
|
startActivity(new Intent(this, SettingsActivity.class));
|
||||||
return true;
|
return true;
|
||||||
case CONTEXT_MENU_TOGGLE_KEEP_SCREEN_ON:
|
case CONTEXT_MENU_REPORT_ID:
|
||||||
toggleKeepScreenOn();
|
mTermuxViewClient.reportIssueFromTranscript();
|
||||||
return true;
|
|
||||||
case CONTEXT_MENU_AUTOFILL_ID:
|
|
||||||
requestAutoFill();
|
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return super.onContextItemSelected(item);
|
return super.onContextItemSelected(item);
|
||||||
|
@@ -3,7 +3,8 @@ package com.termux.app.models;
|
|||||||
public enum UserAction {
|
public enum UserAction {
|
||||||
|
|
||||||
PLUGIN_EXECUTION_COMMAND("plugin execution command"),
|
PLUGIN_EXECUTION_COMMAND("plugin execution command"),
|
||||||
CRASH_REPORT("crash report");
|
CRASH_REPORT("crash report"),
|
||||||
|
REPORT_ISSUE_FROM_TRANSCRIPT("report issue from transcript");
|
||||||
|
|
||||||
private final String name;
|
private final String name;
|
||||||
|
|
||||||
|
@@ -20,11 +20,17 @@ import android.widget.Toast;
|
|||||||
|
|
||||||
import com.termux.R;
|
import com.termux.R;
|
||||||
import com.termux.app.TermuxActivity;
|
import com.termux.app.TermuxActivity;
|
||||||
|
import com.termux.app.TermuxConstants;
|
||||||
|
import com.termux.app.activities.ReportActivity;
|
||||||
|
import com.termux.app.models.ReportInfo;
|
||||||
|
import com.termux.app.models.UserAction;
|
||||||
import com.termux.app.terminal.io.KeyboardShortcut;
|
import com.termux.app.terminal.io.KeyboardShortcut;
|
||||||
import com.termux.app.terminal.io.extrakeys.ExtraKeysView;
|
import com.termux.app.terminal.io.extrakeys.ExtraKeysView;
|
||||||
import com.termux.app.settings.properties.TermuxPropertyConstants;
|
import com.termux.app.settings.properties.TermuxPropertyConstants;
|
||||||
import com.termux.app.utils.DataUtils;
|
import com.termux.app.utils.DataUtils;
|
||||||
import com.termux.app.utils.Logger;
|
import com.termux.app.utils.Logger;
|
||||||
|
import com.termux.app.utils.MarkdownUtils;
|
||||||
|
import com.termux.app.utils.TermuxUtils;
|
||||||
import com.termux.terminal.KeyHandler;
|
import com.termux.terminal.KeyHandler;
|
||||||
import com.termux.terminal.TerminalEmulator;
|
import com.termux.terminal.TerminalEmulator;
|
||||||
import com.termux.terminal.TerminalSession;
|
import com.termux.terminal.TerminalSession;
|
||||||
@@ -394,6 +400,28 @@ public class TermuxViewClient implements TerminalViewClient {
|
|||||||
dialog.show();
|
dialog.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void reportIssueFromTranscript() {
|
||||||
|
TerminalSession session = mActivity.getCurrentSession();
|
||||||
|
if (session == null) return;
|
||||||
|
|
||||||
|
String transcriptText = session.getEmulator().getScreen().getTranscriptTextWithoutJoinedLines().trim();
|
||||||
|
if (transcriptText == null) return;
|
||||||
|
|
||||||
|
transcriptText = DataUtils.getTruncatedCommandOutput(transcriptText, DataUtils.TRANSACTION_SIZE_LIMIT_IN_BYTES, false, true, false).trim();
|
||||||
|
|
||||||
|
StringBuilder reportString = new StringBuilder();
|
||||||
|
|
||||||
|
String title = TermuxConstants.TERMUX_APP_NAME + " Report Issue";
|
||||||
|
|
||||||
|
reportString.append("## Transcript\n");
|
||||||
|
reportString.append("\n").append(MarkdownUtils.getMarkdownCodeForString(transcriptText, true));
|
||||||
|
|
||||||
|
reportString.append("\n\n").append(TermuxUtils.getAppInfoMarkdownString(mActivity, true));
|
||||||
|
reportString.append("\n\n").append(TermuxUtils.getDeviceInfoMarkdownString(mActivity));
|
||||||
|
|
||||||
|
ReportActivity.startReportActivity(mActivity, new ReportInfo(UserAction.REPORT_ISSUE_FROM_TRANSCRIPT, TermuxConstants.TERMUX_APP.TERMUX_ACTIVITY_NAME, title, null, reportString.toString(), "\n\n" + TermuxUtils.getReportIssueMarkdownString(mActivity), false));
|
||||||
|
}
|
||||||
|
|
||||||
public void doPaste() {
|
public void doPaste() {
|
||||||
TerminalSession session = mActivity.getCurrentSession();
|
TerminalSession session = mActivity.getCurrentSession();
|
||||||
if (session == null) return;
|
if (session == null) return;
|
||||||
|
@@ -250,7 +250,7 @@ public class TermuxUtils {
|
|||||||
|
|
||||||
StringBuilder markdownString = new StringBuilder();
|
StringBuilder markdownString = new StringBuilder();
|
||||||
|
|
||||||
markdownString.append("## Report Issue");
|
markdownString.append("## Where To Report An Issue");
|
||||||
|
|
||||||
markdownString.append("\n\n").append(context.getString(R.string.msg_report_issue)).append("\n");
|
markdownString.append("\n\n").append(context.getString(R.string.msg_report_issue)).append("\n");
|
||||||
|
|
||||||
|
@@ -72,6 +72,7 @@
|
|||||||
<string name="action_toggle_keep_screen_on">Keep screen on</string>
|
<string name="action_toggle_keep_screen_on">Keep screen on</string>
|
||||||
<string name="action_open_help">Help</string>
|
<string name="action_open_help">Help</string>
|
||||||
<string name="action_open_settings">Settings</string>
|
<string name="action_open_settings">Settings</string>
|
||||||
|
<string name="action_report_issue">Report Issue</string>
|
||||||
|
|
||||||
<string name="error_styling_not_installed">The &TERMUX_STYLING_APP_NAME; Plugin App is not installed.</string>
|
<string name="error_styling_not_installed">The &TERMUX_STYLING_APP_NAME; Plugin App is not installed.</string>
|
||||||
<string name="action_styling_install">Install</string>
|
<string name="action_styling_install">Install</string>
|
||||||
|
Reference in New Issue
Block a user