the MainView now appears properly on Sonim XP3900
This commit is contained in:
parent
1bd1807a0d
commit
0c32a2f113
4 changed files with 18 additions and 20 deletions
|
|
@ -33,6 +33,10 @@ public class DeviceInfo {
|
||||||
return Build.MANUFACTURER.equals("Sonimtech");
|
return Build.MANUFACTURER.equals("Sonimtech");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isSonimXP3900() {
|
||||||
|
return isSonim() && Build.MODEL.contains("XP3900");
|
||||||
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ abstract public class AbstractHandler extends InputMethodService {
|
||||||
|
|
||||||
// UI
|
// UI
|
||||||
abstract protected void createSuggestionBar(View mainView);
|
abstract protected void createSuggestionBar(View mainView);
|
||||||
abstract protected boolean forceShowWindow();
|
abstract protected void forceShowWindow();
|
||||||
abstract protected void renderMainView();
|
abstract protected void renderMainView();
|
||||||
abstract protected void setStatusIcon(InputMode mode);
|
abstract protected void setStatusIcon(InputMode mode);
|
||||||
abstract protected void setStatusText(String status);
|
abstract protected void setStatusText(String status);
|
||||||
|
|
|
||||||
|
|
@ -30,10 +30,6 @@ public abstract class HotkeyHandler extends TypingHandler {
|
||||||
@Override public boolean onOK() {
|
@Override public boolean onOK() {
|
||||||
suggestionOps.cancelDelayedAccept();
|
suggestionOps.cancelDelayedAccept();
|
||||||
|
|
||||||
if (forceShowWindow()) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!suggestionOps.isEmpty()) {
|
if (!suggestionOps.isEmpty()) {
|
||||||
onAcceptSuggestionManually(suggestionOps.acceptCurrent(), KeyEvent.KEYCODE_ENTER);
|
onAcceptSuggestionManually(suggestionOps.acceptCurrent(), KeyEvent.KEYCODE_ENTER);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ import android.content.Intent;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.view.KeyEvent;
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.inputmethod.EditorInfo;
|
import android.view.inputmethod.EditorInfo;
|
||||||
import android.view.inputmethod.InputConnection;
|
import android.view.inputmethod.InputConnection;
|
||||||
|
|
@ -52,6 +51,15 @@ public class TraditionalT9 extends MainViewOps {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onComputeInsets(Insets outInsets) {
|
||||||
|
super.onComputeInsets(outInsets);
|
||||||
|
if (shouldBeVisible() && DeviceInfo.isSonimXP3900()) {
|
||||||
|
outInsets.contentTopInsets = 0; // otherwise the MainView wouldn't show up
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStartInput(EditorInfo inputField, boolean restarting) {
|
public void onStartInput(EditorInfo inputField, boolean restarting) {
|
||||||
Logger.i(
|
Logger.i(
|
||||||
|
|
@ -74,6 +82,7 @@ public class TraditionalT9 extends MainViewOps {
|
||||||
onFinishTyping();
|
onFinishTyping();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFinishInput() {
|
public void onFinishInput() {
|
||||||
super.onFinishInput();
|
super.onFinishInput();
|
||||||
|
|
@ -223,27 +232,16 @@ public class TraditionalT9 extends MainViewOps {
|
||||||
* on how much time the restart takes, this may erase the current user input.
|
* on how much time the restart takes, this may erase the current user input.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected boolean forceShowWindow() {
|
protected void forceShowWindow() {
|
||||||
if (isInputViewShown() || !shouldBeVisible()) {
|
if (isInputViewShown() || !shouldBeVisible()) {
|
||||||
return false;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||||
requestShowSelf(InputMethodManager.SHOW_IMPLICIT);
|
requestShowSelf(DeviceInfo.isSonimXP3900() ? 0 : InputMethodManager.SHOW_IMPLICIT);
|
||||||
} else {
|
} else {
|
||||||
showWindow(true);
|
showWindow(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sonim XP3900 is quite stubborn and wouldn't show the MainView the regular way.
|
|
||||||
// Sending DPAD_CENTER seems to be the only way of doing it. But, we only want to do this
|
|
||||||
// when there is no text to avoid undesired submitting of something.
|
|
||||||
if (!isInputViewShown() && DeviceInfo.noTouchScreen(this) && textField.isEmpty()) {
|
|
||||||
sendDownUpKeyEvents(KeyEvent.KEYCODE_DPAD_CENTER);
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue