1d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright/*
2d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright * Copyright (C) 2011 The Android Open Source Project
3d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright *
4d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright * Licensed under the Apache License, Version 2.0 (the "License");
5d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright * you may not use this file except in compliance with the License.
6d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright * You may obtain a copy of the License at
7d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright *
8d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright *      http://www.apache.org/licenses/LICENSE-2.0
9d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright *
10d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright * Unless required by applicable law or agreed to in writing, software
11d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright * distributed under the License is distributed on an "AS IS" BASIS,
12d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright * See the License for the specific language governing permissions and
14d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright * limitations under the License.
15d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright */
16d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
17d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright#define LOG_TAG "InputWindow"
18d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright#define LOG_NDEBUG 0
19d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
20d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright#include "InputWindow.h"
21d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
22d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright#include <cutils/log.h>
23d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
24d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright#include <ui/Rect.h>
25d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright#include <ui/Region.h>
26d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
27d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wrightnamespace android {
28d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
29d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright// --- InputWindowInfo ---
30d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wrightvoid InputWindowInfo::addTouchableRegion(const Rect& region) {
31d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    touchableRegion.orSelf(region);
32d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright}
33d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
34d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wrightbool InputWindowInfo::touchableRegionContainsPoint(int32_t x, int32_t y) const {
35d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    return touchableRegion.contains(x,y);
36d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright}
37d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
38d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wrightbool InputWindowInfo::frameContainsPoint(int32_t x, int32_t y) const {
39d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    return x >= frameLeft && x <= frameRight
40d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright            && y >= frameTop && y <= frameBottom;
41d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright}
42d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
43d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wrightbool InputWindowInfo::isTrustedOverlay() const {
44d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    return layoutParamsType == TYPE_INPUT_METHOD
45d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright            || layoutParamsType == TYPE_INPUT_METHOD_DIALOG
4651eb29fa9a2ffe9c5adb9ea25bfbd51992ff16a4Conley Owens            || layoutParamsType == TYPE_MAGNIFICATION_OVERLAY
47d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright            || layoutParamsType == TYPE_SECURE_SYSTEM_OVERLAY;
48d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright}
49d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
50d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wrightbool InputWindowInfo::supportsSplitTouch() const {
51d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    return layoutParamsFlags & FLAG_SPLIT_TOUCH;
52d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright}
53d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
54d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
55d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright// --- InputWindowHandle ---
56d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
57d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael WrightInputWindowHandle::InputWindowHandle(const sp<InputApplicationHandle>& inputApplicationHandle) :
58d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    inputApplicationHandle(inputApplicationHandle), mInfo(NULL) {
59d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright}
60d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
61d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael WrightInputWindowHandle::~InputWindowHandle() {
62d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    delete mInfo;
63d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright}
64d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
65d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wrightvoid InputWindowHandle::releaseInfo() {
66d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    if (mInfo) {
67d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright        delete mInfo;
68d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright        mInfo = NULL;
69d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    }
70d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright}
71d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
72d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright} // namespace android
73