mirror of https://github.com/termux/termux-app
109 lines
5.3 KiB
Java
109 lines
5.3 KiB
Java
package com.termux.app.terminal.io;
|
|
|
|
import android.annotation.SuppressLint;
|
|
import android.view.Gravity;
|
|
import android.view.View;
|
|
|
|
import androidx.annotation.NonNull;
|
|
import androidx.drawerlayout.widget.DrawerLayout;
|
|
|
|
import com.termux.app.TermuxActivity;
|
|
import com.termux.app.terminal.TermuxTerminalSessionActivityClient;
|
|
import com.termux.app.terminal.TermuxTerminalViewClient;
|
|
import com.termux.shared.logger.Logger;
|
|
import com.termux.shared.termux.extrakeys.ExtraKeysConstants;
|
|
import com.termux.shared.termux.extrakeys.ExtraKeysInfo;
|
|
import com.termux.shared.termux.settings.properties.TermuxPropertyConstants;
|
|
import com.termux.shared.termux.settings.properties.TermuxSharedProperties;
|
|
import com.termux.shared.termux.terminal.io.TerminalExtraKeys;
|
|
import com.termux.view.TerminalView;
|
|
|
|
import org.json.JSONException;
|
|
|
|
public class TermuxTerminalExtraKeys extends TerminalExtraKeys {
|
|
|
|
private ExtraKeysInfo mExtraKeysInfo;
|
|
|
|
final TermuxActivity mActivity;
|
|
final TermuxTerminalViewClient mTermuxTerminalViewClient;
|
|
final TermuxTerminalSessionActivityClient mTermuxTerminalSessionActivityClient;
|
|
|
|
private static final String LOG_TAG = "TermuxTerminalExtraKeys";
|
|
|
|
public TermuxTerminalExtraKeys(TermuxActivity activity, @NonNull TerminalView terminalView,
|
|
TermuxTerminalViewClient termuxTerminalViewClient,
|
|
TermuxTerminalSessionActivityClient termuxTerminalSessionActivityClient) {
|
|
super(terminalView);
|
|
|
|
mActivity = activity;
|
|
mTermuxTerminalViewClient = termuxTerminalViewClient;
|
|
mTermuxTerminalSessionActivityClient = termuxTerminalSessionActivityClient;
|
|
|
|
setExtraKeys();
|
|
}
|
|
|
|
|
|
/**
|
|
* Set the terminal extra keys and style.
|
|
*/
|
|
private void setExtraKeys() {
|
|
mExtraKeysInfo = null;
|
|
|
|
try {
|
|
// The mMap stores the extra key and style string values while loading properties
|
|
// Check {@link #getExtraKeysInternalPropertyValueFromValue(String)} and
|
|
// {@link #getExtraKeysStyleInternalPropertyValueFromValue(String)}
|
|
String extrakeys = (String) mActivity.getProperties().getInternalPropertyValue(TermuxPropertyConstants.KEY_EXTRA_KEYS, true);
|
|
String extraKeysStyle = (String) mActivity.getProperties().getInternalPropertyValue(TermuxPropertyConstants.KEY_EXTRA_KEYS_STYLE, true);
|
|
|
|
ExtraKeysConstants.ExtraKeyDisplayMap extraKeyDisplayMap = ExtraKeysInfo.getCharDisplayMapForStyle(extraKeysStyle);
|
|
if (ExtraKeysConstants.EXTRA_KEY_DISPLAY_MAPS.DEFAULT_CHAR_DISPLAY.equals(extraKeyDisplayMap) && !TermuxPropertyConstants.DEFAULT_IVALUE_EXTRA_KEYS_STYLE.equals(extraKeysStyle)) {
|
|
Logger.logError(TermuxSharedProperties.LOG_TAG, "The style \"" + extraKeysStyle + "\" for the key \"" + TermuxPropertyConstants.KEY_EXTRA_KEYS_STYLE + "\" is invalid. Using default style instead.");
|
|
extraKeysStyle = TermuxPropertyConstants.DEFAULT_IVALUE_EXTRA_KEYS_STYLE;
|
|
}
|
|
|
|
mExtraKeysInfo = new ExtraKeysInfo(extrakeys, extraKeysStyle, ExtraKeysConstants.CONTROL_CHARS_ALIASES);
|
|
} catch (JSONException e) {
|
|
Logger.showToast(mActivity, "Could not load and set the \"" + TermuxPropertyConstants.KEY_EXTRA_KEYS + "\" property from the properties file: " + e.toString(), true);
|
|
Logger.logStackTraceWithMessage(LOG_TAG, "Could not load and set the \"" + TermuxPropertyConstants.KEY_EXTRA_KEYS + "\" property from the properties file: ", e);
|
|
|
|
try {
|
|
mExtraKeysInfo = new ExtraKeysInfo(TermuxPropertyConstants.DEFAULT_IVALUE_EXTRA_KEYS, TermuxPropertyConstants.DEFAULT_IVALUE_EXTRA_KEYS_STYLE, ExtraKeysConstants.CONTROL_CHARS_ALIASES);
|
|
} catch (JSONException e2) {
|
|
Logger.showToast(mActivity, "Can't create default extra keys",true);
|
|
Logger.logStackTraceWithMessage(LOG_TAG, "Could create default extra keys: ", e);
|
|
mExtraKeysInfo = null;
|
|
}
|
|
}
|
|
}
|
|
|
|
public ExtraKeysInfo getExtraKeysInfo() {
|
|
return mExtraKeysInfo;
|
|
}
|
|
|
|
@SuppressLint("RtlHardcoded")
|
|
@Override
|
|
public void onTerminalExtraKeyButtonClick(View view, String key, boolean ctrlDown, boolean altDown, boolean shiftDown, boolean fnDown) {
|
|
if ("KEYBOARD".equals(key)) {
|
|
if(mTermuxTerminalViewClient != null)
|
|
mTermuxTerminalViewClient.onToggleSoftKeyboardRequest();
|
|
} else if ("DRAWER".equals(key)) {
|
|
DrawerLayout drawerLayout = mTermuxTerminalViewClient.getActivity().getDrawer();
|
|
if (drawerLayout.isDrawerOpen(Gravity.LEFT))
|
|
drawerLayout.closeDrawer(Gravity.LEFT);
|
|
else
|
|
drawerLayout.openDrawer(Gravity.LEFT);
|
|
} else if ("PASTE".equals(key)) {
|
|
if(mTermuxTerminalSessionActivityClient != null)
|
|
mTermuxTerminalSessionActivityClient.onPasteTextFromClipboard(null);
|
|
} else if ("SCROLL".equals(key)) {
|
|
TerminalView terminalView = mTermuxTerminalViewClient.getActivity().getTerminalView();
|
|
if (terminalView != null && terminalView.mEmulator != null)
|
|
terminalView.mEmulator.toggleAutoScrollDisabled();
|
|
} else {
|
|
super.onTerminalExtraKeyButtonClick(view, key, ctrlDown, altDown, shiftDown, fnDown);
|
|
}
|
|
}
|
|
|
|
}
|