summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/res/layout-xlarge/status_bar.xml12
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java28
2 files changed, 40 insertions, 0 deletions
diff --git a/packages/SystemUI/res/layout-xlarge/status_bar.xml b/packages/SystemUI/res/layout-xlarge/status_bar.xml
index f074e98..4ca8084 100644
--- a/packages/SystemUI/res/layout-xlarge/status_bar.xml
+++ b/packages/SystemUI/res/layout-xlarge/status_bar.xml
@@ -264,5 +264,17 @@
android:visibility="gone"
/>
</RelativeLayout>
+
+ <!-- fake space bar zone -->
+ <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/fake_space_bar"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:paddingLeft="8dip"
+ android:paddingRight="8dip"
+ android:layout_toRightOf="@+id/navigationArea"
+ android:layout_toLeftOf="@+id/notificationArea"
+ android:visibility="gone"
+ systemui:keyCode="62"
+ />
</RelativeLayout>
</com.android.systemui.statusbar.tablet.TabletStatusBarView>
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
index f561d04..90cf3dc 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
@@ -40,11 +40,14 @@ import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.RemoteException;
+import android.os.ServiceManager;
import android.text.TextUtils;
import android.util.Slog;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.Gravity;
+import android.view.IWindowManager;
+import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.VelocityTracker;
@@ -84,6 +87,9 @@ public class TabletStatusBar extends StatusBar {
public static final int MSG_SHOW_SHADOWS = 1031;
public static final int MSG_RESTORE_SHADOWS = 1032;
+ // Fitts' Law assistance for LatinIME; TODO: replace with a more general approach
+ private static final boolean FAKE_SPACE_BAR = true;
+
private static final int MAX_IMAGE_LEVEL = 10000;
private static final boolean USE_2D_RECENTS = true;
@@ -93,6 +99,8 @@ public class TabletStatusBar extends StatusBar {
H mHandler = new H();
+ IWindowManager mWindowManager;
+
// tracking all current notifications
private NotificationData mNotns = new NotificationData();
@@ -134,6 +142,9 @@ public class TabletStatusBar extends StatusBar {
TabletTicker mTicker;
+ View mFakeSpaceBar;
+ KeyEvent mSpaceBarKeyEvent = null;
+
// for disabling the status bar
int mDisabled = 0;
@@ -252,6 +263,9 @@ public class TabletStatusBar extends StatusBar {
protected View makeStatusBarView() {
final Context context = mContext;
final Resources res = context.getResources();
+
+ mWindowManager = IWindowManager.Stub.asInterface(
+ ServiceManager.getService(Context.WINDOW_SERVICE));
mIconSize = res.getDimensionPixelSize(com.android.internal.R.dimen.status_bar_icon_size);
@@ -304,6 +318,9 @@ public class TabletStatusBar extends StatusBar {
// The bar contents buttons
mInputMethodSwitchButton = (InputMethodButton) sb.findViewById(R.id.imeSwitchButton);
+ // for redirecting errant bar taps to the IME
+ mFakeSpaceBar = sb.findViewById(R.id.fake_space_bar);
+
// "shadows" of the status bar features, for lights-out mode
mBackShadow = sb.findViewById(R.id.back_shadow);
mHomeShadow = sb.findViewById(R.id.home_shadow);
@@ -698,6 +715,9 @@ public class TabletStatusBar extends StatusBar {
mInputMethodSwitchButton.setIMEButtonVisible(token, visible);
mBackButton.setImageResource(
visible ? R.drawable.ic_sysbar_back_ime : R.drawable.ic_sysbar_back);
+ if (FAKE_SPACE_BAR) {
+ mFakeSpaceBar.setVisibility(visible ? View.VISIBLE : View.GONE);
+ }
}
private boolean isImmersive() {
@@ -739,6 +759,14 @@ public class TabletStatusBar extends StatusBar {
}
}
+ private void sendKey(KeyEvent key) {
+ try {
+ if (DEBUG) Slog.d(TAG, "injecting key event: " + key);
+ mWindowManager.injectInputEventNoWait(key);
+ } catch (RemoteException ex) {
+ }
+ }
+
private View.OnClickListener mOnClickListener = new View.OnClickListener() {
public void onClick(View v) {
if (v == mNotificationTrigger) {