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

Commit 8e009804 authored by Henry Fang's avatar Henry Fang
Browse files

update connect status along with stream_configuration_change event.

bug: 142698113
Test: Manual
Change-Id: I3d4a3b7f728e20ed4eaa07a7a67ebc7905e72213
parent ba032abd
Loading
Loading
Loading
Loading
+11 −0
Original line number Original line Diff line number Diff line
@@ -188,6 +188,17 @@ public final class TvInputHardwareInfo implements Parcelable {
        mCableConnectionStatus = source.readInt();
        mCableConnectionStatus = source.readInt();
    }
    }


    /** @hide */
    public Builder toBuilder() {
        return new Builder()
            .deviceId(mDeviceId)
            .type(mType)
            .audioType(mAudioType)
            .audioAddress(mAudioAddress)
            .hdmiPortId(mHdmiPortId)
            .cableConnectionStatus(mCableConnectionStatus);
    }

    public static final class Builder {
    public static final class Builder {
        private Integer mDeviceId = null;
        private Integer mDeviceId = null;
        private Integer mType = null;
        private Integer mType = null;
+7 −4
Original line number Original line Diff line number Diff line
@@ -51,7 +51,8 @@ final class TvInputHal implements Handler.Callback {
    public interface Callback {
    public interface Callback {
        void onDeviceAvailable(TvInputHardwareInfo info, TvStreamConfig[] configs);
        void onDeviceAvailable(TvInputHardwareInfo info, TvStreamConfig[] configs);
        void onDeviceUnavailable(int deviceId);
        void onDeviceUnavailable(int deviceId);
        void onStreamConfigurationChanged(int deviceId, TvStreamConfig[] configs);
        void onStreamConfigurationChanged(int deviceId, TvStreamConfig[] configs,
                int cableConnectionStatus);
        void onFirstFrameCaptured(int deviceId, int streamId);
        void onFirstFrameCaptured(int deviceId, int streamId);
    }
    }


@@ -142,8 +143,9 @@ final class TvInputHal implements Handler.Callback {
        mHandler.obtainMessage(EVENT_DEVICE_UNAVAILABLE, deviceId, 0).sendToTarget();
        mHandler.obtainMessage(EVENT_DEVICE_UNAVAILABLE, deviceId, 0).sendToTarget();
    }
    }


    private void streamConfigsChangedFromNative(int deviceId) {
    private void streamConfigsChangedFromNative(int deviceId, int cableConnectionStatus) {
        mHandler.obtainMessage(EVENT_STREAM_CONFIGURATION_CHANGED, deviceId, 0).sendToTarget();
        mHandler.obtainMessage(EVENT_STREAM_CONFIGURATION_CHANGED, deviceId,
            cableConnectionStatus).sendToTarget();
    }
    }


    private void firstFrameCapturedFromNative(int deviceId, int streamId) {
    private void firstFrameCapturedFromNative(int deviceId, int streamId) {
@@ -184,6 +186,7 @@ final class TvInputHal implements Handler.Callback {
            case EVENT_STREAM_CONFIGURATION_CHANGED: {
            case EVENT_STREAM_CONFIGURATION_CHANGED: {
                TvStreamConfig[] configs;
                TvStreamConfig[] configs;
                int deviceId = msg.arg1;
                int deviceId = msg.arg1;
                int cableConnectionStatus = msg.arg2;
                synchronized (mLock) {
                synchronized (mLock) {
                    if (DEBUG) {
                    if (DEBUG) {
                        Slog.d(TAG, "EVENT_STREAM_CONFIGURATION_CHANGED: deviceId = " + deviceId);
                        Slog.d(TAG, "EVENT_STREAM_CONFIGURATION_CHANGED: deviceId = " + deviceId);
@@ -191,7 +194,7 @@ final class TvInputHal implements Handler.Callback {
                    retrieveStreamConfigsLocked(deviceId);
                    retrieveStreamConfigsLocked(deviceId);
                    configs = mStreamConfigs.get(deviceId);
                    configs = mStreamConfigs.get(deviceId);
                }
                }
                mCallback.onStreamConfigurationChanged(deviceId, configs);
                mCallback.onStreamConfigurationChanged(deviceId, configs, cableConnectionStatus);
                break;
                break;
            }
            }


+33 −7
Original line number Original line Diff line number Diff line
@@ -156,6 +156,7 @@ class TvInputHardwareManager implements TvInputHal.Callback {
        synchronized (mLock) {
        synchronized (mLock) {
            Connection connection = new Connection(info);
            Connection connection = new Connection(info);
            connection.updateConfigsLocked(configs);
            connection.updateConfigsLocked(configs);
            connection.updateCableConnectionStatusLocked(info.getCableConnectionStatus());
            mConnections.put(info.getDeviceId(), connection);
            mConnections.put(info.getDeviceId(), connection);
            buildHardwareListLocked();
            buildHardwareListLocked();
            mHandler.obtainMessage(
            mHandler.obtainMessage(
@@ -202,7 +203,8 @@ class TvInputHardwareManager implements TvInputHal.Callback {
    }
    }


    @Override
    @Override
    public void onStreamConfigurationChanged(int deviceId, TvStreamConfig[] configs) {
    public void onStreamConfigurationChanged(int deviceId, TvStreamConfig[] configs,
            int cableConnectionStatus) {
        synchronized (mLock) {
        synchronized (mLock) {
            Connection connection = mConnections.get(deviceId);
            Connection connection = mConnections.get(deviceId);
            if (connection == null) {
            if (connection == null) {
@@ -211,13 +213,23 @@ class TvInputHardwareManager implements TvInputHal.Callback {
                return;
                return;
            }
            }
            int previousConfigsLength = connection.getConfigsLengthLocked();
            int previousConfigsLength = connection.getConfigsLengthLocked();
            int previousCableConnectionStatus = connection.getInputStateLocked();
            connection.updateConfigsLocked(configs);
            connection.updateConfigsLocked(configs);
            String inputId = mHardwareInputIdMap.get(deviceId);
            String inputId = mHardwareInputIdMap.get(deviceId);
            if (inputId != null
            if (inputId != null) {
                    && (previousConfigsLength == 0) != (connection.getConfigsLengthLocked() == 0)) {
                if (connection.updateCableConnectionStatusLocked(cableConnectionStatus)) {
                    if (previousCableConnectionStatus != connection.getInputStateLocked()) {
                        mHandler.obtainMessage(ListenerHandler.STATE_CHANGED,
                            connection.getInputStateLocked(), 0, inputId).sendToTarget();
                    }
                } else {
                    if ((previousConfigsLength == 0)
                            != (connection.getConfigsLengthLocked() == 0)) {
                        mHandler.obtainMessage(ListenerHandler.STATE_CHANGED,
                        mHandler.obtainMessage(ListenerHandler.STATE_CHANGED,
                            connection.getInputStateLocked(), 0, inputId).sendToTarget();
                            connection.getInputStateLocked(), 0, inputId).sendToTarget();
                    }
                    }
                }
            }
            ITvInputHardwareCallback callback = connection.getCallbackLocked();
            ITvInputHardwareCallback callback = connection.getCallbackLocked();
            if (callback != null) {
            if (callback != null) {
                try {
                try {
@@ -624,7 +636,7 @@ class TvInputHardwareManager implements TvInputHal.Callback {
    }
    }


    private class Connection implements IBinder.DeathRecipient {
    private class Connection implements IBinder.DeathRecipient {
        private final TvInputHardwareInfo mHardwareInfo;
        private TvInputHardwareInfo mHardwareInfo;
        private TvInputInfo mInfo;
        private TvInputInfo mInfo;
        private TvInputHardwareImpl mHardware = null;
        private TvInputHardwareImpl mHardware = null;
        private ITvInputHardwareCallback mCallback;
        private ITvInputHardwareCallback mCallback;
@@ -633,6 +645,7 @@ class TvInputHardwareManager implements TvInputHal.Callback {
        private Integer mResolvedUserId = null;
        private Integer mResolvedUserId = null;
        private Runnable mOnFirstFrameCaptured;
        private Runnable mOnFirstFrameCaptured;
        private ResourceClientProfile mResourceClientProfile = null;
        private ResourceClientProfile mResourceClientProfile = null;
        private boolean mIsCableConnectionStatusUpdated = false;


        public Connection(TvInputHardwareInfo hardwareInfo) {
        public Connection(TvInputHardwareInfo hardwareInfo) {
            mHardwareInfo = hardwareInfo;
            mHardwareInfo = hardwareInfo;
@@ -735,6 +748,17 @@ class TvInputHardwareManager implements TvInputHal.Callback {
                    + " }";
                    + " }";
        }
        }


        public boolean updateCableConnectionStatusLocked(int cableConnectionStatus) {
            // Update connection status only if it's not default value
            if (cableConnectionStatus != TvInputHardwareInfo.CABLE_CONNECTION_STATUS_UNKNOWN
                    || mIsCableConnectionStatusUpdated) {
                mIsCableConnectionStatusUpdated = true;
                mHardwareInfo = mHardwareInfo.toBuilder()
                    .cableConnectionStatus(cableConnectionStatus).build();
            }
            return mIsCableConnectionStatusUpdated;
        }

        private int getConfigsLengthLocked() {
        private int getConfigsLengthLocked() {
            return mConfigs == null ? 0 : mConfigs.length;
            return mConfigs == null ? 0 : mConfigs.length;
        }
        }
@@ -742,8 +766,10 @@ class TvInputHardwareManager implements TvInputHal.Callback {
        private int getInputStateLocked() {
        private int getInputStateLocked() {
            int configsLength = getConfigsLengthLocked();
            int configsLength = getConfigsLengthLocked();
            if (configsLength > 0) {
            if (configsLength > 0) {
                if (!mIsCableConnectionStatusUpdated) {
                    return INPUT_STATE_CONNECTED;
                    return INPUT_STATE_CONNECTED;
                }
                }
            }
            switch (mHardwareInfo.getCableConnectionStatus()) {
            switch (mHardwareInfo.getCableConnectionStatus()) {
                case TvInputHardwareInfo.CABLE_CONNECTION_STATUS_CONNECTED:
                case TvInputHardwareInfo.CABLE_CONNECTION_STATUS_CONNECTED:
                    return INPUT_STATE_CONNECTED;
                    return INPUT_STATE_CONNECTED;
+8 −10
Original line number Original line Diff line number Diff line
@@ -261,7 +261,7 @@ public:


    void onDeviceAvailable(const TvInputDeviceInfo& info);
    void onDeviceAvailable(const TvInputDeviceInfo& info);
    void onDeviceUnavailable(int deviceId);
    void onDeviceUnavailable(int deviceId);
    void onStreamConfigurationsChanged(int deviceId);
    void onStreamConfigurationsChanged(int deviceId, int cableConnectionStatus);
    void onCaptured(int deviceId, int streamId, uint32_t seq, bool succeeded);
    void onCaptured(int deviceId, int streamId, uint32_t seq, bool succeeded);


private:
private:
@@ -519,7 +519,7 @@ void JTvInputHal::onDeviceUnavailable(int deviceId) {
            deviceId);
            deviceId);
}
}


void JTvInputHal::onStreamConfigurationsChanged(int deviceId) {
void JTvInputHal::onStreamConfigurationsChanged(int deviceId, int cableConnectionStatus) {
    {
    {
        Mutex::Autolock autoLock(&mLock);
        Mutex::Autolock autoLock(&mLock);
        KeyedVector<int, Connection>& connections = mConnections.editValueFor(deviceId);
        KeyedVector<int, Connection>& connections = mConnections.editValueFor(deviceId);
@@ -529,10 +529,8 @@ void JTvInputHal::onStreamConfigurationsChanged(int deviceId) {
        connections.clear();
        connections.clear();
    }
    }
    JNIEnv* env = AndroidRuntime::getJNIEnv();
    JNIEnv* env = AndroidRuntime::getJNIEnv();
    env->CallVoidMethod(
    env->CallVoidMethod(mThiz, gTvInputHalClassInfo.streamConfigsChanged, deviceId,
            mThiz,
                        cableConnectionStatus);
            gTvInputHalClassInfo.streamConfigsChanged,
            deviceId);
}
}


void JTvInputHal::onCaptured(int deviceId, int streamId, uint32_t seq, bool succeeded) {
void JTvInputHal::onCaptured(int deviceId, int streamId, uint32_t seq, bool succeeded) {
@@ -572,7 +570,8 @@ void JTvInputHal::NotifyHandler::handleMessage(const Message& message) {
            mHal->onDeviceUnavailable(mEvent.deviceInfo.deviceId);
            mHal->onDeviceUnavailable(mEvent.deviceInfo.deviceId);
        } break;
        } break;
        case TvInputEventType::STREAM_CONFIGURATIONS_CHANGED: {
        case TvInputEventType::STREAM_CONFIGURATIONS_CHANGED: {
            mHal->onStreamConfigurationsChanged(mEvent.deviceInfo.deviceId);
            int cableConnectionStatus = static_cast<int>(mEvent.deviceInfo.cableConnectionStatus);
            mHal->onStreamConfigurationsChanged(mEvent.deviceInfo.deviceId, cableConnectionStatus);
        } break;
        } break;
        default:
        default:
            ALOGE("Unrecognizable event");
            ALOGE("Unrecognizable event");
@@ -688,9 +687,8 @@ int register_android_server_tv_TvInputHal(JNIEnv* env) {
            "deviceAvailableFromNative", "(Landroid/media/tv/TvInputHardwareInfo;)V");
            "deviceAvailableFromNative", "(Landroid/media/tv/TvInputHardwareInfo;)V");
    GET_METHOD_ID(
    GET_METHOD_ID(
            gTvInputHalClassInfo.deviceUnavailable, clazz, "deviceUnavailableFromNative", "(I)V");
            gTvInputHalClassInfo.deviceUnavailable, clazz, "deviceUnavailableFromNative", "(I)V");
    GET_METHOD_ID(
    GET_METHOD_ID(gTvInputHalClassInfo.streamConfigsChanged, clazz,
            gTvInputHalClassInfo.streamConfigsChanged, clazz,
                  "streamConfigsChangedFromNative", "(II)V");
            "streamConfigsChangedFromNative", "(I)V");
    GET_METHOD_ID(
    GET_METHOD_ID(
            gTvInputHalClassInfo.firstFrameCaptured, clazz,
            gTvInputHalClassInfo.firstFrameCaptured, clazz,
            "firstFrameCapturedFromNative", "(II)V");
            "firstFrameCapturedFromNative", "(II)V");