aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKenny Root <kenny@the-b.org>2009-07-02 06:03:34 +0000
committerKenny Root <kenny@the-b.org>2009-07-02 06:03:34 +0000
commit9759a0c23ad865f6815b9af01a611ca38984f865 (patch)
tree39ccac0bd1a6b62d7fb33a2046f762204ccda963 /src
parent03801caf2fffefe2b6da8b596b8f767af8a7effc (diff)
downloadconnectbot-9759a0c23ad865f6815b9af01a611ca38984f865.tar.gz
connectbot-9759a0c23ad865f6815b9af01a611ca38984f865.tar.bz2
connectbot-9759a0c23ad865f6815b9af01a611ca38984f865.zip
Allow tap on screen to bring up an icon to open the software keyboard when the hardware keyboard is hidden
git-svn-id: https://connectbot.googlecode.com/svn/trunk/connectbot@348 df292f66-193f-0410-a5fc-6d59da041ff2
Diffstat (limited to 'src')
-rw-r--r--src/org/connectbot/ConsoleActivity.java66
1 files changed, 60 insertions, 6 deletions
diff --git a/src/org/connectbot/ConsoleActivity.java b/src/org/connectbot/ConsoleActivity.java
index bd66b3b..6f59a57 100644
--- a/src/org/connectbot/ConsoleActivity.java
+++ b/src/org/connectbot/ConsoleActivity.java
@@ -61,8 +61,10 @@ import android.view.View.OnKeyListener;
import android.view.View.OnTouchListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
+import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
+import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
@@ -77,6 +79,10 @@ public class ConsoleActivity extends Activity {
protected static final int REQUEST_EDIT = 1;
+ private static final int CLICK_TIME = 250;
+ private static final float MAX_CLICK_DISTANCE = 25f;
+ private static final int KEYBOARD_DISPLAY_TIME = 1250;
+
protected ViewFlipper flip = null;
protected TerminalManager bound = null;
protected LayoutInflater inflater = null;
@@ -98,7 +104,13 @@ public class ConsoleActivity extends Activity {
private TextView empty;
- private Animation slide_left_in, slide_left_out, slide_right_in, slide_right_out, fade_stay_hidden, fade_out;
+ private Animation slide_left_in, slide_left_out, slide_right_in, slide_right_out, fade_stay_hidden, fade_out_delayed;
+
+ private Animation keyboard_fade_in, keyboard_fade_out;
+ private ImageView keyboardButton;
+ private float lastX, lastY;
+
+ private InputMethodManager inputManager;
private MenuItem disconnect, copy, paste, portForward, resize;
@@ -107,6 +119,8 @@ public class ConsoleActivity extends Activity {
private boolean forcedOrientation;
+ private Handler handler = new Handler();
+
private ServiceConnection connection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
bound = ((TerminalManager.TerminalBinder) service).getService();
@@ -170,7 +184,7 @@ public class ConsoleActivity extends Activity {
try {
// show the requested bridge if found, also fade out overlay
flip.setDisplayedChild(requestedIndex);
- flip.getCurrentView().findViewById(R.id.terminal_overlay).startAnimation(fade_out);
+ flip.getCurrentView().findViewById(R.id.terminal_overlay).startAnimation(fade_out_delayed);
} catch (NullPointerException npe) {
Log.d(TAG, "View went away when we were about to display it", npe);
}
@@ -375,9 +389,26 @@ public class ConsoleActivity extends Activity {
slide_right_in = AnimationUtils.loadAnimation(this, R.anim.slide_right_in);
slide_right_out = AnimationUtils.loadAnimation(this, R.anim.slide_right_out);
- fade_out = AnimationUtils.loadAnimation(this, R.anim.fade_out);
+ fade_out_delayed = AnimationUtils.loadAnimation(this, R.anim.fade_out_delayed);
fade_stay_hidden = AnimationUtils.loadAnimation(this, R.anim.fade_stay_hidden);
+ // Preload animation for keyboard button
+ keyboard_fade_in = AnimationUtils.loadAnimation(this, R.anim.keyboard_fade_in);
+ keyboard_fade_out = AnimationUtils.loadAnimation(this, R.anim.keyboard_fade_out);
+
+ inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+ keyboardButton = (ImageView) findViewById(R.id.keyboard_button);
+ keyboardButton.setOnClickListener(new OnClickListener() {
+ public void onClick(View view) {
+ View flip = findCurrentView(R.id.console_flip);
+ if (flip == null)
+ return;
+
+ inputManager.showSoftInput(flip, InputMethodManager.SHOW_FORCED);
+ keyboardButton.setVisibility(View.GONE);
+ }
+ });
+
// detect fling gestures to switch between terminals
final GestureDetector detect = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
private float totalY = 0;
@@ -530,8 +561,31 @@ public class ConsoleActivity extends Activity {
copySource.redraw();
return true;
}
+ }
-
+ Configuration config = getResources().getConfiguration();
+
+ if (event.getAction() == MotionEvent.ACTION_DOWN) {
+ lastX = event.getX();
+ lastY = event.getY();
+ } else if (event.getAction() == MotionEvent.ACTION_UP
+ && config.hardKeyboardHidden != Configuration.KEYBOARDHIDDEN_NO
+ && keyboardButton.getVisibility() == View.GONE
+ && event.getEventTime() - event.getDownTime() < CLICK_TIME
+ && Math.abs(event.getX() - lastX) < MAX_CLICK_DISTANCE
+ && Math.abs(event.getY() - lastY) < MAX_CLICK_DISTANCE) {
+ keyboardButton.startAnimation(keyboard_fade_in);
+ keyboardButton.setVisibility(View.VISIBLE);
+
+ handler.postDelayed(new Runnable() {
+ public void run() {
+ if (keyboardButton.getVisibility() == View.GONE)
+ return;
+
+ keyboardButton.startAnimation(keyboard_fade_out);
+ keyboardButton.setVisibility(View.GONE);
+ }
+ }, KEYBOARD_DISPLAY_TIME);
}
// pass any touch events back to detector
@@ -797,7 +851,7 @@ public class ConsoleActivity extends Activity {
// show overlay on new slide and start fade
overlay = findCurrentView(R.id.terminal_overlay);
if (overlay != null)
- overlay.startAnimation(fade_out);
+ overlay.startAnimation(fade_out_delayed);
}
updatePromptVisible();
@@ -825,7 +879,7 @@ public class ConsoleActivity extends Activity {
// show overlay on new slide and start fade
overlay = findCurrentView(R.id.terminal_overlay);
if (overlay != null)
- overlay.startAnimation(fade_out);
+ overlay.startAnimation(fade_out_delayed);
}
updatePromptVisible();