| /* |
| * Copyright (C) 2013 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #define LOG_TAG "InputFlinger" |
| |
| #include <stdint.h> |
| #include <sys/types.h> |
| #include <unistd.h> |
| |
| #include <binder/IPCThreadState.h> |
| #include <binder/PermissionCache.h> |
| #include <hardware/input.h> |
| #include <log/log.h> |
| #include <private/android_filesystem_config.h> |
| |
| #include "InputFlinger.h" |
| #include "InputDriver.h" |
| |
| namespace android { |
| |
| const String16 sAccessInputFlingerPermission("android.permission.ACCESS_INPUT_FLINGER"); |
| const String16 sDumpPermission("android.permission.DUMP"); |
| |
| |
| InputFlinger::InputFlinger() : |
| BnInputFlinger() { |
| ALOGI("InputFlinger is starting"); |
| mHost = new InputHost(); |
| mHost->registerInputDriver(new InputDriver(INPUT_INSTANCE_EVDEV)); |
| } |
| |
| InputFlinger::~InputFlinger() { |
| } |
| |
| status_t InputFlinger::dump(int fd, const Vector<String16>& args) { |
| String8 result; |
| const IPCThreadState* ipc = IPCThreadState::self(); |
| const int pid = ipc->getCallingPid(); |
| const int uid = ipc->getCallingUid(); |
| if ((uid != AID_SHELL) |
| && !PermissionCache::checkPermission(sDumpPermission, pid, uid)) { |
| result.appendFormat("Permission Denial: " |
| "can't dump SurfaceFlinger from pid=%d, uid=%d\n", pid, uid); |
| } else { |
| dumpInternal(result); |
| } |
| write(fd, result.string(), result.size()); |
| return OK; |
| } |
| |
| void InputFlinger::dumpInternal(String8& result) { |
| result.append("INPUT FLINGER (dumpsys inputflinger)\n"); |
| mHost->dump(result); |
| } |
| |
| }; // namespace android |