From 15f6f4577c8c16533433654f5ed4625a2caff1a0 Mon Sep 17 00:00:00 2001 From: adb2001 Date: Sat, 15 Aug 2015 10:34:46 +0200 Subject: Hide ActionBar when a virtual key is pressed. --- .../main/java/org/connectbot/ConsoleActivity.java | 32 ++++++++++++---------- 1 file changed, 18 insertions(+), 14 deletions(-) (limited to 'app/src/main/java/org/connectbot/ConsoleActivity.java') diff --git a/app/src/main/java/org/connectbot/ConsoleActivity.java b/app/src/main/java/org/connectbot/ConsoleActivity.java index d6ee629..7f7ddcd 100644 --- a/app/src/main/java/org/connectbot/ConsoleActivity.java +++ b/app/src/main/java/org/connectbot/ConsoleActivity.java @@ -17,19 +17,6 @@ package org.connectbot; -import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.List; - -import org.connectbot.bean.HostBean; -import org.connectbot.bean.SelectionArea; -import org.connectbot.service.BridgeDisconnectedListener; -import org.connectbot.service.PromptHelper; -import org.connectbot.service.TerminalBridge; -import org.connectbot.service.TerminalKeyListener; -import org.connectbot.service.TerminalManager; -import org.connectbot.util.PreferenceConstants; - import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; @@ -50,8 +37,8 @@ import android.os.IBinder; import android.os.Message; import android.preference.PreferenceManager; import android.support.annotation.Nullable; -import android.support.v4.app.ActivityCompat; import android.support.design.widget.TabLayout; +import android.support.v4.app.ActivityCompat; import android.support.v4.view.MotionEventCompat; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; @@ -89,6 +76,20 @@ import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; + +import org.connectbot.bean.HostBean; +import org.connectbot.bean.SelectionArea; +import org.connectbot.service.BridgeDisconnectedListener; +import org.connectbot.service.PromptHelper; +import org.connectbot.service.TerminalBridge; +import org.connectbot.service.TerminalKeyListener; +import org.connectbot.service.TerminalManager; +import org.connectbot.util.PreferenceConstants; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + import de.mud.terminal.vt320; public class ConsoleActivity extends Activity implements BridgeDisconnectedListener { @@ -256,6 +257,9 @@ public class ConsoleActivity extends Activity implements BridgeDisconnectedListe autoHideEmulatedKeys(); terminal.bridge.tryKeyVibrate(); + if(titleBarHide) { + actionBar.hide(); + } } /** -- cgit v1.2.3 From 4fe2f3181d7bdf30abca1e321f53c1ba693e99e3 Mon Sep 17 00:00:00 2001 From: adb2001 Date: Sat, 15 Aug 2015 10:40:45 +0200 Subject: Rearrange imports --- .../main/java/org/connectbot/ConsoleActivity.java | 29 +++++++++++----------- 1 file changed, 14 insertions(+), 15 deletions(-) (limited to 'app/src/main/java/org/connectbot/ConsoleActivity.java') diff --git a/app/src/main/java/org/connectbot/ConsoleActivity.java b/app/src/main/java/org/connectbot/ConsoleActivity.java index 7f7ddcd..111b3e3 100644 --- a/app/src/main/java/org/connectbot/ConsoleActivity.java +++ b/app/src/main/java/org/connectbot/ConsoleActivity.java @@ -17,6 +17,19 @@ package org.connectbot; +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import org.connectbot.bean.HostBean; +import org.connectbot.bean.SelectionArea; +import org.connectbot.service.BridgeDisconnectedListener; +import org.connectbot.service.PromptHelper; +import org.connectbot.service.TerminalBridge; +import org.connectbot.service.TerminalKeyListener; +import org.connectbot.service.TerminalManager; +import org.connectbot.util.PreferenceConstants; + import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; @@ -37,8 +50,8 @@ import android.os.IBinder; import android.os.Message; import android.preference.PreferenceManager; import android.support.annotation.Nullable; -import android.support.design.widget.TabLayout; import android.support.v4.app.ActivityCompat; +import android.support.design.widget.TabLayout; import android.support.v4.view.MotionEventCompat; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; @@ -76,20 +89,6 @@ import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; - -import org.connectbot.bean.HostBean; -import org.connectbot.bean.SelectionArea; -import org.connectbot.service.BridgeDisconnectedListener; -import org.connectbot.service.PromptHelper; -import org.connectbot.service.TerminalBridge; -import org.connectbot.service.TerminalKeyListener; -import org.connectbot.service.TerminalManager; -import org.connectbot.util.PreferenceConstants; - -import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.List; - import de.mud.terminal.vt320; public class ConsoleActivity extends Activity implements BridgeDisconnectedListener { -- cgit v1.2.3 From 2619786157dbc54de7178526c1ab493f86939119 Mon Sep 17 00:00:00 2001 From: adb2001 Date: Sat, 15 Aug 2015 10:42:36 +0200 Subject: :app:checkstyle --- app/src/main/java/org/connectbot/ConsoleActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/src/main/java/org/connectbot/ConsoleActivity.java') diff --git a/app/src/main/java/org/connectbot/ConsoleActivity.java b/app/src/main/java/org/connectbot/ConsoleActivity.java index 111b3e3..a0da120 100644 --- a/app/src/main/java/org/connectbot/ConsoleActivity.java +++ b/app/src/main/java/org/connectbot/ConsoleActivity.java @@ -256,7 +256,7 @@ public class ConsoleActivity extends Activity implements BridgeDisconnectedListe autoHideEmulatedKeys(); terminal.bridge.tryKeyVibrate(); - if(titleBarHide) { + if (titleBarHide) { actionBar.hide(); } } -- cgit v1.2.3 From 4f612c85338f4fbba30dab2c0527c1b2980f30d9 Mon Sep 17 00:00:00 2001 From: adb2001 Date: Sat, 15 Aug 2015 12:51:46 +0200 Subject: Add an HorizontalScrollView in the keyboard and add virtual keys in it : Home, End, Page Up, Page Down, F1 -> F12 --- .../main/java/org/connectbot/ConsoleActivity.java | 78 ++++++++++++++++++++-- 1 file changed, 72 insertions(+), 6 deletions(-) (limited to 'app/src/main/java/org/connectbot/ConsoleActivity.java') diff --git a/app/src/main/java/org/connectbot/ConsoleActivity.java b/app/src/main/java/org/connectbot/ConsoleActivity.java index a0da120..294b8f3 100644 --- a/app/src/main/java/org/connectbot/ConsoleActivity.java +++ b/app/src/main/java/org/connectbot/ConsoleActivity.java @@ -98,7 +98,7 @@ public class ConsoleActivity extends Activity implements BridgeDisconnectedListe private static final int CLICK_TIME = 400; private static final float MAX_CLICK_DISTANCE = 25f; - private static final int KEYBOARD_DISPLAY_TIME = 1500; + private static final int KEYBOARD_DISPLAY_TIME = 3000; protected ViewPager pager = null; protected TabLayout tabs = null; @@ -220,33 +220,83 @@ public class ConsoleActivity extends Activity implements BridgeDisconnectedListe if (terminal == null) return; TerminalKeyListener handler = terminal.bridge.getKeyHandler(); - boolean hideKeys = true; + boolean hideKeys = false; switch (v.getId()) { case R.id.button_ctrl: handler.metaPress(TerminalKeyListener.OUR_CTRL_ON, true); + hideKeys = true; break; case R.id.button_esc: handler.sendEscape(); + hideKeys = true; break; case R.id.button_tab: handler.sendTab(); + hideKeys = true; break; + case R.id.button_up: handler.sendPressedKey(vt320.KEY_UP); - hideKeys = false; break; case R.id.button_down: handler.sendPressedKey(vt320.KEY_DOWN); - hideKeys = false; break; case R.id.button_left: handler.sendPressedKey(vt320.KEY_LEFT); - hideKeys = false; break; case R.id.button_right: handler.sendPressedKey(vt320.KEY_RIGHT); - hideKeys = false; + break; + + case R.id.button_home: + handler.sendPressedKey(vt320.KEY_HOME); + break; + case R.id.button_end: + handler.sendPressedKey(vt320.KEY_END); + break; + case R.id.button_pgup: + handler.sendPressedKey(vt320.KEY_PAGE_UP); + break; + case R.id.button_pgdn: + handler.sendPressedKey(vt320.KEY_PAGE_DOWN); + break; + + case R.id.button_f1: + handler.sendPressedKey(vt320.KEY_F1); + break; + case R.id.button_f2: + handler.sendPressedKey(vt320.KEY_F2); + break; + case R.id.button_f3: + handler.sendPressedKey(vt320.KEY_F3); + break; + case R.id.button_f4: + handler.sendPressedKey(vt320.KEY_F4); + break; + case R.id.button_f5: + handler.sendPressedKey(vt320.KEY_F5); + break; + case R.id.button_f6: + handler.sendPressedKey(vt320.KEY_F6); + break; + case R.id.button_f7: + handler.sendPressedKey(vt320.KEY_F7); + break; + case R.id.button_f8: + handler.sendPressedKey(vt320.KEY_F8); + break; + case R.id.button_f9: + handler.sendPressedKey(vt320.KEY_F9); + break; + case R.id.button_f10: + handler.sendPressedKey(vt320.KEY_F10); + break; + case R.id.button_f11: + handler.sendPressedKey(vt320.KEY_F11); + break; + case R.id.button_f12: + handler.sendPressedKey(vt320.KEY_F12); break; } @@ -453,6 +503,22 @@ public class ConsoleActivity extends Activity implements BridgeDisconnectedListe findViewById(R.id.button_down).setOnClickListener(emulatedKeysListener); findViewById(R.id.button_left).setOnClickListener(emulatedKeysListener); findViewById(R.id.button_right).setOnClickListener(emulatedKeysListener); + findViewById(R.id.button_home).setOnClickListener(emulatedKeysListener); + findViewById(R.id.button_end).setOnClickListener(emulatedKeysListener); + findViewById(R.id.button_pgup).setOnClickListener(emulatedKeysListener); + findViewById(R.id.button_pgdn).setOnClickListener(emulatedKeysListener); + findViewById(R.id.button_f1).setOnClickListener(emulatedKeysListener); + findViewById(R.id.button_f2).setOnClickListener(emulatedKeysListener); + findViewById(R.id.button_f3).setOnClickListener(emulatedKeysListener); + findViewById(R.id.button_f4).setOnClickListener(emulatedKeysListener); + findViewById(R.id.button_f5).setOnClickListener(emulatedKeysListener); + findViewById(R.id.button_f6).setOnClickListener(emulatedKeysListener); + findViewById(R.id.button_f7).setOnClickListener(emulatedKeysListener); + findViewById(R.id.button_f8).setOnClickListener(emulatedKeysListener); + findViewById(R.id.button_f9).setOnClickListener(emulatedKeysListener); + findViewById(R.id.button_f10).setOnClickListener(emulatedKeysListener); + findViewById(R.id.button_f11).setOnClickListener(emulatedKeysListener); + findViewById(R.id.button_f12).setOnClickListener(emulatedKeysListener); actionBar = ActionBarWrapper.getActionBar(this); actionBar.setDisplayHomeAsUpEnabled(true); -- cgit v1.2.3 From 3f7146bf87b79cc6fd48cf79b65933199e24e9ba Mon Sep 17 00:00:00 2001 From: alescdb Date: Sat, 22 Aug 2015 16:27:22 +0200 Subject: Scroll keyboard back a forth to give a hint to user about the scrollable keyboard. Handle repeatable arrow keys (easily extendable to other keys if needed). --- .../main/java/org/connectbot/ConsoleActivity.java | 140 ++++++++++++++++----- 1 file changed, 109 insertions(+), 31 deletions(-) (limited to 'app/src/main/java/org/connectbot/ConsoleActivity.java') diff --git a/app/src/main/java/org/connectbot/ConsoleActivity.java b/app/src/main/java/org/connectbot/ConsoleActivity.java index 294b8f3..ef47794 100644 --- a/app/src/main/java/org/connectbot/ConsoleActivity.java +++ b/app/src/main/java/org/connectbot/ConsoleActivity.java @@ -83,6 +83,7 @@ import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; +import android.widget.HorizontalScrollView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; @@ -99,6 +100,8 @@ public class ConsoleActivity extends Activity implements BridgeDisconnectedListe private static final int CLICK_TIME = 400; private static final float MAX_CLICK_DISTANCE = 25f; private static final int KEYBOARD_DISPLAY_TIME = 3000; + private static final int KEYBOARD_REPEAT_INITIAL = 500; + private static final int KEYBOARD_REPEAT = 100; protected ViewPager pager = null; protected TabLayout tabs = null; @@ -215,6 +218,59 @@ public class ConsoleActivity extends Activity implements BridgeDisconnectedListe } }; + protected Handler keyRepeatHandler = new Handler(); + + + /** + * Handle repeatable virtual keys and touch events + */ + public class KeyRepeater implements Runnable, OnTouchListener { + private View mView; + private Handler mHandler; + private boolean mDown; + + public KeyRepeater(Handler handler, View view) { + mView = view; + mHandler = handler; + mView.setOnTouchListener(this); + mDown = false; + } + + @Override + public void run() { + mDown = true; + mHandler.removeCallbacks(this); + mHandler.postDelayed(this, KEYBOARD_REPEAT); + onEmulatedKeyClicked(mView); + } + + @Override + public boolean onTouch(View v, MotionEvent event) { + Log.d(TAG, "KeyRepeater.onTouch(" + v.getId() + ", " + + event.getAction() + ", " + + event.getActionIndex() + ", " + + event.getActionMasked() + ");"); + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + mDown = false; + mHandler.postDelayed(this, KEYBOARD_REPEAT_INITIAL); + return (true); + + case MotionEvent.ACTION_CANCEL: + keyRepeatHandler.removeCallbacks(this); + return (true); + + case MotionEvent.ACTION_UP: + keyRepeatHandler.removeCallbacks(this); + if (!mDown) { + onEmulatedKeyClicked(mView); + } + return (true); + } + return false; + } + } + private void onEmulatedKeyClicked(View v) { TerminalView terminal = adapter.getCurrentTerminalView(); if (terminal == null) return; @@ -222,7 +278,7 @@ public class ConsoleActivity extends Activity implements BridgeDisconnectedListe TerminalKeyListener handler = terminal.bridge.getKeyHandler(); boolean hideKeys = false; - switch (v.getId()) { + switch (v.getId()) { case R.id.button_ctrl: handler.metaPress(TerminalKeyListener.OUR_CTRL_ON, true); hideKeys = true; @@ -499,10 +555,12 @@ public class ConsoleActivity extends Activity implements BridgeDisconnectedListe findViewById(R.id.button_ctrl).setOnClickListener(emulatedKeysListener); findViewById(R.id.button_esc).setOnClickListener(emulatedKeysListener); findViewById(R.id.button_tab).setOnClickListener(emulatedKeysListener); - findViewById(R.id.button_up).setOnClickListener(emulatedKeysListener); - findViewById(R.id.button_down).setOnClickListener(emulatedKeysListener); - findViewById(R.id.button_left).setOnClickListener(emulatedKeysListener); - findViewById(R.id.button_right).setOnClickListener(emulatedKeysListener); + + new KeyRepeater(keyRepeatHandler, findViewById(R.id.button_up)); + new KeyRepeater(keyRepeatHandler, findViewById(R.id.button_down)); + new KeyRepeater(keyRepeatHandler, findViewById(R.id.button_left)); + new KeyRepeater(keyRepeatHandler, findViewById(R.id.button_right)); + findViewById(R.id.button_home).setOnClickListener(emulatedKeysListener); findViewById(R.id.button_end).setOnClickListener(emulatedKeysListener); findViewById(R.id.button_pgup).setOnClickListener(emulatedKeysListener); @@ -520,6 +578,7 @@ public class ConsoleActivity extends Activity implements BridgeDisconnectedListe findViewById(R.id.button_f11).setOnClickListener(emulatedKeysListener); findViewById(R.id.button_f12).setOnClickListener(emulatedKeysListener); + actionBar = ActionBarWrapper.getActionBar(this); actionBar.setDisplayHomeAsUpEnabled(true); if (titleBarHide) { @@ -534,6 +593,25 @@ public class ConsoleActivity extends Activity implements BridgeDisconnectedListe } }); + // Show virtual keyboard and scroll back and forth + final HorizontalScrollView keyboardScroll = (HorizontalScrollView) findViewById(R.id.keyboard_hscroll); + showEmulatedKeys(); + keyboardScroll.postDelayed(new Runnable() { + @Override + public void run() { + final int xscroll = keyboardScroll.getMaxScrollAmount(); + Log.d(TAG, "smoothScrollBy(1)"); + keyboardScroll.smoothScrollBy(xscroll, 0); + keyboardScroll.postDelayed(new Runnable() { + @Override + public void run() { + Log.d(TAG, "smoothScrollBy(2)"); + keyboardScroll.smoothScrollBy(-xscroll, 0); + } + }, 1000); + } + }, 1000); + tabs = (TabLayout) findViewById(R.id.tabs); if (tabs != null) tabs.setupWithViewPager(pager); @@ -855,26 +933,26 @@ public class ConsoleActivity extends Activity implements BridgeDisconnectedListe final View resizeView = inflater.inflate(R.layout.dia_resize, null, false); new AlertDialog.Builder(ConsoleActivity.this) - .setView(resizeView) - .setPositiveButton(R.string.button_resize, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - int width, height; - try { - width = Integer.parseInt(((EditText) resizeView - .findViewById(R.id.width)) - .getText().toString()); - height = Integer.parseInt(((EditText) resizeView - .findViewById(R.id.height)) - .getText().toString()); - } catch (NumberFormatException nfe) { - // TODO change this to a real dialog where we can - // make the input boxes turn red to indicate an error. - return; + .setView(resizeView) + .setPositiveButton(R.string.button_resize, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + int width, height; + try { + width = Integer.parseInt(((EditText) resizeView + .findViewById(R.id.width)) + .getText().toString()); + height = Integer.parseInt(((EditText) resizeView + .findViewById(R.id.height)) + .getText().toString()); + } catch (NumberFormatException nfe) { + // TODO change this to a real dialog where we can + // make the input boxes turn red to indicate an error. + return; + } + + terminalView.forceSize(width, height); } - - terminalView.forceSize(width, height); - } - }).setNegativeButton(android.R.string.cancel, null).create().show(); + }).setNegativeButton(android.R.string.cancel, null).create().show(); return true; } @@ -919,13 +997,13 @@ public class ConsoleActivity extends Activity implements BridgeDisconnectedListe @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { - case android.R.id.home: - Intent intent = new Intent(this, HostListActivity.class); - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); - startActivity(intent); - return true; - default: - return super.onOptionsItemSelected(item); + case android.R.id.home: + Intent intent = new Intent(this, HostListActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + return true; + default: + return super.onOptionsItemSelected(item); } } -- cgit v1.2.3 From e8786cac42d92f0efa32a84417b4470e79a96bb9 Mon Sep 17 00:00:00 2001 From: alescdb Date: Sat, 22 Aug 2015 22:19:50 +0200 Subject: Scroll hint to the end (F12 key) Only show scroll hint if hard keyboard is not detected Conditional Log.d() --- .../main/java/org/connectbot/ConsoleActivity.java | 50 +++++++++++++--------- 1 file changed, 29 insertions(+), 21 deletions(-) (limited to 'app/src/main/java/org/connectbot/ConsoleActivity.java') diff --git a/app/src/main/java/org/connectbot/ConsoleActivity.java b/app/src/main/java/org/connectbot/ConsoleActivity.java index ef47794..31ad68c 100644 --- a/app/src/main/java/org/connectbot/ConsoleActivity.java +++ b/app/src/main/java/org/connectbot/ConsoleActivity.java @@ -246,10 +246,12 @@ public class ConsoleActivity extends Activity implements BridgeDisconnectedListe @Override public boolean onTouch(View v, MotionEvent event) { - Log.d(TAG, "KeyRepeater.onTouch(" + v.getId() + ", " + - event.getAction() + ", " + - event.getActionIndex() + ", " + - event.getActionMasked() + ");"); + if (BuildConfig.DEBUG) { + Log.d(TAG, "KeyRepeater.onTouch(" + v.getId() + ", " + + event.getAction() + ", " + + event.getActionIndex() + ", " + + event.getActionMasked() + ");"); + } switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mDown = false; @@ -593,24 +595,30 @@ public class ConsoleActivity extends Activity implements BridgeDisconnectedListe } }); - // Show virtual keyboard and scroll back and forth - final HorizontalScrollView keyboardScroll = (HorizontalScrollView) findViewById(R.id.keyboard_hscroll); - showEmulatedKeys(); - keyboardScroll.postDelayed(new Runnable() { - @Override - public void run() { - final int xscroll = keyboardScroll.getMaxScrollAmount(); - Log.d(TAG, "smoothScrollBy(1)"); - keyboardScroll.smoothScrollBy(xscroll, 0); - keyboardScroll.postDelayed(new Runnable() { - @Override - public void run() { - Log.d(TAG, "smoothScrollBy(2)"); - keyboardScroll.smoothScrollBy(-xscroll, 0); + if(!hardKeyboard) { + // Show virtual keyboard and scroll back and forth + final HorizontalScrollView keyboardScroll = (HorizontalScrollView) findViewById(R.id.keyboard_hscroll); + showEmulatedKeys(); + keyboardScroll.postDelayed(new Runnable() { + @Override + public void run() { + final int xscroll = findViewById(R.id.button_f12).getRight(); + if (BuildConfig.DEBUG) { + Log.d(TAG, "smoothScrollBy(toEnd[" + xscroll + "])"); } - }, 1000); - } - }, 1000); + keyboardScroll.smoothScrollBy(xscroll, 0); + keyboardScroll.postDelayed(new Runnable() { + @Override + public void run() { + if (BuildConfig.DEBUG) { + Log.d(TAG, "smoothScrollBy(toStart[" + (-xscroll) + "])"); + } + keyboardScroll.smoothScrollBy(-xscroll, 0); + } + }, 1000); + } + }, 1000); + } tabs = (TabLayout) findViewById(R.id.tabs); if (tabs != null) -- cgit v1.2.3 From 5f52f3ec4ce648e7afbcf5156ffa45a985956e0d Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Sun, 23 Aug 2015 22:38:06 -0700 Subject: Fix checkstyle violation --- app/src/main/java/org/connectbot/ConsoleActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/src/main/java/org/connectbot/ConsoleActivity.java') diff --git a/app/src/main/java/org/connectbot/ConsoleActivity.java b/app/src/main/java/org/connectbot/ConsoleActivity.java index 2076e1a..9ac0c95 100644 --- a/app/src/main/java/org/connectbot/ConsoleActivity.java +++ b/app/src/main/java/org/connectbot/ConsoleActivity.java @@ -596,7 +596,7 @@ public class ConsoleActivity extends AppCompatActivity implements BridgeDisconne } }); - if(!hardKeyboard) { + if (!hardKeyboard) { // Show virtual keyboard and scroll back and forth final HorizontalScrollView keyboardScroll = (HorizontalScrollView) findViewById(R.id.keyboard_hscroll); showEmulatedKeys(); -- cgit v1.2.3