InputTracer: Use PackageManagerNative to get package UID
... instead of plumbing the call through InputManagerService via JNI.
Bug: 330360505
Test: manual
Test: atest inputflinger_tests
Change-Id: Ie763733d8dba442afcaea7560e6d997c06ca3877
diff --git a/services/inputflinger/tests/FakeInputDispatcherPolicy.cpp b/services/inputflinger/tests/FakeInputDispatcherPolicy.cpp
index 1360cd0..36491ab 100644
--- a/services/inputflinger/tests/FakeInputDispatcherPolicy.cpp
+++ b/services/inputflinger/tests/FakeInputDispatcherPolicy.cpp
@@ -466,15 +466,4 @@
mFilteredEvent = nullptr;
}
-gui::Uid FakeInputDispatcherPolicy::getPackageUid(std::string pkg) {
- std::scoped_lock lock(mLock);
- auto it = mPackageUidMap.find(pkg);
- return it != mPackageUidMap.end() ? it->second : gui::Uid::INVALID;
-}
-
-void FakeInputDispatcherPolicy::addPackageUidMapping(std::string package, gui::Uid uid) {
- std::scoped_lock lock(mLock);
- mPackageUidMap.insert_or_assign(std::move(package), uid);
-}
-
} // namespace android
diff --git a/services/inputflinger/tests/FakeInputDispatcherPolicy.h b/services/inputflinger/tests/FakeInputDispatcherPolicy.h
index 2cc018e..25d3d3c 100644
--- a/services/inputflinger/tests/FakeInputDispatcherPolicy.h
+++ b/services/inputflinger/tests/FakeInputDispatcherPolicy.h
@@ -115,7 +115,6 @@
void setUnhandledKeyHandler(std::function<std::optional<KeyEvent>(const KeyEvent&)> handler);
void assertUnhandledKeyReported(int32_t keycode);
void assertUnhandledKeyNotReported();
- void addPackageUidMapping(std::string package, gui::Uid uid);
private:
std::mutex mLock;
@@ -151,8 +150,6 @@
std::queue<int32_t> mReportedUnhandledKeycodes GUARDED_BY(mLock);
std::function<std::optional<KeyEvent>(const KeyEvent&)> mUnhandledKeyHandler GUARDED_BY(mLock);
- std::map<std::string, gui::Uid> mPackageUidMap GUARDED_BY(mLock);
-
/**
* All three ANR-related callbacks behave the same way, so we use this generic function to wait
* for a specific container to become non-empty. When the container is non-empty, return the
@@ -199,7 +196,6 @@
void notifyDropWindow(const sp<IBinder>& token, float x, float y) override;
void notifyDeviceInteraction(int32_t deviceId, nsecs_t timestamp,
const std::set<gui::Uid>& uids) override;
- gui::Uid getPackageUid(std::string) override;
void assertFilterInputEventWasCalledInternal(
const std::function<void(const InputEvent&)>& verify);
diff --git a/services/inputflinger/tests/InputTracingTest.cpp b/services/inputflinger/tests/InputTracingTest.cpp
index 23fa045..ef0eeae 100644
--- a/services/inputflinger/tests/InputTracingTest.cpp
+++ b/services/inputflinger/tests/InputTracingTest.cpp
@@ -26,6 +26,7 @@
#include <NotifyArgsBuilders.h>
#include <android-base/logging.h>
+#include <android/content/pm/IPackageManagerNative.h>
#include <gtest/gtest.h>
#include <input/Input.h>
#include <perfetto/trace/android/android_input_event.pbzero.h>
@@ -65,6 +66,26 @@
const std::string DISALLOWED_PKG_1{"disallowed.pkg.1"};
const std::string DISALLOWED_PKG_2{"disallowed.pkg.2"};
+const std::map<std::string, gui::Uid> kPackageUidMap{
+ {ALLOWED_PKG_1, ALLOWED_UID_1},
+ {ALLOWED_PKG_2, ALLOWED_UID_2},
+ {DISALLOWED_PKG_1, DISALLOWED_UID_1},
+ {DISALLOWED_PKG_2, DISALLOWED_UID_2},
+};
+
+class FakePackageManager : public content::pm::IPackageManagerNativeDefault {
+public:
+ binder::Status getPackageUid(const ::std::string& pkg, int64_t flags, int32_t userId,
+ int32_t* outUid) override {
+ auto it = kPackageUidMap.find(pkg);
+ *outUid = it != kPackageUidMap.end() ? static_cast<int32_t>(it->second.val()) : -1;
+ return binder::Status::ok();
+ }
+};
+
+const sp<testing::NiceMock<FakePackageManager>> kPackageManager =
+ sp<testing::NiceMock<FakePackageManager>>::make();
+
const std::shared_ptr<FakeApplicationHandle> APP = std::make_shared<FakeApplicationHandle>();
} // namespace
@@ -78,18 +99,11 @@
void SetUp() override {
impl::PerfettoBackend::sUseInProcessBackendForTest = true;
-
+ impl::PerfettoBackend::sPackageManagerProvider = []() { return kPackageManager; };
mFakePolicy = std::make_unique<FakeInputDispatcherPolicy>();
- mFakePolicy->addPackageUidMapping(ALLOWED_PKG_1, ALLOWED_UID_1);
- mFakePolicy->addPackageUidMapping(ALLOWED_PKG_2, ALLOWED_UID_2);
- mFakePolicy->addPackageUidMapping(DISALLOWED_PKG_1, DISALLOWED_UID_1);
- mFakePolicy->addPackageUidMapping(DISALLOWED_PKG_2, DISALLOWED_UID_2);
auto tracingBackend = std::make_unique<impl::ThreadedBackend<impl::PerfettoBackend>>(
- impl::PerfettoBackend([this](const auto& pkg) {
- return static_cast<InputDispatcherPolicyInterface&>(*mFakePolicy)
- .getPackageUid(pkg);
- }));
+ impl::PerfettoBackend());
mRequestTracerIdle = tracingBackend->getIdleWaiterForTesting();
mDispatcher = std::make_unique<InputDispatcher>(*mFakePolicy, std::move(tracingBackend));