package com.arretadogames.pilot.android; import android.app.Activity; import android.content.Context; import android.view.KeyEvent; import android.view.inputmethod.InputMethodManager; public class KeyboardManager { public interface InputFinishListener { public void onInputFinish(String typedString); } private static String AVAILABLE_CHARACTERS = "abcdefghijlmnkopqrstuvxyz@._-"; private static boolean isShowing = false; private static boolean isConfigured = false; private static Activity activity; private static String currentString = ""; private static InputFinishListener listener; public static boolean isShowing() { return isShowing; } public static void show() { validateConfiguration(); InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0); currentString = ""; isShowing = true; } public static void hide() { InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE); inputMethodManager.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY,0); isShowing = false; listener.onInputFinish(currentString); } private static void validateConfiguration() { if (!isConfigured) throw new IllegalStateException("Manager no configured"); } public static void setOnInputFinishListener(InputFinishListener listener) { KeyboardManager.listener = listener; } public static void setup(Activity mainActivity) { KeyboardManager.activity = mainActivity; if (activity != null) isConfigured = true; } public static boolean dispatchKeyEvent(KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) { System.out.println(event.getKeyCode()); if (event.getKeyCode() == KeyEvent.KEYCODE_DEL && currentString.length() > 0) { currentString = currentString.substring(0, currentString.length() - 1); } else if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER) { hide(); } else { String s = Character.toString((char)event.getUnicodeChar()); if (AVAILABLE_CHARACTERS.contains(s.toLowerCase())) currentString += s; System.out.println("DispatchKeyEvent " + currentString); } } return true; } public static String getText() { return currentString; } }