package com.integreight.onesheeld.shields.fragments;
import android.graphics.Point;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import com.integreight.onesheeld.R;
import com.integreight.onesheeld.shields.ShieldFragmentParent;
import com.integreight.onesheeld.shields.controller.KeyboardShield;
import com.integreight.onesheeld.utils.Log;
public class KeyboardFragment extends ShieldFragmentParent<KeyboardFragment>
implements OnClickListener {
private Button mBSpace, mBenter, mBack, mBChange, mNum;
private boolean isEdit1 = true;
private String mUpper = "upper", mLower = "lower";
private int w, mWindowWidth;
private String sL[] = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
"k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w",
"x", "y", "z", "ç", "à", "é", "è", "û", "î"};
private String cL[] = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
"K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W",
"X", "Y", "Z", "ç", "à", "é", "è", "û", "î"};
private String nS[] = {"!", ")", "'", "#", "3", "$", "%", "&", "8", "*",
"?", "/", "+", "-", "9", "0", "1", "4", "@", "5", "7", "(", "2",
"\"", "6", "_", "=", "]", "[", "<", ">", "|"};
private Button mB[] = new Button[32];
EditText mEt1;
Editable mytext;
private KeyboardEventHandler eventHandler;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.keyboard_shield_fragment_layout,
container, false);
}
@Override
public void doOnViewCreated(View v, @Nullable Bundle savedInstanceState) {
mEt1 = (EditText) v.findViewById(R.id.keyboard_myEdit_txt);
mEt1.setMaxLines(Integer.MAX_VALUE);
mEt1.setSingleLine(false);
hideDefaultKeyboard();
// adjusting key regarding window sizes
setKeys(v);
setFrow();
setSrow();
setTrow();
setForow();
mEt1.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
mytext = s;
Log.d("Keyboard::Character", s + "");
}
});
}
public void setKeyboardEventHandler(
KeyboardEventHandler keyboardEventHandler) {
this.eventHandler = keyboardEventHandler;
}
private void initializeFirmata() {
if (getApplication().getRunningShields().get(getControllerTag()) == null) {
getApplication().getRunningShields().put(getControllerTag(),
new KeyboardShield(activity, getControllerTag()));
}
}
@Override
public void doOnResume() {
setKeyboardEventHandler(((KeyboardShield) getApplication()
.getRunningShields().get(getControllerTag()))
.getKeyboardEventHandler());
}
@Override
public void doOnServiceConnected() {
initializeFirmata();
}
public static interface KeyboardEventHandler {
void onKeyPressed(String myString);
void onEnterOrbspacepressed(char myChar);
}
@Override
public void onClick(View v) {
if (v == mBChange) {
if (mBChange.getTag().equals(mUpper)) {
changeSmallLetters();
changeSmallTags();
} else if (mBChange.getTag().equals(mLower)) {
changeCapitalLetters();
changeCapitalTags();
}
} else if (v != mBenter && v != mBack && v != mBChange && v != mNum) {
addText(v);
} else if (v == mBenter) {
// represent Enter button and send frame
int ascii = (int) '\n';
Log.d("KeyBoard", "char::ASCII =" + ascii);
addTextEnter('\n');
} else if (v == mBack) {
// represent backspace button and send frame
// addTextBSpace("\b");
int ascii = (int) '\b';
Log.d("KeyBoard", "char::ASCII =" + ascii);
addTextBSpace('\b');
} else if (v == mNum) {
String nTag = (String) mNum.getTag();
if (nTag.equals("num")) {
// show unused characters
mB[26].setVisibility(Button.VISIBLE);
mB[27].setVisibility(Button.VISIBLE);
mB[28].setVisibility(Button.VISIBLE);
mB[29].setVisibility(Button.VISIBLE);
mB[30].setVisibility(Button.VISIBLE);
mB[31].setVisibility(Button.VISIBLE);
changeSyNuLetters();
changeSyNuTags();
((ViewGroup) mBChange.getParent())
.setVisibility(Button.INVISIBLE);
}
if (nTag.equals("ABC")) {
// hidden unused characters
mB[26].setVisibility(Button.INVISIBLE);
mB[27].setVisibility(Button.INVISIBLE);
mB[28].setVisibility(Button.INVISIBLE);
mB[29].setVisibility(Button.INVISIBLE);
mB[30].setVisibility(Button.INVISIBLE);
mB[31].setVisibility(Button.INVISIBLE);
changeCapitalLetters();
changeCapitalTags();
}
}
}
private void hideDefaultKeyboard() {
activity.getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
}
private void addText(View v) {
if (isEdit1 == true) {
String b = "";
b = (String) v.getTag();
if (b != null) {
// adding text in Edittext
// mEt.append(b);
Log.d("KeyBoard", "char =" + b);
int ascii = (int) b.charAt(0);
Log.d("KeyBoard", "char::ASCII =" + ascii);
eventHandler.onKeyPressed(b);
}
}
}
private void addTextEnter(char enterText) {
eventHandler.onEnterOrbspacepressed(enterText);
}
private void addTextBSpace(char bspaceText) {
eventHandler.onEnterOrbspacepressed(bspaceText);
}
private void changeSmallLetters() {
((ViewGroup) mBChange.getParent()).setVisibility(Button.VISIBLE);
for (int i = 0; i < sL.length; i++)
mB[i].setText(sL[i]);
mNum.setTag("12#");
}
private void changeSmallTags() {
for (int i = 0; i < sL.length; i++)
mB[i].setTag(sL[i]);
mBChange.setTag("lower");
mNum.setTag("num");
}
private void changeCapitalLetters() {
((ViewGroup) mBChange.getParent()).setVisibility(Button.VISIBLE);
for (int i = 0; i < cL.length; i++)
mB[i].setText(cL[i]);
mBChange.setTag("upper");
mNum.setText("12#");
}
private void changeCapitalTags() {
for (int i = 0; i < cL.length; i++)
mB[i].setTag(cL[i]);
mNum.setTag("num");
}
private void changeSyNuLetters() {
for (int i = 0; i < nS.length; i++)
mB[i].setText(nS[i]);
mNum.setText("ABC");
}
private void changeSyNuTags() {
for (int i = 0; i < nS.length; i++)
mB[i].setTag(nS[i]);
mNum.setTag("ABC");
}
private void setFrow() {
w = (mWindowWidth / 13);
w = w - 15;
mB[16].setWidth(w);
mB[22].setWidth(w + 3);
mB[4].setWidth(w);
mB[17].setWidth(w);
mB[19].setWidth(w);
mB[24].setWidth(w);
mB[20].setWidth(w);
mB[8].setWidth(w);
mB[14].setWidth(w);
mB[15].setWidth(w);
mB[16].setHeight(50);
mB[22].setHeight(50);
mB[4].setHeight(50);
mB[17].setHeight(50);
mB[19].setHeight(50);
mB[24].setHeight(50);
mB[20].setHeight(50);
mB[8].setHeight(50);
mB[14].setHeight(50);
mB[15].setHeight(50);
}
private void setSrow() {
w = (mWindowWidth / 10);
mB[0].setWidth(w);
mB[18].setWidth(w);
mB[3].setWidth(w);
mB[5].setWidth(w);
mB[6].setWidth(w);
mB[7].setWidth(w);
mB[26].setWidth(w);
mB[9].setWidth(w);
mB[10].setWidth(w);
mB[11].setWidth(w);
mB[26].setWidth(w);
mB[0].setHeight(50);
mB[18].setHeight(50);
mB[3].setHeight(50);
mB[5].setHeight(50);
mB[6].setHeight(50);
mB[7].setHeight(50);
mB[9].setHeight(50);
mB[10].setHeight(50);
mB[11].setHeight(50);
mB[26].setHeight(50);
}
private void setTrow() {
w = (mWindowWidth / 12);
mB[25].setWidth(w);
mB[23].setWidth(w);
mB[2].setWidth(w);
mB[21].setWidth(w);
mB[1].setWidth(w);
mB[13].setWidth(w);
mB[12].setWidth(w);
mB[27].setWidth(w);
mB[28].setWidth(w);
mBack.setWidth(w);
mB[25].setHeight(50);
mB[23].setHeight(50);
mB[2].setHeight(50);
mB[21].setHeight(50);
mB[1].setHeight(50);
mB[13].setHeight(50);
mB[12].setHeight(50);
mB[27].setHeight(50);
mB[28].setHeight(50);
mBack.setHeight(50);
}
private void setForow() {
w = (mWindowWidth / 10);
mBSpace.setWidth(w * 4);
mBSpace.setHeight(50);
mB[29].setWidth(w);
mB[29].setHeight(50);
mB[30].setWidth(w);
mB[30].setHeight(50);
mB[31].setHeight(50);
mB[31].setWidth(w);
mBenter.setWidth(w + (w / 1));
mBenter.setHeight(50);
}
private void setKeys(View v) {
try {
DisplayMetrics displaymetrics = new DisplayMetrics();
activity.getWindow().getWindowManager().getDefaultDisplay()
.getMetrics(displaymetrics);
mWindowWidth = displaymetrics.widthPixels;
} catch (Exception ignored) {
}
// includes window decorations (statusbar bar/menu bar)
if (Build.VERSION.SDK_INT >= 17)
try {
Point realSize = new Point();
Display.class.getMethod("getRealSize", Point.class).invoke(
activity.getWindow().getWindowManager()
.getDefaultDisplay(), realSize);
mWindowWidth = realSize.x;
} catch (Exception ignored) {
} // getting
// window
// height
// getting ids from xml files
mB[0] = (Button) v.findViewById(R.id.xA);
mB[1] = (Button) v.findViewById(R.id.xB);
mB[2] = (Button) v.findViewById(R.id.xC);
mB[3] = (Button) v.findViewById(R.id.xD);
mB[4] = (Button) v.findViewById(R.id.xE);
mB[5] = (Button) v.findViewById(R.id.xF);
mB[6] = (Button) v.findViewById(R.id.xG);
mB[7] = (Button) v.findViewById(R.id.xH);
mB[8] = (Button) v.findViewById(R.id.xI);
mB[9] = (Button) v.findViewById(R.id.xJ);
mB[10] = (Button) v.findViewById(R.id.xK);
mB[11] = (Button) v.findViewById(R.id.xL);
mB[12] = (Button) v.findViewById(R.id.xM);
mB[13] = (Button) v.findViewById(R.id.xN);
mB[14] = (Button) v.findViewById(R.id.xO);
mB[15] = (Button) v.findViewById(R.id.xP);
mB[16] = (Button) v.findViewById(R.id.xQ);
mB[17] = (Button) v.findViewById(R.id.xR);
mB[18] = (Button) v.findViewById(R.id.xS);
mB[19] = (Button) v.findViewById(R.id.xT);
mB[20] = (Button) v.findViewById(R.id.xU);
mB[21] = (Button) v.findViewById(R.id.xV);
mB[22] = (Button) v.findViewById(R.id.xW);
mB[23] = (Button) v.findViewById(R.id.xX);
mB[24] = (Button) v.findViewById(R.id.xY);
mB[25] = (Button) v.findViewById(R.id.xZ);
mB[26] = (Button) v.findViewById(R.id.xS1);
mB[27] = (Button) v.findViewById(R.id.xS2);
mB[28] = (Button) v.findViewById(R.id.xS3);
mB[29] = (Button) v.findViewById(R.id.xS4);
mB[30] = (Button) v.findViewById(R.id.xS5);
mB[31] = (Button) v.findViewById(R.id.xS6);
mBSpace = (Button) v.findViewById(R.id.xSpace);
mBenter = (Button) v.findViewById(R.id.xDone);
mBChange = (Button) v.findViewById(R.id.xChange);
mBack = (Button) v.findViewById(R.id.xBack);
mNum = (Button) v.findViewById(R.id.xNum);
for (int i = 0; i < mB.length; i++)
mB[i].setOnClickListener(this);
mBSpace.setOnClickListener(this);
mBenter.setOnClickListener(this);
mBack.setOnClickListener(this);
mBChange.setOnClickListener(this);
mNum.setOnClickListener(this);
// Hidden unused characters
mB[26].setVisibility(Button.INVISIBLE);
mB[27].setVisibility(Button.INVISIBLE);
mB[28].setVisibility(Button.INVISIBLE);
mB[29].setVisibility(Button.INVISIBLE);
mB[30].setVisibility(Button.INVISIBLE);
mB[31].setVisibility(Button.INVISIBLE);
}
}