ExtraKeys: fix so app doesn't crash if ctrl/alt aren't in extrakeys

Otherwise we get:
AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.widget.CompoundButton.isChecked()' on a null object reference
AndroidRuntime:        at com.termux.app.ExtraKeysView.b(SourceFile:128)
This commit is contained in:
Henrik Grimler
2018-07-29 18:01:43 +02:00
committed by Fredrik Fornwall
parent b51dd4f558
commit b3eabd9bad

View File

@@ -101,36 +101,48 @@ public final class ExtraKeysView extends GridLayout {
private ToggleButton controlButton; private ToggleButton controlButton;
private ToggleButton altButton; private ToggleButton altButton;
private ToggleButton fnButton; private ToggleButton fnButton;
private boolean hasControlButton = false;
private boolean hasAltButton = false;
private boolean hasFnButton = false;
private ScheduledExecutorService scheduledExecutor; private ScheduledExecutorService scheduledExecutor;
private PopupWindow popupWindow; private PopupWindow popupWindow;
private int longPressCount; private int longPressCount;
public boolean readControlButton() { public boolean readControlButton() {
if (controlButton.isPressed()) return true; boolean result = false;
boolean result = controlButton.isChecked(); if (hasControlButton) {
if (result) { if (controlButton.isPressed()) return true;
controlButton.setChecked(false); result = controlButton.isChecked();
controlButton.setTextColor(TEXT_COLOR); if (result) {
controlButton.setChecked(false);
controlButton.setTextColor(TEXT_COLOR);
}
} }
return result; return result;
} }
public boolean readAltButton() { public boolean readAltButton() {
if (altButton.isPressed()) return true; boolean result = false;
boolean result = altButton.isChecked(); if (hasAltButton) {
if (result) { if (altButton.isPressed()) return true;
altButton.setChecked(false); result = altButton.isChecked();
altButton.setTextColor(TEXT_COLOR); if (result) {
altButton.setChecked(false);
altButton.setTextColor(TEXT_COLOR);
}
} }
return result; return result;
} }
public boolean readFnButton() { public boolean readFnButton() {
if (fnButton.isPressed()) return true; boolean result = false;
boolean result = fnButton.isChecked(); if (hasFnButton) {
if (result) { if (fnButton.isPressed()) return true;
fnButton.setChecked(false); result = fnButton.isChecked();
fnButton.setTextColor(TEXT_COLOR); if (result) {
fnButton.setChecked(false);
fnButton.setTextColor(TEXT_COLOR);
}
} }
return result; return result;
} }
@@ -159,7 +171,7 @@ public final class ExtraKeysView extends GridLayout {
} }
void reload(final String[][] buttons) { void reload(final String[][] buttons) {
altButton = controlButton = null; altButton = controlButton = fnButton = null;
removeAllViews(); removeAllViews();
int mx = 0; int mx = 0;
@@ -179,14 +191,17 @@ public final class ExtraKeysView extends GridLayout {
Button button; Button button;
switch (buttonText) { switch (buttonText) {
case "CTRL": case "CTRL":
hasControlButton = true;
button = controlButton = new ToggleButton(getContext(), null, android.R.attr.buttonBarButtonStyle); button = controlButton = new ToggleButton(getContext(), null, android.R.attr.buttonBarButtonStyle);
button.setClickable(true); button.setClickable(true);
break; break;
case "ALT": case "ALT":
hasAltButton = true;
button = altButton = new ToggleButton(getContext(), null, android.R.attr.buttonBarButtonStyle); button = altButton = new ToggleButton(getContext(), null, android.R.attr.buttonBarButtonStyle);
button.setClickable(true); button.setClickable(true);
break; break;
case "FN": case "FN":
hasFnButton = true;
button = fnButton = new ToggleButton(getContext(), null, android.R.attr.buttonBarButtonStyle); button = fnButton = new ToggleButton(getContext(), null, android.R.attr.buttonBarButtonStyle);
button.setClickable(true); button.setClickable(true);
break; break;