Android Open Source - ZShaolin Keyboard Switcher






From Project

Back to project page ZShaolin.

License

The source code is released under:

GNU General Public License

If you think the Android project ZShaolin listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.//w ww .j  av a2  s  .c  o m
 */

package com.spartacusrex.spartacuside.keyboard;

import android.content.Context;
import android.util.Log;
import org.dyne.zshaolin.R;

/**
 *
 * @author Spartacus Rex
 */
public class KeyboardSwitcher {

    public static final int KEYBOARD_NORM           = 0;
    public static final int KEYBOARD_LARGE          = 1;
    public static final int KEYBOARD_FUNCTION       = 2;
    public static final int KEYBOARD_FUNCTION_LARGE = 3;
    
    public static final int NOT_SHIFTED         = 0;
    public static final int SHIFTED             = 1;

    public static int KEYBOARD_SIZES = 4;

    //All the different Keyboards.. Small and Large size
    LatinKeyboard[][][] mKeyboards;

    int           mKeyboard;
    int           mSize;
    int           mShift;
    boolean       mFunction;

    //The META Key states
    boolean mShiftLocked;
    boolean mCTRL;
    boolean mALT;
    
    private void log(String zLog){
        Log.v("SpartacusRex", zLog);
    }

    public KeyboardSwitcher(){

        //Set Default
        mKeyboard = KEYBOARD_NORM;
        mSize = 0;
        
        mShift          = NOT_SHIFTED;
        mShiftLocked    = false;
        mCTRL           = false;
        mALT            = false;

        mKeyboards = null;
    }

    public boolean isInited(){
        if(mKeyboards == null){
            return false;
        }
        return true;
    }

    public void init(Context zContext){
        //Create all the Keyboards
        //TYPE / SHIFTED / SIZE
        mKeyboards = new LatinKeyboard[4][2][KEYBOARD_SIZES];

        //WHY IS THIS DONE LIKE THIS ? Because you can only specify the height in the XML..

        //Smaller 30dip size
        mKeyboards[KEYBOARD_NORM][NOT_SHIFTED][0] = new LatinKeyboard(zContext, R.xml.qwerty30);
        mKeyboards[KEYBOARD_NORM][SHIFTED][0] = new LatinKeyboard(zContext, R.xml.qwerty_shift30);
        mKeyboards[KEYBOARD_NORM][SHIFTED][0].setShifted(true);
        mKeyboards[KEYBOARD_FUNCTION][NOT_SHIFTED][0] = new LatinKeyboard(zContext, R.xml.qwerty_function30);
        mKeyboards[KEYBOARD_FUNCTION][SHIFTED][0] = new LatinKeyboard(zContext, R.xml.qwerty_shift_function30);
        mKeyboards[KEYBOARD_LARGE][NOT_SHIFTED][0] = new LatinKeyboard(zContext, R.xml.qwerty_large30);
        mKeyboards[KEYBOARD_LARGE][SHIFTED][0] = new LatinKeyboard(zContext, R.xml.qwerty_large_shift30);
        mKeyboards[KEYBOARD_LARGE][SHIFTED][0].setShifted(true);
        mKeyboards[KEYBOARD_FUNCTION_LARGE][NOT_SHIFTED][0] = new LatinKeyboard(zContext, R.xml.qwerty_large_function30);
        mKeyboards[KEYBOARD_FUNCTION_LARGE][SHIFTED][0] = new LatinKeyboard(zContext, R.xml.qwerty_large_shift_function30);
        mKeyboards[KEYBOARD_FUNCTION_LARGE][SHIFTED][0].setShifted(true);
        
        //Normal 40dip size
        mKeyboards[KEYBOARD_NORM][NOT_SHIFTED][1] = new LatinKeyboard(zContext, R.xml.qwerty);
        mKeyboards[KEYBOARD_NORM][SHIFTED][1] = new LatinKeyboard(zContext, R.xml.qwerty_shift);
        mKeyboards[KEYBOARD_NORM][SHIFTED][1].setShifted(true);
        mKeyboards[KEYBOARD_FUNCTION][NOT_SHIFTED][1] = new LatinKeyboard(zContext, R.xml.qwerty_function);
        mKeyboards[KEYBOARD_FUNCTION][SHIFTED][1] = new LatinKeyboard(zContext, R.xml.qwerty_shift_function);
        mKeyboards[KEYBOARD_LARGE][NOT_SHIFTED][1] = new LatinKeyboard(zContext, R.xml.qwerty_large);
        mKeyboards[KEYBOARD_LARGE][SHIFTED][1] = new LatinKeyboard(zContext, R.xml.qwerty_large_shift);
        mKeyboards[KEYBOARD_LARGE][SHIFTED][1].setShifted(true);
        mKeyboards[KEYBOARD_FUNCTION_LARGE][NOT_SHIFTED][1] = new LatinKeyboard(zContext, R.xml.qwerty_large_function);
        mKeyboards[KEYBOARD_FUNCTION_LARGE][SHIFTED][1] = new LatinKeyboard(zContext, R.xml.qwerty_large_shift_function);
        mKeyboards[KEYBOARD_FUNCTION_LARGE][SHIFTED][1].setShifted(true);

        //Larger 50dip size
        mKeyboards[KEYBOARD_NORM][NOT_SHIFTED][2] = new LatinKeyboard(zContext, R.xml.qwerty50);
        mKeyboards[KEYBOARD_NORM][SHIFTED][2] = new LatinKeyboard(zContext, R.xml.qwerty_shift50);
        mKeyboards[KEYBOARD_NORM][SHIFTED][2].setShifted(true);
        mKeyboards[KEYBOARD_FUNCTION][NOT_SHIFTED][2] = new LatinKeyboard(zContext, R.xml.qwerty_function50);
        mKeyboards[KEYBOARD_FUNCTION][SHIFTED][2] = new LatinKeyboard(zContext, R.xml.qwerty_shift_function50);
        mKeyboards[KEYBOARD_LARGE][NOT_SHIFTED][2] = new LatinKeyboard(zContext, R.xml.qwerty_large50);
        mKeyboards[KEYBOARD_LARGE][SHIFTED][2] = new LatinKeyboard(zContext, R.xml.qwerty_large_shift50);
        mKeyboards[KEYBOARD_LARGE][SHIFTED][2].setShifted(true);
        mKeyboards[KEYBOARD_FUNCTION_LARGE][NOT_SHIFTED][2] = new LatinKeyboard(zContext, R.xml.qwerty_large_function50);
        mKeyboards[KEYBOARD_FUNCTION_LARGE][SHIFTED][2] = new LatinKeyboard(zContext, R.xml.qwerty_large_shift_function50);
        mKeyboards[KEYBOARD_FUNCTION_LARGE][SHIFTED][2].setShifted(true);
        
        //Largest 65dip size
        mKeyboards[KEYBOARD_NORM][NOT_SHIFTED][3] = new LatinKeyboard(zContext, R.xml.qwerty60);
        mKeyboards[KEYBOARD_NORM][SHIFTED][3] = new LatinKeyboard(zContext, R.xml.qwerty_shift60);
        mKeyboards[KEYBOARD_NORM][SHIFTED][3].setShifted(true);
        mKeyboards[KEYBOARD_FUNCTION][NOT_SHIFTED][3] = new LatinKeyboard(zContext, R.xml.qwerty_function60);
        mKeyboards[KEYBOARD_FUNCTION][SHIFTED][3] = new LatinKeyboard(zContext, R.xml.qwerty_shift_function60);
        mKeyboards[KEYBOARD_LARGE][NOT_SHIFTED][3] = new LatinKeyboard(zContext, R.xml.qwerty_large60);
        mKeyboards[KEYBOARD_LARGE][SHIFTED][3] = new LatinKeyboard(zContext, R.xml.qwerty_large_shift60);
        mKeyboards[KEYBOARD_LARGE][SHIFTED][3].setShifted(true);
        mKeyboards[KEYBOARD_FUNCTION_LARGE][NOT_SHIFTED][3] = new LatinKeyboard(zContext, R.xml.qwerty_large_function60);
        mKeyboards[KEYBOARD_FUNCTION_LARGE][SHIFTED][3] = new LatinKeyboard(zContext, R.xml.qwerty_large_shift_function60);
        mKeyboards[KEYBOARD_FUNCTION_LARGE][SHIFTED][3].setShifted(true);

        //Set the default keyboard
        setKeyboard(0, NOT_SHIFTED, 0);
    }

    
    public void setKeyboardType(int zType){
        setKeyboard(zType, mShift, mSize);
    }

    public void setKeyboardSize(int zSize){
        if(zSize<KEYBOARD_SIZES){
            setKeyboard(mKeyboard, mShift, zSize);
        }
    }

    public int getKeyboardType(){
        return mKeyboard;
    }

    public void setKeyboard(int zType, int zShift, int zSize){
        mKeyboard    = zType;
        mSize        = zSize;
        mShift       = zShift;
        
        if(!isShifted()){
            //Turn off
            mShiftLocked = false;
        }
    }

    public LatinKeyboard getCurrentKeyboard(){
        //The Keyboard
        LatinKeyboard currentKeyboard = mKeyboards[mKeyboard][mShift][mSize];
        
        //Is Function Pressed
        if(mFunction && mKeyboard == KEYBOARD_NORM){
            currentKeyboard = mKeyboards[KEYBOARD_FUNCTION][mShift][mSize];
            currentKeyboard.setFNKeyState(true);

        }else if(mFunction && mKeyboard == KEYBOARD_LARGE){
            currentKeyboard = mKeyboards[KEYBOARD_FUNCTION_LARGE][mShift][mSize];
            currentKeyboard.setFNKeyState(true);

        }else {
            currentKeyboard.setFNKeyState(false);
        }

        //Make sure meta keys set
        currentKeyboard.setCTRLKeyState(mCTRL);
        currentKeyboard.setALTKeyState(mALT);

        //Shift Keys
        setShiftKeys();

        return currentKeyboard;
    }

    //ShiftKey
    public void shiftKey(){
        if(!isShifted()){
            //Never Shifts
            mShiftLocked = false;

            //Change to Shift Keyboard
            setKeyboard(mKeyboard, SHIFTED, mSize);

        }else{
            if(mShiftLocked){
                //Change to Shift Keyboard
                setKeyboard(mKeyboard, NOT_SHIFTED, mSize);

            }else{
                mShiftLocked = true;
            }
        }

        setShiftKeys();
    }

    //ShiftKey
    public void FNKey(){
        if(!mFunction){
            mFunction = true;
        }else{
            //Back to Normal
            mFunction = false;
        }
    }

    public boolean isFunction(){
        return mFunction;
    }

    private void setShiftKeys(){
        //Shift Keys
        mKeyboards[KEYBOARD_NORM][NOT_SHIFTED][mSize].getShiftKeyLeft().on      = false;
        mKeyboards[KEYBOARD_NORM][SHIFTED][mSize].getShiftKeyLeft().on          = mShiftLocked;
        mKeyboards[KEYBOARD_FUNCTION][NOT_SHIFTED][mSize].getShiftKeyLeft().on  = false;
        mKeyboards[KEYBOARD_FUNCTION][SHIFTED][mSize].getShiftKeyLeft().on      = mShiftLocked;
        mKeyboards[KEYBOARD_FUNCTION_LARGE][NOT_SHIFTED][mSize].getShiftKeyLeft().on  = false;
        mKeyboards[KEYBOARD_FUNCTION_LARGE][SHIFTED][mSize].getShiftKeyLeft().on      = mShiftLocked;
        mKeyboards[KEYBOARD_LARGE][NOT_SHIFTED][mSize].getShiftKeyLeft().on     = false;
        mKeyboards[KEYBOARD_LARGE][SHIFTED][mSize].getShiftKeyLeft().on         = mShiftLocked;

        //Only on the large keyboard
        mKeyboards[KEYBOARD_LARGE][NOT_SHIFTED][mSize].getShiftKeyRight().on            = false;
        mKeyboards[KEYBOARD_LARGE][SHIFTED][mSize].getShiftKeyRight().on                = mShiftLocked;
        mKeyboards[KEYBOARD_FUNCTION_LARGE][NOT_SHIFTED][mSize].getShiftKeyRight().on   = false;
        mKeyboards[KEYBOARD_FUNCTION_LARGE][SHIFTED][mSize].getShiftKeyRight().on       = mShiftLocked;
    }

    //Do we switch
    public boolean validKeyPress(){
        if(isShifted()){
            if(!mShiftLocked){
                //Change to normal Keyboard
                setKeyboard(mKeyboard, NOT_SHIFTED, mSize);
                return true;
            }
        }

        return false;
    }

    //META Keys
    public boolean isCTRL(){
        return mCTRL;
    }

    public void setCTRL(boolean zCTRL){
        mCTRL = zCTRL;
        getCurrentKeyboard().setCTRLKeyState(zCTRL);
    }

    public boolean isALT(){
        return mALT;
    }

    public void setALT(boolean zALT){
        mALT = zALT;
        getCurrentKeyboard().setALTKeyState(zALT);
    }

    public boolean isShifted(){
        return (mShift == SHIFTED);
    }
}




Java Source Code List

com.spartacusrex.spartacuside.EmulatorView.java
com.spartacusrex.spartacuside.Exec.java
com.spartacusrex.spartacuside.TermDebug.java
com.spartacusrex.spartacuside.TermPreferences.java
com.spartacusrex.spartacuside.TermService.java
com.spartacusrex.spartacuside.TermViewFlipper.java
com.spartacusrex.spartacuside.Term.java
com.spartacusrex.spartacuside.WindowList.java
com.spartacusrex.spartacuside.keyboard.CandidateView.java
com.spartacusrex.spartacuside.keyboard.KeyboardPrefs.java
com.spartacusrex.spartacuside.keyboard.KeyboardSwitcher.java
com.spartacusrex.spartacuside.keyboard.LatinKeyboardView.java
com.spartacusrex.spartacuside.keyboard.LatinKeyboard.java
com.spartacusrex.spartacuside.keyboard.MyKeyboardView.java
com.spartacusrex.spartacuside.keyboard.TerminalKeyboard.java
com.spartacusrex.spartacuside.model.Screen.java
com.spartacusrex.spartacuside.model.TextRenderer.java
com.spartacusrex.spartacuside.model.UpdateCallback.java
com.spartacusrex.spartacuside.session.TermSession.java
com.spartacusrex.spartacuside.session.TerminalEmulator.java
com.spartacusrex.spartacuside.session.TranscriptScreen.java
com.spartacusrex.spartacuside.util.ByteQueue.java
com.spartacusrex.spartacuside.util.ServiceForegroundCompat.java
com.spartacusrex.spartacuside.util.TermSettings.java
com.spartacusrex.spartacuside.util.dialogpref.java
com.spartacusrex.spartacuside.util.hardkeymappings.java
com.spartacusrex.spartacuside.util.keydata.java
com.spartacusrex.spartacuside.web.sockethandler.java
com.spartacusrex.spartacuside.web.webserver.java
org.dyne.zshaolin.Start.java
org.dyne.zshaolin.startup.TerminalIDEPrefs.java
org.dyne.zshaolin.startup.setup.assetextract.java
org.dyne.zshaolin.startup.setup.filemanager.java
org.dyne.zshaolin.startup.installer.java
org.dyne.zshaolin.startup.introscreen.java