Skip to content

Commit

Permalink
Added TTS for zh (TW, CN) and pa
Browse files Browse the repository at this point in the history
  • Loading branch information
andreihar committed Jun 10, 2022
1 parent 82432f5 commit 99837c9
Showing 7 changed files with 176 additions and 26 deletions.
68 changes: 43 additions & 25 deletions app/src/main/java/com/example/firstapp/FirstFragment.java
Original file line number Diff line number Diff line change
@@ -32,7 +32,7 @@ public class FirstFragment extends Fragment {
private TextToSpeech mTTS;
private Random random;
private int score = 0, questionBlockPosition = 0, questionPosition = 0;
private boolean firstIncorrect = false, TTSOn = false;
private boolean firstIncorrect = false, TTSOn = true;
private MediaPlayer player; // Takes a lot of resources, create only where necessary

@Override
@@ -43,23 +43,35 @@ public View onCreateView(
// Inflate the Layout for this Fragment
View fragmentFirstLayout = inflater.inflate(R.layout.fragment_first, container, false);
// Initialise TextToSpeech
String googleTtsPackage = "com.google.android.tts", picoPackage = "com.svox.pico";
mTTS = new TextToSpeech(getActivity(), new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
int result = mTTS.setLanguage(Locale.UK);
int result;
switch(Locale.getDefault().getLanguage()) {
case "zh":
if (Locale.getDefault().getCountry() == "TW")
result = mTTS.setLanguage(new Locale("zh", "TW"));
else
result = mTTS.setLanguage(new Locale("zh", "CN"));
break;
case "pa":
result = mTTS.setLanguage(new Locale("pa", "IN"));
default:
result = mTTS.setLanguage(new Locale("en", "GB"));
}
if (result == TextToSpeech.LANG_MISSING_DATA // Check for supported languages
|| result == TextToSpeech.LANG_NOT_SUPPORTED) {
Log.e("TTS", "Language not supported");
} else {
TTSOn = true;
TTSQuestion();
Log.e("TTS", "Language not supported, set to default");
mTTS.setLanguage(new Locale("en", "GB"));
}
TTSQuestion();
} else {
Log.e("TTS", "Initialisation failed");
}
}
});
}, googleTtsPackage);

// Get the Count and Question TextView
questionTV = fragmentFirstLayout.findViewById(R.id.question);
@@ -158,9 +170,9 @@ private void optionAction(@NonNull ArrayList<QuestionBlock> quizModalArrayList,
// Hint and remaining Options after incorrect answer.
// Precondition: TTS option is ON in settings
// Postcondition: TTS appropriate text strings
// Exception: Throws TTSSleepInterruptedException if sleep() got interrupted.
private void TTSQuestion() {
stopPlayer(player);
System.out.println("The value of TTSOn = " + TTSOn);
if (!TTSOn) {
return;
}
@@ -169,7 +181,12 @@ private void TTSQuestion() {
if (!firstIncorrect)
mTTS.speak(questionTV.getText().toString(), TextToSpeech.QUEUE_ADD, null);
if (firstIncorrect) {
mTTS.speak("Hint: ", TextToSpeech.QUEUE_ADD, null);
mTTS.speak(getString(R.string.hint_tts), TextToSpeech.QUEUE_ADD, null);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
Log.e("TTS", "Sleep interrupted");
}
player = MediaPlayer.create(getActivity(), quizModalArrayList.get(questionBlockPosition).getQuestionArray(questionPosition).getHint());
player.start();
player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@@ -199,10 +216,9 @@ public void onCompletion(MediaPlayer mediaPlayer) {
private void TTSQuestionButton(@NonNull Button button, int i) {
// BUG: Colour changes despite button being disabled
// IMPLEMENT: Highlight button while speak() is in progress
System.out.println(i + "is active: " + button.isEnabled());
if (button.isEnabled() && button.getVisibility() == View.VISIBLE) {
//button.setTextColor(getResources().getColor(R.color.highlight_button));
mTTS.speak("Option" + i + ":" + button.getText().toString(), TextToSpeech.QUEUE_ADD, null);
mTTS.speak(getString(R.string.option_tts) + i + ":" + button.getText().toString(), TextToSpeech.QUEUE_ADD, null);
//button.setTextColor(getResources().getColor(R.color.white));
}
}
@@ -211,27 +227,29 @@ private void TTSQuestionButton(@NonNull Button button, int i) {
// Precondition: -
// Postcondition: quizModalArray populated with questions
private void getQuizQuestion(ArrayList<QuestionBlock> quizModalArrayList) {
Question questionOne = new Question("Who is it?", "Mum", "Mate", "Me", "Cornershop bossman", "Me", R.raw.hint1);
Question questionTwo = new Question("How old is he?", "16", "2", "9", "74", "74", R.raw.hint2);
Question questionThree = new Question("What's his ethnicity?", "Asian", "Caucasian", "Mongol", "Kyrgyz", "Asian", R.raw.hint3);
Question questionFour = new Question("His favourite UK rapper?", "Skepta", "Wiley", "Stormzy", "Himself", "Himself", R.raw.hint4);
Question questionFive = new Question("It's Unknown T", "Homerton B", "Gyalie on me", "Op block", "Bali on me", "Homerton B", R.raw.hint5);
Question questionOne, questionTwo, questionThree, questionFour, questionFive;
/*
questionOne = new Question("Who is it?", "Mum", "Mate", "Me", "Cornershop bossman", "Me", R.raw.hint1);
questionTwo = new Question("How old is he?", "16", "2", "9", "74", "74", R.raw.hint2);
questionThree = new Question("What's his ethnicity?", "Asian", "Caucasian", "Mongol", "Kyrgyz", "Asian", R.raw.hint3);
questionFour = new Question("His favourite UK rapper?", "Skepta", "Wiley", "Stormzy", "Himself", "Himself", R.raw.hint4);
questionFive = new Question("It's Unknown T", "Homerton B", "Gyalie on me", "Op block", "Bali on me", "Homerton B", R.raw.hint5);
quizModalArrayList.add(new QuestionBlock(questionOne, questionTwo, questionThree, questionFour, questionFive, R.drawable.daboy));

questionOne = new Question("Dat boy is who?", "Future doc", "My G", "Taiwanren", "Burnaby S boy", "Taiwanren", R.raw.hint1);
questionTwo = new Question("City of birth?", "Tainan", "Taipei", "Taichung", "Taoyuan", "Tainan", R.raw.hint2);
questionThree = new Question("Calculus 12 grade?", "A", "A+", "A++", "A+++", "A+++", R.raw.hint3);
questionFour = new Question("Most complex 漢字 in Unicode?", "\uD869\uDEA5", "\uD869\uDEA3", "\uD869\uDEA4", "\uD869\uDEA2", "\uD869\uDEA5", R.raw.hint4);
questionFive = new Question("Anthem of Taiwan?", "San Min Zhuyi", "Yiyongjun Jinxingqu", "Gong Jin'ou", "Wuzu gonghe ge", "San Min Zhuyi", R.raw.hint5);
*/
questionOne = new Question(getString(R.string.question1), getString(R.string.question11), getString(R.string.question12), getString(R.string.question13), getString(R.string.question14), getString(R.string.question13), R.raw.hint1);
questionTwo = new Question(getString(R.string.question2), getString(R.string.question21), getString(R.string.question22), getString(R.string.question23), getString(R.string.question24), getString(R.string.question21), R.raw.hint2);
questionThree = new Question(getString(R.string.question3), getString(R.string.question31), getString(R.string.question32), getString(R.string.question33), getString(R.string.question34), getString(R.string.question34), R.raw.hint3);
questionFour = new Question(getString(R.string.question4), getString(R.string.question41), getString(R.string.question42), getString(R.string.question43), getString(R.string.question44), getString(R.string.question41), R.raw.hint4);
questionFive = new Question(getString(R.string.question5), getString(R.string.question51), getString(R.string.question52), getString(R.string.question53), getString(R.string.question54), getString(R.string.question51), R.raw.hint5);
quizModalArrayList.add(new QuestionBlock(questionOne, questionTwo, questionThree, questionFour, questionFive, R.drawable.taiwanren));

/*
questionOne = new Question("Who dat?", "My mate on teli", "Trump", "MP of UK", "Alien", "My mate on teli", R.raw.hint1);
questionTwo = new Question("What is he famous for?", "Tallest man", "Nothing", "best nba player", "Everything", "Nothing", R.raw.hint2);
questionThree = new Question("It's 3 am I wanna go sleep", "The last", "Questions", "Won't make", "Any sense", "Any sense", R.raw.hint3);
questionFour = new Question("?", "=(", "=)", "=/", "=|", "=)", R.raw.hint4);
questionFive = new Question("Best anime?", "Boku no piku", "Initial D", "Oreimo", "Pokemon", "Initial D", R.raw.hint5);
quizModalArrayList.add(new QuestionBlock(questionOne, questionTwo, questionThree, questionFour, questionFive, R.drawable.teliman));

*/
}

public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
@@ -249,7 +267,7 @@ private void stopPlayer(MediaPlayer mediaPlayer) {
// Description: Disconnects from TTS engine
// Precondition: mTTS exists
// Postcondition: App disconnected from TTS engine
@Override
@Override
public void onDestroyView() {
if (mTTS != null) {
mTTS.stop();
5 changes: 5 additions & 0 deletions app/src/main/java/com/example/firstapp/MainMenuFragment.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.example.firstapp;

import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -12,6 +14,9 @@

import com.example.firstapp.databinding.FragmentMainMenuBinding;

import org.w3c.dom.Text;

import java.util.Locale;
import java.util.Random;

public class MainMenuFragment extends Fragment {
2 changes: 1 addition & 1 deletion app/src/main/res/layout/fragment_first.xml
Original file line number Diff line number Diff line change
@@ -95,7 +95,7 @@
android:id="@+id/back_to_menu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
android:text="@string/back_to_menu"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
44 changes: 44 additions & 0 deletions app/src/main/res/values-pa-rIN/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">ਮੈਮੋਰੀ ਲੇਨ</string>
<string name="question1">ਇਹ ਮੁੰਡਾ ਕੌਣ ਹੈ?</string>
<string name="question11">ਭਵਿੱਖ ਦੇ ਡਾਕਟਰ</string>
<string name="question12">ਮੇਰੀ ਜੀ</string>
<string name="question13">ਤਾਈਵਾਨੀਜ਼</string>
<string name="question14">ਬਰਨਬੀ ਦੱਖਣੀ ਲੜਕਾ</string>
<string name="question2">ਜਨਮ ਦਾ ਸ਼ਹਿਰ?</string>
<string name="question21">ਤੈਨਾਨ</string>
<string name="question22">ਤਾਈਪੇ</string>
<string name="question23">ਤਾਈਚੁੰਗ</string>
<string name="question24">ਤਾਓਯੁਆਨ</string>
<string name="question3">ਕੈਲਕੂਲਸ 12 ਗ੍ਰੇਡ?</string>
<string name="question31">A</string>
<string name="question32">A+</string>
<string name="question33">A++</string>
<string name="question34">A+++</string>
<string name="question4">ਸਭ ਤੋਂ ਗੁੰਝਲਦਾਰ ਹਾਂਜ਼ੀ?</string>
<string name="question41">ਸਹੀ</string>
<string name="question42">ਗਲਤ</string>
<string name="question43">ਸ਼ਾਇਦ ਸਹੀ</string>
<string name="question44">ਗਲਤ</string>
<string name="question5">ਤਾਈਵਾਨ ਦਾ ਗੀਤ?</string>
<string name="question51">ਲੋਕਾਂ ਦੇ ਤਿੰਨ ਸਿਧਾਂਤ</string>
<string name="question52">ਵਾਲੰਟੀਅਰਾਂ ਦਾ ਮਾਰਚ</string>
<string name="question53">ਗੋਂਗ ਜਿਨਉ</string>
<string name="question54">ਪੰਜ ਦੇ ਗਣਰਾਜ ਦਾ ਗੀਤ</string>
<string name="answered_correctly">%1$d</string>
<string name="action_settings">ਸੈਟਿੰਗਾਂ</string>
<string name="quiz_label">ਕਵਿਜ਼</string>
<string name="main_menu_fragment_label">ਮੁੱਖ ਮੇਨੂ</string>
<string name="hello_first_fragment">0</string>
<string name="first_choice_text">ਪਹਿਲਾਂ</string>
<string name="second_choice_text">ਦੂਜਾ</string>
<string name="third_choice_text">ਤੀਜਾ</string>
<string name="fourth_choice_text">ਚੌਥਾ</string>
<string name="answered_all_questions">ਸਾਰੇ ਸਵਾਲਾਂ ਦੇ ਜਵਾਬ ਦਿੱਤੇ</string>
<string name="loading">ਲੋਡ ਹੋ ਰਿਹਾ ਹੈ... ਕਿਰਪਾ ਕਰਕੇ ਉਡੀਕ ਕਰੋ</string>
<string name="start_quiz">ਕਵਿਜ਼ ਸ਼ੁਰੂ ਕਰੋ</string>
<string name="back_to_menu" translatable="false">ਮੀਨੂ \'ਤੇ ਵਾਪਸ ਜਾਓ</string>
<string name="hint_tts">ਸੰਕੇਤ:</string>
<string name="option_tts">ਵਿਕਲਪ</string>
</resources>
27 changes: 27 additions & 0 deletions app/src/main/res/values-zh-rCN/strings.xml
Original file line number Diff line number Diff line change
@@ -14,4 +14,31 @@
<string name="loading">加载请稍候</string>
<string name="start_quiz">开始测验</string>
<string name="back_to_menu">返回菜单</string>
<string name="hint_tts">暗示:</string>
<string name="option_tts">选项</string>
<string name="question1">这个男孩是谁?</string>
<string name="question11">未来的医生</string>
<string name="question12">我的 G</string>
<string name="question13">台湾</string>
<string name="question14">本拿比南男孩</string>
<string name="question2">出生城市?</string>
<string name="question21">台南</string>
<string name="question22">台北</string>
<string name="question23">台中</string>
<string name="question24">桃园</string>
<string name="question3">微积分12年级?</string>
<string name="question31">A</string>
<string name="question32">A+</string>
<string name="question33">A++</string>
<string name="question34">A+++</string>
<string name="question4">最复杂的汉字?</string>
<string name="question41">正确的</string>
<string name="question42">不正确</string>
<string name="question43">也许正确</string>
<string name="question44">错误的</string>
<string name="question5">台湾国歌?</string>
<string name="question51">三民主义</string>
<string name="question52">义勇军进行曲</string>
<string name="question53">巩金瓯</string>
<string name="question54">五族共和歌</string>
</resources>
27 changes: 27 additions & 0 deletions app/src/main/res/values-zh-rTW/strings.xml
Original file line number Diff line number Diff line change
@@ -14,4 +14,31 @@
<string name="loading">加載請稍候</string>
<string name="start_quiz">開始測驗</string>
<string name="back_to_menu">返回菜單</string>
<string name="hint_tts">暗示:</string>
<string name="option_tts">選項</string>
<string name="question1">這個男孩是誰?</string>
<string name="question11">未來的醫生</string>
<string name="question12">我的 G</string>
<string name="question13">台灣</string>
<string name="question14">本拿比南男孩</string>
<string name="question2">出生城市?</string>
<string name="question21">台南</string>
<string name="question22">台北</string>
<string name="question23">台中</string>
<string name="question24">桃園</string>
<string name="question3">微積分12年級?</string>
<string name="question31">A</string>
<string name="question32">A+</string>
<string name="question33">A++</string>
<string name="question34">A+++</string>
<string name="question4">最複雜的漢字?</string>
<string name="question41">正確的</string>
<string name="question42">不正確</string>
<string name="question43">也許正確</string>
<string name="question44">錯誤的</string>
<string name="question5">台灣國歌?</string>
<string name="question51">三民主義</string>
<string name="question52">義勇軍進行曲</string>
<string name="question53">鞏金甌</string>
<string name="question54">五族共和歌</string>
</resources>
29 changes: 29 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
@@ -14,4 +14,33 @@
<string name="loading">Loading... Please Wait</string>
<string name="back_to_menu">Back to Menu</string>
<string name="start_quiz">Start Quiz</string>
<string name="hint_tts">Hint: </string>
<string name="option_tts">Option</string>

<!-- Question strings FOR TESTING -->
<string name="question1">Who is this boy?</string>
<string name="question11">Future doc</string>
<string name="question12">My G</string>
<string name="question13">Taiwanren</string>
<string name="question14">Burnaby S boy</string>
<string name="question2">City of birth?</string>
<string name="question21">Tainan</string>
<string name="question22">Taipei</string>
<string name="question23">Taichung</string>
<string name="question24">Taoyuan</string>
<string name="question3">Calculus 12 grade?</string>
<string name="question31">A</string>
<string name="question32">A+</string>
<string name="question33">A++</string>
<string name="question34">A+++</string>
<string name="question4">Most complex hanzi?</string>
<string name="question41">Correct</string>
<string name="question42">Incorrect</string>
<string name="question43">Maybe correct</string>
<string name="question44">Wrong</string>
<string name="question5">Anthem of Taiwan?</string>
<string name="question51">San Min Zhuyi</string>
<string name="question52">Yiyongjun Jinxingqu</string>
<string name="question53">Gong Jinou</string>
<string name="question54">Wuzu gonghe ge</string>
</resources>

0 comments on commit 99837c9

Please sign in to comment.