• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.android.car.messenger.tts;
2 
3 import android.content.Context;
4 import android.os.Bundle;
5 import android.speech.tts.TextToSpeech;
6 import android.speech.tts.UtteranceProgressListener;
7 
8 import java.util.LinkedList;
9 
10 /**
11  * Fake implementation of {@link TTSEngine} for unit-testing.
12  */
13 class FakeTTSEngine implements TTSEngine {
14     TextToSpeech.OnInitListener mOnInitListener;
15     UtteranceProgressListener mProgressListener;
16     LinkedList<Request> mRequests = new LinkedList<>();
17 
18     @Override
initialize(Context context, TextToSpeech.OnInitListener initListener)19     public void initialize(Context context, TextToSpeech.OnInitListener initListener) {
20         mOnInitListener = initListener;
21     }
22 
23     @Override
isInitialized()24     public boolean isInitialized() {
25         return mOnInitListener != null;
26     }
27 
28     @Override
setOnUtteranceProgressListener(UtteranceProgressListener progressListener)29     public void setOnUtteranceProgressListener(UtteranceProgressListener progressListener) {
30         mProgressListener = progressListener;
31     }
32 
33     @Override
speak(CharSequence text, int queueMode, Bundle params, String utteranceId)34     public int speak(CharSequence text, int queueMode, Bundle params, String utteranceId) {
35         mRequests.add(new Request(text, queueMode, params, utteranceId));
36         return TextToSpeech.SUCCESS;
37     }
38 
39     @Override
stop()40     public void stop() {
41         mRequests.clear();
42     }
43 
44     @Override
isSpeaking()45     public boolean isSpeaking() {
46         // NOTE: currently not used in tests.
47         return false;
48     }
49 
50     @Override
shutdown()51     public void shutdown() {
52         stop();
53         mOnInitListener = null;
54     }
55 
56     @Override
getStream()57     public int getStream() {
58         return TextToSpeech.Engine.DEFAULT_STREAM;
59     }
60 
startRequest(String utteranceId)61     void startRequest(String utteranceId) {
62         mProgressListener.onStart(utteranceId);
63     }
64 
finishRequest(String utteranceId)65     void finishRequest(String utteranceId) {
66         removeRequest(utteranceId);
67         mProgressListener.onDone(utteranceId);
68     }
69 
interruptRequest(String utteranceId, boolean interrupted)70     void interruptRequest(String utteranceId, boolean interrupted) {
71         removeRequest(utteranceId);
72         mProgressListener.onStop(utteranceId, interrupted);
73     }
74 
failRequest(String utteranceId, int errorCode)75     void failRequest(String utteranceId, int errorCode) {
76         removeRequest(utteranceId);
77         mProgressListener.onError(utteranceId, errorCode);
78     }
79 
removeRequest(String utteranceId)80     private void removeRequest(String utteranceId) {
81         mRequests.removeIf((request) -> request.mUtteranceId.equals(utteranceId));
82     }
83 
84     static class Request {
85         CharSequence mText;
86         int mQueueMode;
87         Bundle mParams;
88         String mUtteranceId;
89 
Request(CharSequence text, int queueMode, Bundle params, String utteranceId)90         public Request(CharSequence text, int queueMode, Bundle params, String utteranceId) {
91             mText = text;
92             mQueueMode = queueMode;
93             mParams = params;
94             mUtteranceId = utteranceId;
95         }
96     }
97 }
98