• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.media.tv.interactive.cts;
18 
19 import android.content.Context;
20 import android.graphics.Rect;
21 import android.media.PlaybackParams;
22 import android.media.tv.AdBuffer;
23 import android.media.tv.AdRequest;
24 import android.media.tv.AdResponse;
25 import android.media.tv.BroadcastInfoRequest;
26 import android.media.tv.BroadcastInfoResponse;
27 import android.media.tv.TvContentRating;
28 import android.media.tv.TvRecordingInfo;
29 import android.media.tv.TvTrackInfo;
30 import android.media.tv.interactive.AppLinkInfo;
31 import android.media.tv.interactive.TvInteractiveAppManager;
32 import android.media.tv.interactive.TvInteractiveAppService;
33 import android.net.Uri;
34 import android.os.Bundle;
35 import android.view.KeyEvent;
36 import android.view.MotionEvent;
37 import android.view.Surface;
38 import android.view.View;
39 
40 import java.util.List;
41 
42 /**
43  * Stub implementation of (@link android.media.tv.interactive.TvInteractiveAppService}.
44  */
45 public class StubTvInteractiveAppService extends TvInteractiveAppService {
46 
47     public static StubSessionImpl sSession;
48     public static int sType;
49     public static Bundle sAppLinkCommand = null;
50     public static AppLinkInfo sAppLinkInfo = null;
51 
52     @Override
onCreateSession(String iAppServiceId, int type)53     public Session onCreateSession(String iAppServiceId, int type) {
54         sSession = new StubSessionImpl(this);
55         return sSession;
56     }
57 
58     @Override
onAppLinkCommand(Bundle command)59     public void onAppLinkCommand(Bundle command) {
60         super.onAppLinkCommand(command);
61         sAppLinkCommand = command;
62     }
63 
64     @Override
onRegisterAppLinkInfo(AppLinkInfo bundle)65     public void onRegisterAppLinkInfo(AppLinkInfo bundle) {
66         super.onRegisterAppLinkInfo(bundle);
67         sAppLinkInfo = bundle;
68     }
69 
70     @Override
onUnregisterAppLinkInfo(AppLinkInfo bundle)71     public void onUnregisterAppLinkInfo(AppLinkInfo bundle) {
72         super.onUnregisterAppLinkInfo(bundle);
73         sAppLinkInfo = null;
74     }
75 
76     public static class StubSessionImpl extends Session {
77         public int mSetSurfaceCount;
78         public int mSurfaceChangedCount;
79         public int mStartInteractiveAppCount;
80         public int mStopInteractiveAppCount;
81         public int mKeyDownCount;
82         public int mKeyUpCount;
83         public int mKeyMultipleCount;
84         public int mVideoAvailableCount;
85         public int mTunedCount;
86         public int mCreateBiIAppCount;
87         public int mDestroyBiIAppCount;
88         public int mAdResponseCount;
89         public int mAdBufferConsumedCount;
90         public int mBroadcastInfoResponseCount;
91         public int mSigningResultCount;
92         public int mErrorCount;
93         public int mRecordingStartedCount;
94         public int mRecordingStoppedCount;
95         public int mRecordingScheduledCount;
96         public int mPlaybackParamCount;
97         public int mTimeShiftModeCount;
98         public int mAvailableSpeedsCount;
99         public int mTimeShiftStatusCount;
100         public int mTimeShiftStartPositionCount;
101         public int mTimeShiftCurrentPositionCount;
102         public int mTvMessageCount;
103         public int mSendTvRecordingInfoCount;
104         public int mSendTvRecordingInfoListCount;
105         public int mCurrentVideoBoundsCount;
106         public int mRecordingTunedCount;
107         public int mRecordingConnectionFailedCount;
108         public int mRecordingDisconnected;
109         public int mRecordingErrorCount;
110 
111         public Integer mKeyDownCode;
112         public Integer mKeyUpCode;
113         public Integer mKeyMultipleCode;
114         public KeyEvent mKeyDownEvent;
115         public KeyEvent mKeyUpEvent;
116         public KeyEvent mKeyMultipleEvent;
117         public Uri mTunedUri;
118         public Uri mCreateBiIAppUri;
119         public Bundle mCreateBiIAppParams;
120         public String mDestroyBiIAppId;
121         public AdResponse mAdResponse;
122         public BroadcastInfoResponse mBroadcastInfoResponse;
123         public String mRecordingId;
124         public String mRequestId;
125         public PlaybackParams mPlaybackParams;
126         public Integer mTimeShiftMode;
127         public float[] mAvailableSpeeds;
128         public Integer mTimeShiftStatus;
129         public String mInputId;
130         public Long mTimeShiftStartPosition;
131         public Long mTimeShiftCurrentPosition;
132         public Integer mTvMessageType;
133         public Bundle mTvMessageData;
134         public AdBuffer mAdBuffer;
135         public TvRecordingInfo mTvRecordingInfo;
136         public List<TvRecordingInfo> mTvRecordingInfoList;
137         public Rect mCurrentVideoBounds;
138         public Integer mRecordingError;
139 
StubSessionImpl(Context context)140         StubSessionImpl(Context context) {
141             super(context);
142         }
143 
resetValues()144         public void resetValues() {
145             mSetSurfaceCount = 0;
146             mSurfaceChangedCount = 0;
147             mStartInteractiveAppCount = 0;
148             mStopInteractiveAppCount = 0;
149             mKeyDownCount = 0;
150             mKeyUpCount = 0;
151             mKeyMultipleCount = 0;
152             mVideoAvailableCount = 0;
153             mTunedCount = 0;
154             mCreateBiIAppCount = 0;
155             mDestroyBiIAppCount = 0;
156             mAdResponseCount = 0;
157             mBroadcastInfoResponseCount = 0;
158             mSigningResultCount = 0;
159             mErrorCount = 0;
160             mRecordingStartedCount = 0;
161             mRecordingStoppedCount = 0;
162             mRecordingScheduledCount = 0;
163             mPlaybackParamCount = 0;
164             mTimeShiftModeCount = 0;
165             mAvailableSpeedsCount = 0;
166             mTimeShiftStatusCount = 0;
167             mTimeShiftCurrentPositionCount = 0;
168             mTimeShiftStartPositionCount = 0;
169             mTvMessageCount = 0;
170             mAdBufferConsumedCount = 0;
171             mSendTvRecordingInfoCount = 0;
172             mSendTvRecordingInfoListCount = 0;
173             mCurrentVideoBoundsCount = 0;
174             mRecordingTunedCount = 0;
175             mRecordingConnectionFailedCount = 0;
176             mRecordingDisconnected = 0;
177             mRecordingErrorCount = 0;
178 
179             mKeyDownCode = null;
180             mKeyUpCode = null;
181             mKeyMultipleCode = null;
182             mKeyDownEvent = null;
183             mKeyUpEvent = null;
184             mKeyMultipleEvent = null;
185             mTunedUri = null;
186             mCreateBiIAppUri = null;
187             mCreateBiIAppParams = null;
188             mDestroyBiIAppId = null;
189             mAdResponse = null;
190             mBroadcastInfoResponse = null;
191             mRecordingId = null;
192             mRequestId = null;
193             mPlaybackParams = null;
194             mTimeShiftMode = null;
195             mAvailableSpeeds = new float[]{};
196             mTimeShiftStatus = null;
197             mInputId = null;
198             mTimeShiftCurrentPosition = null;
199             mTimeShiftStartPosition = null;
200             mTvMessageData = null;
201             mTvMessageType = null;
202             mAdBuffer = null;
203             mTvRecordingInfo = null;
204             mTvRecordingInfoList = null;
205             mCurrentVideoBounds = null;
206             mRecordingError = null;
207         }
208 
209         @Override
layoutSurface(int left, int top, int right, int bottom)210         public void layoutSurface(int left, int top, int right, int bottom) {
211             super.layoutSurface(left, top, right, bottom);
212         }
213 
214         @Override
notifySessionStateChanged(int state, int err)215         public void notifySessionStateChanged(int state, int err) {
216             super.notifySessionStateChanged(state, err);
217         }
218 
219         @Override
removeBroadcastInfo(int requestId)220         public void removeBroadcastInfo(int requestId) {
221             super.removeBroadcastInfo(requestId);
222         }
223 
224         @Override
requestAd(AdRequest request)225         public void requestAd(AdRequest request) {
226             super.requestAd(request);
227         }
228 
229         @Override
requestBroadcastInfo(BroadcastInfoRequest request)230         public void requestBroadcastInfo(BroadcastInfoRequest request) {
231             super.requestBroadcastInfo(request);
232         }
233 
234         @Override
requestCurrentChannelLcn()235         public void requestCurrentChannelLcn() {
236             super.requestCurrentChannelLcn();
237         }
238 
239         @Override
requestCurrentChannelUri()240         public void requestCurrentChannelUri() {
241             super.requestCurrentChannelUri();
242         }
243 
244         @Override
requestCurrentTvInputId()245         public void requestCurrentTvInputId() {
246             super.requestCurrentTvInputId();
247         }
248 
249         @Override
requestStreamVolume()250         public void requestStreamVolume() {
251             super.requestStreamVolume();
252         }
253 
254         @Override
requestTrackInfoList()255         public void requestTrackInfoList() {
256             super.requestTrackInfoList();
257         }
258 
259         @Override
requestScheduleRecording(String requestId, String inputId, Uri channelUri, Uri programUri, Bundle params)260         public void requestScheduleRecording(String requestId, String inputId, Uri channelUri,
261                 Uri programUri, Bundle params) {
262             super.requestScheduleRecording(requestId, inputId, channelUri, programUri, params);
263         }
264 
265         @Override
requestScheduleRecording(String requestId, String inputId, Uri channelUri, long startTime, long duration, int repeatedDays, Bundle params)266         public void requestScheduleRecording(String requestId, String inputId, Uri channelUri,
267                 long startTime, long duration, int repeatedDays, Bundle params) {
268             super.requestScheduleRecording(
269                     requestId, inputId, channelUri, startTime, duration, repeatedDays, params);
270         }
271 
272         @Override
requestAvailableSpeeds()273         public void requestAvailableSpeeds() {
274             super.requestAvailableSpeeds();
275         }
276 
277         @Override
requestTimeShiftMode()278         public void requestTimeShiftMode() {
279             super.requestTimeShiftMode();
280         }
281 
282         @Override
sendPlaybackCommandRequest(String cmdType, Bundle parameters)283         public void sendPlaybackCommandRequest(String cmdType, Bundle parameters) {
284             super.sendPlaybackCommandRequest(cmdType, parameters);
285         }
286 
287         @Override
sendTimeShiftCommandRequest(String cmdType, Bundle parameters)288         public void sendTimeShiftCommandRequest(String cmdType, Bundle parameters) {
289             super.sendTimeShiftCommandRequest(cmdType, parameters);
290         }
291 
292         @Override
setMediaViewEnabled(boolean enable)293         public void setMediaViewEnabled(boolean enable) {
294             super.setMediaViewEnabled(enable);
295         }
296 
297         @Override
setVideoBounds(Rect rect)298         public void setVideoBounds(Rect rect) {
299             super.setVideoBounds(rect);
300         }
301 
302         @Override
onStartInteractiveApp()303         public void onStartInteractiveApp() {
304             super.onStartInteractiveApp();
305             mStartInteractiveAppCount++;
306             notifySessionStateChanged(
307                     TvInteractiveAppManager.INTERACTIVE_APP_STATE_RUNNING,
308                     TvInteractiveAppManager.ERROR_NONE);
309         }
310 
311         @Override
onStopInteractiveApp()312         public void onStopInteractiveApp() {
313             super.onStopInteractiveApp();
314             mStopInteractiveAppCount++;
315         }
316 
317         @Override
onRelease()318         public void onRelease() {
319         }
320 
321         @Override
onSetSurface(Surface surface)322         public boolean onSetSurface(Surface surface) {
323             mSetSurfaceCount++;
324             return false;
325         }
326 
327         @Override
onSurfaceChanged(int format, int width, int height)328         public void onSurfaceChanged(int format, int width, int height) {
329             super.onSurfaceChanged(format, width, height);
330             mSurfaceChangedCount++;
331         }
332 
333         @Override
onKeyDown(int keyCode, KeyEvent event)334         public boolean onKeyDown(int keyCode, KeyEvent event) {
335             super.onKeyDown(keyCode, event);
336             mKeyDownCount++;
337             mKeyDownCode = keyCode;
338             mKeyDownEvent = event;
339             return false;
340         }
341 
342         @Override
onKeyLongPress(int keyCode, KeyEvent event)343         public boolean onKeyLongPress(int keyCode, KeyEvent event) {
344             super.onKeyLongPress(keyCode, event);
345             return false;
346         }
347 
348         @Override
onKeyUp(int keyCode, KeyEvent event)349         public boolean onKeyUp(int keyCode, KeyEvent event) {
350             super.onKeyUp(keyCode, event);
351             mKeyUpCount++;
352             mKeyUpCode = keyCode;
353             mKeyUpEvent = event;
354             return false;
355         }
356 
357         @Override
onKeyMultiple(int keyCode, int count, KeyEvent event)358         public boolean onKeyMultiple(int keyCode, int count, KeyEvent event) {
359             super.onKeyMultiple(keyCode, count, event);
360             mKeyMultipleCount++;
361             mKeyMultipleCode = keyCode;
362             mKeyMultipleEvent = event;
363             return false;
364         }
365 
366         @Override
onCreateBiInteractiveAppRequest(Uri biIAppUri, Bundle params)367         public void onCreateBiInteractiveAppRequest(Uri biIAppUri, Bundle params) {
368             super.onCreateBiInteractiveAppRequest(biIAppUri, params);
369             mCreateBiIAppCount++;
370             mCreateBiIAppUri = biIAppUri;
371             mCreateBiIAppParams = params;
372             notifyBiInteractiveAppCreated(biIAppUri, "biIAppId");
373         }
374 
375         @Override
onDestroyBiInteractiveAppRequest(String biIAppId)376         public void onDestroyBiInteractiveAppRequest(String biIAppId) {
377             super.onDestroyBiInteractiveAppRequest(biIAppId);
378             mDestroyBiIAppCount++;
379             mDestroyBiIAppId = biIAppId;
380         }
381 
382         @Override
onTuned(Uri uri)383         public void onTuned(Uri uri) {
384             super.onTuned(uri);
385             mTunedCount++;
386             mTunedUri = uri;
387         }
388 
389         @Override
onVideoAvailable()390         public void onVideoAvailable() {
391             super.onVideoAvailable();
392             mVideoAvailableCount++;
393         }
394 
395         @Override
onAdResponse(AdResponse response)396         public void onAdResponse(AdResponse response) {
397             super.onAdResponse(response);
398             mAdResponseCount++;
399             mAdResponse = response;
400         }
401 
402         @Override
onBroadcastInfoResponse(BroadcastInfoResponse response)403         public void onBroadcastInfoResponse(BroadcastInfoResponse response) {
404             super.onBroadcastInfoResponse(response);
405             mBroadcastInfoResponseCount++;
406             mBroadcastInfoResponse = response;
407         }
408 
409         @Override
onContentAllowed()410         public void onContentAllowed() {
411             super.onContentAllowed();
412         }
413 
414         @Override
onContentBlocked(TvContentRating rating)415         public void onContentBlocked(TvContentRating rating) {
416             super.onContentBlocked(rating);
417         }
418 
419         @Override
onCreateMediaView()420         public View onCreateMediaView() {
421             super.onCreateMediaView();
422             return null;
423         }
424 
425         @Override
onCurrentChannelLcn(int lcn)426         public void onCurrentChannelLcn(int lcn) {
427             super.onCurrentChannelLcn(lcn);
428         }
429 
430         @Override
onCurrentChannelUri(Uri uri)431         public void onCurrentChannelUri(Uri uri) {
432             super.onCurrentChannelUri(uri);
433         }
434 
435         @Override
onCurrentTvInputId(String id)436         public void onCurrentTvInputId(String id) {
437             super.onCurrentTvInputId(id);
438         }
439 
440         @Override
onCurrentVideoBounds(Rect rect)441         public void onCurrentVideoBounds(Rect rect) {
442             super.onCurrentVideoBounds(rect);
443             mCurrentVideoBoundsCount++;
444             mCurrentVideoBounds = rect;
445         }
446 
447         @Override
onGenericMotionEvent(MotionEvent event)448         public boolean onGenericMotionEvent(MotionEvent event) {
449             super.onGenericMotionEvent(event);
450             return false;
451         }
452 
453         @Override
onMediaViewSizeChanged(int w, int h)454         public void onMediaViewSizeChanged(int w, int h) {
455             super.onMediaViewSizeChanged(w, h);
456         }
457 
458         @Override
onResetInteractiveApp()459         public void onResetInteractiveApp() {
460             super.onResetInteractiveApp();
461         }
462 
463         @Override
onSetTeletextAppEnabled(boolean enable)464         public void onSetTeletextAppEnabled(boolean enable) {
465             super.onSetTeletextAppEnabled(enable);
466         }
467 
468         @Override
onSignalStrength(int strength)469         public void onSignalStrength(int strength) {
470             super.onSignalStrength(strength);
471         }
472 
473         @Override
onStreamVolume(float v)474         public void onStreamVolume(float v) {
475             super.onStreamVolume(v);
476         }
477 
478         @Override
onTouchEvent(MotionEvent event)479         public boolean onTouchEvent(MotionEvent event) {
480             super.onTouchEvent(event);
481             return false;
482         }
483 
484         @Override
onTrackInfoList(List<TvTrackInfo> infos)485         public void onTrackInfoList(List<TvTrackInfo> infos) {
486             super.onTrackInfoList(infos);
487         }
488 
489         @Override
onTrackSelected(int type, String id)490         public void onTrackSelected(int type, String id) {
491             super.onTrackSelected(type, id);
492         }
493 
494         @Override
onTrackballEvent(MotionEvent event)495         public boolean onTrackballEvent(MotionEvent event) {
496             super.onTrackballEvent(event);
497             return false;
498         }
499 
500         @Override
onTracksChanged(List<TvTrackInfo> infos)501         public void onTracksChanged(List<TvTrackInfo> infos) {
502             super.onTracksChanged(infos);
503         }
504 
505         @Override
onVideoUnavailable(int reason)506         public void onVideoUnavailable(int reason) {
507             super.onVideoUnavailable(reason);
508         }
509 
510         @Override
onSigningResult(String signingId, byte[] result)511         public void onSigningResult(String signingId, byte[] result) {
512             super.onSigningResult(signingId, result);
513             mSigningResultCount++;
514         }
515 
516         @Override
onError(String errMsg, Bundle params)517         public void onError(String errMsg, Bundle params) {
518             super.onError(errMsg, params);
519             mErrorCount++;
520         }
521 
522         @Override
onRecordingStarted(String recordingId, String requestId)523         public void onRecordingStarted(String recordingId, String requestId) {
524             super.onRecordingStarted(recordingId, requestId);
525             mRecordingStartedCount++;
526             mRecordingId = recordingId;
527             mRequestId = requestId;
528         }
529 
530         @Override
onRecordingStopped(String recordingId)531         public void onRecordingStopped(String recordingId) {
532             super.onRecordingStopped(recordingId);
533             mRecordingStoppedCount++;
534             mRecordingId = recordingId;
535         }
536 
537         @Override
onRecordingScheduled(String recordingId, String requestId)538         public void onRecordingScheduled(String recordingId, String requestId) {
539             super.onRecordingScheduled(recordingId, requestId);
540             mRecordingScheduledCount++;
541             mRecordingId = recordingId;
542             mRequestId = requestId;
543         }
544 
545         @Override
onTimeShiftPlaybackParams(PlaybackParams params)546         public void onTimeShiftPlaybackParams(PlaybackParams params) {
547             super.onTimeShiftPlaybackParams(params);
548             mPlaybackParamCount++;
549             mPlaybackParams = params;
550         }
551 
552         @Override
onTimeShiftMode(int mode)553         public void onTimeShiftMode(int mode) {
554             super.onTimeShiftMode(mode);
555             mTimeShiftMode = mode;
556             mTimeShiftModeCount++;
557         }
558 
559         @Override
onAvailableSpeeds(float[] availableSpeeds)560         public void onAvailableSpeeds(float[] availableSpeeds) {
561             super.onAvailableSpeeds(availableSpeeds);
562             mAvailableSpeedsCount++;
563             mAvailableSpeeds = availableSpeeds;
564         }
565 
566         @Override
onTimeShiftStartPositionChanged(String inputId, long timeMs)567         public void onTimeShiftStartPositionChanged(String inputId, long timeMs) {
568             super.onTimeShiftStartPositionChanged(inputId, timeMs);
569             mTimeShiftStartPosition = timeMs;
570             mInputId = inputId;
571             mTimeShiftStartPositionCount++;
572         }
573 
574         @Override
onTimeShiftCurrentPositionChanged(String inputId, long timeMs)575         public void onTimeShiftCurrentPositionChanged(String inputId, long timeMs) {
576             super.onTimeShiftCurrentPositionChanged(inputId, timeMs);
577             mTimeShiftCurrentPosition = timeMs;
578             mTimeShiftCurrentPositionCount++;
579             mInputId = inputId;
580         }
581 
582         @Override
onTimeShiftStatusChanged(String inputId, int status)583         public void onTimeShiftStatusChanged(String inputId, int status) {
584             super.onTimeShiftStatusChanged(inputId, status);
585             mTimeShiftStatusCount++;
586             mTimeShiftStatus = status;
587             mInputId = inputId;
588         }
589 
590         @Override
onTvMessage(int type, Bundle data)591         public void onTvMessage(int type, Bundle data) {
592             super.onTvMessage(type, data);
593             mTvMessageCount++;
594             mTvMessageType = type;
595             mTvMessageData = data;
596         }
597 
598         @Override
onAdBufferConsumed(AdBuffer adBuffer)599         public void onAdBufferConsumed(AdBuffer adBuffer) {
600             super.onAdBufferConsumed(adBuffer);
601             mAdBufferConsumedCount++;
602             mAdBuffer = adBuffer;
603         }
604 
605         @Override
onTvRecordingInfo(TvRecordingInfo tvRecordingInfo)606         public void onTvRecordingInfo(TvRecordingInfo tvRecordingInfo) {
607             super.onTvRecordingInfo(tvRecordingInfo);
608             mSendTvRecordingInfoCount++;
609             mTvRecordingInfo = tvRecordingInfo;
610         }
611 
612         @Override
onTvRecordingInfoList(List<TvRecordingInfo> recordingInfoList)613         public void onTvRecordingInfoList(List<TvRecordingInfo> recordingInfoList) {
614             super.onTvRecordingInfoList(recordingInfoList);
615             mSendTvRecordingInfoListCount++;
616             mTvRecordingInfoList = recordingInfoList;
617         }
618 
619         @Override
onRecordingTuned(String recordingId, Uri channelUri)620         public void onRecordingTuned(String recordingId, Uri channelUri) {
621             mRecordingTunedCount++;
622             mRecordingId = recordingId;
623             mTunedUri = channelUri;
624         }
625 
626         @Override
onRecordingConnectionFailed(String recordingId, String inputId)627         public void onRecordingConnectionFailed(String recordingId, String inputId) {
628             super.onRecordingConnectionFailed(recordingId, inputId);
629             mRecordingConnectionFailedCount++;
630             mRecordingId = recordingId;
631             mInputId = inputId;
632         }
633 
634         @Override
onRecordingDisconnected(String recordingId, String inputId)635         public void onRecordingDisconnected(String recordingId, String inputId) {
636             super.onRecordingDisconnected(recordingId, inputId);
637             mRecordingDisconnected++;
638             mRecordingId = recordingId;
639             mInputId = inputId;
640         }
641 
642         @Override
onRecordingError(String recordingId, int err)643         public void onRecordingError(String recordingId, int err) {
644             super.onRecordingError(recordingId, err);
645             mRecordingErrorCount++;
646             mRecordingId = recordingId;
647             mRecordingError = err;
648         }
649     }
650 }
651