aboutsummaryrefslogtreecommitdiff
path: root/src/com/android/tv/dvr/DvrSessionManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/tv/dvr/DvrSessionManager.java')
-rw-r--r--src/com/android/tv/dvr/DvrSessionManager.java117
1 files changed, 40 insertions, 77 deletions
diff --git a/src/com/android/tv/dvr/DvrSessionManager.java b/src/com/android/tv/dvr/DvrSessionManager.java
index fba05cb6..553001e2 100644
--- a/src/com/android/tv/dvr/DvrSessionManager.java
+++ b/src/com/android/tv/dvr/DvrSessionManager.java
@@ -16,21 +16,18 @@
package com.android.tv.dvr;
-import android.annotation.TargetApi;
+import android.content.ComponentName;
import android.content.Context;
-import android.media.tv.TvInputInfo;
-import android.media.tv.TvInputManager;
-import android.media.tv.TvRecordingClient;
-import android.os.Build;
-import android.os.Handler;
+import android.media.tv.TvContract;
import android.support.annotation.Nullable;
-import android.support.annotation.VisibleForTesting;
import android.support.v4.util.ArrayMap;
-import android.util.Log;
-import com.android.tv.common.SoftPreconditions;
import com.android.tv.common.feature.CommonFeatures;
+import com.android.tv.common.recording.RecordingCapability;
+import com.android.tv.common.recording.TvRecording;
import com.android.tv.data.Channel;
+import com.android.tv.util.SoftPreconditions;
+import com.android.usbtuner.tvinput.UsbTunerTvInputService;
/**
* Manages Dvr Sessions.
@@ -40,91 +37,57 @@ import com.android.tv.data.Channel;
* <li>Manage capabilities (conflict)</li>
* </ul>
*/
-@TargetApi(Build.VERSION_CODES.N)
-public class DvrSessionManager extends TvInputManager.TvInputCallback {
- //consider moving all of this to TvInputManagerHelper
+public class DvrSessionManager {
private final static String TAG = "DvrSessionManager";
- private static final boolean DEBUG = false;
-
private final Context mContext;
- private final TvInputManager mTvInputManager;
- private final ArrayMap<String, TvInputInfo> mRecordingTvInputs = new ArrayMap<>();
+ private TvRecording.TvRecordingClient mRecordingClient;
+ private ArrayMap<String, RecordingCapability> mCapabilityMap = new ArrayMap<>();
public DvrSessionManager(Context context) {
- this(context, (TvInputManager) context.getSystemService(Context.TV_INPUT_SERVICE),
- new Handler());
- }
-
- @VisibleForTesting
- DvrSessionManager(Context context, TvInputManager tvInputManager, Handler handler) {
SoftPreconditions.checkFeatureEnabled(context, CommonFeatures.DVR, TAG);
- mTvInputManager = tvInputManager;
mContext = context.getApplicationContext();
- for (TvInputInfo info : tvInputManager.getTvInputList()) {
- if (DEBUG) {
- Log.d(TAG, info + " canRecord=" + info.canRecord() + " tunerCount=" + info
- .getTunerCount());
- }
- if (info.canRecord()) {
- mRecordingTvInputs.put(info.getId(), info);
+ // TODO(DVR): get a session to all clients, for now just get USB a TestInput
+ final String inputId = TvContract
+ .buildInputId(new ComponentName(context, UsbTunerTvInputService.class));
+ mRecordingClient = acquireDvrSession(inputId, null);
+ mRecordingClient.connect(inputId, new TvRecording.ClientCallback() {
+ @Override
+ public void onCapabilityReceived(RecordingCapability capability) {
+ mCapabilityMap.put(inputId, capability);
+ mRecordingClient.release();
+ mRecordingClient = null;
}
- }
- tvInputManager.registerCallback(this, handler);
+ });
+ if (CommonFeatures.DVR.isEnabled(context)) { // STOPSHIP(DVR)
+ String testInputId = "com.android.tv.testinput/.TestTvInputService";
+ mCapabilityMap.put(testInputId,
+ RecordingCapability.builder()
+ .setInputId(testInputId)
+ .setMaxConcurrentPlayingSessions(2)
+ .setMaxConcurrentTunedSessions(2)
+ .setMaxConcurrentSessionsOfAllTypes(3)
+ .build());
+ }
}
- public TvRecordingClient createTvRecordingClient(String tag,
- TvRecordingClient.RecordingCallback callback, Handler handler) {
- return new TvRecordingClient(mContext, tag, callback, handler);
+ public TvRecording.TvRecordingClient acquireDvrSession(String inputId, Channel channel) {
+ // TODO(DVR): use input and channel or change API
+ TvRecording.TvRecordingClient sessionClient = new TvRecording.TvRecordingClient(mContext);
+ return sessionClient;
}
public boolean canAcquireDvrSession(String inputId, Channel channel) {
- // TODO(DVR): implement checking tuner count etc.
- TvInputInfo info = mRecordingTvInputs.get(inputId);
- return info != null;
- }
-
- public void releaseTvRecordingClient(TvRecordingClient recordingClient) {
- recordingClient.release();
+ // TODO(DVR): implement
+ return true;
}
- @Override
- public void onInputAdded(String inputId) {
- super.onInputAdded(inputId);
- TvInputInfo info = mTvInputManager.getTvInputInfo(inputId);
- if (DEBUG) {
- Log.d(TAG, "onInputAdded " + info.toString() + " canRecord=" + info.canRecord()
- + " tunerCount=" + info.getTunerCount());
- }
- if (info.canRecord()) {
- mRecordingTvInputs.put(inputId, info);
- }
- }
-
- @Override
- public void onInputRemoved(String inputId) {
- super.onInputRemoved(inputId);
- if (DEBUG) Log.d(TAG, "onInputRemoved " + inputId);
- mRecordingTvInputs.remove(inputId);
- }
-
- @Override
- public void onInputUpdated(String inputId) {
- super.onInputUpdated(inputId);
- TvInputInfo info = mTvInputManager.getTvInputInfo(inputId);
- if (DEBUG) {
- Log.d(TAG, "onInputUpdated " + info.toString() + " canRecord=" + info.canRecord()
- + " tunerCount=" + info.getTunerCount());
- }
- if (info.canRecord()) {
- mRecordingTvInputs.put(inputId, info);
- } else {
- mRecordingTvInputs.remove(inputId);
- }
+ public void releaseDvrSession(TvRecording.TvRecordingClient session) {
+ session.release();
}
@Nullable
- public TvInputInfo getTvInputInfo(String inputId) {
- return mRecordingTvInputs.get(inputId);
+ public RecordingCapability getRecordingCapability(String inputId) {
+ return mCapabilityMap.get(inputId);
}
}