Keyboard_Skins/app/src/main/java/com/exquisite/keyboard/KeyboardService.java
2024-07-04 17:16:49 +08:00

133 lines
3.7 KiB
Java

package com.exquisite.keyboard;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.inputmethodservice.InputMethodService;
import android.inputmethodservice.Keyboard;
import android.inputmethodservice.KeyboardView;
import android.os.IBinder;
import android.view.LayoutInflater;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import com.exquisite.demo08.R;
public class KeyboardService extends InputMethodService implements KeyboardView.OnKeyboardActionListener {
private int[] ViewXmls = new int[4];
private MyKeyboard myKeyboard;
public KeyboardService() {
}
@Override
public View onCreateInputView() {
ViewXmls[0] = R.xml.view_1;
ViewXmls[1] = R.xml.view_2;
ViewXmls[2] = R.xml.view_3;
ViewXmls[3] = R.xml.view_4;
View inputView = LayoutInflater.from(this).inflate(R.layout.keyboard_view, null, false);
myKeyboard = inputView.findViewById(R.id.keyboardView);
myKeyboard.setKeyboard(new MyKeyboard.KeyBoard(this, ViewXmls[0]));
myKeyboard.setOnKeyboardActionListener(this);
// myKeyboard.setPreviewEnabled(false);
return inputView;
}
@Override
public void onWindowShown() {
super.onWindowShown();
myKeyboard.updateConfigView(this);
myKeyboard.invalidate();
}
@Override
public void onPress(int primaryCode) {
}
@Override
public void onRelease(int primaryCode) {
}
@Override
public void onKey(int primaryCode, int[] keyCodes) {
switch (primaryCode) {
case MyKeyboard.KeyBoard.KEYCODE_SHIFT:
if (myKeyboard.getShiiftType() == 0) {
changeView(3);
myKeyboard.setShiiftType(1);
} else {
changeView(0);
myKeyboard.setShiiftType(0);
}
break;
case MyKeyboard.KeyBoard.KEYCODE_MODE_CHANGE:
if (myKeyboard.getViewType() == 0) {
changeView(1);
} else {
changeView(0);
}
break;
case MyKeyboard.KeyBoard.KEYCODE_SHIFT_123:
changeView(1);
break;
case MyKeyboard.KeyBoard.KEYCODE_SHIFT_MORE:
changeView(2);
break;
case MyKeyboard.KeyBoard.KEYCODE_DELETE:
getCurrentInputConnection().deleteSurroundingText(1, 0);
break;
case MyKeyboard.KeyBoard.KEYCODE_DONE:
getCurrentInputConnection().performEditorAction(EditorInfo.IME_ACTION_DONE);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myKeyboard.getWindowToken(), 0);
break;
default:
char value;
if (myKeyboard.getShiiftType() == 1) {
value = Character.toUpperCase((char) primaryCode);
} else {
value = (char) primaryCode;
}
getCurrentInputConnection().commitText(String.valueOf(value), 1);
}
}
private void changeView(int i) {
myKeyboard.setViewType(i);
myKeyboard.setShiiftType(i);
myKeyboard.setKeyboard(new MyKeyboard.KeyBoard(this, ViewXmls[i]));
}
@Override
public void onText(CharSequence text) {
}
@Override
public void swipeLeft() {
}
@Override
public void swipeRight() {
}
@Override
public void swipeDown() {
}
@Override
public void swipeUp() {
}
}