Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 340882c6 authored by Arthur Ishiguro's avatar Arthur Ishiguro
Browse files

Plumb attribution tag to Sensor Service

Also updates noteOp() to use the attribution tag.

Bug: 171922082
Test: Flash, verify through logs that attribution tags are propagated
Change-Id: I4601f6f8696e8cf1517d2401f8ddfffae4a29d04
parent 8a7958d9
Loading
Loading
Loading
Loading
+4 −2
Original line number Original line Diff line number Diff line
@@ -91,13 +91,14 @@ public:
    }
    }


    virtual sp<ISensorEventConnection> createSensorEventConnection(const String8& packageName,
    virtual sp<ISensorEventConnection> createSensorEventConnection(const String8& packageName,
             int mode, const String16& opPackageName)
             int mode, const String16& opPackageName, const String16& attributionTag)
    {
    {
        Parcel data, reply;
        Parcel data, reply;
        data.writeInterfaceToken(ISensorServer::getInterfaceDescriptor());
        data.writeInterfaceToken(ISensorServer::getInterfaceDescriptor());
        data.writeString8(packageName);
        data.writeString8(packageName);
        data.writeInt32(mode);
        data.writeInt32(mode);
        data.writeString16(opPackageName);
        data.writeString16(opPackageName);
        data.writeString16(attributionTag);
        remote()->transact(CREATE_SENSOR_EVENT_CONNECTION, data, &reply);
        remote()->transact(CREATE_SENSOR_EVENT_CONNECTION, data, &reply);
        return interface_cast<ISensorEventConnection>(reply.readStrongBinder());
        return interface_cast<ISensorEventConnection>(reply.readStrongBinder());
    }
    }
@@ -170,8 +171,9 @@ status_t BnSensorServer::onTransact(
            String8 packageName = data.readString8();
            String8 packageName = data.readString8();
            int32_t mode = data.readInt32();
            int32_t mode = data.readInt32();
            const String16& opPackageName = data.readString16();
            const String16& opPackageName = data.readString16();
            const String16& attributionTag = data.readString16();
            sp<ISensorEventConnection> connection(createSensorEventConnection(packageName, mode,
            sp<ISensorEventConnection> connection(createSensorEventConnection(packageName, mode,
                    opPackageName));
                    opPackageName, attributionTag));
            reply->writeStrongBinder(IInterface::asBinder(connection));
            reply->writeStrongBinder(IInterface::asBinder(connection));
            return NO_ERROR;
            return NO_ERROR;
        }
        }
+4 −3
Original line number Original line Diff line number Diff line
@@ -225,13 +225,14 @@ Sensor const* SensorManager::getDefaultSensor(int type)
    return nullptr;
    return nullptr;
}
}


sp<SensorEventQueue> SensorManager::createEventQueue(String8 packageName, int mode) {
sp<SensorEventQueue> SensorManager::createEventQueue(
    String8 packageName, int mode, String16 attributionTag) {
    sp<SensorEventQueue> queue;
    sp<SensorEventQueue> queue;


    Mutex::Autolock _l(mLock);
    Mutex::Autolock _l(mLock);
    while (assertStateLocked() == NO_ERROR) {
    while (assertStateLocked() == NO_ERROR) {
        sp<ISensorEventConnection> connection =
        sp<ISensorEventConnection> connection = mSensorServer->createSensorEventConnection(
                mSensorServer->createSensorEventConnection(packageName, mode, mOpPackageName);
            packageName, mode, mOpPackageName, attributionTag);
        if (connection == nullptr) {
        if (connection == nullptr) {
            // SensorService just died or the app doesn't have required permissions.
            // SensorService just died or the app doesn't have required permissions.
            ALOGE("createEventQueue: connection is NULL.");
            ALOGE("createEventQueue: connection is NULL.");
+1 −1
Original line number Original line Diff line number Diff line
@@ -45,7 +45,7 @@ public:
    virtual Vector<Sensor> getDynamicSensorList(const String16& opPackageName) = 0;
    virtual Vector<Sensor> getDynamicSensorList(const String16& opPackageName) = 0;


    virtual sp<ISensorEventConnection> createSensorEventConnection(const String8& packageName,
    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 int32_t isDataInjectionEnabled() = 0;


    virtual sp<ISensorEventConnection> createSensorDirectConnection(const String16& opPackageName,
    virtual sp<ISensorEventConnection> createSensorDirectConnection(const String16& opPackageName,
+2 −1
Original line number Original line Diff line number Diff line
@@ -59,7 +59,8 @@ public:
    ssize_t getSensorList(Sensor const* const** list);
    ssize_t getSensorList(Sensor const* const** list);
    ssize_t getDynamicSensorList(Vector<Sensor>& list);
    ssize_t getDynamicSensorList(Vector<Sensor>& list);
    Sensor const* getDefaultSensor(int type);
    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();
    bool isDataInjectionEnabled();
    int createDirectChannel(size_t size, int channelType, const native_handle_t *channelData);
    int createDirectChannel(size_t size, int channelType, const native_handle_t *channelData);
    void destroyDirectChannel(int channelNativeHandle);
    void destroyDirectChannel(int channelNativeHandle);
+5 −4
Original line number Original line Diff line number Diff line
@@ -38,12 +38,12 @@ constexpr int kTargetSdkUnknown = 0;


SensorService::SensorEventConnection::SensorEventConnection(
SensorService::SensorEventConnection::SensorEventConnection(
        const sp<SensorService>& service, uid_t uid, String8 packageName, bool isDataInjectionMode,
        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),
    : mService(service), mUid(uid), mWakeLockRefCount(0), mHasLooperCallbacks(false),
      mDead(false), mDataInjectionMode(isDataInjectionMode), mEventCache(nullptr),
      mDead(false), mDataInjectionMode(isDataInjectionMode), mEventCache(nullptr),
      mCacheSize(0), mMaxCacheSize(0), mTimeOfLastEventDrop(0), mEventsDropped(0),
      mCacheSize(0), mMaxCacheSize(0), mTimeOfLastEventDrop(0), mEventsDropped(0),
      mPackageName(packageName), mOpPackageName(opPackageName), mTargetSdk(kTargetSdkUnknown),
      mPackageName(packageName), mOpPackageName(opPackageName), mAttributionTag(attributionTag),
      mDestroyed(false) {
      mTargetSdk(kTargetSdkUnknown), mDestroyed(false) {
    mIsRateCappedBasedOnPermission = mService->isRateCappedBasedOnPermission(mOpPackageName);
    mIsRateCappedBasedOnPermission = mService->isRateCappedBasedOnPermission(mOpPackageName);
    mUserId = multiuser_get_user_id(mUid);
    mUserId = multiuser_get_user_id(mUid);
    mChannel = new BitTube(mService->mSocketBufferSize);
    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(mService->getSensorStringType(sensorHandle)));
            noteMsg.append(String16(")"));
            noteMsg.append(String16(")"));
            int32_t appOpMode = mService->sAppOpsManager.noteOp(iter->second, mUid,
            int32_t appOpMode = mService->sAppOpsManager.noteOp(iter->second, mUid,
                                                                mOpPackageName, {}, noteMsg);
                                                                mOpPackageName, mAttributionTag,
                                                                noteMsg);
            success = (appOpMode == AppOpsManager::MODE_ALLOWED);
            success = (appOpMode == AppOpsManager::MODE_ALLOWED);
        }
        }
    }
    }
Loading