<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>res/raw/cj5.db</filename>
    </added>
    <added>
      <filename>res/xml/kb_cj.xml</filename>
    </added>
    <added>
      <filename>src/idv/Zero/KerKerInput/Keyboard.java</filename>
    </added>
    <added>
      <filename>src/idv/Zero/KerKerInput/Methods/CJInput.java</filename>
    </added>
    <added>
      <filename>src/idv/Zero/KerKerInput/SettingsListAdapter.java</filename>
    </added>
    <added>
      <filename>tools/cin2db.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1 +1,4 @@
 bin
+.DS_Store
+bak
+noseeing.db</diff>
      <filename>.gitignore</filename>
    </modified>
    <modified>
      <diff>@@ -3,7 +3,7 @@
       package=&quot;idv.Zero.KerKerInput&quot;
       android:versionCode=&quot;1&quot;
       android:versionName=&quot;1.0&quot;&gt;
-    &lt;application android:icon=&quot;@drawable/icon&quot; android:label=&quot;@string/app_name&quot;&gt;
+    &lt;application android:icon=&quot;@drawable/icon&quot; android:label=&quot;@string/app_name&quot; android:debuggable=&quot;true&quot;&gt;
 		&lt;service android:name=&quot;.KerKerInputService&quot; android:permission=&quot;android.permission.BIND_INPUT_METHOD&quot;&gt;
 			&lt;intent-filter&gt;
 				&lt;action android:name=&quot;android.view.InputMethod&quot; /&gt;</diff>
      <filename>AndroidManifest.xml</filename>
    </modified>
    <modified>
      <diff>@@ -61,12 +61,12 @@ public final class R {
     }
     public static final class id {
         public static final int LinearLayout01=0x7f080005;
-        public static final int TextView01=0x7f080006;
         public static final int btn_left=0x7f080001;
         public static final int btn_right=0x7f080004;
         public static final int candidates=0x7f080002;
         public static final int layout_btn_left=0x7f080000;
         public static final int layout_btn_right=0x7f080003;
+        public static final int lstSettings=0x7f080006;
         public static final int mode_email=0x7f080008;
         public static final int mode_im=0x7f080009;
         public static final int mode_normal=0x7f08000a;
@@ -79,7 +79,8 @@ public final class R {
     }
     public static final class raw {
         public static final int bpmf=0x7f050000;
-        public static final int noseeing=0x7f050001;
+        public static final int cj5=0x7f050001;
+        public static final int noseeing=0x7f050002;
     }
     public static final class string {
         public static final int app_name=0x7f070000;
@@ -91,15 +92,16 @@ public final class R {
         public static final int update_str=0x7f070001;
     }
     public static final class xml {
-        public static final int kb_noseeing=0x7f040000;
-        public static final int kb_zhuyin=0x7f040001;
-        public static final int kbd_popup_template=0x7f040002;
-        public static final int kbd_qwerty=0x7f040003;
-        public static final int kbd_sym=0x7f040004;
-        public static final int kbd_sym_alt=0x7f040005;
-        public static final int method=0x7f040006;
-        public static final int popup_domains=0x7f040007;
-        public static final int popup_punctuation=0x7f040008;
-        public static final int popup_smileys=0x7f040009;
+        public static final int kb_cj=0x7f040000;
+        public static final int kb_noseeing=0x7f040001;
+        public static final int kb_zhuyin=0x7f040002;
+        public static final int kbd_popup_template=0x7f040003;
+        public static final int kbd_qwerty=0x7f040004;
+        public static final int kbd_sym=0x7f040005;
+        public static final int kbd_sym_alt=0x7f040006;
+        public static final int method=0x7f040007;
+        public static final int popup_domains=0x7f040008;
+        public static final int popup_punctuation=0x7f040009;
+        public static final int popup_smileys=0x7f04000a;
     }
 }</diff>
      <filename>gen/idv/Zero/KerKerInput/R.java</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,4 @@
 &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
-&lt;LinearLayout android:id=&quot;@+id/LinearLayout01&quot; android:layout_width=&quot;fill_parent&quot; android:layout_height=&quot;fill_parent&quot; xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot; android:layout_gravity=&quot;center_vertical|center_horizontal&quot;&gt;&lt;TextView android:id=&quot;@+id/TextView01&quot; android:layout_width=&quot;wrap_content&quot; android:layout_height=&quot;wrap_content&quot; android:textSize=&quot;28dp&quot; android:layout_gravity=&quot;center_vertical|center_horizontal&quot; android:text=&quot;&#26412;&#29256;&#26412;&#28858; mobilehero &#29305;&#35069;&#29256;&#26412;&#65292;&#28961;&#20219;&#20309;&#35373;&#23450;&#36984;&#38917;&#12290;&quot;&gt;&lt;/TextView&gt;
+&lt;LinearLayout android:id=&quot;@+id/LinearLayout01&quot; android:layout_width=&quot;fill_parent&quot; android:layout_height=&quot;fill_parent&quot; xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot; android:layout_gravity=&quot;center_vertical|center_horizontal&quot;&gt;
+&lt;ListView android:id=&quot;@+id/lstSettings&quot; android:layout_width=&quot;fill_parent&quot; android:layout_height=&quot;fill_parent&quot;&gt;&lt;/ListView&gt;
 &lt;/LinearLayout&gt;</diff>
      <filename>res/layout/settings.xml</filename>
    </modified>
    <modified>
      <diff>@@ -88,7 +88,7 @@
         &lt;Key android:codes=&quot;-2&quot; android:keyLabel=&quot;@string/label_symbol_key&quot; 
                 android:popupKeyboard=&quot;@xml/kbd_popup_template&quot;
                 android:popupCharacters=&quot;&quot;
-                android:keyWidth=&quot;20%p&quot; android:keyEdgeFlags=&quot;left&quot;/&gt;
+                android:keyWidth=&quot;15%p&quot; android:keyEdgeFlags=&quot;left&quot;/&gt;
         &lt;Key android:keyLabel=&quot;.com&quot; android:keyOutputText=&quot;.com&quot;
                 android:popupKeyboard=&quot;@xml/popup_domains&quot;
                 android:keyWidth=&quot;15%p&quot;/&gt;
@@ -100,14 +100,18 @@
                 android:keyWidth=&quot;15%p&quot;/&gt;
         &lt;Key android:codes=&quot;10&quot; android:keyIcon=&quot;@drawable/sym_keyboard_return&quot; 
                 android:iconPreview=&quot;@drawable/sym_keyboard_feedback_return&quot;
-                android:keyWidth=&quot;20%p&quot; android:keyEdgeFlags=&quot;right&quot;/&gt;
+                android:keyWidth=&quot;15%p&quot;/&gt;
+        &lt;Key android:codes=&quot;-5&quot; android:keyIcon=&quot;@drawable/sym_keyboard_delete&quot; 
+                android:keyWidth=&quot;10%p&quot; android:isRepeatable=&quot;true&quot; 
+                android:iconPreview=&quot;@drawable/sym_keyboard_feedback_delete&quot;
+                android:keyEdgeFlags=&quot;right&quot;/&gt;
     &lt;/Row&gt;
 
     &lt;Row android:keyboardMode=&quot;@+id/mode_email&quot; android:rowEdgeFlags=&quot;bottom&quot;&gt;
         &lt;Key android:codes=&quot;-2&quot; android:keyLabel=&quot;@string/label_symbol_key&quot; 
                 android:popupKeyboard=&quot;@xml/kbd_popup_template&quot;
                 android:popupCharacters=&quot;&quot;
-                android:keyWidth=&quot;20%p&quot; android:keyEdgeFlags=&quot;left&quot;/&gt;
+                android:keyWidth=&quot;10%p&quot; android:keyEdgeFlags=&quot;left&quot;/&gt;
         &lt;Key android:keyLabel=&quot;,&quot; android:keyWidth=&quot;15%p&quot; /&gt;
         &lt;Key android:keyLabel=&quot;\@&quot; android:keyWidth=&quot;15%p&quot;/&gt;
         &lt;Key android:codes=&quot;32&quot; android:keyIcon=&quot;@drawable/sym_keyboard_space&quot; 
@@ -117,7 +121,11 @@
                 android:keyWidth=&quot;15%p&quot;/&gt;
         &lt;Key android:codes=&quot;10&quot; android:keyIcon=&quot;@drawable/sym_keyboard_return&quot; 
                 android:iconPreview=&quot;@drawable/sym_keyboard_feedback_return&quot;
-                android:keyWidth=&quot;20%p&quot; android:keyEdgeFlags=&quot;right&quot;/&gt;
+                android:keyWidth=&quot;20%p&quot;/&gt;
+        &lt;Key android:codes=&quot;-5&quot; android:keyIcon=&quot;@drawable/sym_keyboard_delete&quot; 
+                android:keyWidth=&quot;10%p&quot; android:isRepeatable=&quot;true&quot; 
+                android:iconPreview=&quot;@drawable/sym_keyboard_feedback_delete&quot;
+                android:keyEdgeFlags=&quot;right&quot;/&gt;
     &lt;/Row&gt;
 
     &lt;Row android:keyboardMode=&quot;@+id/mode_im&quot; android:rowEdgeFlags=&quot;bottom&quot;&gt;</diff>
      <filename>res/xml/kbd_qwerty.xml</filename>
    </modified>
    <modified>
      <diff>@@ -29,6 +29,6 @@
         &lt;Key android:keyLabel=&quot;.net&quot; android:keyOutputText=&quot;.net&quot; android:keyEdgeFlags=&quot;left&quot; /&gt;
         &lt;Key android:keyLabel=&quot;.org&quot; android:keyOutputText=&quot;.org&quot;/&gt;
         &lt;Key android:keyLabel=&quot;.gov&quot; android:keyOutputText=&quot;.gov&quot;/&gt;
-        &lt;Key android:keyLabel=&quot;.tv&quot; android:keyOutputText=&quot;.tv&quot; android:keyEdgeFlags=&quot;right&quot; /&gt;
+        &lt;Key android:keyLabel=&quot;.tw&quot; android:keyOutputText=&quot;.tw&quot; android:keyEdgeFlags=&quot;right&quot; /&gt;
     &lt;/Row&gt;
 &lt;/Keyboard&gt;</diff>
      <filename>res/xml/popup_domains.xml</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,5 @@
 package idv.Zero.KerKerInput;
 
-import android.inputmethodservice.Keyboard;
-
 public abstract class IKerKerInputMethod {
 	protected KerKerInputCore _core;
 	
@@ -15,6 +13,7 @@ public abstract class IKerKerInputMethod {
 	}
 	abstract public void destroyInputMethod();
 	abstract public String getName();
+	abstract public void commitCurrentComposingBuffer();
 
 	/* Keyboard Events */
 	public Keyboard getDesiredKeyboard() { return null; }</diff>
      <filename>src/idv/Zero/KerKerInput/IKerKerInputMethod.java</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 package idv.Zero.KerKerInput;
 
-import android.inputmethodservice.Keyboard;
 import android.inputmethodservice.KeyboardView;
+import android.view.inputmethod.EditorInfo;
 
 public class KBManager {
 	public static final int KEYCODE_SYM = -100;
@@ -18,12 +18,15 @@ public class KBManager {
 	private KerKerInputCore _core = null;
 	private KeyboardView _currentKBView = null;
 	private Keyboard _currentKB = null;
+	private int _kbMode = R.id.mode_normal;
+	private int imeOptions = 0;
+	private NativeKeyboardTypes _currentKBType = NativeKeyboardTypes.MODE_ABC;
 	
 	public KBManager(KerKerInputCore core)
 	{
 		_core = core;
 	}
-	
+
 	public KeyboardView getCurrentKeyboardView()
 	{
 		if (_currentKBView == null)
@@ -39,25 +42,26 @@ public class KBManager {
 	public Keyboard getCurrentKeyboard()
 	{
 		if (_currentKB == null)
-			_core.requestNextInputMethod();
+			setNativeKeyboard(NativeKeyboardTypes.MODE_ABC);
 		
 		return _currentKB;
 	}
 	
 	public enum NativeKeyboardTypes {MODE_ABC, MODE_SYM, MODE_SYM_ALT, MODE_IME};
 	
-	public void setNativeKeyboard(NativeKeyboardTypes mode)
+	public void setNativeKeyboard(NativeKeyboardTypes type)
 	{
-		switch(mode)
+		_currentKBType = type;
+		switch(type)
 		{
 		case MODE_ABC:
-			setCurrentKeyboardFromResource(R.xml.kbd_qwerty, R.id.mode_normal);
+			setCurrentKeyboardFromResource(R.xml.kbd_qwerty, getKeyboardMode());
 			break;
 		case MODE_SYM:
-			setCurrentKeyboardFromResource(R.xml.kbd_sym, R.id.mode_normal);
+			setCurrentKeyboardFromResource(R.xml.kbd_sym, getKeyboardMode());
 			break;
 		case MODE_SYM_ALT:
-			setCurrentKeyboardFromResource(R.xml.kbd_sym_alt, R.id.mode_normal);
+			setCurrentKeyboardFromResource(R.xml.kbd_sym_alt, getKeyboardMode());
 			break;
 		case MODE_IME:
 			setCurrentKeyboard(_core.getCurrentInputMethod().getDesiredKeyboard());
@@ -76,4 +80,39 @@ public class KBManager {
 		if (_currentKBView != null) // It will be null if it's first run.
 			_currentKBView.setKeyboard(_currentKB);		
 	}
+	
+	public void setKeyboardMode(int kbmode)
+	{
+		_kbMode = kbmode;
+		setNativeKeyboard(_currentKBType);
+	}
+	
+	public int getKeyboardMode()
+	{
+		return _kbMode;
+	}
+
+	public void setImeOptions(int inputType)
+	{
+		imeOptions = inputType;
+		applyIMEOptions();
+	}
+	
+	public void applyIMEOptions()
+	{
+		getCurrentKeyboard().setImeOptions(_core.getFrontend().getResources(), imeOptions);
+
+		int variation = imeOptions &amp; EditorInfo.TYPE_MASK_VARIATION;		
+		switch (variation)
+		{
+		case EditorInfo.TYPE_TEXT_VARIATION_URI:
+			setKeyboardMode(R.id.mode_url);
+			break;
+		case EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS:
+			setKeyboardMode(R.id.mode_email);
+			break;
+		default:
+			setKeyboardMode(R.id.mode_normal);
+		}
+	}
 }</diff>
      <filename>src/idv/Zero/KerKerInput/KBManager.java</filename>
    </modified>
    <modified>
      <diff>@@ -41,7 +41,7 @@ public class KerKerInputCore implements OnKeyboardActionListener {
 		_kbm = new KBManager(this);
 		_methods = new ArrayList&lt;IKerKerInputMethod&gt;();
 		_currentMethod = null;
-		_currentMode = InputMode.MODE_IME;
+		_currentMode = InputMode.MODE_ABC;
 		_handler = new Handler();
 		
 		_pntText = new Paint();
@@ -60,15 +60,15 @@ public class KerKerInputCore implements OnKeyboardActionListener {
 		_winMsg.setContentView(_txtvMsg);
 		
 		registerAvailableInputMethods();
-
-		requestNextInputMethod();
 	}
 	
 	public void registerAvailableInputMethods() {
 		IKerKerInputMethod m;
+		m = new idv.Zero.KerKerInput.Methods.BPMFInput();
+		_methods.add(m);
 		m = new idv.Zero.KerKerInput.Methods.NoSeeing();
 		_methods.add(m);
-		m = new idv.Zero.KerKerInput.Methods.BPMFInput();
+		m = new idv.Zero.KerKerInput.Methods.CJInput();
 		_methods.add(m);
 	}
 
@@ -139,7 +139,7 @@ public class KerKerInputCore implements OnKeyboardActionListener {
 		if (e.getKeyCode() == KeyEvent.KEYCODE_BACK)
 			return false;
 		
-		if (_currentMethod.wantHandleEvent(e.getKeyCode()))
+		if (_currentMethod != null &amp;&amp; _currentMethod.wantHandleEvent(e.getKeyCode()))
 			_currentMethod.onKeyEvent(keyCode, new int[]{keyCode});
 		else
 		{
@@ -182,11 +182,14 @@ public class KerKerInputCore implements OnKeyboardActionListener {
 		}
 		else if (primaryCode == KBManager.KEYCODE_DO_OUTPUT_CHARS)
 			return; // Let IME onText listener handle it.
-		else if (_currentMode != InputMode.MODE_IME || !_currentMethod.wantHandleEvent(primaryCode))
+		else if (_currentMode != InputMode.MODE_IME || (_currentMethod != null &amp;&amp; !_currentMethod.wantHandleEvent(primaryCode)))
 		{
 			// If the IME does not want the event, we assume it's an plain-English keyboard.
 			switch(primaryCode) {
 			case Keyboard.KEYCODE_SHIFT: // Shift Key
+				if (_currentMode == InputMode.MODE_IME)
+					_currentMethod.commitCurrentComposingBuffer();
+
 				Boolean isShifted = !_kbm.getCurrentKeyboard().isShifted();
 				_kbm.getCurrentKeyboard().setShifted(isShifted);
 				KeyboardView kv = _kbm.getCurrentKeyboardView();
@@ -196,18 +199,28 @@ public class KerKerInputCore implements OnKeyboardActionListener {
 				kv.onSizeChanged(kv.getWidth(), kv.getHeight(), 0, 0);
 				break;
 			case KBManager.KEYCODE_SYM: // 123 Keyboard
+				if (_currentMode == InputMode.MODE_IME)
+					_currentMethod.commitCurrentComposingBuffer();
+
 				_currentMode = InputMode.MODE_SYM;
 				_kbm.setNativeKeyboard(NativeKeyboardTypes.MODE_SYM);
 				showIMENamePopup(&quot;123&quot;);
 				hideCandidatesView();
+				
 				break;
 			case KBManager.KEYCODE_SYM_ALT: // 123 Keyboard
+				if (_currentMode == InputMode.MODE_IME)
+					_currentMethod.commitCurrentComposingBuffer();
+
 				_currentMode = InputMode.MODE_SYM_ALT;
 				_kbm.setNativeKeyboard(NativeKeyboardTypes.MODE_SYM_ALT);
 				showIMENamePopup(&quot;#+=&quot;);
 				hideCandidatesView();
 				break;
 			case KBManager.KEYCODE_ABC: // ABC Keyboard
+				if (_currentMode == InputMode.MODE_IME)
+					_currentMethod.commitCurrentComposingBuffer();
+
 				_currentMode = InputMode.MODE_ABC;
 				_kbm.setNativeKeyboard(NativeKeyboardTypes.MODE_ABC);
 				showIMENamePopup(&quot;ABC&quot;);
@@ -215,8 +228,10 @@ public class KerKerInputCore implements OnKeyboardActionListener {
 				break;
 			case KBManager.KEYCODE_IME: // IME Keyboard
 				_currentMode = InputMode.MODE_IME;
-				_kbm.setNativeKeyboard(NativeKeyboardTypes.MODE_IME);
+				if (_currentMethod == null)
+					requestNextInputMethod();
 				_currentMethod.onEnterInputMethod();
+				_kbm.setNativeKeyboard(NativeKeyboardTypes.MODE_IME);
 				showIMENamePopup(_currentMethod.getName());
 				break;
 			case Keyboard.KEYCODE_DELETE:
@@ -231,7 +246,7 @@ public class KerKerInputCore implements OnKeyboardActionListener {
 			}
 		}
 		else
-			_currentMethod.onKeyEvent(primaryCode, keyCodes);
+			if (_currentMethod != null) _currentMethod.onKeyEvent(primaryCode, keyCodes);
 	}
 
 	public void onText(CharSequence text) {
@@ -263,7 +278,9 @@ public class KerKerInputCore implements OnKeyboardActionListener {
 	}
 	
 	public void hideCandidatesView() {
-		//_frontEnd.setCandidatesViewShown(false);
+		if (_currentMode != InputMode.MODE_IME)
+			_frontEnd.setCandidatesViewShown(false);
+		
 		if (_candidatesContainer != null)
 			clearCandidates();
 	}
@@ -291,7 +308,7 @@ public class KerKerInputCore implements OnKeyboardActionListener {
 		showPopup(getFrontend().getResources().getString(resid));
 	}
 	
-	public void showPopup(CharSequence msg)
+	public void showPopup(final CharSequence msg)
     {
     	_txtvMsg.setText(msg);
     	_txtvMsg.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
@@ -317,7 +334,8 @@ public class KerKerInputCore implements OnKeyboardActionListener {
     	
     	_handler.postDelayed(new Runnable() {
 			public void run() {
-				hidePopup();
+				if (_txtvMsg.getText() == msg.toString())
+					hidePopup();
 			}
     	}, 700);
     }
@@ -332,4 +350,9 @@ public class KerKerInputCore implements OnKeyboardActionListener {
     	{}
     }
 
+	public void commitText(CharSequence str) {
+		getConnection().commitText(str, 1);
+		hideCandidatesView();
+	}
+
 }</diff>
      <filename>src/idv/Zero/KerKerInput/KerKerInputCore.java</filename>
    </modified>
    <modified>
      <diff>@@ -3,10 +3,11 @@ package idv.Zero.KerKerInput;
 import android.app.AlertDialog;
 import android.content.DialogInterface;
 import android.content.Intent;
-import android.inputmethodservice.*;
+import android.inputmethodservice.InputMethodService;
 import android.net.Uri;
 import android.os.Handler;
 import android.view.*;
+import android.view.inputmethod.EditorInfo;
 
 public class KerKerInputService extends InputMethodService {
 	private String updateServiceURL = &quot;http://zero.itszero.info/KerKerInput/version.dat&quot;;
@@ -33,6 +34,11 @@ public class KerKerInputService extends InputMethodService {
 		return _core.requestInputView();
 	}
 	
+	public void onStartInputView(EditorInfo info, boolean restarting)
+	{
+		_core.getKeyboardManager().setImeOptions(info.inputType);
+	}
+	
 	@Override
 	public View onCreateCandidatesView()
 	{</diff>
      <filename>src/idv/Zero/KerKerInput/KerKerInputService.java</filename>
    </modified>
    <modified>
      <diff>@@ -2,11 +2,16 @@ package idv.Zero.KerKerInput;
 
 import android.app.Activity;
 import android.os.Bundle;
+import android.widget.ListView;
 
 public class KerKerInputSettings extends Activity {
 	@Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.settings);
+        // android.os.Debug.waitForDebugger();
+        
+        ListView lstView = (ListView) findViewById(R.id.lstSettings);
+        lstView.setAdapter(new SettingsListAdapter(this));
     }
 }</diff>
      <filename>src/idv/Zero/KerKerInput/KerKerInputSettings.java</filename>
    </modified>
    <modified>
      <diff>@@ -13,10 +13,10 @@ import android.content.Context;
 import android.database.Cursor;
 import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteException;
-import android.inputmethodservice.Keyboard;
 import android.util.Log;
 import android.view.KeyEvent;
 import idv.Zero.KerKerInput.KerKerInputCore;
+import idv.Zero.KerKerInput.Keyboard;
 import idv.Zero.KerKerInput.R;
 import idv.Zero.KerKerInput.Methods.BPMFInputHelpers.ZhuYinComponentHelper;
 
@@ -98,6 +98,10 @@ public class BPMFInput extends idv.Zero.KerKerInput.IKerKerInputMethod {
 		return new Keyboard(_core.getFrontend(), R.xml.kb_zhuyin, R.id.mode_normal);
 	}
 
+	public void commitCurrentComposingBuffer() {
+		commitText(getCompositeString());
+	}
+
 	public boolean onKeyEvent(int keyCode, int[] keyCodes) {
 		return handleBPMFKeyEvent(keyCode, keyCodes);
 	}
@@ -268,8 +272,7 @@ public class BPMFInput extends idv.Zero.KerKerInput.IKerKerInputMethod {
 	
 	private void commitText(CharSequence str)
 	{
-		_core.getConnection().commitText(str, 1);
-		_core.hideCandidatesView();
+		_core.commitText(str);
 		inputBufferRaw = &quot;&quot;;
 		updateCandidates();
 		currentState = InputState.STATE_INPUT;
@@ -320,5 +323,4 @@ public class BPMFInput extends idv.Zero.KerKerInput.IKerKerInputMethod {
 		K2N.put('y', &quot;&#12567;&quot;);
 		K2N.put('z', &quot;&#12552;&quot;);
 	}
-
 }</diff>
      <filename>src/idv/Zero/KerKerInput/Methods/BPMFInput.java</filename>
    </modified>
    <modified>
      <diff>@@ -12,9 +12,9 @@ import android.content.Context;
 import android.database.Cursor;
 import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteException;
-import android.inputmethodservice.Keyboard;
 import android.view.KeyEvent;
 import idv.Zero.KerKerInput.KerKerInputCore;
+import idv.Zero.KerKerInput.Keyboard;
 import idv.Zero.KerKerInput.R;
 
 public class NoSeeing extends idv.Zero.KerKerInput.IKerKerInputMethod {
@@ -93,6 +93,10 @@ public class NoSeeing extends idv.Zero.KerKerInput.IKerKerInputMethod {
 	public Keyboard getDesiredKeyboard() {
 		return new Keyboard(_core.getFrontend(), R.xml.kb_noseeing, R.id.mode_normal);
 	}
+	
+	public void commitCurrentComposingBuffer() {
+		commitText(getCompositeString());
+	}
 
 	public boolean onKeyEvent(int keyCode, int[] keyCodes) {
 		return handleNoSeeingInput(keyCode, keyCodes);</diff>
      <filename>src/idv/Zero/KerKerInput/Methods/NoSeeing.java</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>res/raw/noseeing.db</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>f8ab0393c9dafdb9fbdada9ff76fca7af14b905f</id>
    </parent>
  </parents>
  <author>
    <name>itsZero</name>
    <email>itszero@gmail.com</email>
  </author>
  <url>http://github.com/itszero/KerKerInput/commit/90223f849190ddb6dc7a1e3e5a1f83c0e2f3fa4d</url>
  <id>90223f849190ddb6dc7a1e3e5a1f83c0e2f3fa4d</id>
  <committed-date>2009-10-01T20:54:03-07:00</committed-date>
  <authored-date>2009-10-01T20:54:03-07:00</authored-date>
  <message>Enhanced stability, settins is broken for now. Support ChangJei and NoSeeing (no worry, not going to provide noseeing db here...)</message>
  <tree>7f167106623dc40c8cd82f28f272290fd02163eb</tree>
  <committer>
    <name>itsZero</name>
    <email>itszero@gmail.com</email>
  </committer>
</commit>
