All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.solovyev.android.keyboard.LatinKeyboard Maven / Gradle / Ivy

There is a newer version: 1.1.18
Show newest version
/*
 * Copyright 2013 serso aka se.solovyev
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * Contact details
 *
 * Email: [email protected]
 * Site:  http://se.solovyev.org
 */

package org.solovyev.android.keyboard;

import android.content.Context;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.graphics.drawable.Drawable;
import android.inputmethodservice.Keyboard;
import android.view.inputmethod.EditorInfo;

public class LatinKeyboard extends Keyboard {

	private Key mEnterKey;
	private Key mSpaceKey;

	public LatinKeyboard(Context context, int xmlLayoutResId) {
		super(context, xmlLayoutResId);
	}

	public LatinKeyboard(Context context, int layoutTemplateResId,
						 CharSequence characters, int columns, int horizontalPadding) {
		super(context, layoutTemplateResId, characters, columns, horizontalPadding);
	}

	@Override
	protected Key createKeyFromXml(Resources res, Row parent, int x, int y,
								   XmlResourceParser parser) {
		Key key = new LatinKey(res, parent, x, y, parser);
		if (key.codes[0] == 10) {
			mEnterKey = key;
		} else if (key.codes[0] == ' ') {
			mSpaceKey = key;
		}
		return key;
	}

	/**
	 * This looks at the ime options given by the current editor, to set the
	 * appropriate label on the keyboard's enter key (if it has one).
	 */
	void setImeOptions(Resources res, int options) {
		if (mEnterKey == null) {
			return;
		}

		switch (options & (EditorInfo.IME_MASK_ACTION | EditorInfo.IME_FLAG_NO_ENTER_ACTION)) {
			case EditorInfo.IME_ACTION_GO:
				mEnterKey.iconPreview = null;
				mEnterKey.icon = null;
				mEnterKey.label = res.getText(R.string.label_go_key);
				break;
			case EditorInfo.IME_ACTION_NEXT:
				mEnterKey.iconPreview = null;
				mEnterKey.icon = null;
				mEnterKey.label = res.getText(R.string.label_next_key);
				break;
			case EditorInfo.IME_ACTION_SEARCH:
				mEnterKey.icon = res.getDrawable(R.drawable.sym_keyboard_search);
				mEnterKey.label = null;
				break;
			case EditorInfo.IME_ACTION_SEND:
				mEnterKey.iconPreview = null;
				mEnterKey.icon = null;
				mEnterKey.label = res.getText(R.string.label_send_key);
				break;
			default:
				mEnterKey.icon = res.getDrawable(R.drawable.sym_keyboard_return);
				mEnterKey.label = null;
				break;
		}
	}

	void setSpaceIcon(final Drawable icon) {
		if (mSpaceKey != null) {
			mSpaceKey.icon = icon;
		}
	}

	static class LatinKey extends Keyboard.Key {

		public LatinKey(Resources res, Keyboard.Row parent, int x, int y, XmlResourceParser parser) {
			super(res, parent, x, y, parser);
		}

		/**
		 * Overriding this method so that we can reduce the target area for the key that
		 * closes the keyboard.
		 */
		@Override
		public boolean isInside(int x, int y) {
			return super.isInside(x, codes[0] == KEYCODE_CANCEL ? y - 10 : y);
		}
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy