Merge "update connect status along with stream_configuration_change event." am: 0fc601a600

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1532752

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: Icb6191dcdfad8b19883ff8478b342b1ee59f0182
This commit is contained in:
Henry Fang
2021-01-15 19:49:56 +00:00
committed by Automerger Merge Worker
4 changed files with 59 additions and 21 deletions

View File

@@ -188,6 +188,17 @@ public final class TvInputHardwareInfo implements Parcelable {
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 {
private Integer mDeviceId = null;
private Integer mType = null;

View File

@@ -51,7 +51,8 @@ final class TvInputHal implements Handler.Callback {
public interface Callback {
void onDeviceAvailable(TvInputHardwareInfo info, TvStreamConfig[] configs);
void onDeviceUnavailable(int deviceId);
void onStreamConfigurationChanged(int deviceId, TvStreamConfig[] configs);
void onStreamConfigurationChanged(int deviceId, TvStreamConfig[] configs,
int cableConnectionStatus);
void onFirstFrameCaptured(int deviceId, int streamId);
}
@@ -142,8 +143,9 @@ final class TvInputHal implements Handler.Callback {
mHandler.obtainMessage(EVENT_DEVICE_UNAVAILABLE, deviceId, 0).sendToTarget();
}
private void streamConfigsChangedFromNative(int deviceId) {
mHandler.obtainMessage(EVENT_STREAM_CONFIGURATION_CHANGED, deviceId, 0).sendToTarget();
private void streamConfigsChangedFromNative(int deviceId, int cableConnectionStatus) {
mHandler.obtainMessage(EVENT_STREAM_CONFIGURATION_CHANGED, deviceId,
cableConnectionStatus).sendToTarget();
}
private void firstFrameCapturedFromNative(int deviceId, int streamId) {
@@ -184,6 +186,7 @@ final class TvInputHal implements Handler.Callback {
case EVENT_STREAM_CONFIGURATION_CHANGED: {
TvStreamConfig[] configs;
int deviceId = msg.arg1;
int cableConnectionStatus = msg.arg2;
synchronized (mLock) {
if (DEBUG) {
Slog.d(TAG, "EVENT_STREAM_CONFIGURATION_CHANGED: deviceId = " + deviceId);
@@ -191,7 +194,7 @@ final class TvInputHal implements Handler.Callback {
retrieveStreamConfigsLocked(deviceId);
configs = mStreamConfigs.get(deviceId);
}
mCallback.onStreamConfigurationChanged(deviceId, configs);
mCallback.onStreamConfigurationChanged(deviceId, configs, cableConnectionStatus);
break;
}

View File

@@ -156,6 +156,7 @@ class TvInputHardwareManager implements TvInputHal.Callback {
synchronized (mLock) {
Connection connection = new Connection(info);
connection.updateConfigsLocked(configs);
connection.updateCableConnectionStatusLocked(info.getCableConnectionStatus());
mConnections.put(info.getDeviceId(), connection);
buildHardwareListLocked();
mHandler.obtainMessage(
@@ -202,7 +203,8 @@ class TvInputHardwareManager implements TvInputHal.Callback {
}
@Override
public void onStreamConfigurationChanged(int deviceId, TvStreamConfig[] configs) {
public void onStreamConfigurationChanged(int deviceId, TvStreamConfig[] configs,
int cableConnectionStatus) {
synchronized (mLock) {
Connection connection = mConnections.get(deviceId);
if (connection == null) {
@@ -211,12 +213,22 @@ class TvInputHardwareManager implements TvInputHal.Callback {
return;
}
int previousConfigsLength = connection.getConfigsLengthLocked();
int previousCableConnectionStatus = connection.getInputStateLocked();
connection.updateConfigsLocked(configs);
String inputId = mHardwareInputIdMap.get(deviceId);
if (inputId != null
&& (previousConfigsLength == 0) != (connection.getConfigsLengthLocked() == 0)) {
mHandler.obtainMessage(ListenerHandler.STATE_CHANGED,
connection.getInputStateLocked(), 0, inputId).sendToTarget();
if (inputId != null) {
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,
connection.getInputStateLocked(), 0, inputId).sendToTarget();
}
}
}
ITvInputHardwareCallback callback = connection.getCallbackLocked();
if (callback != null) {
@@ -624,7 +636,7 @@ class TvInputHardwareManager implements TvInputHal.Callback {
}
private class Connection implements IBinder.DeathRecipient {
private final TvInputHardwareInfo mHardwareInfo;
private TvInputHardwareInfo mHardwareInfo;
private TvInputInfo mInfo;
private TvInputHardwareImpl mHardware = null;
private ITvInputHardwareCallback mCallback;
@@ -633,6 +645,7 @@ class TvInputHardwareManager implements TvInputHal.Callback {
private Integer mResolvedUserId = null;
private Runnable mOnFirstFrameCaptured;
private ResourceClientProfile mResourceClientProfile = null;
private boolean mIsCableConnectionStatusUpdated = false;
public Connection(TvInputHardwareInfo 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() {
return mConfigs == null ? 0 : mConfigs.length;
}
@@ -742,7 +766,9 @@ class TvInputHardwareManager implements TvInputHal.Callback {
private int getInputStateLocked() {
int configsLength = getConfigsLengthLocked();
if (configsLength > 0) {
return INPUT_STATE_CONNECTED;
if (!mIsCableConnectionStatusUpdated) {
return INPUT_STATE_CONNECTED;
}
}
switch (mHardwareInfo.getCableConnectionStatus()) {
case TvInputHardwareInfo.CABLE_CONNECTION_STATUS_CONNECTED:

View File

@@ -261,7 +261,7 @@ public:
void onDeviceAvailable(const TvInputDeviceInfo& info);
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);
private:
@@ -519,7 +519,7 @@ void JTvInputHal::onDeviceUnavailable(int deviceId) {
deviceId);
}
void JTvInputHal::onStreamConfigurationsChanged(int deviceId) {
void JTvInputHal::onStreamConfigurationsChanged(int deviceId, int cableConnectionStatus) {
{
Mutex::Autolock autoLock(&mLock);
KeyedVector<int, Connection>& connections = mConnections.editValueFor(deviceId);
@@ -529,10 +529,8 @@ void JTvInputHal::onStreamConfigurationsChanged(int deviceId) {
connections.clear();
}
JNIEnv* env = AndroidRuntime::getJNIEnv();
env->CallVoidMethod(
mThiz,
gTvInputHalClassInfo.streamConfigsChanged,
deviceId);
env->CallVoidMethod(mThiz, gTvInputHalClassInfo.streamConfigsChanged, deviceId,
cableConnectionStatus);
}
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);
} break;
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;
default:
ALOGE("Unrecognizable event");
@@ -688,9 +687,8 @@ int register_android_server_tv_TvInputHal(JNIEnv* env) {
"deviceAvailableFromNative", "(Landroid/media/tv/TvInputHardwareInfo;)V");
GET_METHOD_ID(
gTvInputHalClassInfo.deviceUnavailable, clazz, "deviceUnavailableFromNative", "(I)V");
GET_METHOD_ID(
gTvInputHalClassInfo.streamConfigsChanged, clazz,
"streamConfigsChangedFromNative", "(I)V");
GET_METHOD_ID(gTvInputHalClassInfo.streamConfigsChanged, clazz,
"streamConfigsChangedFromNative", "(II)V");
GET_METHOD_ID(
gTvInputHalClassInfo.firstFrameCaptured, clazz,
"firstFrameCapturedFromNative", "(II)V");