Fix potential null exceptions

This commit is contained in:
agnostic-apollo
2021-03-10 02:33:45 +05:00
parent 324a69f7fa
commit dbf84773d4
2 changed files with 20 additions and 8 deletions

View File

@@ -105,8 +105,6 @@ public final class TermuxActivity extends Activity implements ServiceConnection
private static final String BROADCAST_TERMUX_OPENED = TermuxConstants.TERMUX_PACKAGE_NAME + ".app.OPENED"; private static final String BROADCAST_TERMUX_OPENED = TermuxConstants.TERMUX_PACKAGE_NAME + ".app.OPENED";
/** The main view of the activity showing the terminal. Initialized in onCreate(). */ /** The main view of the activity showing the terminal. Initialized in onCreate(). */
@SuppressWarnings("NullableProblems")
@NonNull
TerminalView mTerminalView; TerminalView mTerminalView;
ExtraKeysView mExtraKeysView; ExtraKeysView mExtraKeysView;
@@ -366,7 +364,7 @@ public final class TermuxActivity extends Activity implements ServiceConnection
for (ResolveInfo info : matches) { for (ResolveInfo info : matches) {
Intent explicitBroadcast = new Intent(broadcast); Intent explicitBroadcast = new Intent(broadcast);
ComponentName cname = new ComponentName(info.activityInfo.applicationInfo.packageName, ComponentName cname = new ComponentName(info.activityInfo.applicationInfo.packageName,
info.activityInfo.name); info.activityInfo.name);
explicitBroadcast.setComponent(cname); explicitBroadcast.setComponent(cname);
sendBroadcast(explicitBroadcast); sendBroadcast(explicitBroadcast);
} }
@@ -488,7 +486,10 @@ public final class TermuxActivity extends Activity implements ServiceConnection
} }
TerminalSession sessionAtRow = getItem(position); TerminalSession sessionAtRow = getItem(position);
boolean sessionRunning = sessionAtRow.isRunning(); if (sessionAtRow == null) return row;
boolean sessionRunning = false;
sessionRunning = sessionAtRow.isRunning();
TextView firstLineView = row.findViewById(R.id.row_line); TextView firstLineView = row.findViewById(R.id.row_line);
if (mIsUsingBlackUI) { if (mIsUsingBlackUI) {
@@ -577,6 +578,7 @@ public final class TermuxActivity extends Activity implements ServiceConnection
@SuppressLint("InflateParams") @SuppressLint("InflateParams")
void renameSession(final TerminalSession sessionToRename) { void renameSession(final TerminalSession sessionToRename) {
if (sessionToRename == null) return;
DialogUtils.textInput(this, R.string.session_rename_title, sessionToRename.mSessionName, R.string.session_rename_positive_button, text -> { DialogUtils.textInput(this, R.string.session_rename_title, sessionToRename.mSessionName, R.string.session_rename_positive_button, text -> {
sessionToRename.mSessionName = text; sessionToRename.mSessionName = text;
mListViewAdapter.notifyDataSetChanged(); mListViewAdapter.notifyDataSetChanged();
@@ -629,6 +631,7 @@ public final class TermuxActivity extends Activity implements ServiceConnection
getDrawer().closeDrawers(); getDrawer().closeDrawers();
} }
@SuppressLint("RtlHardcoded")
@Override @Override
public void onBackPressed() { public void onBackPressed() {
if (getDrawer().isDrawerOpen(Gravity.LEFT)) { if (getDrawer().isDrawerOpen(Gravity.LEFT)) {
@@ -825,7 +828,10 @@ public final class TermuxActivity extends Activity implements ServiceConnection
} }
void showUrlSelection() { void showUrlSelection() {
String text = getCurrentTermSession().getEmulator().getScreen().getTranscriptTextWithFullLinesJoined(); String text = null;
if (getCurrentTermSession() != null) {
text = getCurrentTermSession().getEmulator().getScreen().getTranscriptTextWithFullLinesJoined();
}
LinkedHashSet<CharSequence> urlSet = extractUrls(text); LinkedHashSet<CharSequence> urlSet = extractUrls(text);
if (urlSet.isEmpty()) { if (urlSet.isEmpty()) {
new AlertDialog.Builder(this).setMessage(R.string.select_url_no_found).show(); new AlertDialog.Builder(this).setMessage(R.string.select_url_no_found).show();
@@ -896,11 +902,14 @@ public final class TermuxActivity extends Activity implements ServiceConnection
return true; return true;
case CONTEXTMENU_KILL_PROCESS_ID: case CONTEXTMENU_KILL_PROCESS_ID:
final AlertDialog.Builder b = new AlertDialog.Builder(this); final AlertDialog.Builder b = new AlertDialog.Builder(this);
final TerminalSession terminalSession = getCurrentTermSession();
if (terminalSession == null) return true;
b.setIcon(android.R.drawable.ic_dialog_alert); b.setIcon(android.R.drawable.ic_dialog_alert);
b.setMessage(R.string.confirm_kill_process); b.setMessage(R.string.confirm_kill_process);
b.setPositiveButton(android.R.string.yes, (dialog, id) -> { b.setPositiveButton(android.R.string.yes, (dialog, id) -> {
dialog.dismiss(); dialog.dismiss();
getCurrentTermSession().finishIfRunning(); terminalSession.finishIfRunning();
}); });
b.setNegativeButton(android.R.string.no, null); b.setNegativeButton(android.R.string.no, null);
b.show(); b.show();
@@ -952,7 +961,7 @@ public final class TermuxActivity extends Activity implements ServiceConnection
} }
@Override @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) { public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == REQUESTCODE_PERMISSION_STORAGE && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { if (requestCode == REQUESTCODE_PERMISSION_STORAGE && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
TermuxInstaller.setupStorageSymlinks(this); TermuxInstaller.setupStorageSymlinks(this);
} }
@@ -969,7 +978,9 @@ public final class TermuxActivity extends Activity implements ServiceConnection
if (clipData == null) return; if (clipData == null) return;
CharSequence paste = clipData.getItemAt(0).coerceToText(this); CharSequence paste = clipData.getItemAt(0).coerceToText(this);
if (!TextUtils.isEmpty(paste)) if (!TextUtils.isEmpty(paste))
getCurrentTermSession().getEmulator().paste(paste.toString()); if (getCurrentTermSession() != null) {
getCurrentTermSession().getEmulator().paste(paste.toString());
}
} }
/** The current session as stored or the last one if that does not exist. */ /** The current session as stored or the last one if that does not exist. */

View File

@@ -7,6 +7,7 @@ public abstract class TerminalOutput {
/** Write a string using the UTF-8 encoding to the terminal client. */ /** Write a string using the UTF-8 encoding to the terminal client. */
public final void write(String data) { public final void write(String data) {
if (data == null) return;
byte[] bytes = data.getBytes(StandardCharsets.UTF_8); byte[] bytes = data.getBytes(StandardCharsets.UTF_8);
write(bytes, 0, bytes.length); write(bytes, 0, bytes.length);
} }