From 1fd3650e8d70131e7484a13f065f0ce48826c675 Mon Sep 17 00:00:00 2001 From: nchalko Date: Tue, 11 Sep 2018 10:56:08 -0700 Subject: PARTIL: stub implemenation of audio only tv sevice PiperOrigin-RevId: 212481708 Change-Id: Ic37db134007c97bba56b9b12f2f1ad87ec0ae093 --- .../tv/audiotvservice/AudioOnlyTvService.java | 52 +++++++++++++++++++++- .../tv/audiotvservice/AudioOnlyTvServiceUtil.java | 31 +++++++++++-- 2 files changed, 78 insertions(+), 5 deletions(-) (limited to 'src/com/android/tv/audiotvservice') diff --git a/src/com/android/tv/audiotvservice/AudioOnlyTvService.java b/src/com/android/tv/audiotvservice/AudioOnlyTvService.java index 06533ba8..fbbb2545 100644 --- a/src/com/android/tv/audiotvservice/AudioOnlyTvService.java +++ b/src/com/android/tv/audiotvservice/AudioOnlyTvService.java @@ -18,16 +18,27 @@ package com.android.tv.audiotvservice; import android.app.Notification; import android.app.Service; import android.content.Intent; +import android.media.session.MediaSession; +import android.net.Uri; import android.os.IBinder; import android.support.annotation.Nullable; import android.util.Log; +import com.android.tv.data.StreamInfo; +import com.android.tv.data.api.Channel; +import com.android.tv.ui.TunableTvView; +import com.android.tv.ui.TunableTvView.OnTuneListener; /** Foreground service for audio-only TV inputs. */ -public class AudioOnlyTvService extends Service { +public class AudioOnlyTvService extends Service implements OnTuneListener { // TODO(b/110969180): implement this service. private static final String TAG = "AudioOnlyTvService"; private static final int NOTIFICATION_ID = 1; + @Nullable private String mTvInputId; + private TunableTvView mTvView; + // TODO(b/110969180): perhaps use MediaSessionWrapper + private MediaSession mMediaSession; + @Nullable @Override public IBinder onBind(Intent intent) { @@ -38,17 +49,54 @@ public class AudioOnlyTvService extends Service { @Override public void onCreate() { Log.i(TAG, "onCreate"); + // TODO(b/110969180): create TvView + } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i(TAG, "onStartCommand. flags = " + flags + ", startId = " + startId); + // TODO(b/110969180): real notification and or media session startForeground(NOTIFICATION_ID, new Notification()); - return super.onStartCommand(intent, flags, startId); + mTvInputId = AudioOnlyTvServiceUtil.getInputIdFromIntent(intent); + tune(mTvInputId); + return START_STICKY; + } + + private void tune(String mTvInputId) { + // TODO(b/110969180): get proper channel + Channel channel = null; + mTvView.tuneTo(channel, null, this); } @Override public void onDestroy() { Log.i(TAG, "onDestroy"); + mTvInputId = null; + // TODO(b/110969180): clear TvView } + + // TODO(b/110969180): figure out when to stop ourselves, mediaSession event? + + // TODO(b/110969180): handle OnTuner Listener + @Override + public void onTuneFailed(Channel channel) {} + + @Override + public void onUnexpectedStop(Channel channel) {} + + @Override + public void onStreamInfoChanged(StreamInfo info, boolean allowAutoSelectionOfTrack) {} + + @Override + public void onChannelRetuned(Uri channel) {} + + @Override + public void onContentBlocked() {} + + @Override + public void onContentAllowed() {} + + @Override + public void onChannelSignalStrength() {} } diff --git a/src/com/android/tv/audiotvservice/AudioOnlyTvServiceUtil.java b/src/com/android/tv/audiotvservice/AudioOnlyTvServiceUtil.java index dc4f41dd..7ffe8833 100644 --- a/src/com/android/tv/audiotvservice/AudioOnlyTvServiceUtil.java +++ b/src/com/android/tv/audiotvservice/AudioOnlyTvServiceUtil.java @@ -19,16 +19,22 @@ import android.content.Context; import android.content.Intent; import android.os.Build; import android.support.annotation.MainThread; +import android.support.annotation.Nullable; import android.util.Log; /** Utility methods to start and stop audio only TV Player. */ -public class AudioOnlyTvServiceUtil { +public final class AudioOnlyTvServiceUtil { private static final String TAG = "AudioOnlyTvServiceUtil"; + private static final String EXTRA_INPUT_ID = "intputId"; @MainThread public static void startAudioOnlyInput(Context context, String tvInputId) { Log.i(TAG, "startAudioOnlyInput"); - Intent intent = new Intent(context, AudioOnlyTvService.class); + Intent intent = getIntent(context); + if (intent == null) { + return; + } + intent.putExtra(EXTRA_INPUT_ID, tvInputId); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { context.startForegroundService(intent); } else { @@ -36,8 +42,27 @@ public class AudioOnlyTvServiceUtil { } } + @Nullable + private static Intent getIntent(Context context) { + try { + return new Intent( + context, Class.forName("com.android.tv.audiotvservice.AudioOnlyTvService")); + } catch (ClassNotFoundException e) { + Log.wtf(TAG, e); + return null; + } + } + @MainThread - public static void stopAudioOnlyInput() { + public static void stopAudioOnlyInput(Context context) { Log.i(TAG, "stopForegroundService"); + context.stopService(getIntent(context)); } + + @Nullable + public static String getInputIdFromIntent(Intent intent) { + return intent.getStringExtra(EXTRA_INPUT_ID); + } + + private AudioOnlyTvServiceUtil() {} } -- cgit v1.2.3