/examples/android/app/src/main/java/com/tensorspeech/tensorflowtts/dispatcher/TtsStateDispatcher.java

https://github.com/dathudeptrai/TensorflowTTS · Java · 79 lines · 63 code · 12 blank · 4 comment · 12 complexity · b1fdfb905146542613728e7090641a39 MD5 · raw file

  1. package com.tensorspeech.tensorflowtts.dispatcher;
  2. import android.os.Handler;
  3. import android.os.Looper;
  4. import android.util.Log;
  5. import java.util.concurrent.CopyOnWriteArrayList;
  6. /**
  7. * @author {@link "mailto:xuefeng.ding@outlook.com" "Xuefeng Ding"}
  8. * Created 2020-07-28 14:25
  9. */
  10. public class TtsStateDispatcher {
  11. private static final String TAG = "TtsStateDispatcher";
  12. private static volatile TtsStateDispatcher instance;
  13. private static final Object INSTANCE_WRITE_LOCK = new Object();
  14. public static TtsStateDispatcher getInstance() {
  15. if (instance == null) {
  16. synchronized (INSTANCE_WRITE_LOCK) {
  17. if (instance == null) {
  18. instance = new TtsStateDispatcher();
  19. }
  20. }
  21. }
  22. return instance;
  23. }
  24. private final Handler handler = new Handler(Looper.getMainLooper());
  25. private CopyOnWriteArrayList<OnTtsStateListener> mListeners = new CopyOnWriteArrayList<>();
  26. public void release() {
  27. Log.d(TAG, "release: ");
  28. mListeners.clear();
  29. }
  30. public void addListener(OnTtsStateListener listener) {
  31. if (mListeners.contains(listener)) {
  32. return;
  33. }
  34. Log.d(TAG, "addListener: " + listener.getClass());
  35. mListeners.add(listener);
  36. }
  37. public void removeListener(OnTtsStateListener listener) {
  38. if (mListeners.contains(listener)) {
  39. Log.d(TAG, "removeListener: " + listener.getClass());
  40. mListeners.remove(listener);
  41. }
  42. }
  43. public void onTtsStart(String text){
  44. Log.d(TAG, "onTtsStart: ");
  45. if (!mListeners.isEmpty()) {
  46. for (OnTtsStateListener listener : mListeners) {
  47. handler.post(() -> listener.onTtsStart(text));
  48. }
  49. }
  50. }
  51. public void onTtsStop(){
  52. Log.d(TAG, "onTtsStop: ");
  53. if (!mListeners.isEmpty()) {
  54. for (OnTtsStateListener listener : mListeners) {
  55. handler.post(listener::onTtsStop);
  56. }
  57. }
  58. }
  59. public void onTtsReady(){
  60. Log.d(TAG, "onTtsReady: ");
  61. if (!mListeners.isEmpty()) {
  62. for (OnTtsStateListener listener : mListeners) {
  63. handler.post(listener::onTtsReady);
  64. }
  65. }
  66. }
  67. }