1928e054931d357326613c78e62f4d850b7c442ffJeff Brown/*
2928e054931d357326613c78e62f4d850b7c442ffJeff Brown * Copyright (C) 2011 The Android Open Source Project
3928e054931d357326613c78e62f4d850b7c442ffJeff Brown *
4928e054931d357326613c78e62f4d850b7c442ffJeff Brown * Licensed under the Apache License, Version 2.0 (the "License");
5928e054931d357326613c78e62f4d850b7c442ffJeff Brown * you may not use this file except in compliance with the License.
6928e054931d357326613c78e62f4d850b7c442ffJeff Brown * You may obtain a copy of the License at
7928e054931d357326613c78e62f4d850b7c442ffJeff Brown *
8928e054931d357326613c78e62f4d850b7c442ffJeff Brown *      http://www.apache.org/licenses/LICENSE-2.0
9928e054931d357326613c78e62f4d850b7c442ffJeff Brown *
10928e054931d357326613c78e62f4d850b7c442ffJeff Brown * Unless required by applicable law or agreed to in writing, software
11928e054931d357326613c78e62f4d850b7c442ffJeff Brown * distributed under the License is distributed on an "AS IS" BASIS,
12928e054931d357326613c78e62f4d850b7c442ffJeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13928e054931d357326613c78e62f4d850b7c442ffJeff Brown * See the License for the specific language governing permissions and
14928e054931d357326613c78e62f4d850b7c442ffJeff Brown * limitations under the License.
15928e054931d357326613c78e62f4d850b7c442ffJeff Brown */
16928e054931d357326613c78e62f4d850b7c442ffJeff Brown
174532e6158474a263d9d26c2b42240bcf7ce9b172Jeff Brownpackage com.android.server.input;
18928e054931d357326613c78e62f4d850b7c442ffJeff Brown
199302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brownimport android.graphics.Region;
209302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brownimport android.view.InputChannel;
213787de16d24001eeb452e1c711d4290a396e67c9Vladislav Kaznacheevimport android.view.IWindow;
22928e054931d357326613c78e62f4d850b7c442ffJeff Brown
23928e054931d357326613c78e62f4d850b7c442ffJeff Brown/**
24928e054931d357326613c78e62f4d850b7c442ffJeff Brown * Functions as a handle for a window that can receive input.
25928e054931d357326613c78e62f4d850b7c442ffJeff Brown * Enables the native input dispatcher to refer indirectly to the window manager's window state.
26928e054931d357326613c78e62f4d850b7c442ffJeff Brown * @hide
27928e054931d357326613c78e62f4d850b7c442ffJeff Brown */
28928e054931d357326613c78e62f4d850b7c442ffJeff Brownpublic final class InputWindowHandle {
29928e054931d357326613c78e62f4d850b7c442ffJeff Brown    // Pointer to the native input window handle.
30928e054931d357326613c78e62f4d850b7c442ffJeff Brown    // This field is lazily initialized via JNI.
31928e054931d357326613c78e62f4d850b7c442ffJeff Brown    @SuppressWarnings("unused")
327e2a9dcf1a4044ed3f81c5b736b5027231395b73Ashok Bhat    private long ptr;
33928e054931d357326613c78e62f4d850b7c442ffJeff Brown
34928e054931d357326613c78e62f4d850b7c442ffJeff Brown    // The input application handle.
35928e054931d357326613c78e62f4d850b7c442ffJeff Brown    public final InputApplicationHandle inputApplicationHandle;
36928e054931d357326613c78e62f4d850b7c442ffJeff Brown
37928e054931d357326613c78e62f4d850b7c442ffJeff Brown    // The window manager's window state.
384532e6158474a263d9d26c2b42240bcf7ce9b172Jeff Brown    public final Object windowState;
39928e054931d357326613c78e62f4d850b7c442ffJeff Brown
403787de16d24001eeb452e1c711d4290a396e67c9Vladislav Kaznacheev    // The client window.
413787de16d24001eeb452e1c711d4290a396e67c9Vladislav Kaznacheev    public final IWindow clientWindow;
423787de16d24001eeb452e1c711d4290a396e67c9Vladislav Kaznacheev
439302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    // The input channel associated with the window.
449302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    public InputChannel inputChannel;
459302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
469302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    // The window name.
479302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    public String name;
489302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
499302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    // Window layout params attributes.  (WindowManager.LayoutParams)
509302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    public int layoutParamsFlags;
519302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    public int layoutParamsType;
529302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
539302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    // Dispatching timeout.
549302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    public long dispatchingTimeoutNanos;
559302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
569302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    // Window frame.
579302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    public int frameLeft;
589302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    public int frameTop;
599302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    public int frameRight;
609302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    public int frameBottom;
619302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
629302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    // Global scaling factor applied to touch events when they are dispatched
639302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    // to the window
649302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    public float scaleFactor;
659302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
669302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    // Window touchable region.
679302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    public final Region touchableRegion = new Region();
689302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
699302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    // Window is visible.
709302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    public boolean visible;
719302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
729302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    // Window can receive keys.
739302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    public boolean canReceiveKeys;
749302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
759302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    // Window has focus.
769302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    public boolean hasFocus;
779302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
789302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    // Window has wallpaper.  (window is the current wallpaper target)
799302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    public boolean hasWallpaper;
809302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
819302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    // Input event dispatching is paused.
829302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    public boolean paused;
839302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
849302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    // Window layer.
859302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    public int layer;
869302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
879302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    // Id of process and user that owns the window.
889302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    public int ownerPid;
899302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    public int ownerUid;
909302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
919302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    // Window input features.
929302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    public int inputFeatures;
939302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
9459c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner    // Display this input is on.
9559c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner    public final int displayId;
9659c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner
97928e054931d357326613c78e62f4d850b7c442ffJeff Brown    private native void nativeDispose();
98928e054931d357326613c78e62f4d850b7c442ffJeff Brown
99928e054931d357326613c78e62f4d850b7c442ffJeff Brown    public InputWindowHandle(InputApplicationHandle inputApplicationHandle,
1003787de16d24001eeb452e1c711d4290a396e67c9Vladislav Kaznacheev            Object windowState, IWindow clientWindow, int displayId) {
101928e054931d357326613c78e62f4d850b7c442ffJeff Brown        this.inputApplicationHandle = inputApplicationHandle;
102928e054931d357326613c78e62f4d850b7c442ffJeff Brown        this.windowState = windowState;
1033787de16d24001eeb452e1c711d4290a396e67c9Vladislav Kaznacheev        this.clientWindow = clientWindow;
10459c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner        this.displayId = displayId;
105928e054931d357326613c78e62f4d850b7c442ffJeff Brown    }
106928e054931d357326613c78e62f4d850b7c442ffJeff Brown
107928e054931d357326613c78e62f4d850b7c442ffJeff Brown    @Override
108f8a2a632023ef0bafa9c7d5a343cf84d10dbd241Filip Gruszczynski    public String toString() {
109f8a2a632023ef0bafa9c7d5a343cf84d10dbd241Filip Gruszczynski        return new StringBuilder(name)
110f8a2a632023ef0bafa9c7d5a343cf84d10dbd241Filip Gruszczynski                .append(", layer=").append(layer)
111f8a2a632023ef0bafa9c7d5a343cf84d10dbd241Filip Gruszczynski                .append(", frame=[").append(frameLeft).append(",").append(frameTop).append(",")
112f8a2a632023ef0bafa9c7d5a343cf84d10dbd241Filip Gruszczynski                        .append(frameRight).append(",").append(frameBottom).append("]")
113f8a2a632023ef0bafa9c7d5a343cf84d10dbd241Filip Gruszczynski                .append(", touchableRegion=").append(touchableRegion)
11455149303d14adb242f29bf4e91e9428affff9628Filip Gruszczynski                .append(", visible=").append(visible)
115f8a2a632023ef0bafa9c7d5a343cf84d10dbd241Filip Gruszczynski                .toString();
116f8a2a632023ef0bafa9c7d5a343cf84d10dbd241Filip Gruszczynski
117f8a2a632023ef0bafa9c7d5a343cf84d10dbd241Filip Gruszczynski    }
118f8a2a632023ef0bafa9c7d5a343cf84d10dbd241Filip Gruszczynski
119f8a2a632023ef0bafa9c7d5a343cf84d10dbd241Filip Gruszczynski    @Override
120928e054931d357326613c78e62f4d850b7c442ffJeff Brown    protected void finalize() throws Throwable {
121cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown        try {
122cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown            nativeDispose();
123cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown        } finally {
124cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown            super.finalize();
125cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown        }
126928e054931d357326613c78e62f4d850b7c442ffJeff Brown    }
127928e054931d357326613c78e62f4d850b7c442ffJeff Brown}
128