KeyboardWidget.java :  » Calendar » ancal » pl » magot » vetch » widgets » Android Open Source

Android Open Source » Calendar » ancal 
ancal » pl » magot » vetch » widgets » KeyboardWidget.java

package pl.magot.vetch.widgets;


import android.app.*;
import android.content.Intent;
import android.os.Bundle;
import android.view.*;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.LinearLayout.LayoutParams;


public class KeyboardWidget extends Activity
{
  //fields
  public static final int EDIT_TEXT_REQUEST = 113;
  private static final int iSmallButtonWidth = 100;  
  
  //margin from left/right to window frame: 8px. window frame: 2px
  public static final int iMaxWidth = 320 - (20 * 2);
  public static final int iMaxHeight = 480;
  
  //fields
  private static String sStrTitle = "Enter text";
  private static String sStrSet = "set";
  private static String sStrCancel= "cancel";
  
  //fields
  private LinearLayout layContent = null;
  private KeyboardWidgetView keyboard = null;
  private HintEdit edit = null;
  private Button btnCancel = null;
  private Button btnSet = null;
  
  //methods
  @Override
  public void onCreate(Bundle icicle)
  {
    super.onCreate(icicle);
    
    setTitle(sStrTitle);
        
    //get startup data
    String sText = "";
    Bundle data = this.getIntent().getExtras();
    if (data != null)
    {
      if (data.containsKey("text"))
        sText = data.getString("text");
    }    
    
    //restore data from freeze state
    if (icicle != null)
    {
      sText = icicle.getString("freezeText");
    }
    
    setContentView(generateContentView());
    
    initializeEditing(sText);
  }
  
  @Override
  protected void onSaveInstanceState(Bundle outState)
  {
    super.onSaveInstanceState(outState);
    //save controls state
    outState.putString("freezeText", edit.getText().toString().trim());
  }
  
  @Override
  public void onStart()
  {
    super.onStart();
    
  }
  
  public static void setStrings(String sStrTitle)
  {    
    KeyboardWidget.sStrTitle = new String(sStrTitle);
  }  
  
  public static void setStrings(String sStrTitle, String sStrCancel, String strSet)
  {    
    sStrTitle = new String(sStrTitle);
    sStrCancel = new String(sStrCancel);
    strSet = new String(strSet);
  }    
  
  public static void Open(Activity parentActivity, String sText)
  {
    Intent it = new Intent("android.intent.action.AnCal.ACTION_MODE_EDIT_TEXT");      
    Bundle data = new Bundle();
    data.putString("text", sText);
    it.putExtras(data);
    parentActivity.startActivityForResult(it, EDIT_TEXT_REQUEST);
  }  

  public static String GetTextOnActivityResult(int requestCode, int resultCode, Bundle extras)
  {
    if ((requestCode == KeyboardWidget.EDIT_TEXT_REQUEST) && (resultCode == RESULT_OK)) 
    {
      if (extras.containsKey("text"))
      {
        return extras.getString("text");
      }
    }
    return "";
  }
  
  public LinearLayout createLayout(int iOrientation)
  {
    LinearLayout lay = new LinearLayout(this);    
    lay.setLayoutParams(new LayoutParams(android.view.ViewGroup.LayoutParams.FILL_PARENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
    lay.setOrientation(iOrientation);
    return lay;
  }
  
  public Button createButton(String sText, int iWidth, int iHeight)
  {
    Button btn = new Button(this);
    btn.setText(sText);
    btn.setLayoutParams(new LayoutParams(iWidth, iHeight));
    return btn;
  }  

  public TextView createLabel(String sText, int iWidth, int iHeight)
  {
    TextView label = new TextView(this);
    label.setText(sText);
    label.setLayoutParams(new LayoutParams(iWidth, iHeight));
    return label;
  }
  
  public void generateBottomButtons(LinearLayout layBottomControls)
  {
    TextView labMargin = createLabel("", 8, android.view.ViewGroup.LayoutParams.FILL_PARENT);
    
    btnCancel = createButton(sStrCancel, iSmallButtonWidth, android.view.ViewGroup.LayoutParams.WRAP_CONTENT);    
    btnCancel.setBackgroundResource(android.R.drawable.btn_default_small);    
    
    btnSet = createButton(sStrSet, iSmallButtonWidth, android.view.ViewGroup.LayoutParams.WRAP_CONTENT);    
    btnSet.setBackgroundResource(android.R.drawable.btn_default_small);
    
    //set events
    btnCancel.setOnClickListener(new Button.OnClickListener()
    {
      public void onClick(View arg0) {
        OnClose(false);
    }});
    btnSet.setOnClickListener(new Button.OnClickListener()
    {
      public void onClick(View arg0) {        
        OnClose(true);
    }});
    
    layBottomControls.setGravity(Gravity.CENTER_HORIZONTAL);
    layBottomControls.addView(btnCancel);
    layBottomControls.addView(labMargin);
    layBottomControls.addView(btnSet);    
  }
  
  public void OnClose(boolean bOK)
  {
    Bundle data = new Bundle();    
    data.putString("text", edit.getText().toString().trim());    
    
    Intent intentData = new Intent("");
    intentData.putExtras(data);
    setResult(bOK?RESULT_OK:RESULT_CANCELED, intentData);
    
    this.finish();
  }
  
  public HintEdit createEditBox()
  {
    edit = new HintEdit(this);
    edit.setLayoutParams(new LayoutParams(android.view.ViewGroup.LayoutParams.FILL_PARENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
    edit.setLines(3);
    edit.setGravity(Gravity.TOP);
    edit.setFocusable(true);
        
    return edit;
  }

  private View generateContentView()
  {
    LinearLayout layMain = createLayout(LinearLayout.VERTICAL);
    layMain.setPadding(8, 8, 8, 8);
    
    LinearLayout layTopControls = createLayout(LinearLayout.HORIZONTAL);
    LinearLayout layMargin = createLayout(LinearLayout.HORIZONTAL);
    layMargin.getLayoutParams().height = 12;

    LinearLayout layContentBottom = createLayout(LinearLayout.HORIZONTAL);
    layContentBottom.getLayoutParams().height = 18;
    
    LinearLayout layBottomControls = createLayout(LinearLayout.HORIZONTAL);
    
    //top edit box
    edit = createEditBox();
    layTopControls.addView(edit);
    
    //content
    layContent = createLayout(LinearLayout.VERTICAL);
        
    keyboard = new KeyboardWidgetView(this, iMaxWidth);  
    
    layContent.getLayoutParams().width = iMaxWidth;
    layContent.getLayoutParams().height = keyboard.getTotalHeight();
    
    layContent.addView(keyboard);
    
    generateBottomButtons(layBottomControls);
    
    layMain.addView(layTopControls);
    layMain.addView(layMargin);
    layMain.addView(layContent);
    layMain.addView(layContentBottom);
    layMain.addView(layBottomControls);
    
    return layMain;
  }

  public void initializeEditing(String sText)
  {
    keyboard.setKeyClickEvent(mOnKeyClick);
    keyboard.editText = edit;    
    edit.setText(sText);
    edit.setSelectAllOnFocus(true);    
  } 
  
  public KeyboardWidgetView.OnKeyClick mOnKeyClick = new KeyboardWidgetView.OnKeyClick()  
  {
    public void OnKeyClicked(KeyItem key, boolean bCapital)
    {
      key.sendKey(edit, bCapital);
      autoChangeLayout(key);
    }
  };
  
  public void autoChangeLayout(KeyItem key)
  {
    KeyItemLayout keys = keyboard.getKeyLayout();
    String sText = edit.getText().toString();
    
    //reset layout
    if (sText.length() == 0)
    {
      keys.setLayoutBigCaps();
      keyboard.invalidate();
      return;
    }
    
    //change layout to small caps after first letter
    if (sText.length() == 1)
    {
      keys.setLayoutSmallCaps();
      keyboard.invalidate();
      return;
    }
    
    //change layout to big caps after period
    if ((sText.length() > 0) && (key.iType == KeyItem.kAlphaCycle))
    {
      if (sText.charAt(sText.length() - 1) == '.')
      {
        keys.setLayoutBigCaps();
        keyboard.invalidate();
        return;
      }
      if (sText.charAt(sText.length() - 1) == ',')
      {
        keys.setLayoutSmallCaps();
        keyboard.invalidate();
        return;
      }      
    }
    
    //change layout to big caps after period and big letter    
    int index = sText.lastIndexOf(".");
    if ((index != -1) && (sText.length() > 0))
    {
      sText = sText.substring(index + 1).trim();    
      if (sText.length() == 1)
      {
        if (Character.isUpperCase(sText.charAt(0)))
        {
          keys.setLayoutSmallCaps();
          keyboard.invalidate();
          return;          
        }      
      }
    }    
    
  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.