1 /* 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 20 #include <string> 21 22 #include <android/InputApplicationInfo.h> 23 24 #include <binder/IBinder.h> 25 #include <binder/Parcel.h> 26 #include <binder/Parcelable.h> 27 28 #include <input/Input.h> 29 #include <utils/RefBase.h> 30 #include <utils/Timers.h> 31 32 namespace android { 33 /* 34 * Handle for an application that can receive input. 35 * 36 * Used by the native input dispatcher as a handle for the window manager objects 37 * that describe an application. 38 */ 39 class InputApplicationHandle { 40 public: getInfo()41 inline const InputApplicationInfo* getInfo() const { 42 return &mInfo; 43 } 44 getName()45 inline std::string getName() const { 46 return !mInfo.name.empty() ? mInfo.name : "<invalid>"; 47 } 48 getDispatchingTimeout(std::chrono::nanoseconds defaultValue)49 inline std::chrono::nanoseconds getDispatchingTimeout( 50 std::chrono::nanoseconds defaultValue) const { 51 return mInfo.token ? std::chrono::milliseconds(mInfo.dispatchingTimeoutMillis) 52 : defaultValue; 53 } 54 getApplicationToken()55 inline sp<IBinder> getApplicationToken() const { 56 return mInfo.token; 57 } 58 59 bool operator==(const InputApplicationHandle& other) const { 60 return getName() == other.getName() && getApplicationToken() == other.getApplicationToken(); 61 } 62 63 bool operator!=(const InputApplicationHandle& other) const { return !(*this == other); } 64 65 /** 66 * Requests that the state of this object be updated to reflect 67 * the most current available information about the application. 68 * 69 * This method should only be called from within the input dispatcher's 70 * critical section. 71 * 72 * Returns true on success, or false if the handle is no longer valid. 73 */ 74 virtual bool updateInfo() = 0; 75 76 protected: 77 InputApplicationHandle() = default; 78 virtual ~InputApplicationHandle() = default; 79 80 InputApplicationInfo mInfo; 81 }; 82 83 } // namespace android 84 85 #endif // _UI_INPUT_APPLICATION_H 86