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

Commit 3905c731 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Camera: Fix onCameraOpened/onCameraClosed callback"

parents dcbe2197 e7aa034b
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -68,6 +68,9 @@ status_t CameraStatus::writeToParcel(android::Parcel* parcel) const {
        unavailablePhysicalIds16.push_back(String16(id8));
    }
    res = parcel->writeString16Vector(unavailablePhysicalIds16);
    if (res != OK) return res;

    res = parcel->writeString16(String16(clientPackage));
    return res;
}

@@ -86,6 +89,12 @@ status_t CameraStatus::readFromParcel(const android::Parcel* parcel) {
    for (auto& id16 : unavailablePhysicalIds16) {
        unavailablePhysicalIds.push_back(String8(id16));
    }

    String16 tempClientPackage;
    res = parcel->readString16(&tempClientPackage);
    if (res != OK) return res;
    clientPackage = String8(tempClientPackage);

    return res;
}

+8 −2
Original line number Diff line number Diff line
@@ -85,11 +85,17 @@ struct CameraStatus : public android::Parcelable {
     */
    std::vector<String8> unavailablePhysicalIds;

    /**
     * Client package name if camera is open, otherwise not applicable
     */
    String8 clientPackage;

    virtual status_t writeToParcel(android::Parcel* parcel) const;
    virtual status_t readFromParcel(const android::Parcel* parcel);

    CameraStatus(String8 id, int32_t s, const std::vector<String8>& unavailSubIds) :
            cameraId(id), status(s), unavailablePhysicalIds(unavailSubIds) {}
    CameraStatus(String8 id, int32_t s, const std::vector<String8>& unavailSubIds,
            const String8& clientPkg) : cameraId(id), status(s),
            unavailablePhysicalIds(unavailSubIds), clientPackage(clientPkg) {}
    CameraStatus() : status(ICameraServiceListener::STATUS_PRESENT) {}
};

+24 −1
Original line number Diff line number Diff line
@@ -2396,7 +2396,8 @@ Status CameraService::addListenerHelper(const sp<ICameraServiceListener>& listen
        Mutex::Autolock lock(mCameraStatesLock);
        for (auto& i : mCameraStates) {
            cameraStatuses->emplace_back(i.first,
                    mapToInterface(i.second->getStatus()), i.second->getUnavailablePhysicalIds());
                    mapToInterface(i.second->getStatus()), i.second->getUnavailablePhysicalIds(),
                    openCloseCallbackAllowed ? i.second->getClientPackage() : String8::empty());
        }
    }
    // Remove the camera statuses that should be hidden from the client, we do
@@ -3766,6 +3767,16 @@ bool CameraService::CameraState::removeUnavailablePhysicalId(const String8& phys
    return count > 0;
}

void CameraService::CameraState::setClientPackage(const String8& clientPackage) {
    Mutex::Autolock lock(mStatusLock);
    mClientPackage = clientPackage;
}

String8 CameraService::CameraState::getClientPackage() const {
    Mutex::Autolock lock(mStatusLock);
    return mClientPackage;
}

// ----------------------------------------------------------------------------
//                  ClientEventListener
// ----------------------------------------------------------------------------
@@ -4329,6 +4340,18 @@ void CameraService::updateStatus(StatusInternal status, const String8& cameraId,

void CameraService::updateOpenCloseStatus(const String8& cameraId, bool open,
        const String16& clientPackageName) {
    auto state = getCameraState(cameraId);
    if (state == nullptr) {
        ALOGW("%s: Could not update the status for %s, no such device exists", __FUNCTION__,
                cameraId.string());
        return;
    }
    if (open) {
        state->setClientPackage(String8(clientPackageName));
    } else {
        state->setClientPackage(String8::empty());
    }

    Mutex::Autolock lock(mStatusListenerLock);

    for (const auto& it : mListenerList) {
+7 −0
Original line number Diff line number Diff line
@@ -634,6 +634,12 @@ private:
        bool addUnavailablePhysicalId(const String8& physicalId);
        bool removeUnavailablePhysicalId(const String8& physicalId);

        /**
         * Set and get client package name.
         */
        void setClientPackage(const String8& clientPackage);
        String8 getClientPackage() const;

        /**
         * Return the unavailable physical ids for this device.
         *
@@ -646,6 +652,7 @@ private:
        const int mCost;
        std::set<String8> mConflicting;
        std::set<String8> mUnavailablePhysicalIds;
        String8 mClientPackage;
        mutable Mutex mStatusLock;
        CameraParameters mShimParams;
        const SystemCameraKind mSystemCameraKind;