diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2008-12-17 18:05:43 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2008-12-17 18:05:43 -0800 |
commit | f013e1afd1e68af5e3b868c26a653bbfb39538f8 (patch) | |
tree | 7ad6c8fd9c7b55f4b4017171dec1cb760bbd26bf /core/java/android/inputmethodservice/SoftInputWindow.java | |
parent | e70cfafe580c6f2994c4827cd8a534aabf3eb05c (diff) | |
download | frameworks_base-f013e1afd1e68af5e3b868c26a653bbfb39538f8.zip frameworks_base-f013e1afd1e68af5e3b868c26a653bbfb39538f8.tar.gz frameworks_base-f013e1afd1e68af5e3b868c26a653bbfb39538f8.tar.bz2 |
Code drop from //branches/cupcake/...@124589
Diffstat (limited to 'core/java/android/inputmethodservice/SoftInputWindow.java')
-rw-r--r-- | core/java/android/inputmethodservice/SoftInputWindow.java | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/core/java/android/inputmethodservice/SoftInputWindow.java b/core/java/android/inputmethodservice/SoftInputWindow.java new file mode 100644 index 0000000..9ff1665 --- /dev/null +++ b/core/java/android/inputmethodservice/SoftInputWindow.java @@ -0,0 +1,151 @@ +/* + * Copyright (C) 2007-2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package android.inputmethodservice; + +import android.app.Dialog; +import android.content.Context; +import android.os.IBinder; +import android.view.Gravity; +import android.view.WindowManager; + +/** + * A SoftInputWindow is a Dialog that is intended to be used for a top-level input + * method window. It will be displayed along the edge of the screen, moving + * the application user interface away from it so that the focused item is + * always visible. + */ +class SoftInputWindow extends Dialog { + + /** + * Create a DockWindow that uses the default style. + * + * @param context The Context the DockWindow is to run it. In particular, it + * uses the window manager and theme in this context to present its + * UI. + */ + public SoftInputWindow(Context context) { + super(context, com.android.internal.R.style.Theme_InputMethod); + initDockWindow(); + } + + public void setToken(IBinder token) { + WindowManager.LayoutParams lp = getWindow().getAttributes(); + lp.token = token; + getWindow().setAttributes(lp); + } + + /** + * Create a DockWindow that uses a custom style. + * + * @param context The Context in which the DockWindow should run. In + * particular, it uses the window manager and theme from this context + * to present its UI. + * @param theme A style resource describing the theme to use for the window. + * See <a href="{@docRoot}reference/available-resources.html#stylesandthemes">Style + * and Theme Resources</a> for more information about defining and + * using styles. This theme is applied on top of the current theme in + * <var>context</var>. If 0, the default dialog theme will be used. + */ + public SoftInputWindow(Context context, int theme) { + super(context, theme); + initDockWindow(); + } + + /** + * Get the size of the DockWindow. + * + * @return If the DockWindow sticks to the top or bottom of the screen, the + * return value is the height of the DockWindow, and its width is + * equal to the width of the screen; If the DockWindow sticks to the + * left or right of the screen, the return value is the width of the + * DockWindow, and its height is equal to the height of the screen. + */ + public int getSize() { + WindowManager.LayoutParams lp = getWindow().getAttributes(); + + if (lp.gravity == Gravity.TOP || lp.gravity == Gravity.BOTTOM) { + return lp.height; + } else { + return lp.width; + } + } + + /** + * Set the size of the DockWindow. + * + * @param size If the DockWindow sticks to the top or bottom of the screen, + * <var>size</var> is the height of the DockWindow, and its width is + * equal to the width of the screen; If the DockWindow sticks to the + * left or right of the screen, <var>size</var> is the width of the + * DockWindow, and its height is equal to the height of the screen. + */ + public void setSize(int size) { + WindowManager.LayoutParams lp = getWindow().getAttributes(); + + if (lp.gravity == Gravity.TOP || lp.gravity == Gravity.BOTTOM) { + lp.width = -1; + lp.height = size; + } else { + lp.width = size; + lp.height = -1; + } + getWindow().setAttributes(lp); + } + + /** + * Set which boundary of the screen the DockWindow sticks to. + * + * @param gravity The boundary of the screen to stick. See {#link + * android.view.Gravity.LEFT}, {#link android.view.Gravity.TOP}, + * {#link android.view.Gravity.BOTTOM}, {#link + * android.view.Gravity.RIGHT}. + */ + public void setGravity(int gravity) { + WindowManager.LayoutParams lp = getWindow().getAttributes(); + + boolean oldIsVertical = (lp.gravity == Gravity.TOP || lp.gravity == Gravity.BOTTOM); + + lp.gravity = gravity; + + boolean newIsVertical = (lp.gravity == Gravity.TOP || lp.gravity == Gravity.BOTTOM); + + if (oldIsVertical != newIsVertical) { + int tmp = lp.width; + lp.width = lp.height; + lp.height = tmp; + getWindow().setAttributes(lp); + } + } + + private void initDockWindow() { + WindowManager.LayoutParams lp = getWindow().getAttributes(); + + lp.type = WindowManager.LayoutParams.TYPE_INPUT_METHOD; + lp.setTitle("InputMethod"); + + lp.gravity = Gravity.BOTTOM; + lp.width = -1; + + getWindow().setAttributes(lp); + getWindow().setFlags( + WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | + WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, + WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | + WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | + WindowManager.LayoutParams.FLAG_DIM_BEHIND); + } +} |