コード例 #1
0
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);

    current = new CurrentPracticeData();
    Integer lessonId = sharedPreferences.getInt("lesson_id", 0);
    updateTitleWithLessonName(lessonId);
    loadExercises(lessonId);
    current.setCurrentExercise(exercises.get(sharedPreferences.getInt("exercise_count", 0)));

    setContentView(R.layout.activity_practice);

    speech = SpeechRecognizer.createSpeechRecognizer(PracticeActivity.this);
    speech.setRecognitionListener(new CustomSpeechRecognition());
    recognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "en_US");
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, this.getPackageName());
    recognizerIntent.putExtra(
        RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 3);

    if (hasMoreExercises()) {
      selectNextExercise();
      TTS =
          new TextToSpeech(
              PracticeActivity.this,
              new TextToSpeech.OnInitListener() {
                @Override
                public void onInit(int status) {

                  startExercise();
                }
              });
    }
    checkConnection();
  }
コード例 #2
0
  /*Selects the exercise to run*/
  public void selectNextExercise() {

    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = sharedPreferences.edit();

    current.setCurrentExercise(exercises.get(sharedPreferences.getInt("exercise_count", 0)));

    if (hasMoreExercises()) {

      editor.putInt("exercise_count", (sharedPreferences.getInt("exercise_count", 0) + 1));

      if (current.getCurrentExercise().getScriptEntries().size() > 0) {
        current.setCurrentScriptIndex(0);
        current.setCurrentScriptEntry(
            current.getCurrentExercise().getScriptEntries().get(current.getCurrentScriptIndex()));
      }
    }

    editor.commit();
  }
コード例 #3
0
  private void runScriptEntry() {
    if (current.getShouldRunScript()) {
      ((Button) findViewById(R.id.btn_try_again)).setVisibility(View.GONE);
      current.setShouldRunScript(
          false); // prove to me again that I can execute everything ->go to the next exercise.

      if (current.getCurrentScriptIndex()
          < current.getCurrentExercise().getScriptEntries().size()) {

        final ScriptEntry s = current.getCurrentScriptEntry();
        if (s != null) {
          runOnUiThread(
              new Runnable() {

                @Override
                public void run() {

                  TextView child = new TextView(PracticeActivity.this);
                  child.setTextSize(20f);

                  LinearLayout parent = (LinearLayout) findViewById(R.id.contentFrame);
                  child.setText(s.getTextToShow());
                  LinearLayout.LayoutParams params =
                      new LinearLayout.LayoutParams(
                          LinearLayout.LayoutParams.WRAP_CONTENT,
                          LinearLayout.LayoutParams.WRAP_CONTENT);

                  child.setLayoutParams(params);
                  ArrayList<TextView> items = new ArrayList<>();

                  items.add(child);
                  for (int i = parent.getChildCount() - 1; i >= 0; i--) {
                    TextView t = (TextView) parent.getChildAt(i);
                    parent.removeViewAt(i);
                  }
                  parent.addView(child);
                }
              });

          // speak
          Bundle b = new Bundle();
          b.putString(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, s.get_id().toString());

          switch (s.getFunctionId()) {
            case 1: // The device is to speak (tts) the text_to_read (used to give instructions
              // about the exercises)
              TTS.setOnUtteranceProgressListener(
                  new UtteranceProgressListener() {
                    @Override
                    public void onStart(String utteranceId) {}

                    @Override
                    public void onDone(String utteranceId) {
                      if (current.getCurrentScriptEntry().getFunctionId() == 1) {
                        current.setShouldRunScript(true);
                        current.selectNextScript();
                        runScriptEntry();
                      }
                    }

                    @Override
                    public void onError(String utteranceId) {}
                  });
              TTS.speak(s.getTextToRead(), TextToSpeech.QUEUE_FLUSH, null, s.get_id().toString());

              break;

            case 2:
              // The device is to Read text(tts), Show sentence- tts, Listen to speech, Check
              // against database info= stt. Listen and compare.

              TTS.setOnUtteranceProgressListener(
                  new UtteranceProgressListener() {
                    @Override
                    public void onStart(String utteranceId) {
                      ((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(10);
                    }

                    @Override
                    public void onDone(String utteranceId) {
                      promptSpeechInput(); // shows mic screen
                      // if voice recognition fails, ask again. no touching button
                    }

                    @Override
                    public void onError(String utteranceId) {}
                  });
              TTS.speak(s.getTextToRead(), TextToSpeech.QUEUE_FLUSH, null, s.get_id().toString());

              break;

            case 3:
              // only checks the speech -> do not provide any kind of model
              // (neither spoken by the device nor on video)
              //                            this method needs a little more time, for the sake of
              // uability, to ask for the nest input. Users were getting confused about the sounds
              // built in the Voice Recognition
              new Handler()
                  .postDelayed(
                      new Runnable() {
                        @Override
                        public void run() {
                          promptSpeechInput();
                        }
                      },
                      TRANSITION_PAUSE);
              break;
            case 4:
              // shows video and asks for audio input then checks audio
              runOnUiThread(
                  new Runnable() {
                    @Override
                    public void run() {
                      final VideoView v = new VideoView(PracticeActivity.this);
                      final LinearLayout r = (LinearLayout) findViewById(R.id.videoFrame);
                      r.setVisibility(View.VISIBLE);
                      r.addView(v);
                      int videoResource =
                          getResources()
                              .getIdentifier("raw/" + s.getTextToRead(), null, getPackageName());

                      String path = "android.resource://" + getPackageName() + "/" + videoResource;
                      v.setVideoURI(Uri.parse(path));
                      v.setOnCompletionListener(
                          new MediaPlayer.OnCompletionListener() {
                            @Override
                            public void onCompletion(MediaPlayer mp) {
                              r.removeView(v);
                              promptSpeechInput();
                            }
                          });
                      v.setOnPreparedListener(
                          new MediaPlayer.OnPreparedListener() {
                            @Override
                            public void onPrepared(MediaPlayer mp) {

                              v.start();
                            }
                          });
                    }
                  });

              break;
            case 5: // only shows a video containing instructions. do not ask for audio back
              runOnUiThread(
                  new Runnable() {
                    @Override
                    public void run() {
                      final VideoView v = new VideoView(PracticeActivity.this);
                      final LinearLayout r = (LinearLayout) findViewById(R.id.videoFrame);
                      r.setVisibility(View.VISIBLE);
                      r.addView(v);
                      int videoResource =
                          getResources()
                              .getIdentifier("raw/" + s.getTextToRead(), null, getPackageName());

                      String path = "android.resource://" + getPackageName() + "/" + videoResource;
                      v.setVideoURI(Uri.parse(path));
                      v.setOnCompletionListener(
                          new MediaPlayer.OnCompletionListener() {
                            @Override
                            public void onCompletion(MediaPlayer mp) {
                              r.removeView(v);
                              current.setShouldRunScript(true);
                              current.selectNextScript();
                              runScriptEntry();
                            }
                          });
                      v.setOnPreparedListener(
                          new MediaPlayer.OnPreparedListener() {
                            @Override
                            public void onPrepared(MediaPlayer mp) {

                              v.start();
                            }
                          });
                    }
                  });

              break;
          }
        }

      } else { // exercise completed
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);

        if (exercises.size() > sharedPreferences.getInt("exercise_count", 0)) {

          Intent i = new Intent(PracticeActivity.this, TransitionActivity.class);
          startActivity(i);
          overridePendingTransition(R.anim.fade_in, R.anim.fade_out);

          current.setShouldRunScript(true);
        } else {
          Intent i = new Intent(PracticeActivity.this, LessonCompletedActivity.class);
          startActivity(i);
          overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
        }
        finish();
      }
    }
  }
コード例 #4
0
 /*Whenever tryAgain is called, the function runscriptentry is allowed because the variable shouldRunScript was changed to true*/
 public void tryAgain(View v) {
   ((Button) findViewById(R.id.btn_try_again)).setVisibility(View.GONE);
   current.setShouldRunScript(true);
   runScriptEntry();
 }