/** * Copyright (C) 2009 Michael A. MacDonald */ package android.androidVNC; import java.io.IOException; import java.util.ArrayList; import com.cgcl.cloudesk.cloudeskmain.screens.act.R; import android.app.Activity; import android.app.Dialog; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageButton; /** * @author Michael A. MacDonald * */ class EnterTextDialog extends Dialog { static final int NUMBER_SENT_SAVED = 100; static final int DELETED_ID = -10; private VncCanvasActivity _canvasActivity; private EditText _textEnterText; private ArrayList<SentTextBean> _history; private int _historyIndex; private ImageButton _buttonNextEntry; private ImageButton _buttonPreviousEntry; public EnterTextDialog(Context context) { super(context); setOwnerActivity((Activity)context); _canvasActivity = (VncCanvasActivity)context; _history = new ArrayList<SentTextBean>(); } private String saveText(boolean wasSent) { CharSequence cs = _textEnterText.getText(); if (cs.length()==0) return ""; String s = cs.toString(); if (wasSent || _historyIndex>=_history.size() || ! s.equals(_history.get(_historyIndex).getSentText())) { SentTextBean added = new SentTextBean(); added.setSentText(s); SQLiteDatabase db = _canvasActivity.database.getWritableDatabase(); added.Gen_insert(db); _history.add(added); for (int i = 0; i < _historyIndex - NUMBER_SENT_SAVED; i++) { SentTextBean deleteCandidate = _history.get(i); if (deleteCandidate.get_Id() != DELETED_ID) { deleteCandidate.Gen_delete(db); deleteCandidate.set_Id(DELETED_ID); } } } return s; } private void sendText(String s) { RfbProto rfb = _canvasActivity.vncCanvas.rfb; int l = s.length(); for (int i = 0; i<l; i++) { char c = s.charAt(i); int meta = 0; int keysym = c; if (Character.isISOControl(c)) { if (c=='\n') keysym = MetaKeyBean.keysByKeyCode.get(KeyEvent.KEYCODE_ENTER).keySym; else continue; } try { rfb.writeKeyEvent(keysym, meta, true); rfb.writeKeyEvent(keysym, meta, false); } catch (IOException ioe) { // TODO: log this } } } /* (non-Javadoc) * @see android.app.Dialog#onCreate(android.os.Bundle) */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.entertext); setTitle(R.string.enter_text_title); _textEnterText = (EditText)findViewById(R.id.textEnterText); _buttonNextEntry = (ImageButton)findViewById(R.id.buttonNextEntry); _buttonNextEntry.setOnClickListener(new View.OnClickListener() { /* (non-Javadoc) * @see android.view.View.OnClickListener#onClick(android.view.View) */ @Override public void onClick(View v) { int oldSize = _history.size(); if (_historyIndex < oldSize) { saveText(false); _historyIndex++; if (_history.size()>oldSize && _historyIndex==oldSize) _historyIndex++; if (_historyIndex < _history.size()) { _textEnterText.setText(_history.get(_historyIndex).getSentText()); } else { _textEnterText.setText(""); } } updateButtons(); } }); _buttonPreviousEntry = (ImageButton)findViewById(R.id.buttonPreviousEntry); _buttonPreviousEntry.setOnClickListener(new View.OnClickListener() { /* (non-Javadoc) * @see android.view.View.OnClickListener#onClick(android.view.View) */ @Override public void onClick(View v) { if (_historyIndex > 0) { saveText(false); _historyIndex--; _textEnterText.setText(_history.get(_historyIndex).getSentText()); } updateButtons(); } }); ((Button)findViewById(R.id.buttonSendText)).setOnClickListener(new View.OnClickListener() { /* (non-Javadoc) * @see android.view.View.OnClickListener#onClick(android.view.View) */ @Override public void onClick(View v) { String s = saveText(true); sendText(s); _textEnterText.setText(""); _historyIndex = _history.size(); updateButtons(); dismiss(); } }); ((Button)findViewById(R.id.buttonSendWithoutSaving)).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String s = _textEnterText.getText().toString(); sendText(s); _textEnterText.setText(""); _historyIndex = _history.size(); updateButtons(); dismiss(); } }); ((ImageButton)findViewById(R.id.buttonTextDelete)).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (_historyIndex < _history.size()) { String s = _textEnterText.getText().toString(); SentTextBean bean = _history.get(_historyIndex); if (s.equals(bean.getSentText())) { bean.Gen_delete(_canvasActivity.database.getWritableDatabase()); _history.remove(_historyIndex); if (_historyIndex > 0) { _historyIndex = _historyIndex - 1; } } } String s = ""; if (_historyIndex < _history.size()) { s = _history.get(_historyIndex).getSentText(); } _textEnterText.setText(s); updateButtons(); } }); Cursor readInOrder = _canvasActivity.database.getReadableDatabase().rawQuery( "select * from " + SentTextBean.GEN_TABLE_NAME + " ORDER BY _id", null); try { SentTextBean.Gen_populateFromCursor(readInOrder, _history, SentTextBean.GEN_NEW); } finally { readInOrder.close(); } _historyIndex = _history.size(); updateButtons(); } private void updateButtons() { _buttonPreviousEntry.setEnabled(_historyIndex > 0); _buttonNextEntry.setEnabled(_historyIndex <_history.size()); } /* (non-Javadoc) * @see android.app.Dialog#onStart() */ @Override protected void onStart() { super.onStart(); _textEnterText.requestFocus(); } }