Loading services/core/java/com/android/server/tv/TvInputHal.java +15 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.server.tv; import android.hardware.tv.input.V1_0.Constants; import android.media.tv.TvInputHardwareInfo; import android.media.tv.TvStreamConfig; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.MessageQueue; Loading @@ -45,12 +46,15 @@ final class TvInputHal implements Handler.Callback { Constants.EVENT_STREAM_CONFIGURATIONS_CHANGED; public static final int EVENT_FIRST_FRAME_CAPTURED = 4; public static final int EVENT_TV_MESSAGE = 5; public interface Callback { void onDeviceAvailable(TvInputHardwareInfo info, TvStreamConfig[] configs); void onDeviceUnavailable(int deviceId); void onStreamConfigurationChanged(int deviceId, TvStreamConfig[] configs, int cableConnectionStatus); void onFirstFrameCaptured(int deviceId, int streamId); void onTvMessage(int deviceId, int type, Bundle data); } private native long nativeOpen(MessageQueue queue); Loading Loading @@ -171,6 +175,10 @@ final class TvInputHal implements Handler.Callback { mHandler.obtainMessage(EVENT_STREAM_CONFIGURATION_CHANGED, deviceId, streamId)); } private void tvMessageReceivedFromNative(int deviceId, int type, Bundle data) { mHandler.obtainMessage(EVENT_TV_MESSAGE, deviceId, type, data).sendToTarget(); } // Handler.Callback implementation @Override Loading Loading @@ -221,6 +229,13 @@ final class TvInputHal implements Handler.Callback { break; } case EVENT_TV_MESSAGE: { int deviceId = msg.arg1; int type = msg.arg2; Bundle data = (Bundle) msg.obj; mCallback.onTvMessage(deviceId, type, data); } default: Slog.e(TAG, "Unknown event: " + msg); return false; Loading services/core/java/com/android/server/tv/TvInputHardwareManager.java +24 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ import android.media.tv.TvInputService.PriorityHintUseCaseType; import android.media.tv.TvStreamConfig; import android.media.tv.tunerresourcemanager.ResourceClientProfile; import android.media.tv.tunerresourcemanager.TunerResourceManager; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.os.Message; Loading @@ -59,6 +60,7 @@ import android.util.SparseArray; import android.util.SparseBooleanArray; import android.view.Surface; import com.android.internal.os.SomeArgs; import com.android.internal.util.DumpUtils; import com.android.internal.util.IndentingPrintWriter; import com.android.server.SystemService; Loading Loading @@ -264,6 +266,17 @@ class TvInputHardwareManager implements TvInputHal.Callback { } } @Override public void onTvMessage(int deviceId, int type, Bundle data) { synchronized (mLock) { SomeArgs args = SomeArgs.obtain(); args.arg1 = mHardwareInputIdMap.get(deviceId); args.arg2 = data; mHandler.obtainMessage(ListenerHandler.TV_MESSAGE_RECEIVED, type, 0, args) .sendToTarget(); } } public List<TvInputHardwareInfo> getHardwareList() { synchronized (mLock) { return Collections.unmodifiableList(mHardwareList); Loading Loading @@ -1224,6 +1237,7 @@ class TvInputHardwareManager implements TvInputHal.Callback { void onHdmiDeviceAdded(HdmiDeviceInfo device); void onHdmiDeviceRemoved(HdmiDeviceInfo device); void onHdmiDeviceUpdated(String inputId, HdmiDeviceInfo device); void onTvMessage(String inputId, int type, Bundle data); } private class ListenerHandler extends Handler { Loading @@ -1234,6 +1248,7 @@ class TvInputHardwareManager implements TvInputHal.Callback { private static final int HDMI_DEVICE_REMOVED = 5; private static final int HDMI_DEVICE_UPDATED = 6; private static final int TVINPUT_INFO_ADDED = 7; private static final int TV_MESSAGE_RECEIVED = 8; @Override public final void handleMessage(Message msg) { Loading Loading @@ -1303,6 +1318,15 @@ class TvInputHardwareManager implements TvInputHal.Callback { } break; } case TV_MESSAGE_RECEIVED: { SomeArgs args = (SomeArgs) msg.obj; String inputId = (String) args.arg1; Bundle data = (Bundle) args.arg2; int type = msg.arg1; mListener.onTvMessage(inputId, type, data); args.recycle(); break; } default: { Slog.w(TAG, "Unhandled message: " + msg); break; Loading services/core/java/com/android/server/tv/TvInputManagerService.java +22 −0 Original line number Diff line number Diff line Loading @@ -4146,6 +4146,28 @@ public final class TvInputManagerService extends SystemService { } } } @Override public void onTvMessage(String inputId, int type, Bundle data) { synchronized (mLock) { UserState userState = getOrCreateUserStateLocked(mCurrentUserId); TvInputState inputState = userState.inputMap.get(inputId); ServiceState serviceState = userState.serviceStateMap.get(inputState.info .getComponent()); for (IBinder token : serviceState.sessionTokens) { try { SessionState sessionState = getSessionStateLocked(token, Binder.getCallingUid(), mCurrentUserId); if (!sessionState.isRecordingSession && sessionState.hardwareSessionToken != null) { sessionState.session.notifyTvMessage(type, data); } } catch (RemoteException e) { Slog.e(TAG, "error in onTvMessage", e); } } } } } private static class SessionNotFoundException extends IllegalArgumentException { Loading services/core/jni/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -109,6 +109,7 @@ cc_defaults { "libchrome", "libcutils", "libcrypto", "libfmq", "liblog", "libgraphicsenv", "libgralloctypes", Loading Loading @@ -157,6 +158,7 @@ cc_defaults { "android.hardware.broadcastradio@1.0", "android.hardware.broadcastradio@1.1", "android.hardware.contexthub@1.0", "android.hardware.common.fmq-V1-ndk", "android.hardware.gnss-V3-cpp", "android.hardware.gnss@1.0", "android.hardware.gnss@1.1", Loading services/core/jni/com_android_server_tv_TvInputHal.cpp +13 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include "tvinput/JTvInputHal.h" gBundleClassInfoType gBundleClassInfo; gTvInputHalClassInfoType gTvInputHalClassInfo; gTvStreamConfigClassInfoType gTvStreamConfigClassInfo; gTvStreamConfigBuilderClassInfoType gTvStreamConfigBuilderClassInfo; Loading Loading @@ -133,10 +134,22 @@ int register_android_server_tv_TvInputHal(JNIEnv* env) { GET_METHOD_ID( gTvInputHalClassInfo.firstFrameCaptured, clazz, "firstFrameCapturedFromNative", "(II)V"); GET_METHOD_ID(gTvInputHalClassInfo.tvMessageReceived, clazz, "tvMessageReceivedFromNative", "(IILandroid/os/Bundle;)V"); FIND_CLASS(gTvStreamConfigClassInfo.clazz, "android/media/tv/TvStreamConfig"); gTvStreamConfigClassInfo.clazz = jclass(env->NewGlobalRef(gTvStreamConfigClassInfo.clazz)); FIND_CLASS(gBundleClassInfo.clazz, "android/os/Bundle"); gBundleClassInfo.clazz = jclass(env->NewGlobalRef(gBundleClassInfo.clazz)); GET_METHOD_ID(gBundleClassInfo.constructor, gBundleClassInfo.clazz, "<init>", "()V"); GET_METHOD_ID(gBundleClassInfo.putByteArray, gBundleClassInfo.clazz, "putByteArray", "(Ljava/lang/String;[B)V"); GET_METHOD_ID(gBundleClassInfo.putString, gBundleClassInfo.clazz, "putString", "(Ljava/lang/String;Ljava/lang/String;)V"); GET_METHOD_ID(gBundleClassInfo.putInt, gBundleClassInfo.clazz, "putInt", "(Ljava/lang/String;I)V"); FIND_CLASS(gTvStreamConfigBuilderClassInfo.clazz, "android/media/tv/TvStreamConfig$Builder"); gTvStreamConfigBuilderClassInfo.clazz = jclass(env->NewGlobalRef(gTvStreamConfigBuilderClassInfo.clazz)); Loading Loading
services/core/java/com/android/server/tv/TvInputHal.java +15 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.server.tv; import android.hardware.tv.input.V1_0.Constants; import android.media.tv.TvInputHardwareInfo; import android.media.tv.TvStreamConfig; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.MessageQueue; Loading @@ -45,12 +46,15 @@ final class TvInputHal implements Handler.Callback { Constants.EVENT_STREAM_CONFIGURATIONS_CHANGED; public static final int EVENT_FIRST_FRAME_CAPTURED = 4; public static final int EVENT_TV_MESSAGE = 5; public interface Callback { void onDeviceAvailable(TvInputHardwareInfo info, TvStreamConfig[] configs); void onDeviceUnavailable(int deviceId); void onStreamConfigurationChanged(int deviceId, TvStreamConfig[] configs, int cableConnectionStatus); void onFirstFrameCaptured(int deviceId, int streamId); void onTvMessage(int deviceId, int type, Bundle data); } private native long nativeOpen(MessageQueue queue); Loading Loading @@ -171,6 +175,10 @@ final class TvInputHal implements Handler.Callback { mHandler.obtainMessage(EVENT_STREAM_CONFIGURATION_CHANGED, deviceId, streamId)); } private void tvMessageReceivedFromNative(int deviceId, int type, Bundle data) { mHandler.obtainMessage(EVENT_TV_MESSAGE, deviceId, type, data).sendToTarget(); } // Handler.Callback implementation @Override Loading Loading @@ -221,6 +229,13 @@ final class TvInputHal implements Handler.Callback { break; } case EVENT_TV_MESSAGE: { int deviceId = msg.arg1; int type = msg.arg2; Bundle data = (Bundle) msg.obj; mCallback.onTvMessage(deviceId, type, data); } default: Slog.e(TAG, "Unknown event: " + msg); return false; Loading
services/core/java/com/android/server/tv/TvInputHardwareManager.java +24 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ import android.media.tv.TvInputService.PriorityHintUseCaseType; import android.media.tv.TvStreamConfig; import android.media.tv.tunerresourcemanager.ResourceClientProfile; import android.media.tv.tunerresourcemanager.TunerResourceManager; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.os.Message; Loading @@ -59,6 +60,7 @@ import android.util.SparseArray; import android.util.SparseBooleanArray; import android.view.Surface; import com.android.internal.os.SomeArgs; import com.android.internal.util.DumpUtils; import com.android.internal.util.IndentingPrintWriter; import com.android.server.SystemService; Loading Loading @@ -264,6 +266,17 @@ class TvInputHardwareManager implements TvInputHal.Callback { } } @Override public void onTvMessage(int deviceId, int type, Bundle data) { synchronized (mLock) { SomeArgs args = SomeArgs.obtain(); args.arg1 = mHardwareInputIdMap.get(deviceId); args.arg2 = data; mHandler.obtainMessage(ListenerHandler.TV_MESSAGE_RECEIVED, type, 0, args) .sendToTarget(); } } public List<TvInputHardwareInfo> getHardwareList() { synchronized (mLock) { return Collections.unmodifiableList(mHardwareList); Loading Loading @@ -1224,6 +1237,7 @@ class TvInputHardwareManager implements TvInputHal.Callback { void onHdmiDeviceAdded(HdmiDeviceInfo device); void onHdmiDeviceRemoved(HdmiDeviceInfo device); void onHdmiDeviceUpdated(String inputId, HdmiDeviceInfo device); void onTvMessage(String inputId, int type, Bundle data); } private class ListenerHandler extends Handler { Loading @@ -1234,6 +1248,7 @@ class TvInputHardwareManager implements TvInputHal.Callback { private static final int HDMI_DEVICE_REMOVED = 5; private static final int HDMI_DEVICE_UPDATED = 6; private static final int TVINPUT_INFO_ADDED = 7; private static final int TV_MESSAGE_RECEIVED = 8; @Override public final void handleMessage(Message msg) { Loading Loading @@ -1303,6 +1318,15 @@ class TvInputHardwareManager implements TvInputHal.Callback { } break; } case TV_MESSAGE_RECEIVED: { SomeArgs args = (SomeArgs) msg.obj; String inputId = (String) args.arg1; Bundle data = (Bundle) args.arg2; int type = msg.arg1; mListener.onTvMessage(inputId, type, data); args.recycle(); break; } default: { Slog.w(TAG, "Unhandled message: " + msg); break; Loading
services/core/java/com/android/server/tv/TvInputManagerService.java +22 −0 Original line number Diff line number Diff line Loading @@ -4146,6 +4146,28 @@ public final class TvInputManagerService extends SystemService { } } } @Override public void onTvMessage(String inputId, int type, Bundle data) { synchronized (mLock) { UserState userState = getOrCreateUserStateLocked(mCurrentUserId); TvInputState inputState = userState.inputMap.get(inputId); ServiceState serviceState = userState.serviceStateMap.get(inputState.info .getComponent()); for (IBinder token : serviceState.sessionTokens) { try { SessionState sessionState = getSessionStateLocked(token, Binder.getCallingUid(), mCurrentUserId); if (!sessionState.isRecordingSession && sessionState.hardwareSessionToken != null) { sessionState.session.notifyTvMessage(type, data); } } catch (RemoteException e) { Slog.e(TAG, "error in onTvMessage", e); } } } } } private static class SessionNotFoundException extends IllegalArgumentException { Loading
services/core/jni/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -109,6 +109,7 @@ cc_defaults { "libchrome", "libcutils", "libcrypto", "libfmq", "liblog", "libgraphicsenv", "libgralloctypes", Loading Loading @@ -157,6 +158,7 @@ cc_defaults { "android.hardware.broadcastradio@1.0", "android.hardware.broadcastradio@1.1", "android.hardware.contexthub@1.0", "android.hardware.common.fmq-V1-ndk", "android.hardware.gnss-V3-cpp", "android.hardware.gnss@1.0", "android.hardware.gnss@1.1", Loading
services/core/jni/com_android_server_tv_TvInputHal.cpp +13 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include "tvinput/JTvInputHal.h" gBundleClassInfoType gBundleClassInfo; gTvInputHalClassInfoType gTvInputHalClassInfo; gTvStreamConfigClassInfoType gTvStreamConfigClassInfo; gTvStreamConfigBuilderClassInfoType gTvStreamConfigBuilderClassInfo; Loading Loading @@ -133,10 +134,22 @@ int register_android_server_tv_TvInputHal(JNIEnv* env) { GET_METHOD_ID( gTvInputHalClassInfo.firstFrameCaptured, clazz, "firstFrameCapturedFromNative", "(II)V"); GET_METHOD_ID(gTvInputHalClassInfo.tvMessageReceived, clazz, "tvMessageReceivedFromNative", "(IILandroid/os/Bundle;)V"); FIND_CLASS(gTvStreamConfigClassInfo.clazz, "android/media/tv/TvStreamConfig"); gTvStreamConfigClassInfo.clazz = jclass(env->NewGlobalRef(gTvStreamConfigClassInfo.clazz)); FIND_CLASS(gBundleClassInfo.clazz, "android/os/Bundle"); gBundleClassInfo.clazz = jclass(env->NewGlobalRef(gBundleClassInfo.clazz)); GET_METHOD_ID(gBundleClassInfo.constructor, gBundleClassInfo.clazz, "<init>", "()V"); GET_METHOD_ID(gBundleClassInfo.putByteArray, gBundleClassInfo.clazz, "putByteArray", "(Ljava/lang/String;[B)V"); GET_METHOD_ID(gBundleClassInfo.putString, gBundleClassInfo.clazz, "putString", "(Ljava/lang/String;Ljava/lang/String;)V"); GET_METHOD_ID(gBundleClassInfo.putInt, gBundleClassInfo.clazz, "putInt", "(Ljava/lang/String;I)V"); FIND_CLASS(gTvStreamConfigBuilderClassInfo.clazz, "android/media/tv/TvStreamConfig$Builder"); gTvStreamConfigBuilderClassInfo.clazz = jclass(env->NewGlobalRef(gTvStreamConfigBuilderClassInfo.clazz)); Loading