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
17928e054931d357326613c78e62f4d850b7c442ffJeff Brown#ifndef _UI_INPUT_APPLICATION_H
18928e054931d357326613c78e62f4d850b7c442ffJeff Brown#define _UI_INPUT_APPLICATION_H
19928e054931d357326613c78e62f4d850b7c442ffJeff Brown
20b93a03f841d93498bfea6cc92a22faa34bce1337Mathias Agopian#include <androidfw/Input.h>
21928e054931d357326613c78e62f4d850b7c442ffJeff Brown
22928e054931d357326613c78e62f4d850b7c442ffJeff Brown#include <utils/RefBase.h>
23928e054931d357326613c78e62f4d850b7c442ffJeff Brown#include <utils/Timers.h>
24928e054931d357326613c78e62f4d850b7c442ffJeff Brown#include <utils/String8.h>
25928e054931d357326613c78e62f4d850b7c442ffJeff Brown
26928e054931d357326613c78e62f4d850b7c442ffJeff Brownnamespace android {
27928e054931d357326613c78e62f4d850b7c442ffJeff Brown
28928e054931d357326613c78e62f4d850b7c442ffJeff Brown/*
299302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown * Describes the properties of an application that can receive input.
30cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown */
31cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brownstruct InputApplicationInfo {
32cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown    String8 name;
33cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown    nsecs_t dispatchingTimeout;
34cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown};
35cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown
36cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown
37cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown/*
38cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown * Handle for an application that can receive input.
399302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown *
409302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown * Used by the native input dispatcher as a handle for the window manager objects
41928e054931d357326613c78e62f4d850b7c442ffJeff Brown * that describe an application.
42928e054931d357326613c78e62f4d850b7c442ffJeff Brown */
43928e054931d357326613c78e62f4d850b7c442ffJeff Brownclass InputApplicationHandle : public RefBase {
449302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brownpublic:
45cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown    inline const InputApplicationInfo* getInfo() const {
46cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown        return mInfo;
47cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown    }
48cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown
49cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown    inline String8 getName() const {
50cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown        return mInfo ? mInfo->name : String8("<invalid>");
51cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown    }
52cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown
53cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown    inline nsecs_t getDispatchingTimeout(nsecs_t defaultValue) const {
54cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown        return mInfo ? mInfo->dispatchingTimeout : defaultValue;
55cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown    }
569302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
579302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    /**
589302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown     * Requests that the state of this object be updated to reflect
599302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown     * the most current available information about the application.
609302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown     *
619302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown     * This method should only be called from within the input dispatcher's
629302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown     * critical section.
639302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown     *
649302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown     * Returns true on success, or false if the handle is no longer valid.
659302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown     */
66cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown    virtual bool updateInfo() = 0;
67cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown
68cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown    /**
69cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown     * Releases the storage used by the associated information when it is
70cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown     * no longer needed.
71cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown     */
72cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown    void releaseInfo();
739302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
74928e054931d357326613c78e62f4d850b7c442ffJeff Brownprotected:
75cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown    InputApplicationHandle();
76cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown    virtual ~InputApplicationHandle();
77cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown
78cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown    InputApplicationInfo* mInfo;
79928e054931d357326613c78e62f4d850b7c442ffJeff Brown};
80928e054931d357326613c78e62f4d850b7c442ffJeff Brown
81928e054931d357326613c78e62f4d850b7c442ffJeff Brown} // namespace android
82928e054931d357326613c78e62f4d850b7c442ffJeff Brown
83928e054931d357326613c78e62f4d850b7c442ffJeff Brown#endif // _UI_INPUT_APPLICATION_H
84