summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
Diffstat (limited to 'media')
-rw-r--r--media/java/android/media/tv/ITvInputClient.aidl2
-rw-r--r--media/java/android/media/tv/ITvInputSessionCallback.aidl2
-rw-r--r--media/java/android/media/tv/TvInputManager.java31
-rw-r--r--media/java/android/media/tv/TvInputService.java19
-rw-r--r--media/java/android/media/tv/TvView.java20
5 files changed, 74 insertions, 0 deletions
diff --git a/media/java/android/media/tv/ITvInputClient.aidl b/media/java/android/media/tv/ITvInputClient.aidl
index 011da35..2854007 100644
--- a/media/java/android/media/tv/ITvInputClient.aidl
+++ b/media/java/android/media/tv/ITvInputClient.aidl
@@ -18,6 +18,7 @@ package android.media.tv;
import android.content.ComponentName;
import android.media.tv.ITvInputSession;
+import android.net.Uri;
import android.os.Bundle;
import android.view.InputChannel;
@@ -34,4 +35,5 @@ oneway interface ITvInputClient {
void onVideoStreamChanged(int width, int height, boolean interlaced, int seq);
void onAudioStreamChanged(int channelCount, int seq);
void onClosedCaptionStreamChanged(boolean hasClosedCaption, int seq);
+ void onChannelRetuned(in Uri channelUri, int seq);
}
diff --git a/media/java/android/media/tv/ITvInputSessionCallback.aidl b/media/java/android/media/tv/ITvInputSessionCallback.aidl
index 00f2922..5a57ccd 100644
--- a/media/java/android/media/tv/ITvInputSessionCallback.aidl
+++ b/media/java/android/media/tv/ITvInputSessionCallback.aidl
@@ -17,6 +17,7 @@
package android.media.tv;
import android.media.tv.ITvInputSession;
+import android.net.Uri;
import android.os.Bundle;
/**
@@ -30,4 +31,5 @@ oneway interface ITvInputSessionCallback {
void onVideoStreamChanged(int width, int height, boolean interlaced);
void onAudioStreamChanged(int channelCount);
void onClosedCaptionStreamChanged(boolean hasClosedCaption);
+ void onChannelRetuned(in Uri channelUri);
}
diff --git a/media/java/android/media/tv/TvInputManager.java b/media/java/android/media/tv/TvInputManager.java
index daa7009..834ce64 100644
--- a/media/java/android/media/tv/TvInputManager.java
+++ b/media/java/android/media/tv/TvInputManager.java
@@ -125,6 +125,16 @@ public final class TvInputManager {
}
/**
+ * This is called when the channel of this session is changed by the underlying TV input
+ * with out any {@link TvInputManager.Session#tune(Uri)} request.
+ *
+ * @param session A {@link TvInputManager.Session} associated with this callback
+ * @param channelUri The URI of a channel.
+ */
+ public void onChannelRetuned(Session session, Uri channelUri) {
+ }
+
+ /**
* This is called when a custom event has been sent from this session.
*
* @param session A {@link TvInputManager.Session} associated with this callback
@@ -194,6 +204,15 @@ public final class TvInputManager {
});
}
+ public void postChannelRetuned(final Uri channelUri) {
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mSessionCallback.onChannelRetuned(mSession, channelUri);
+ }
+ });
+ }
+
public void postSessionEvent(final String eventType, final Bundle eventArgs) {
mHandler.post(new Runnable() {
@Override
@@ -318,6 +337,18 @@ public final class TvInputManager {
}
@Override
+ public void onChannelRetuned(Uri channelUri, int seq) {
+ synchronized (mSessionCallbackRecordMap) {
+ SessionCallbackRecord record = mSessionCallbackRecordMap.get(seq);
+ if (record == null) {
+ Log.e(TAG, "Callback not found for seq " + seq);
+ return;
+ }
+ record.postChannelRetuned(channelUri);
+ }
+ }
+
+ @Override
public void onSessionEvent(String eventType, Bundle eventArgs, int seq) {
synchronized (mSessionCallbackRecordMap) {
SessionCallbackRecord record = mSessionCallbackRecordMap.get(seq);
diff --git a/media/java/android/media/tv/TvInputService.java b/media/java/android/media/tv/TvInputService.java
index 0f4a930..1e512cd 100644
--- a/media/java/android/media/tv/TvInputService.java
+++ b/media/java/android/media/tv/TvInputService.java
@@ -286,6 +286,25 @@ public abstract class TvInputService extends Service {
}
/**
+ * Notifies the channel of the session is retuned by TV input.
+ *
+ * @param channelUri The URI of a channel.
+ */
+ public void dispatchChannelRetuned(final Uri channelUri) {
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ if (DEBUG) Log.d(TAG, "dispatchChannelRetuned");
+ mSessionCallback.onChannelRetuned(channelUri);
+ } catch (RemoteException e) {
+ Log.w(TAG, "error in dispatchChannelRetuned");
+ }
+ }
+ });
+ }
+
+ /**
* Called when the session is released.
*/
public abstract void onRelease();
diff --git a/media/java/android/media/tv/TvView.java b/media/java/android/media/tv/TvView.java
index a913e59c..664a215 100644
--- a/media/java/android/media/tv/TvView.java
+++ b/media/java/android/media/tv/TvView.java
@@ -456,6 +456,16 @@ public class TvView extends ViewGroup {
}
/**
+ * This is invoked when the channel of this TvView is changed by the underlying TV input
+ * with out any {@link TvView#tune(String, Uri)} request.
+ *
+ * @param inputId The ID of the TV input bound to this view.
+ * @param channelUri The URI of a channel.
+ */
+ public void onChannelRetuned(String inputId, Uri channelUri) {
+ }
+
+ /**
* This is invoked when a custom event from the bound TV input is sent to this view.
*
* @param eventType The type of the event.
@@ -562,6 +572,16 @@ public class TvView extends ViewGroup {
}
@Override
+ public void onChannelRetuned(Session session, Uri channelUri) {
+ if (DEBUG) {
+ Log.d(TAG, "onChannelChangedByTvInput(" + channelUri + ")");
+ }
+ if (mListener != null) {
+ mListener.onChannelRetuned(mInputId, channelUri);
+ }
+ }
+
+ @Override
public void onSessionEvent(TvInputManager.Session session, String eventType,
Bundle eventArgs) {
if (mListener != null) {