Merge "Revert "TIF: add signal detection feature for HW inputs"" into nyc-dev
am: b69b5b4a6d

* commit 'b69b5b4a6ddf14ad41de93a46095466858fbdec2':
  Revert "TIF: add signal detection feature for HW inputs"

Change-Id: I88dbff74104a5d905c2b68188ba5d7739ae41fcb
diff --git a/api/system-current.txt b/api/system-current.txt
index e86bb1b..9a6d07aa 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -24900,7 +24900,6 @@
 
   public class TvStreamConfig implements android.os.Parcelable {
     method public int describeContents();
-    method public int getFlags();
     method public int getGeneration();
     method public int getMaxHeight();
     method public int getMaxWidth();
@@ -24908,7 +24907,6 @@
     method public int getType();
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.media.tv.TvStreamConfig> CREATOR;
-    field public static final int FLAG_MASK_SIGNAL_DETECTION = 1; // 0x1
     field public static final int STREAM_TYPE_BUFFER_PRODUCER = 2; // 0x2
     field public static final int STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE = 1; // 0x1
   }
@@ -24916,7 +24914,6 @@
   public static final class TvStreamConfig.Builder {
     ctor public TvStreamConfig.Builder();
     method public android.media.tv.TvStreamConfig build();
-    method public android.media.tv.TvStreamConfig.Builder flags(int);
     method public android.media.tv.TvStreamConfig.Builder generation(int);
     method public android.media.tv.TvStreamConfig.Builder maxHeight(int);
     method public android.media.tv.TvStreamConfig.Builder maxWidth(int);
diff --git a/media/java/android/media/tv/TvInputManager.java b/media/java/android/media/tv/TvInputManager.java
index 22bb5f1..dfddaa5 100644
--- a/media/java/android/media/tv/TvInputManager.java
+++ b/media/java/android/media/tv/TvInputManager.java
@@ -223,9 +223,10 @@
      * State for {@link #getInputState(String)} and
      * {@link TvInputCallback#onInputStateChanged(String, int)}: The input source is connected.
      *
-     * <p>This state indicates that a source device is connected to the input port and in the normal
-     * operation mode. It is mostly relevant to hardware inputs such as HDMI input.
-     * Non-hardware inputs are considered connected all the time.
+     * <p>This state indicates that a source device is connected to the input port and is in the
+     * normal operation mode. It is mostly relevant to hardware inputs such as HDMI input. This is
+     * the default state for any hardware inputs where their states are unknown. Non-hardware inputs
+     * are considered connected all the time.
      */
     public static final int INPUT_STATE_CONNECTED = 0;
 
@@ -234,9 +235,8 @@
      * {@link TvInputCallback#onInputStateChanged(String, int)}: The input source is connected but
      * in standby mode.
      *
-     * <p>This state indicates that a source device is connected to the input port and in standby or
-     * low power mode. It is mostly relevant to hardware inputs such as HDMI inputs and Component
-     * inputs.
+     * <p>This state indicates that a source device is connected to the input port but is in standby
+     * mode. It is mostly relevant to hardware inputs such as HDMI input.
      */
     public static final int INPUT_STATE_CONNECTED_STANDBY = 1;
 
diff --git a/media/java/android/media/tv/TvStreamConfig.java b/media/java/android/media/tv/TvStreamConfig.java
index eae83cf..0c2f3fe 100644
--- a/media/java/android/media/tv/TvStreamConfig.java
+++ b/media/java/android/media/tv/TvStreamConfig.java
@@ -28,15 +28,8 @@
 public class TvStreamConfig implements Parcelable {
     static final String TAG = TvStreamConfig.class.getSimpleName();
 
-    // Must be in sync with tv_input.h
     public final static int STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE = 1;
     public final static int STREAM_TYPE_BUFFER_PRODUCER = 2;
-    /**
-     * A flag indicating whether the HAL is sure about signal at this stream. Note that
-     * value of 0 here does not necessarily mean no signal. It just means that it may not have
-     * signal and the underlying layer is not sure.
-     */
-    public static final int FLAG_MASK_SIGNAL_DETECTION = 0x1;
 
     private int mStreamId;
     private int mType;
@@ -48,10 +41,6 @@
      * via tv_input_device::get_stream_configurations().
      */
     private int mGeneration;
-    /**
-     * Flags for stream status. See FLAG_MASK_* for details.
-     */
-    private int mFlags;
 
     public static final Parcelable.Creator<TvStreamConfig> CREATOR =
             new Parcelable.Creator<TvStreamConfig>() {
@@ -63,8 +52,7 @@
                         type(source.readInt()).
                         maxWidth(source.readInt()).
                         maxHeight(source.readInt()).
-                        generation(source.readInt()).
-                        flags(source.readInt()).build();
+                        generation(source.readInt()).build();
             } catch (Exception e) {
                 Log.e(TAG, "Exception creating TvStreamConfig from parcel", e);
                 return null;
@@ -99,10 +87,6 @@
         return mGeneration;
     }
 
-    public int getFlags() {
-        return mFlags;
-    }
-
     @Override
     public String toString() {
         return "TvStreamConfig {mStreamId=" + mStreamId + ";" + "mType=" + mType + ";mGeneration="
@@ -122,7 +106,6 @@
         dest.writeInt(mMaxWidth);
         dest.writeInt(mMaxHeight);
         dest.writeInt(mGeneration);
-        dest.writeInt(mFlags);
     }
 
     /**
@@ -134,7 +117,6 @@
         private Integer mMaxWidth;
         private Integer mMaxHeight;
         private Integer mGeneration;
-        private int mFlags = 0;
 
         public Builder() {
         }
@@ -164,11 +146,6 @@
             return this;
         }
 
-        public Builder flags(int flag) {
-            mFlags = flag;
-            return this;
-        }
-
         public TvStreamConfig build() {
             if (mStreamId == null || mType == null || mMaxWidth == null || mMaxHeight == null
                     || mGeneration == null) {
@@ -181,7 +158,6 @@
             config.mMaxWidth = mMaxWidth;
             config.mMaxHeight = mMaxHeight;
             config.mGeneration = mGeneration;
-            config.mFlags = mFlags;
             return config;
         }
     }
@@ -196,7 +172,6 @@
             && config.mStreamId == mStreamId
             && config.mType == mType
             && config.mMaxWidth == mMaxWidth
-            && config.mMaxHeight == mMaxHeight
-            && config.mFlags == mFlags;
+            && config.mMaxHeight == mMaxHeight;
     }
 }
diff --git a/services/core/java/com/android/server/tv/TvInputHardwareManager.java b/services/core/java/com/android/server/tv/TvInputHardwareManager.java
index bf281d6..5c6a696 100644
--- a/services/core/java/com/android/server/tv/TvInputHardwareManager.java
+++ b/services/core/java/com/android/server/tv/TvInputHardwareManager.java
@@ -17,7 +17,6 @@
 package com.android.server.tv;
 
 import static android.media.tv.TvInputManager.INPUT_STATE_CONNECTED;
-import static android.media.tv.TvInputManager.INPUT_STATE_CONNECTED_STANDBY;
 import static android.media.tv.TvInputManager.INPUT_STATE_DISCONNECTED;
 
 import android.content.BroadcastReceiver;
@@ -110,6 +109,7 @@
     private int mCurrentIndex = 0;
     private int mCurrentMaxIndex = 0;
 
+    // TODO: Should handle STANDBY case.
     private final SparseBooleanArray mHdmiStateMap = new SparseBooleanArray();
     private final List<Message> mPendingHdmiDeviceEvents = new LinkedList<>();
 
@@ -213,7 +213,7 @@
             String inputId = mHardwareInputIdMap.get(deviceId);
             if (inputId != null) {
                 mHandler.obtainMessage(ListenerHandler.STATE_CHANGED,
-                        obtainStateFromConfigs(configs), 0, inputId).sendToTarget();
+                        convertConnectedToState(configs.length > 0), 0, inputId).sendToTarget();
             }
             ITvInputHardwareCallback callback = connection.getCallbackLocked();
             if (callback != null) {
@@ -263,13 +263,12 @@
                 || connectionCallingUid != callingUid || connectionResolvedUserId != resolvedUserId;
     }
 
-    private int obtainStateFromConfigs(TvStreamConfig[] configs) {
-        for (TvStreamConfig config : configs) {
-            if ((config.getFlags() & TvStreamConfig.FLAG_MASK_SIGNAL_DETECTION) != 0) {
-                return INPUT_STATE_CONNECTED;
-            }
+    private int convertConnectedToState(boolean connected) {
+        if (connected) {
+            return INPUT_STATE_CONNECTED;
+        } else {
+            return INPUT_STATE_DISCONNECTED;
         }
-        return (configs.length > 0) ? INPUT_STATE_CONNECTED_STANDBY : INPUT_STATE_DISCONNECTED;
     }
 
     public void addHardwareInput(int deviceId, TvInputInfo info) {
@@ -294,14 +293,9 @@
                 }
                 String inputId = mHardwareInputIdMap.get(hardwareInfo.getDeviceId());
                 if (inputId != null && inputId.equals(info.getId())) {
-                    // No HDMI hotplug does not necessarily mean disconnected, as old devices may
-                    // not report hotplug state correctly. Using INPUT_STATE_CONNECTED_STANDBY to
-                    // denote unknown state.
-                    int state = mHdmiStateMap.valueAt(i)
-                            ? INPUT_STATE_CONNECTED
-                            : INPUT_STATE_CONNECTED_STANDBY;
-                    mHandler.obtainMessage(
-                            ListenerHandler.STATE_CHANGED, state, 0, inputId).sendToTarget();
+                    mHandler.obtainMessage(ListenerHandler.STATE_CHANGED,
+                            convertConnectedToState(mHdmiStateMap.valueAt(i)), 0,
+                            inputId).sendToTarget();
                     return;
                 }
             }
@@ -309,7 +303,7 @@
             Connection connection = mConnections.get(deviceId);
             if (connection != null) {
                 mHandler.obtainMessage(ListenerHandler.STATE_CHANGED,
-                        obtainStateFromConfigs(connection.getConfigsLocked()), 0,
+                        convertConnectedToState(connection.getConfigsLocked().length > 0), 0,
                         info.getId()).sendToTarget();
             }
         }
@@ -1199,14 +1193,8 @@
                 if (inputId == null) {
                     return;
                 }
-                // No HDMI hotplug does not necessarily mean disconnected, as old devices may
-                // not report hotplug state correctly. Using INPUT_STATE_CONNECTED_STANDBY to
-                // denote unknown state.
-                int state = event.isConnected()
-                        ? INPUT_STATE_CONNECTED
-                        : INPUT_STATE_CONNECTED_STANDBY;
-                mHandler.obtainMessage(
-                        ListenerHandler.STATE_CHANGED, state, 0, inputId).sendToTarget();
+                mHandler.obtainMessage(ListenerHandler.STATE_CHANGED,
+                        convertConnectedToState(event.isConnected()), 0, inputId).sendToTarget();
             }
         }
     }
diff --git a/services/core/jni/com_android_server_tv_TvInputHal.cpp b/services/core/jni/com_android_server_tv_TvInputHal.cpp
index c4316f6..ec4a3d3 100644
--- a/services/core/jni/com_android_server_tv_TvInputHal.cpp
+++ b/services/core/jni/com_android_server_tv_TvInputHal.cpp
@@ -54,7 +54,6 @@
     jmethodID maxWidth;
     jmethodID maxHeight;
     jmethodID generation;
-    jmethodID flags;
     jmethodID build;
 } gTvStreamConfigBuilderClassInfo;
 
@@ -240,7 +239,7 @@
 
     int addOrUpdateStream(int deviceId, int streamId, const sp<Surface>& surface);
     int removeStream(int deviceId, int streamId);
-    const tv_stream_config_ext_t* getStreamConfigs(int deviceId, int* numConfigs);
+    const tv_stream_config_t* getStreamConfigs(int deviceId, int* numConfigs);
 
     void onDeviceAvailable(const tv_input_device_info_t& info);
     void onDeviceUnavailable(int deviceId);
@@ -289,15 +288,10 @@
     sp<Looper> mLooper;
 
     KeyedVector<int, KeyedVector<int, Connection> > mConnections;
-
-    tv_stream_config_ext_t* mConfigBuffer;
-    int mConfigBufferSize;
 };
 
 JTvInputHal::JTvInputHal(JNIEnv* env, jobject thiz, tv_input_device_t* device,
-        const sp<Looper>& looper)
-    : mConfigBuffer(NULL),
-      mConfigBufferSize(0) {
+        const sp<Looper>& looper) {
     mThiz = env->NewWeakGlobalRef(thiz);
     mDevice = device;
     mCallback.notify = &JTvInputHal::notify;
@@ -312,10 +306,6 @@
     JNIEnv* env = AndroidRuntime::getJNIEnv();
     env->DeleteWeakGlobalRef(mThiz);
     mThiz = NULL;
-
-    if (mConfigBuffer != NULL) {
-        delete[] mConfigBuffer;
-    }
 }
 
 JTvInputHal* JTvInputHal::createInstance(JNIEnv* env, jobject thiz, const sp<Looper>& looper) {
@@ -364,14 +354,15 @@
     if (connection.mSourceHandle == NULL && connection.mThread == NULL) {
         // Need to configure stream
         int numConfigs = 0;
-        const tv_stream_config_ext_t* configs = getStreamConfigs(deviceId, &numConfigs);
-        if (configs == NULL) {
+        const tv_stream_config_t* configs = NULL;
+        if (mDevice->get_stream_configurations(
+                mDevice, deviceId, &numConfigs, &configs) != 0) {
             ALOGE("Couldn't get stream configs");
             return UNKNOWN_ERROR;
         }
         int configIndex = -1;
         for (int i = 0; i < numConfigs; ++i) {
-            if (configs[i].config.stream_id == streamId) {
+            if (configs[i].stream_id == streamId) {
                 configIndex = i;
                 break;
             }
@@ -380,13 +371,13 @@
             ALOGE("Cannot find a config with given stream ID: %d", streamId);
             return BAD_VALUE;
         }
-        connection.mStreamType = configs[configIndex].config.type;
+        connection.mStreamType = configs[configIndex].type;
 
         tv_stream_t stream;
-        stream.stream_id = configs[configIndex].config.stream_id;
+        stream.stream_id = configs[configIndex].stream_id;
         if (connection.mStreamType == TV_STREAM_TYPE_BUFFER_PRODUCER) {
-            stream.buffer_producer.width = configs[configIndex].config.max_video_width;
-            stream.buffer_producer.height = configs[configIndex].config.max_video_height;
+            stream.buffer_producer.width = configs[configIndex].max_video_width;
+            stream.buffer_producer.height = configs[configIndex].max_video_height;
         }
         if (mDevice->open_stream(mDevice, deviceId, &stream) != 0) {
             ALOGE("Couldn't add stream");
@@ -440,33 +431,12 @@
     return NO_ERROR;
 }
 
-const tv_stream_config_ext_t* JTvInputHal::getStreamConfigs(int deviceId, int* numConfigs) {
-    const tv_stream_config_ext_t* configs = NULL;
-    if (mDevice->common.version >= TV_INPUT_DEVICE_API_VERSION_0_2) {
-        if (mDevice->get_stream_configurations_ext(
-                mDevice, deviceId, numConfigs, &configs) != 0) {
-            ALOGE("Couldn't get stream configs");
-            return NULL;
-        }
-    } else {
-        const tv_stream_config_t* oldConfigs;
-        if (mDevice->get_stream_configurations(
-                mDevice, deviceId, numConfigs, &oldConfigs) != 0) {
-            ALOGE("Couldn't get stream configs");
-            return NULL;
-        }
-        if (mConfigBufferSize < *numConfigs) {
-            mConfigBufferSize = (*numConfigs / 16 + 1) * 16;
-            if (mConfigBuffer != NULL) {
-                delete[] mConfigBuffer;
-            }
-            mConfigBuffer = new tv_stream_config_ext_t[mConfigBufferSize];
-        }
-        for (int i = 0; i < *numConfigs; ++i) {
-            mConfigBuffer[i].config = oldConfigs[i];
-            mConfigBuffer[i].flags = 0;
-        }
-        configs = mConfigBuffer;
+const tv_stream_config_t* JTvInputHal::getStreamConfigs(int deviceId, int* numConfigs) {
+    const tv_stream_config_t* configs = NULL;
+    if (mDevice->get_stream_configurations(
+            mDevice, deviceId, numConfigs, &configs) != 0) {
+        ALOGE("Couldn't get stream configs");
+        return NULL;
     }
     return configs;
 }
@@ -659,7 +629,7 @@
         jlong ptr, jint deviceId, jint generation) {
     JTvInputHal* tvInputHal = (JTvInputHal*)ptr;
     int numConfigs = 0;
-    const tv_stream_config_ext_t* configs = tvInputHal->getStreamConfigs(deviceId, &numConfigs);
+    const tv_stream_config_t* configs = tvInputHal->getStreamConfigs(deviceId, &numConfigs);
 
     jobjectArray result = env->NewObjectArray(numConfigs, gTvStreamConfigClassInfo.clazz, NULL);
     for (int i = 0; i < numConfigs; ++i) {
@@ -667,20 +637,15 @@
                 gTvStreamConfigBuilderClassInfo.clazz,
                 gTvStreamConfigBuilderClassInfo.constructor);
         env->CallObjectMethod(
-                builder, gTvStreamConfigBuilderClassInfo.streamId, configs[i].config.stream_id);
+                builder, gTvStreamConfigBuilderClassInfo.streamId, configs[i].stream_id);
         env->CallObjectMethod(
-                builder, gTvStreamConfigBuilderClassInfo.type, configs[i].config.type);
+                builder, gTvStreamConfigBuilderClassInfo.type, configs[i].type);
         env->CallObjectMethod(
-                builder, gTvStreamConfigBuilderClassInfo.maxWidth,
-                configs[i].config.max_video_width);
+                builder, gTvStreamConfigBuilderClassInfo.maxWidth, configs[i].max_video_width);
         env->CallObjectMethod(
-                builder, gTvStreamConfigBuilderClassInfo.maxHeight,
-                configs[i].config.max_video_height);
+                builder, gTvStreamConfigBuilderClassInfo.maxHeight, configs[i].max_video_height);
         env->CallObjectMethod(
                 builder, gTvStreamConfigBuilderClassInfo.generation, generation);
-        env->CallObjectMethod(
-                builder, gTvStreamConfigBuilderClassInfo.flags,
-                configs[i].flags);
 
         jobject config = env->CallObjectMethod(builder, gTvStreamConfigBuilderClassInfo.build);
 
@@ -772,10 +737,6 @@
             gTvStreamConfigBuilderClassInfo.clazz,
             "generation", "(I)Landroid/media/tv/TvStreamConfig$Builder;");
     GET_METHOD_ID(
-            gTvStreamConfigBuilderClassInfo.flags,
-            gTvStreamConfigBuilderClassInfo.clazz,
-            "flags", "(I)Landroid/media/tv/TvStreamConfig$Builder;");
-    GET_METHOD_ID(
             gTvStreamConfigBuilderClassInfo.build,
             gTvStreamConfigBuilderClassInfo.clazz,
             "build", "()Landroid/media/tv/TvStreamConfig;");