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:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user