mirror of
https://github.com/fankes/termux-app.git
synced 2025-09-06 10:45:23 +08:00
Added|Changed: Added TermuxTerminalSessionServiceClient
and renamed TermuxTerminalSessionClient
to TermuxTerminalSessionActivityClient
Addition of `TermuxTerminalSessionServiceClient` is required so that interface methods that `TermuxService` can handle without `TermuxActivity` should implemented instead of relying on base implementation of `TermuxTerminalSessionClientBase`.
This commit is contained in:
@@ -30,6 +30,7 @@ import android.widget.Toast;
|
|||||||
|
|
||||||
import com.termux.R;
|
import com.termux.R;
|
||||||
import com.termux.app.terminal.TermuxActivityRootView;
|
import com.termux.app.terminal.TermuxActivityRootView;
|
||||||
|
import com.termux.app.terminal.TermuxTerminalSessionActivityClient;
|
||||||
import com.termux.app.terminal.io.TermuxTerminalExtraKeys;
|
import com.termux.app.terminal.io.TermuxTerminalExtraKeys;
|
||||||
import com.termux.shared.activities.ReportActivity;
|
import com.termux.shared.activities.ReportActivity;
|
||||||
import com.termux.shared.activity.ActivityUtils;
|
import com.termux.shared.activity.ActivityUtils;
|
||||||
@@ -44,7 +45,6 @@ import com.termux.shared.termux.crash.TermuxCrashUtils;
|
|||||||
import com.termux.shared.termux.settings.preferences.TermuxAppSharedPreferences;
|
import com.termux.shared.termux.settings.preferences.TermuxAppSharedPreferences;
|
||||||
import com.termux.app.terminal.TermuxSessionsListViewController;
|
import com.termux.app.terminal.TermuxSessionsListViewController;
|
||||||
import com.termux.app.terminal.io.TerminalToolbarViewPager;
|
import com.termux.app.terminal.io.TerminalToolbarViewPager;
|
||||||
import com.termux.app.terminal.TermuxTerminalSessionClient;
|
|
||||||
import com.termux.app.terminal.TermuxTerminalViewClient;
|
import com.termux.app.terminal.TermuxTerminalViewClient;
|
||||||
import com.termux.shared.termux.extrakeys.ExtraKeysView;
|
import com.termux.shared.termux.extrakeys.ExtraKeysView;
|
||||||
import com.termux.shared.termux.interact.TextInputDialogUtils;
|
import com.termux.shared.termux.interact.TextInputDialogUtils;
|
||||||
@@ -101,7 +101,7 @@ public final class TermuxActivity extends AppCompatActivity implements ServiceCo
|
|||||||
* The {@link TerminalSessionClient} interface implementation to allow for communication between
|
* The {@link TerminalSessionClient} interface implementation to allow for communication between
|
||||||
* {@link TerminalSession} and {@link TermuxActivity}.
|
* {@link TerminalSession} and {@link TermuxActivity}.
|
||||||
*/
|
*/
|
||||||
TermuxTerminalSessionClient mTermuxTerminalSessionClient;
|
TermuxTerminalSessionActivityClient mTermuxTerminalSessionActivityClient;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Termux app shared preferences manager.
|
* Termux app shared preferences manager.
|
||||||
@@ -285,8 +285,8 @@ public final class TermuxActivity extends AppCompatActivity implements ServiceCo
|
|||||||
|
|
||||||
mIsVisible = true;
|
mIsVisible = true;
|
||||||
|
|
||||||
if (mTermuxTerminalSessionClient != null)
|
if (mTermuxTerminalSessionActivityClient != null)
|
||||||
mTermuxTerminalSessionClient.onStart();
|
mTermuxTerminalSessionActivityClient.onStart();
|
||||||
|
|
||||||
if (mTermuxTerminalViewClient != null)
|
if (mTermuxTerminalViewClient != null)
|
||||||
mTermuxTerminalViewClient.onStart();
|
mTermuxTerminalViewClient.onStart();
|
||||||
@@ -305,8 +305,8 @@ public final class TermuxActivity extends AppCompatActivity implements ServiceCo
|
|||||||
|
|
||||||
if (mIsInvalidState) return;
|
if (mIsInvalidState) return;
|
||||||
|
|
||||||
if (mTermuxTerminalSessionClient != null)
|
if (mTermuxTerminalSessionActivityClient != null)
|
||||||
mTermuxTerminalSessionClient.onResume();
|
mTermuxTerminalSessionActivityClient.onResume();
|
||||||
|
|
||||||
if (mTermuxTerminalViewClient != null)
|
if (mTermuxTerminalViewClient != null)
|
||||||
mTermuxTerminalViewClient.onResume();
|
mTermuxTerminalViewClient.onResume();
|
||||||
@@ -328,8 +328,8 @@ public final class TermuxActivity extends AppCompatActivity implements ServiceCo
|
|||||||
|
|
||||||
mIsVisible = false;
|
mIsVisible = false;
|
||||||
|
|
||||||
if (mTermuxTerminalSessionClient != null)
|
if (mTermuxTerminalSessionActivityClient != null)
|
||||||
mTermuxTerminalSessionClient.onStop();
|
mTermuxTerminalSessionActivityClient.onStop();
|
||||||
|
|
||||||
if (mTermuxTerminalViewClient != null)
|
if (mTermuxTerminalViewClient != null)
|
||||||
mTermuxTerminalViewClient.onStop();
|
mTermuxTerminalViewClient.onStop();
|
||||||
@@ -399,7 +399,7 @@ public final class TermuxActivity extends AppCompatActivity implements ServiceCo
|
|||||||
if (intent != null && intent.getExtras() != null) {
|
if (intent != null && intent.getExtras() != null) {
|
||||||
launchFailsafe = intent.getExtras().getBoolean(TERMUX_ACTIVITY.EXTRA_FAILSAFE_SESSION, false);
|
launchFailsafe = intent.getExtras().getBoolean(TERMUX_ACTIVITY.EXTRA_FAILSAFE_SESSION, false);
|
||||||
}
|
}
|
||||||
mTermuxTerminalSessionClient.addNewSession(launchFailsafe, null);
|
mTermuxTerminalSessionActivityClient.addNewSession(launchFailsafe, null);
|
||||||
} catch (WindowManager.BadTokenException e) {
|
} catch (WindowManager.BadTokenException e) {
|
||||||
// Activity finished - ignore.
|
// Activity finished - ignore.
|
||||||
}
|
}
|
||||||
@@ -415,14 +415,14 @@ public final class TermuxActivity extends AppCompatActivity implements ServiceCo
|
|||||||
if (!mIsActivityRecreated && intent != null && Intent.ACTION_RUN.equals(intent.getAction())) {
|
if (!mIsActivityRecreated && intent != null && Intent.ACTION_RUN.equals(intent.getAction())) {
|
||||||
// Android 7.1 app shortcut from res/xml/shortcuts.xml.
|
// Android 7.1 app shortcut from res/xml/shortcuts.xml.
|
||||||
boolean isFailSafe = intent.getBooleanExtra(TERMUX_ACTIVITY.EXTRA_FAILSAFE_SESSION, false);
|
boolean isFailSafe = intent.getBooleanExtra(TERMUX_ACTIVITY.EXTRA_FAILSAFE_SESSION, false);
|
||||||
mTermuxTerminalSessionClient.addNewSession(isFailSafe, null);
|
mTermuxTerminalSessionActivityClient.addNewSession(isFailSafe, null);
|
||||||
} else {
|
} else {
|
||||||
mTermuxTerminalSessionClient.setCurrentSession(mTermuxTerminalSessionClient.getCurrentStoredSessionOrLast());
|
mTermuxTerminalSessionActivityClient.setCurrentSession(mTermuxTerminalSessionActivityClient.getCurrentStoredSessionOrLast());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the {@link TerminalSession} and {@link TerminalEmulator} clients.
|
// Update the {@link TerminalSession} and {@link TerminalEmulator} clients.
|
||||||
mTermuxService.setTermuxTerminalSessionClient(mTermuxTerminalSessionClient);
|
mTermuxService.setTermuxTerminalSessionClient(mTermuxTerminalSessionActivityClient);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -479,8 +479,8 @@ public final class TermuxActivity extends AppCompatActivity implements ServiceCo
|
|||||||
|
|
||||||
private void setTermuxTerminalViewAndClients() {
|
private void setTermuxTerminalViewAndClients() {
|
||||||
// Set termux terminal view and session clients
|
// Set termux terminal view and session clients
|
||||||
mTermuxTerminalSessionClient = new TermuxTerminalSessionClient(this);
|
mTermuxTerminalSessionActivityClient = new TermuxTerminalSessionActivityClient(this);
|
||||||
mTermuxTerminalViewClient = new TermuxTerminalViewClient(this, mTermuxTerminalSessionClient);
|
mTermuxTerminalViewClient = new TermuxTerminalViewClient(this, mTermuxTerminalSessionActivityClient);
|
||||||
|
|
||||||
// Set termux terminal view
|
// Set termux terminal view
|
||||||
mTerminalView = findViewById(R.id.terminal_view);
|
mTerminalView = findViewById(R.id.terminal_view);
|
||||||
@@ -489,8 +489,8 @@ public final class TermuxActivity extends AppCompatActivity implements ServiceCo
|
|||||||
if (mTermuxTerminalViewClient != null)
|
if (mTermuxTerminalViewClient != null)
|
||||||
mTermuxTerminalViewClient.onCreate();
|
mTermuxTerminalViewClient.onCreate();
|
||||||
|
|
||||||
if (mTermuxTerminalSessionClient != null)
|
if (mTermuxTerminalSessionActivityClient != null)
|
||||||
mTermuxTerminalSessionClient.onCreate();
|
mTermuxTerminalSessionActivityClient.onCreate();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setTermuxSessionsListView() {
|
private void setTermuxSessionsListView() {
|
||||||
@@ -505,7 +505,7 @@ public final class TermuxActivity extends AppCompatActivity implements ServiceCo
|
|||||||
|
|
||||||
private void setTerminalToolbarView(Bundle savedInstanceState) {
|
private void setTerminalToolbarView(Bundle savedInstanceState) {
|
||||||
mTermuxTerminalExtraKeys = new TermuxTerminalExtraKeys(this, mTerminalView,
|
mTermuxTerminalExtraKeys = new TermuxTerminalExtraKeys(this, mTerminalView,
|
||||||
mTermuxTerminalViewClient, mTermuxTerminalSessionClient);
|
mTermuxTerminalViewClient, mTermuxTerminalSessionActivityClient);
|
||||||
|
|
||||||
final ViewPager terminalToolbarViewPager = getTerminalToolbarViewPager();
|
final ViewPager terminalToolbarViewPager = getTerminalToolbarViewPager();
|
||||||
if (mPreferences.shouldShowTerminalToolbar()) terminalToolbarViewPager.setVisibility(View.VISIBLE);
|
if (mPreferences.shouldShowTerminalToolbar()) terminalToolbarViewPager.setVisibility(View.VISIBLE);
|
||||||
@@ -568,11 +568,11 @@ public final class TermuxActivity extends AppCompatActivity implements ServiceCo
|
|||||||
|
|
||||||
private void setNewSessionButtonView() {
|
private void setNewSessionButtonView() {
|
||||||
View newSessionButton = findViewById(R.id.new_session_button);
|
View newSessionButton = findViewById(R.id.new_session_button);
|
||||||
newSessionButton.setOnClickListener(v -> mTermuxTerminalSessionClient.addNewSession(false, null));
|
newSessionButton.setOnClickListener(v -> mTermuxTerminalSessionActivityClient.addNewSession(false, null));
|
||||||
newSessionButton.setOnLongClickListener(v -> {
|
newSessionButton.setOnLongClickListener(v -> {
|
||||||
TextInputDialogUtils.textInput(TermuxActivity.this, R.string.title_create_named_session, null,
|
TextInputDialogUtils.textInput(TermuxActivity.this, R.string.title_create_named_session, null,
|
||||||
R.string.action_create_named_session_confirm, text -> mTermuxTerminalSessionClient.addNewSession(false, text),
|
R.string.action_create_named_session_confirm, text -> mTermuxTerminalSessionActivityClient.addNewSession(false, text),
|
||||||
R.string.action_new_session_failsafe, text -> mTermuxTerminalSessionClient.addNewSession(true, text),
|
R.string.action_new_session_failsafe, text -> mTermuxTerminalSessionActivityClient.addNewSession(true, text),
|
||||||
-1, null, null);
|
-1, null, null);
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
@@ -713,8 +713,8 @@ public final class TermuxActivity extends AppCompatActivity implements ServiceCo
|
|||||||
session.reset();
|
session.reset();
|
||||||
showToast(getResources().getString(R.string.msg_terminal_reset), true);
|
showToast(getResources().getString(R.string.msg_terminal_reset), true);
|
||||||
|
|
||||||
if (mTermuxTerminalSessionClient != null)
|
if (mTermuxTerminalSessionActivityClient != null)
|
||||||
mTermuxTerminalSessionClient.onResetTerminalSession();
|
mTermuxTerminalSessionActivityClient.onResetTerminalSession();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -878,8 +878,8 @@ public final class TermuxActivity extends AppCompatActivity implements ServiceCo
|
|||||||
return mTermuxTerminalViewClient;
|
return mTermuxTerminalViewClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TermuxTerminalSessionClient getTermuxTerminalSessionClient() {
|
public TermuxTerminalSessionActivityClient getTermuxTerminalSessionClient() {
|
||||||
return mTermuxTerminalSessionClient;
|
return mTermuxTerminalSessionActivityClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@@ -974,8 +974,8 @@ public final class TermuxActivity extends AppCompatActivity implements ServiceCo
|
|||||||
setMargins();
|
setMargins();
|
||||||
setTerminalToolbarHeight();
|
setTerminalToolbarHeight();
|
||||||
|
|
||||||
if (mTermuxTerminalSessionClient != null)
|
if (mTermuxTerminalSessionActivityClient != null)
|
||||||
mTermuxTerminalSessionClient.onReloadActivityStyling();
|
mTermuxTerminalSessionActivityClient.onReloadActivityStyling();
|
||||||
|
|
||||||
if (mTermuxTerminalViewClient != null)
|
if (mTermuxTerminalViewClient != null)
|
||||||
mTermuxTerminalViewClient.onReloadActivityStyling();
|
mTermuxTerminalViewClient.onReloadActivityStyling();
|
||||||
|
@@ -20,7 +20,8 @@ import androidx.annotation.Nullable;
|
|||||||
|
|
||||||
import com.termux.R;
|
import com.termux.R;
|
||||||
import com.termux.app.event.SystemEventReceiver;
|
import com.termux.app.event.SystemEventReceiver;
|
||||||
import com.termux.app.terminal.TermuxTerminalSessionClient;
|
import com.termux.app.terminal.TermuxTerminalSessionActivityClient;
|
||||||
|
import com.termux.app.terminal.TermuxTerminalSessionServiceClient;
|
||||||
import com.termux.shared.termux.plugins.TermuxPluginUtils;
|
import com.termux.shared.termux.plugins.TermuxPluginUtils;
|
||||||
import com.termux.shared.data.IntentUtils;
|
import com.termux.shared.data.IntentUtils;
|
||||||
import com.termux.shared.net.uri.UriUtils;
|
import com.termux.shared.net.uri.UriUtils;
|
||||||
@@ -80,12 +81,12 @@ public final class TermuxService extends Service implements AppShell.AppShellCli
|
|||||||
* that holds activity references for activity related functions.
|
* that holds activity references for activity related functions.
|
||||||
* Note that the service may often outlive the activity, so need to clear this reference.
|
* Note that the service may often outlive the activity, so need to clear this reference.
|
||||||
*/
|
*/
|
||||||
TermuxTerminalSessionClient mTermuxTerminalSessionClient;
|
private TermuxTerminalSessionActivityClient mTermuxTerminalSessionActivityClient;
|
||||||
|
|
||||||
/** The basic implementation of the {@link TerminalSessionClient} interface to be used by {@link TerminalSession}
|
/** The basic implementation of the {@link TerminalSessionClient} interface to be used by {@link TerminalSession}
|
||||||
* that does not hold activity references.
|
* that does not hold activity references and only a service reference.
|
||||||
*/
|
*/
|
||||||
final TermuxTerminalSessionClientBase mTermuxTerminalSessionClientBase = new TermuxTerminalSessionClientBase();
|
private final TermuxTerminalSessionServiceClient mTermuxTerminalSessionServiceClient = new TermuxTerminalSessionServiceClient(this);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Termux app shared properties manager, loaded from termux.properties
|
* Termux app shared properties manager, loaded from termux.properties
|
||||||
@@ -194,7 +195,7 @@ public final class TermuxService extends Service implements AppShell.AppShellCli
|
|||||||
// Since we cannot rely on {@link TermuxActivity.onDestroy()} to always complete,
|
// Since we cannot rely on {@link TermuxActivity.onDestroy()} to always complete,
|
||||||
// we unset clients here as well if it failed, so that we do not leave service and session
|
// we unset clients here as well if it failed, so that we do not leave service and session
|
||||||
// clients with references to the activity.
|
// clients with references to the activity.
|
||||||
if (mTermuxTerminalSessionClient != null)
|
if (mTermuxTerminalSessionActivityClient != null)
|
||||||
unsetTermuxTerminalSessionClient();
|
unsetTermuxTerminalSessionClient();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -558,7 +559,7 @@ public final class TermuxService extends Service implements AppShell.AppShellCli
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a {@link TermuxSession}.
|
* Create a {@link TermuxSession}.
|
||||||
* Currently called by {@link TermuxTerminalSessionClient#addNewSession(boolean, String)} to add a new {@link TermuxSession}.
|
* Currently called by {@link TermuxTerminalSessionActivityClient#addNewSession(boolean, String)} to add a new {@link TermuxSession}.
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
public TermuxSession createTermuxSession(String executablePath, String[] arguments, String stdin,
|
public TermuxSession createTermuxSession(String executablePath, String[] arguments, String stdin,
|
||||||
@@ -613,8 +614,8 @@ public final class TermuxService extends Service implements AppShell.AppShellCli
|
|||||||
|
|
||||||
// Notify {@link TermuxSessionsListViewController} that sessions list has been updated if
|
// Notify {@link TermuxSessionsListViewController} that sessions list has been updated if
|
||||||
// activity in is foreground
|
// activity in is foreground
|
||||||
if (mTermuxTerminalSessionClient != null)
|
if (mTermuxTerminalSessionActivityClient != null)
|
||||||
mTermuxTerminalSessionClient.termuxSessionListNotifyUpdated();
|
mTermuxTerminalSessionActivityClient.termuxSessionListNotifyUpdated();
|
||||||
|
|
||||||
updateNotification();
|
updateNotification();
|
||||||
|
|
||||||
@@ -650,8 +651,8 @@ public final class TermuxService extends Service implements AppShell.AppShellCli
|
|||||||
|
|
||||||
// Notify {@link TermuxSessionsListViewController} that sessions list has been updated if
|
// Notify {@link TermuxSessionsListViewController} that sessions list has been updated if
|
||||||
// activity in is foreground
|
// activity in is foreground
|
||||||
if (mTermuxTerminalSessionClient != null)
|
if (mTermuxTerminalSessionActivityClient != null)
|
||||||
mTermuxTerminalSessionClient.termuxSessionListNotifyUpdated();
|
mTermuxTerminalSessionActivityClient.termuxSessionListNotifyUpdated();
|
||||||
}
|
}
|
||||||
|
|
||||||
updateNotification();
|
updateNotification();
|
||||||
@@ -686,8 +687,8 @@ public final class TermuxService extends Service implements AppShell.AppShellCli
|
|||||||
switch (sessionAction) {
|
switch (sessionAction) {
|
||||||
case TERMUX_SERVICE.VALUE_EXTRA_SESSION_ACTION_SWITCH_TO_NEW_SESSION_AND_OPEN_ACTIVITY:
|
case TERMUX_SERVICE.VALUE_EXTRA_SESSION_ACTION_SWITCH_TO_NEW_SESSION_AND_OPEN_ACTIVITY:
|
||||||
setCurrentStoredTerminalSession(newTerminalSession);
|
setCurrentStoredTerminalSession(newTerminalSession);
|
||||||
if (mTermuxTerminalSessionClient != null)
|
if (mTermuxTerminalSessionActivityClient != null)
|
||||||
mTermuxTerminalSessionClient.setCurrentSession(newTerminalSession);
|
mTermuxTerminalSessionActivityClient.setCurrentSession(newTerminalSession);
|
||||||
startTermuxActivity();
|
startTermuxActivity();
|
||||||
break;
|
break;
|
||||||
case TERMUX_SERVICE.VALUE_EXTRA_SESSION_ACTION_KEEP_CURRENT_SESSION_AND_OPEN_ACTIVITY:
|
case TERMUX_SERVICE.VALUE_EXTRA_SESSION_ACTION_KEEP_CURRENT_SESSION_AND_OPEN_ACTIVITY:
|
||||||
@@ -697,8 +698,8 @@ public final class TermuxService extends Service implements AppShell.AppShellCli
|
|||||||
break;
|
break;
|
||||||
case TERMUX_SERVICE.VALUE_EXTRA_SESSION_ACTION_SWITCH_TO_NEW_SESSION_AND_DONT_OPEN_ACTIVITY:
|
case TERMUX_SERVICE.VALUE_EXTRA_SESSION_ACTION_SWITCH_TO_NEW_SESSION_AND_DONT_OPEN_ACTIVITY:
|
||||||
setCurrentStoredTerminalSession(newTerminalSession);
|
setCurrentStoredTerminalSession(newTerminalSession);
|
||||||
if (mTermuxTerminalSessionClient != null)
|
if (mTermuxTerminalSessionActivityClient != null)
|
||||||
mTermuxTerminalSessionClient.setCurrentSession(newTerminalSession);
|
mTermuxTerminalSessionActivityClient.setCurrentSession(newTerminalSession);
|
||||||
break;
|
break;
|
||||||
case TERMUX_SERVICE.VALUE_EXTRA_SESSION_ACTION_KEEP_CURRENT_SESSION_AND_DONT_OPEN_ACTIVITY:
|
case TERMUX_SERVICE.VALUE_EXTRA_SESSION_ACTION_KEEP_CURRENT_SESSION_AND_DONT_OPEN_ACTIVITY:
|
||||||
if (getTermuxSessionsSize() == 1)
|
if (getTermuxSessionsSize() == 1)
|
||||||
@@ -732,35 +733,35 @@ public final class TermuxService extends Service implements AppShell.AppShellCli
|
|||||||
|
|
||||||
/** If {@link TermuxActivity} has not bound to the {@link TermuxService} yet or is destroyed, then
|
/** If {@link TermuxActivity} has not bound to the {@link TermuxService} yet or is destroyed, then
|
||||||
* interface functions requiring the activity should not be available to the terminal sessions,
|
* interface functions requiring the activity should not be available to the terminal sessions,
|
||||||
* so we just return the {@link #mTermuxTerminalSessionClientBase}. Once {@link TermuxActivity} bind
|
* so we just return the {@link #mTermuxTerminalSessionServiceClient}. Once {@link TermuxActivity} bind
|
||||||
* callback is received, it should call {@link #setTermuxTerminalSessionClient} to set the
|
* callback is received, it should call {@link #setTermuxTerminalSessionClient} to set the
|
||||||
* {@link TermuxService#mTermuxTerminalSessionClient} so that further terminal sessions are directly
|
* {@link TermuxService#mTermuxTerminalSessionActivityClient} so that further terminal sessions are directly
|
||||||
* passed the {@link TermuxTerminalSessionClient} object which fully implements the
|
* passed the {@link TermuxTerminalSessionActivityClient} object which fully implements the
|
||||||
* {@link TerminalSessionClient} interface.
|
* {@link TerminalSessionClient} interface.
|
||||||
*
|
*
|
||||||
* @return Returns the {@link TermuxTerminalSessionClient} if {@link TermuxActivity} has bound with
|
* @return Returns the {@link TermuxTerminalSessionActivityClient} if {@link TermuxActivity} has bound with
|
||||||
* {@link TermuxService}, otherwise {@link TermuxTerminalSessionClientBase}.
|
* {@link TermuxService}, otherwise {@link TermuxTerminalSessionServiceClient}.
|
||||||
*/
|
*/
|
||||||
public synchronized TermuxTerminalSessionClientBase getTermuxTerminalSessionClient() {
|
public synchronized TermuxTerminalSessionClientBase getTermuxTerminalSessionClient() {
|
||||||
if (mTermuxTerminalSessionClient != null)
|
if (mTermuxTerminalSessionActivityClient != null)
|
||||||
return mTermuxTerminalSessionClient;
|
return mTermuxTerminalSessionActivityClient;
|
||||||
else
|
else
|
||||||
return mTermuxTerminalSessionClientBase;
|
return mTermuxTerminalSessionServiceClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** This should be called when {@link TermuxActivity#onServiceConnected} is called to set the
|
/** This should be called when {@link TermuxActivity#onServiceConnected} is called to set the
|
||||||
* {@link TermuxService#mTermuxTerminalSessionClient} variable and update the {@link TerminalSession}
|
* {@link TermuxService#mTermuxTerminalSessionActivityClient} variable and update the {@link TerminalSession}
|
||||||
* and {@link TerminalEmulator} clients in case they were passed {@link TermuxTerminalSessionClientBase}
|
* and {@link TerminalEmulator} clients in case they were passed {@link TermuxTerminalSessionServiceClient}
|
||||||
* earlier.
|
* earlier.
|
||||||
*
|
*
|
||||||
* @param termuxTerminalSessionClient The {@link TermuxTerminalSessionClient} object that fully
|
* @param termuxTerminalSessionActivityClient The {@link TermuxTerminalSessionActivityClient} object that fully
|
||||||
* implements the {@link TerminalSessionClient} interface.
|
* implements the {@link TerminalSessionClient} interface.
|
||||||
*/
|
*/
|
||||||
public synchronized void setTermuxTerminalSessionClient(TermuxTerminalSessionClient termuxTerminalSessionClient) {
|
public synchronized void setTermuxTerminalSessionClient(TermuxTerminalSessionActivityClient termuxTerminalSessionActivityClient) {
|
||||||
mTermuxTerminalSessionClient = termuxTerminalSessionClient;
|
mTermuxTerminalSessionActivityClient = termuxTerminalSessionActivityClient;
|
||||||
|
|
||||||
for (int i = 0; i < mShellManager.mTermuxSessions.size(); i++)
|
for (int i = 0; i < mShellManager.mTermuxSessions.size(); i++)
|
||||||
mShellManager.mTermuxSessions.get(i).getTerminalSession().updateTerminalSessionClient(mTermuxTerminalSessionClient);
|
mShellManager.mTermuxSessions.get(i).getTerminalSession().updateTerminalSessionClient(mTermuxTerminalSessionActivityClient);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** This should be called when {@link TermuxActivity} has been destroyed and in {@link #onUnbind(Intent)}
|
/** This should be called when {@link TermuxActivity} has been destroyed and in {@link #onUnbind(Intent)}
|
||||||
@@ -769,9 +770,9 @@ public final class TermuxService extends Service implements AppShell.AppShellCli
|
|||||||
*/
|
*/
|
||||||
public synchronized void unsetTermuxTerminalSessionClient() {
|
public synchronized void unsetTermuxTerminalSessionClient() {
|
||||||
for (int i = 0; i < mShellManager.mTermuxSessions.size(); i++)
|
for (int i = 0; i < mShellManager.mTermuxSessions.size(); i++)
|
||||||
mShellManager.mTermuxSessions.get(i).getTerminalSession().updateTerminalSessionClient(mTermuxTerminalSessionClientBase);
|
mShellManager.mTermuxSessions.get(i).getTerminalSession().updateTerminalSessionClient(mTermuxTerminalSessionServiceClient);
|
||||||
|
|
||||||
mTermuxTerminalSessionClient = null;
|
mTermuxTerminalSessionActivityClient = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
package com.termux.app.terminal;
|
package com.termux.app.terminal;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.ClipData;
|
import android.content.ClipData;
|
||||||
import android.content.ClipboardManager;
|
import android.content.ClipboardManager;
|
||||||
@@ -27,6 +28,7 @@ import com.termux.shared.termux.terminal.io.BellHandler;
|
|||||||
import com.termux.shared.logger.Logger;
|
import com.termux.shared.logger.Logger;
|
||||||
import com.termux.terminal.TerminalColors;
|
import com.termux.terminal.TerminalColors;
|
||||||
import com.termux.terminal.TerminalSession;
|
import com.termux.terminal.TerminalSession;
|
||||||
|
import com.termux.terminal.TerminalSessionClient;
|
||||||
import com.termux.terminal.TextStyle;
|
import com.termux.terminal.TextStyle;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@@ -34,7 +36,8 @@ import java.io.FileInputStream;
|
|||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
public class TermuxTerminalSessionClient extends TermuxTerminalSessionClientBase {
|
/** The {@link TerminalSessionClient} implementation that may require an {@link Activity} for its interface methods. */
|
||||||
|
public class TermuxTerminalSessionActivityClient extends TermuxTerminalSessionClientBase {
|
||||||
|
|
||||||
private final TermuxActivity mActivity;
|
private final TermuxActivity mActivity;
|
||||||
|
|
||||||
@@ -44,9 +47,9 @@ public class TermuxTerminalSessionClient extends TermuxTerminalSessionClientBase
|
|||||||
|
|
||||||
private int mBellSoundId;
|
private int mBellSoundId;
|
||||||
|
|
||||||
private static final String LOG_TAG = "TermuxTerminalSessionClient";
|
private static final String LOG_TAG = "TermuxTerminalSessionActivityClient";
|
||||||
|
|
||||||
public TermuxTerminalSessionClient(TermuxActivity activity) {
|
public TermuxTerminalSessionActivityClient(TermuxActivity activity) {
|
||||||
this.mActivity = activity;
|
this.mActivity = activity;
|
||||||
}
|
}
|
||||||
|
|
@@ -0,0 +1,24 @@
|
|||||||
|
package com.termux.app.terminal;
|
||||||
|
|
||||||
|
import android.app.Service;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
|
import com.termux.app.TermuxService;
|
||||||
|
import com.termux.shared.termux.shell.command.runner.terminal.TermuxSession;
|
||||||
|
import com.termux.shared.termux.terminal.TermuxTerminalSessionClientBase;
|
||||||
|
import com.termux.terminal.TerminalSession;
|
||||||
|
import com.termux.terminal.TerminalSessionClient;
|
||||||
|
|
||||||
|
/** The {@link TerminalSessionClient} implementation that may require a {@link Service} for its interface methods. */
|
||||||
|
public class TermuxTerminalSessionServiceClient extends TermuxTerminalSessionClientBase {
|
||||||
|
|
||||||
|
private static final String LOG_TAG = "TermuxTerminalSessionServiceClient";
|
||||||
|
|
||||||
|
private final TermuxService mService;
|
||||||
|
|
||||||
|
public TermuxTerminalSessionServiceClient(TermuxService service) {
|
||||||
|
this.mService = service;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -57,7 +57,7 @@ public class TermuxTerminalViewClient extends TermuxTerminalViewClientBase {
|
|||||||
|
|
||||||
final TermuxActivity mActivity;
|
final TermuxActivity mActivity;
|
||||||
|
|
||||||
final TermuxTerminalSessionClient mTermuxTerminalSessionClient;
|
final TermuxTerminalSessionActivityClient mTermuxTerminalSessionActivityClient;
|
||||||
|
|
||||||
/** Keeping track of the special keys acting as Ctrl and Fn for the soft keyboard and other hardware keys. */
|
/** Keeping track of the special keys acting as Ctrl and Fn for the soft keyboard and other hardware keys. */
|
||||||
boolean mVirtualControlKeyDown, mVirtualFnKeyDown;
|
boolean mVirtualControlKeyDown, mVirtualFnKeyDown;
|
||||||
@@ -73,9 +73,9 @@ public class TermuxTerminalViewClient extends TermuxTerminalViewClientBase {
|
|||||||
|
|
||||||
private static final String LOG_TAG = "TermuxTerminalViewClient";
|
private static final String LOG_TAG = "TermuxTerminalViewClient";
|
||||||
|
|
||||||
public TermuxTerminalViewClient(TermuxActivity activity, TermuxTerminalSessionClient termuxTerminalSessionClient) {
|
public TermuxTerminalViewClient(TermuxActivity activity, TermuxTerminalSessionActivityClient termuxTerminalSessionActivityClient) {
|
||||||
this.mActivity = activity;
|
this.mActivity = activity;
|
||||||
this.mTermuxTerminalSessionClient = termuxTerminalSessionClient;
|
this.mTermuxTerminalSessionActivityClient = termuxTerminalSessionActivityClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TermuxActivity getActivity() {
|
public TermuxActivity getActivity() {
|
||||||
@@ -242,7 +242,7 @@ public class TermuxTerminalViewClient extends TermuxTerminalViewClientBase {
|
|||||||
if (handleVirtualKeys(keyCode, e, true)) return true;
|
if (handleVirtualKeys(keyCode, e, true)) return true;
|
||||||
|
|
||||||
if (keyCode == KeyEvent.KEYCODE_ENTER && !currentSession.isRunning()) {
|
if (keyCode == KeyEvent.KEYCODE_ENTER && !currentSession.isRunning()) {
|
||||||
mTermuxTerminalSessionClient.removeFinishedSession(currentSession);
|
mTermuxTerminalSessionActivityClient.removeFinishedSession(currentSession);
|
||||||
return true;
|
return true;
|
||||||
} else if (!mActivity.getProperties().areHardwareKeyboardShortcutsDisabled() &&
|
} else if (!mActivity.getProperties().areHardwareKeyboardShortcutsDisabled() &&
|
||||||
e.isCtrlPressed() && e.isAltPressed()) {
|
e.isCtrlPressed() && e.isAltPressed()) {
|
||||||
@@ -250,9 +250,9 @@ public class TermuxTerminalViewClient extends TermuxTerminalViewClientBase {
|
|||||||
int unicodeChar = e.getUnicodeChar(0);
|
int unicodeChar = e.getUnicodeChar(0);
|
||||||
|
|
||||||
if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN || unicodeChar == 'n'/* next */) {
|
if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN || unicodeChar == 'n'/* next */) {
|
||||||
mTermuxTerminalSessionClient.switchToSession(true);
|
mTermuxTerminalSessionActivityClient.switchToSession(true);
|
||||||
} else if (keyCode == KeyEvent.KEYCODE_DPAD_UP || unicodeChar == 'p' /* previous */) {
|
} else if (keyCode == KeyEvent.KEYCODE_DPAD_UP || unicodeChar == 'p' /* previous */) {
|
||||||
mTermuxTerminalSessionClient.switchToSession(false);
|
mTermuxTerminalSessionActivityClient.switchToSession(false);
|
||||||
} else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
|
} else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
|
||||||
mActivity.getDrawer().openDrawer(Gravity.LEFT);
|
mActivity.getDrawer().openDrawer(Gravity.LEFT);
|
||||||
} else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
|
} else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
|
||||||
@@ -262,9 +262,9 @@ public class TermuxTerminalViewClient extends TermuxTerminalViewClientBase {
|
|||||||
} else if (unicodeChar == 'm'/* menu */) {
|
} else if (unicodeChar == 'm'/* menu */) {
|
||||||
mActivity.getTerminalView().showContextMenu();
|
mActivity.getTerminalView().showContextMenu();
|
||||||
} else if (unicodeChar == 'r'/* rename */) {
|
} else if (unicodeChar == 'r'/* rename */) {
|
||||||
mTermuxTerminalSessionClient.renameSession(currentSession);
|
mTermuxTerminalSessionActivityClient.renameSession(currentSession);
|
||||||
} else if (unicodeChar == 'c'/* create */) {
|
} else if (unicodeChar == 'c'/* create */) {
|
||||||
mTermuxTerminalSessionClient.addNewSession(false, null);
|
mTermuxTerminalSessionActivityClient.addNewSession(false, null);
|
||||||
} else if (unicodeChar == 'u' /* urls */) {
|
} else if (unicodeChar == 'u' /* urls */) {
|
||||||
showUrlSelection();
|
showUrlSelection();
|
||||||
} else if (unicodeChar == 'v') {
|
} else if (unicodeChar == 'v') {
|
||||||
@@ -277,7 +277,7 @@ public class TermuxTerminalViewClient extends TermuxTerminalViewClientBase {
|
|||||||
changeFontSize(false);
|
changeFontSize(false);
|
||||||
} else if (unicodeChar >= '1' && unicodeChar <= '9') {
|
} else if (unicodeChar >= '1' && unicodeChar <= '9') {
|
||||||
int index = unicodeChar - '1';
|
int index = unicodeChar - '1';
|
||||||
mTermuxTerminalSessionClient.switchToSession(index);
|
mTermuxTerminalSessionActivityClient.switchToSession(index);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -461,7 +461,7 @@ public class TermuxTerminalViewClient extends TermuxTerminalViewClientBase {
|
|||||||
return true;
|
return true;
|
||||||
} else if (ctrlDown) {
|
} else if (ctrlDown) {
|
||||||
if (codePoint == 106 /* Ctrl+j or \n */ && !session.isRunning()) {
|
if (codePoint == 106 /* Ctrl+j or \n */ && !session.isRunning()) {
|
||||||
mTermuxTerminalSessionClient.removeFinishedSession(session);
|
mTermuxTerminalSessionActivityClient.removeFinishedSession(session);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -473,16 +473,16 @@ public class TermuxTerminalViewClient extends TermuxTerminalViewClientBase {
|
|||||||
if (codePointLowerCase == shortcut.codePoint) {
|
if (codePointLowerCase == shortcut.codePoint) {
|
||||||
switch (shortcut.shortcutAction) {
|
switch (shortcut.shortcutAction) {
|
||||||
case TermuxPropertyConstants.ACTION_SHORTCUT_CREATE_SESSION:
|
case TermuxPropertyConstants.ACTION_SHORTCUT_CREATE_SESSION:
|
||||||
mTermuxTerminalSessionClient.addNewSession(false, null);
|
mTermuxTerminalSessionActivityClient.addNewSession(false, null);
|
||||||
return true;
|
return true;
|
||||||
case TermuxPropertyConstants.ACTION_SHORTCUT_NEXT_SESSION:
|
case TermuxPropertyConstants.ACTION_SHORTCUT_NEXT_SESSION:
|
||||||
mTermuxTerminalSessionClient.switchToSession(true);
|
mTermuxTerminalSessionActivityClient.switchToSession(true);
|
||||||
return true;
|
return true;
|
||||||
case TermuxPropertyConstants.ACTION_SHORTCUT_PREVIOUS_SESSION:
|
case TermuxPropertyConstants.ACTION_SHORTCUT_PREVIOUS_SESSION:
|
||||||
mTermuxTerminalSessionClient.switchToSession(false);
|
mTermuxTerminalSessionActivityClient.switchToSession(false);
|
||||||
return true;
|
return true;
|
||||||
case TermuxPropertyConstants.ACTION_SHORTCUT_RENAME_SESSION:
|
case TermuxPropertyConstants.ACTION_SHORTCUT_RENAME_SESSION:
|
||||||
mTermuxTerminalSessionClient.renameSession(mActivity.getCurrentSession());
|
mTermuxTerminalSessionActivityClient.renameSession(mActivity.getCurrentSession());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -8,7 +8,7 @@ import androidx.annotation.NonNull;
|
|||||||
import androidx.drawerlayout.widget.DrawerLayout;
|
import androidx.drawerlayout.widget.DrawerLayout;
|
||||||
|
|
||||||
import com.termux.app.TermuxActivity;
|
import com.termux.app.TermuxActivity;
|
||||||
import com.termux.app.terminal.TermuxTerminalSessionClient;
|
import com.termux.app.terminal.TermuxTerminalSessionActivityClient;
|
||||||
import com.termux.app.terminal.TermuxTerminalViewClient;
|
import com.termux.app.terminal.TermuxTerminalViewClient;
|
||||||
import com.termux.shared.logger.Logger;
|
import com.termux.shared.logger.Logger;
|
||||||
import com.termux.shared.termux.extrakeys.ExtraKeysConstants;
|
import com.termux.shared.termux.extrakeys.ExtraKeysConstants;
|
||||||
@@ -26,18 +26,18 @@ public class TermuxTerminalExtraKeys extends TerminalExtraKeys {
|
|||||||
|
|
||||||
final TermuxActivity mActivity;
|
final TermuxActivity mActivity;
|
||||||
final TermuxTerminalViewClient mTermuxTerminalViewClient;
|
final TermuxTerminalViewClient mTermuxTerminalViewClient;
|
||||||
final TermuxTerminalSessionClient mTermuxTerminalSessionClient;
|
final TermuxTerminalSessionActivityClient mTermuxTerminalSessionActivityClient;
|
||||||
|
|
||||||
private static final String LOG_TAG = "TermuxTerminalExtraKeys";
|
private static final String LOG_TAG = "TermuxTerminalExtraKeys";
|
||||||
|
|
||||||
public TermuxTerminalExtraKeys(TermuxActivity activity, @NonNull TerminalView terminalView,
|
public TermuxTerminalExtraKeys(TermuxActivity activity, @NonNull TerminalView terminalView,
|
||||||
TermuxTerminalViewClient termuxTerminalViewClient,
|
TermuxTerminalViewClient termuxTerminalViewClient,
|
||||||
TermuxTerminalSessionClient termuxTerminalSessionClient) {
|
TermuxTerminalSessionActivityClient termuxTerminalSessionActivityClient) {
|
||||||
super(terminalView);
|
super(terminalView);
|
||||||
|
|
||||||
mActivity = activity;
|
mActivity = activity;
|
||||||
mTermuxTerminalViewClient = termuxTerminalViewClient;
|
mTermuxTerminalViewClient = termuxTerminalViewClient;
|
||||||
mTermuxTerminalSessionClient = termuxTerminalSessionClient;
|
mTermuxTerminalSessionActivityClient = termuxTerminalSessionActivityClient;
|
||||||
|
|
||||||
setExtraKeys();
|
setExtraKeys();
|
||||||
}
|
}
|
||||||
@@ -94,8 +94,8 @@ public class TermuxTerminalExtraKeys extends TerminalExtraKeys {
|
|||||||
else
|
else
|
||||||
drawerLayout.openDrawer(Gravity.LEFT);
|
drawerLayout.openDrawer(Gravity.LEFT);
|
||||||
} else if ("PASTE".equals(key)) {
|
} else if ("PASTE".equals(key)) {
|
||||||
if(mTermuxTerminalSessionClient != null)
|
if(mTermuxTerminalSessionActivityClient != null)
|
||||||
mTermuxTerminalSessionClient.onPasteTextFromClipboard(null);
|
mTermuxTerminalSessionActivityClient.onPasteTextFromClipboard(null);
|
||||||
} else {
|
} else {
|
||||||
super.onTerminalExtraKeyButtonClick(view, key, ctrlDown, altDown, shiftDown, fnDown);
|
super.onTerminalExtraKeyButtonClick(view, key, ctrlDown, altDown, shiftDown, fnDown);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user