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 Diff line number Diff line
@@ -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;
        }
+4 −3
Original line number Diff line number Diff line
@@ -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.");
+1 −1
Original line number Diff line number Diff line
@@ -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,
+2 −1
Original line number Diff line number Diff line
@@ -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);
+5 −4
Original line number Diff line number Diff line
@@ -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);
        }
    }
Loading