blob: b6b935329bcad6884e5489f704b52b788eb02af1 [file] [log] [blame]
Michael Wrightd02c5b62014-02-10 15:10:22 -08001/*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef _UI_INPUT_APPLICATION_H
18#define _UI_INPUT_APPLICATION_H
19
Siarhei Vishniakouec8f7252018-07-06 11:19:32 +010020#include <string>
21
Robert Carr740167f2018-10-11 19:03:41 -070022#include <binder/IBinder.h>
23#include <binder/Parcel.h>
Chris Ye0783e992020-06-02 21:34:49 -070024#include <binder/Parcelable.h>
Robert Carr740167f2018-10-11 19:03:41 -070025
Michael Wrightd02c5b62014-02-10 15:10:22 -080026#include <input/Input.h>
Michael Wrightd02c5b62014-02-10 15:10:22 -080027#include <utils/RefBase.h>
28#include <utils/Timers.h>
Michael Wrightd02c5b62014-02-10 15:10:22 -080029
30namespace android {
31
32/*
33 * Describes the properties of an application that can receive input.
34 */
Chris Ye0783e992020-06-02 21:34:49 -070035struct InputApplicationInfo : public Parcelable {
Robert Carr740167f2018-10-11 19:03:41 -070036 sp<IBinder> token;
Siarhei Vishniakouf93fcf42017-11-22 16:00:14 -080037 std::string name;
Siarhei Vishniakouc1ae5562020-06-30 14:22:57 -050038 std::chrono::nanoseconds dispatchingTimeout;
Robert Carr740167f2018-10-11 19:03:41 -070039
Chris Ye0783e992020-06-02 21:34:49 -070040 InputApplicationInfo() = default;
Michael Wrightd02c5b62014-02-10 15:10:22 -080041
Chris Ye0783e992020-06-02 21:34:49 -070042 status_t readFromParcel(const android::Parcel* parcel) override;
43
44 status_t writeToParcel(android::Parcel* parcel) const override;
45};
Michael Wrightd02c5b62014-02-10 15:10:22 -080046
47/*
48 * Handle for an application that can receive input.
49 *
50 * Used by the native input dispatcher as a handle for the window manager objects
51 * that describe an application.
52 */
53class InputApplicationHandle : public RefBase {
54public:
55 inline const InputApplicationInfo* getInfo() const {
Arthur Hung7a0c39a2019-03-20 16:52:24 +080056 return &mInfo;
Michael Wrightd02c5b62014-02-10 15:10:22 -080057 }
58
Siarhei Vishniakouf93fcf42017-11-22 16:00:14 -080059 inline std::string getName() const {
Arthur Hung7a0c39a2019-03-20 16:52:24 +080060 return !mInfo.name.empty() ? mInfo.name : "<invalid>";
Michael Wrightd02c5b62014-02-10 15:10:22 -080061 }
62
Siarhei Vishniakou4cb50ca2020-05-26 21:43:02 -070063 inline std::chrono::nanoseconds getDispatchingTimeout(
64 std::chrono::nanoseconds defaultValue) const {
65 return mInfo.token ? std::chrono::nanoseconds(mInfo.dispatchingTimeout) : defaultValue;
66 }
67
Robert Carr740167f2018-10-11 19:03:41 -070068 inline sp<IBinder> getApplicationToken() const {
Arthur Hung7a0c39a2019-03-20 16:52:24 +080069 return mInfo.token;
Robert Carr740167f2018-10-11 19:03:41 -070070 }
71
Michael Wrightd02c5b62014-02-10 15:10:22 -080072 /**
73 * Requests that the state of this object be updated to reflect
74 * the most current available information about the application.
75 *
76 * This method should only be called from within the input dispatcher's
77 * critical section.
78 *
79 * Returns true on success, or false if the handle is no longer valid.
80 */
81 virtual bool updateInfo() = 0;
Chris Ye0783e992020-06-02 21:34:49 -070082
Michael Wrightd02c5b62014-02-10 15:10:22 -080083protected:
84 InputApplicationHandle();
85 virtual ~InputApplicationHandle();
86
Arthur Hung7a0c39a2019-03-20 16:52:24 +080087 InputApplicationInfo mInfo;
Michael Wrightd02c5b62014-02-10 15:10:22 -080088};
89
90} // namespace android
91
92#endif // _UI_INPUT_APPLICATION_H