diff options
-rw-r--r-- | libs/sensor/ISensorServer.cpp | 6 | ||||
-rw-r--r-- | libs/sensor/SensorManager.cpp | 7 | ||||
-rw-r--r-- | libs/sensor/include/sensor/ISensorServer.h | 2 | ||||
-rw-r--r-- | libs/sensor/include/sensor/SensorManager.h | 3 | ||||
-rw-r--r-- | services/sensorservice/SensorEventConnection.cpp | 9 | ||||
-rw-r--r-- | services/sensorservice/SensorEventConnection.h | 4 | ||||
-rw-r--r-- | services/sensorservice/SensorService.cpp | 4 | ||||
-rw-r--r-- | services/sensorservice/SensorService.h | 2 |
8 files changed, 22 insertions, 15 deletions
diff --git a/libs/sensor/ISensorServer.cpp b/libs/sensor/ISensorServer.cpp index a6b0aaf0b5..a6cacad374 100644 --- a/libs/sensor/ISensorServer.cpp +++ b/libs/sensor/ISensorServer.cpp @@ -91,13 +91,14 @@ public: } virtual sp<ISensorEventConnection> createSensorEventConnection(const String8& packageName, - int mode, const String16& opPackageName) + int mode, const String16& opPackageName, const String16& attributionTag) { Parcel data, reply; data.writeInterfaceToken(ISensorServer::getInterfaceDescriptor()); data.writeString8(packageName); data.writeInt32(mode); data.writeString16(opPackageName); + data.writeString16(attributionTag); remote()->transact(CREATE_SENSOR_EVENT_CONNECTION, data, &reply); return interface_cast<ISensorEventConnection>(reply.readStrongBinder()); } @@ -170,8 +171,9 @@ status_t BnSensorServer::onTransact( String8 packageName = data.readString8(); int32_t mode = data.readInt32(); const String16& opPackageName = data.readString16(); + const String16& attributionTag = data.readString16(); sp<ISensorEventConnection> connection(createSensorEventConnection(packageName, mode, - opPackageName)); + opPackageName, attributionTag)); reply->writeStrongBinder(IInterface::asBinder(connection)); return NO_ERROR; } diff --git a/libs/sensor/SensorManager.cpp b/libs/sensor/SensorManager.cpp index a4a5d135c0..62f4b4e3e2 100644 --- a/libs/sensor/SensorManager.cpp +++ b/libs/sensor/SensorManager.cpp @@ -225,13 +225,14 @@ Sensor const* SensorManager::getDefaultSensor(int type) return nullptr; } -sp<SensorEventQueue> SensorManager::createEventQueue(String8 packageName, int mode) { +sp<SensorEventQueue> SensorManager::createEventQueue( + String8 packageName, int mode, String16 attributionTag) { sp<SensorEventQueue> queue; Mutex::Autolock _l(mLock); while (assertStateLocked() == NO_ERROR) { - sp<ISensorEventConnection> connection = - mSensorServer->createSensorEventConnection(packageName, mode, mOpPackageName); + sp<ISensorEventConnection> connection = mSensorServer->createSensorEventConnection( + packageName, mode, mOpPackageName, attributionTag); if (connection == nullptr) { // SensorService just died or the app doesn't have required permissions. ALOGE("createEventQueue: connection is NULL."); diff --git a/libs/sensor/include/sensor/ISensorServer.h b/libs/sensor/include/sensor/ISensorServer.h index 402678f0fd..ce5c672da0 100644 --- a/libs/sensor/include/sensor/ISensorServer.h +++ b/libs/sensor/include/sensor/ISensorServer.h @@ -45,7 +45,7 @@ public: virtual Vector<Sensor> getDynamicSensorList(const String16& opPackageName) = 0; virtual sp<ISensorEventConnection> createSensorEventConnection(const String8& packageName, - int mode, const String16& opPackageName) = 0; + int mode, const String16& opPackageName, const String16& attributionTag) = 0; virtual int32_t isDataInjectionEnabled() = 0; virtual sp<ISensorEventConnection> createSensorDirectConnection(const String16& opPackageName, diff --git a/libs/sensor/include/sensor/SensorManager.h b/libs/sensor/include/sensor/SensorManager.h index f09c9c67b4..09ac7edf27 100644 --- a/libs/sensor/include/sensor/SensorManager.h +++ b/libs/sensor/include/sensor/SensorManager.h @@ -59,7 +59,8 @@ public: ssize_t getSensorList(Sensor const* const** list); ssize_t getDynamicSensorList(Vector<Sensor>& list); Sensor const* getDefaultSensor(int type); - sp<SensorEventQueue> createEventQueue(String8 packageName = String8(""), int mode = 0); + sp<SensorEventQueue> createEventQueue( + String8 packageName = String8(""), int mode = 0, String16 attributionTag = String16("")); bool isDataInjectionEnabled(); int createDirectChannel(size_t size, int channelType, const native_handle_t *channelData); void destroyDirectChannel(int channelNativeHandle); diff --git a/services/sensorservice/SensorEventConnection.cpp b/services/sensorservice/SensorEventConnection.cpp index a2e7f238b4..5225dd7a64 100644 --- a/services/sensorservice/SensorEventConnection.cpp +++ b/services/sensorservice/SensorEventConnection.cpp @@ -38,12 +38,12 @@ constexpr int kTargetSdkUnknown = 0; SensorService::SensorEventConnection::SensorEventConnection( const sp<SensorService>& service, uid_t uid, String8 packageName, bool isDataInjectionMode, - const String16& opPackageName) + const String16& opPackageName, const String16& attributionTag) : mService(service), mUid(uid), mWakeLockRefCount(0), mHasLooperCallbacks(false), mDead(false), mDataInjectionMode(isDataInjectionMode), mEventCache(nullptr), mCacheSize(0), mMaxCacheSize(0), mTimeOfLastEventDrop(0), mEventsDropped(0), - mPackageName(packageName), mOpPackageName(opPackageName), mTargetSdk(kTargetSdkUnknown), - mDestroyed(false) { + mPackageName(packageName), mOpPackageName(opPackageName), mAttributionTag(attributionTag), + mTargetSdk(kTargetSdkUnknown), mDestroyed(false) { mIsRateCappedBasedOnPermission = mService->isRateCappedBasedOnPermission(mOpPackageName); mUserId = multiuser_get_user_id(mUid); mChannel = new BitTube(mService->mSocketBufferSize); @@ -493,7 +493,8 @@ bool SensorService::SensorEventConnection::noteOpIfRequired(const sensors_event_ noteMsg.append(String16(mService->getSensorStringType(sensorHandle))); noteMsg.append(String16(")")); int32_t appOpMode = mService->sAppOpsManager.noteOp(iter->second, mUid, - mOpPackageName, {}, noteMsg); + mOpPackageName, mAttributionTag, + noteMsg); success = (appOpMode == AppOpsManager::MODE_ALLOWED); } } diff --git a/services/sensorservice/SensorEventConnection.h b/services/sensorservice/SensorEventConnection.h index 7bd9d47cff..4e3f120ccc 100644 --- a/services/sensorservice/SensorEventConnection.h +++ b/services/sensorservice/SensorEventConnection.h @@ -50,7 +50,8 @@ class SensorService::SensorEventConnection: public: SensorEventConnection(const sp<SensorService>& service, uid_t uid, String8 packageName, - bool isDataInjectionMode, const String16& opPackageName); + bool isDataInjectionMode, const String16& opPackageName, + const String16& attributionTag); status_t sendEvents(sensors_event_t const* buffer, size_t count, sensors_event_t* scratch, wp<const SensorEventConnection> const * mapFlushEventsToConnections = nullptr); @@ -190,6 +191,7 @@ private: int mEventsDropped; String8 mPackageName; const String16 mOpPackageName; + const String16 mAttributionTag; int mTargetSdk; #if DEBUG_CONNECTIONS int mEventsReceived, mEventsSent, mEventsSentFromCache; diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp index 89d1c42d5e..942b7ae76a 100644 --- a/services/sensorservice/SensorService.cpp +++ b/services/sensorservice/SensorService.cpp @@ -1285,7 +1285,7 @@ Vector<Sensor> SensorService::getDynamicSensorList(const String16& opPackageName } sp<ISensorEventConnection> SensorService::createSensorEventConnection(const String8& packageName, - int requestedMode, const String16& opPackageName) { + int requestedMode, const String16& opPackageName, const String16& attributionTag) { // Only 2 modes supported for a SensorEventConnection ... NORMAL and DATA_INJECTION. if (requestedMode != NORMAL && requestedMode != DATA_INJECTION) { return nullptr; @@ -1307,7 +1307,7 @@ sp<ISensorEventConnection> SensorService::createSensorEventConnection(const Stri String16 connOpPackageName = (opPackageName == String16("")) ? String16(connPackageName) : opPackageName; sp<SensorEventConnection> result(new SensorEventConnection(this, uid, connPackageName, - requestedMode == DATA_INJECTION, connOpPackageName)); + requestedMode == DATA_INJECTION, connOpPackageName, attributionTag)); if (requestedMode == DATA_INJECTION) { mConnectionHolder.addEventConnectionIfNotPresent(result); // Add the associated file descriptor to the Looper for polling whenever there is data to diff --git a/services/sensorservice/SensorService.h b/services/sensorservice/SensorService.h index 5b198d8640..9c5060a577 100644 --- a/services/sensorservice/SensorService.h +++ b/services/sensorservice/SensorService.h @@ -303,7 +303,7 @@ private: virtual Vector<Sensor> getDynamicSensorList(const String16& opPackageName); virtual sp<ISensorEventConnection> createSensorEventConnection( const String8& packageName, - int requestedMode, const String16& opPackageName); + int requestedMode, const String16& opPackageName, const String16& attributionTag); virtual int isDataInjectionEnabled(); virtual sp<ISensorEventConnection> createSensorDirectConnection(const String16& opPackageName, uint32_t size, int32_t type, int32_t format, const native_handle *resource); |