diff --git a/.gitignore b/.gitignore
old mode 100644
new mode 100755
diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml
new file mode 100644
index 0000000..0a18c95
--- /dev/null
+++ b/.idea/assetWizardSettings.xml
@@ -0,0 +1,146 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
new file mode 100755
index 0000000..ae78c11
--- /dev/null
+++ b/.idea/codeStyles/Project.xml
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+
+
+ xmlns:android
+
+ ^$
+
+
+
+
+
+
+
+
+ xmlns:.*
+
+ ^$
+
+
+ BY_NAME
+
+
+
+
+
+
+ .*:id
+
+ http://schemas.android.com/apk/res/android
+
+
+
+
+
+
+
+
+ .*:name
+
+ http://schemas.android.com/apk/res/android
+
+
+
+
+
+
+
+
+ name
+
+ ^$
+
+
+
+
+
+
+
+
+ style
+
+ ^$
+
+
+
+
+
+
+
+
+ .*
+
+ ^$
+
+
+ BY_NAME
+
+
+
+
+
+
+ .*
+
+ http://schemas.android.com/apk/res/android
+
+
+ ANDROID_ATTRIBUTE_ORDER
+
+
+
+
+
+
+ .*
+
+ .*
+
+
+ BY_NAME
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
old mode 100644
new mode 100755
diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml
old mode 100644
new mode 100755
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
old mode 100644
new mode 100755
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
old mode 100644
new mode 100755
index 0e23f8e..b80e4da
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -3,9 +3,12 @@
diff --git a/.idea/misc.xml b/.idea/misc.xml
old mode 100644
new mode 100755
index 04c63e4..a0bfecc
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,28 +1,40 @@
-
-
-
-
+
-
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
@@ -43,17 +55,7 @@
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/.idea/modules.xml b/.idea/modules.xml
old mode 100644
new mode 100755
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
old mode 100644
new mode 100755
diff --git a/LICENSE b/LICENSE
old mode 100644
new mode 100755
diff --git a/README.md b/README.md
old mode 100644
new mode 100755
diff --git a/app/.gitignore b/app/.gitignore
old mode 100644
new mode 100755
diff --git a/app/build.gradle b/app/build.gradle
old mode 100644
new mode 100755
index f06a34a..6c05555
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,15 +1,14 @@
apply plugin: 'com.android.application'
android {
- compileSdkVersion 25
- buildToolsVersion "25.0.2"
+ compileSdkVersion 29
defaultConfig {
applicationId "com.aepronunciation.ipa"
- minSdkVersion 9
- targetSdkVersion 25
- versionCode 10
- versionName "2.0.0"
- testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ minSdkVersion 14
+ targetSdkVersion 29
+ versionCode 13
+ versionName "2.1.1"
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
@@ -20,11 +19,12 @@ android {
}
dependencies {
- compile fileTree(dir: 'libs', include: ['*.jar'])
- androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
- exclude group: 'com.android.support', module: 'support-annotations'
- })
- compile 'com.android.support:appcompat-v7:25.1.0'
- compile 'com.android.support:design:25.1.0'
- testCompile 'junit:junit:4.12'
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation 'androidx.appcompat:appcompat:1.1.0'
+ implementation 'androidx.recyclerview:recyclerview:1.0.0'
+ implementation 'com.google.android.material:material:1.0.0'
+ implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
+ testImplementation 'junit:junit:4.12'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.1'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
old mode 100644
new mode 100755
diff --git a/app/release/app-release.aab b/app/release/app-release.aab
new file mode 100644
index 0000000..5f6ef76
Binary files /dev/null and b/app/release/app-release.aab differ
diff --git a/app/src/androidTest/java/com/aepronunciation/ipa/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/aepronunciation/ipa/ExampleInstrumentedTest.java
deleted file mode 100644
index a53db00..0000000
--- a/app/src/androidTest/java/com/aepronunciation/ipa/ExampleInstrumentedTest.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.aepronunciation.ipa;
-
-import android.content.Context;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.AndroidJUnit4;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.junit.Assert.*;
-
-/**
- * Instrumentation test, which will execute on an Android device.
- *
- * @see Testing documentation
- */
-@RunWith(AndroidJUnit4.class)
-public class ExampleInstrumentedTest {
- @Test
- public void useAppContext() throws Exception {
- // Context of the app under test.
- Context appContext = InstrumentationRegistry.getTargetContext();
-
- assertEquals("com.aepronunciation.ipa", appContext.getPackageName());
- }
-}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
old mode 100644
new mode 100755
index ce17c20..a2e71ed
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -6,7 +6,7 @@
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
- android:supportsRtl="true"
+ android:supportsRtl="false"
android:theme="@style/AppTheme">
- >
- >
- >
- >
- >
- >
+
+
+
parsedIpa = DoubleSound.parse(ipa);
+ if (parsedIpa == null) {
+ // TODO return a more intelligent error message
+ // (but this situation shouldn't ever happen)
return errorMessage;
}
// starts with a consonant
- if ("ptkʧfθsʃbdgʤvðzʒmnŋlwjhr".contains(parsedIpa[0])) {
+ if ("ptkʧfθsʃbdgʤvðzʒmnŋlwjhr".contains(parsedIpa.first)) {
// ends with a consonant
- if ("ptkʧfθsʃbdgʤvðzʒmnŋlwjhr".contains(parsedIpa[1])) {
+ if ("ptkʧfθsʃbdgʤvðzʒmnŋlwjhr".contains(parsedIpa.second)) {
- errorMessage = String.format(context.getString(R.string.error_two_consonants), parsedIpa[0], parsedIpa[1]);
+ errorMessage = String.format(context.getString(R.string.error_two_consonants),
+ parsedIpa.first, parsedIpa.second);
- } else if (parsedIpa[0].equals("ŋ")) {
+ } else if (parsedIpa.first.equals("ŋ")) {
// starts with ŋ
- errorMessage = String.format(context.getString(R.string.error_initial_ng), parsedIpa[0], parsedIpa[1]);
+ errorMessage = String.format(context.getString(R.string.error_initial_ng),
+ parsedIpa.first, parsedIpa.second);
}
} else { // starts with a vowel
- if (parsedIpa[1].equals("r")) {
+ if (parsedIpa.second.equals("r")) {
// ends in r
errorMessage = context.getString(R.string.error_final_r);
- } else if ("iɪɛæɑɔʊuʌəeɪaɪaʊɔɪoʊɝɚɑrɛrɪrɔr".contains(parsedIpa[1])) {
+ } else if ("iɪɛæɑɔʊuʌəeɪaɪaʊɔɪoʊɝɚɑrɛrɪrɔr".contains(parsedIpa.second)) {
// ends with vowel
- errorMessage = String.format(context.getString(R.string.error_two_vowels), parsedIpa[0], parsedIpa[1]);
+ errorMessage = String.format(context.getString(R.string.error_two_vowels),
+ parsedIpa.first, parsedIpa.second);
- } else if ("wjh".contains(parsedIpa[1])) {
+ } else if ("wjh".contains(parsedIpa.second)) {
// ends with wjh
- errorMessage = String.format(context.getString(R.string.error_final_wjh), parsedIpa[0], parsedIpa[1]);
+ errorMessage = String.format(context.getString(R.string.error_final_wjh),
+ parsedIpa.first, parsedIpa.second);
}
}
diff --git a/app/src/main/java/com/aepronunciation/ipa/AppLocale.java b/app/src/main/java/com/aepronunciation/ipa/AppLocale.java
new file mode 100755
index 0000000..d948fcd
--- /dev/null
+++ b/app/src/main/java/com/aepronunciation/ipa/AppLocale.java
@@ -0,0 +1,24 @@
+package com.aepronunciation.ipa;
+
+
+import android.content.Context;
+
+import java.util.Locale;
+
+class AppLocale {
+ static Locale getLocale(Context context) {
+ // this allows things to only be formatted for translated languages
+ // All others will use US format.
+ String currentTranslationLocale = context.getString(R.string.locale);
+ switch (currentTranslationLocale) {
+ case "zh-rCN":
+ return Locale.SIMPLIFIED_CHINESE;
+ case "zh-rTW":
+ return Locale.TRADITIONAL_CHINESE;
+ case "zh":
+ return Locale.TRADITIONAL_CHINESE;
+ default:
+ return Locale.US;
+ }
+ }
+}
diff --git a/app/src/main/java/com/aepronunciation/ipa/DividerItemDecoration.java b/app/src/main/java/com/aepronunciation/ipa/DividerItemDecoration.java
old mode 100644
new mode 100755
index 64d9a48..459ed73
--- a/app/src/main/java/com/aepronunciation/ipa/DividerItemDecoration.java
+++ b/app/src/main/java/com/aepronunciation/ipa/DividerItemDecoration.java
@@ -1,31 +1,23 @@
package com.aepronunciation.ipa;
import android.content.Context;
-import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
-import android.support.v4.content.ContextCompat;
-import android.support.v7.widget.RecyclerView;
+import androidx.annotation.NonNull;
+import androidx.core.content.ContextCompat;
+import androidx.recyclerview.widget.RecyclerView;
import android.view.View;
class DividerItemDecoration extends RecyclerView.ItemDecoration {
- private static final int[] ATTRS = new int[]{android.R.attr.listDivider};
-
private Drawable divider;
- public DividerItemDecoration(Context context) {
- final TypedArray styledAttributes = context.obtainStyledAttributes(ATTRS);
- divider = styledAttributes.getDrawable(0);
- styledAttributes.recycle();
- }
-
DividerItemDecoration(Context context, int resId) {
divider = ContextCompat.getDrawable(context, resId);
}
@Override
- public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
+ public void onDraw(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
int left = parent.getPaddingLeft();
int right = parent.getWidth() - parent.getPaddingRight();
diff --git a/app/src/main/java/com/aepronunciation/ipa/DoubleSound.java b/app/src/main/java/com/aepronunciation/ipa/DoubleSound.java
old mode 100644
new mode 100755
index 51d1996..35ac347
--- a/app/src/main/java/com/aepronunciation/ipa/DoubleSound.java
+++ b/app/src/main/java/com/aepronunciation/ipa/DoubleSound.java
@@ -2,6 +2,7 @@
import java.util.ArrayList;
import java.util.LinkedHashMap;
+import java.util.Map;
import java.util.Random;
import android.text.TextUtils;
@@ -10,82 +11,94 @@
class DoubleSound {
// private class variables
- private LinkedHashMap hashMap;
+ private static final Map soundMap = createSoundMap();
+ private static final Map specialSoundMap = createSpecialSoundMap();
private static Random random = new Random();
private ArrayList doubleSounds;
- // constructor
- DoubleSound() {
- initMap();
- }
-
int getSoundCount() {
- if (doubleSounds != null) {
- return doubleSounds.size();
- } else {
- return 0;
- }
+ if (doubleSounds == null) return 0;
+ return doubleSounds.size();
}
- void restrictListToPairsContainingAtLeastOneSoundFrom(ArrayList consonants, ArrayList vowels) {
+ void restrictListToPairsContainingAtLeastOneSoundFrom(
+ ArrayList consonants, ArrayList vowels) {
// error checking
- if (consonants.isEmpty() && vowels.isEmpty()) {
- return;
- }
+ if (consonants.isEmpty() && vowels.isEmpty()) return;
- // loop through all pairs and add any for which both consonant and vowel are in allowedSounds
+ // loop through all pairs and add any for which both consonant and vowel
+ // are in allowedSounds
doubleSounds = new ArrayList<>();
- for (String key : hashMap.keySet()) {
- Pair cv = PhonemeTable.INSTANCE.splitDoubleSound(key);
- if (stringContainsItemFromList(cv.first, consonants) || stringContainsItemFromList(cv.second, vowels)) {
+ for (String key : soundMap.keySet()) {
+ Pair cv = Ipa.splitDoubleSound(key);
+ if (stringContainsItemFromList(cv.first, consonants) ||
+ stringContainsItemFromList(cv.second, vowels)) {
doubleSounds.add(key);
}
}
}
void restrictListToAllPairsContaining(String ipa) {
+ if (TextUtils.isEmpty(ipa)) return;
- // error checking
- if (TextUtils.isEmpty(ipa)) {
+ if (Ipa.isSpecial(ipa)) {
+ restrictListToSpecialSoundsContaining(ipa);
return;
}
ArrayList singleItemArray = new ArrayList<>();
singleItemArray.add(ipa);
- if (PhonemeTable.INSTANCE.isConsonant(ipa)) {
+ if (Ipa.isConsonant(ipa)) {
restrictListToPairsContainingAtLeastOneSoundFrom(singleItemArray, new ArrayList());
- } else if (PhonemeTable.INSTANCE.isVowel(ipa)) {
+ } else { // vowel
restrictListToPairsContainingAtLeastOneSoundFrom(new ArrayList(), singleItemArray);
}
}
- void restrictListToPairsContainingBothSoundsFrom(ArrayList consonants, ArrayList vowels) {
+ void restrictListToPairsContainingBothSoundsFrom(
+ ArrayList consonants, ArrayList vowels) {
// Since every pair contains both a vowel and a consonant,
// an exact match requires both to be present.
- if (vowels.isEmpty() || consonants.isEmpty()) {
- return;
+ if (vowels.isEmpty() || consonants.isEmpty()) return;
+
+ // loop through all pairs and add any for with both consonant and vowel
+ // are in allowedSounds
+ doubleSounds = new ArrayList<>();
+ for (String key : soundMap.keySet()) {
+ Pair cv = Ipa.splitDoubleSound(key);
+ if (stringContainsItemFromList(cv.first, consonants) &&
+ stringContainsItemFromList(cv.second, vowels)) {
+ doubleSounds.add(key);
+ }
}
+ }
- // loop through all pairs and add any for with both consonant and vowel are in allowedSounds
+ private void restrictListToSpecialSoundsContaining(String ipa) {
doubleSounds = new ArrayList<>();
- for (String key : hashMap.keySet()) {
- Pair cv = PhonemeTable.INSTANCE.splitDoubleSound(key);
- if (stringContainsItemFromList(cv.first, consonants) && stringContainsItemFromList(cv.second, vowels)) {
+ for (String key : specialSoundMap.keySet()) {
+ if (shouldIncludeSpecialSoundForIpa(key, ipa)) {
doubleSounds.add(key);
}
}
}
+ @SuppressWarnings("RedundantIfStatement")
+ private boolean shouldIncludeSpecialSoundForIpa(String specialSound, String ipa) {
+ if (!specialSound.contains(ipa)) return false;
+ if (specialSound.contains(Ipa.flap_t) && ipa.equals(Ipa.schwa)) return false;
+ return true;
+ }
+
void includeAllSounds() {
- doubleSounds = new ArrayList<>(hashMap.keySet());
+ doubleSounds = new ArrayList<>(soundMap.keySet());
}
private static boolean stringContainsItemFromList(String inputString, ArrayList items) {
- for(int i =0; i < items.size(); i++) {
- if(inputString.equals(items.get(i))) {
+ for (int i = 0; i < items.size(); i++) {
+ if (inputString.equals(items.get(i))) {
return true;
}
}
@@ -109,844 +122,1012 @@ String getRandomIpa() {
int getSoundResourceId(String doubleSoundIpa) {
- // returns null if no value found
- if (hashMap.containsKey(doubleSoundIpa)){
- return hashMap.get(doubleSoundIpa);
- }else{
- return -1;
+ if (specialSoundMap.containsKey(doubleSoundIpa)) {
+ return specialSoundMap.get(doubleSoundIpa);
+ }
+
+ if (soundMap.containsKey(doubleSoundIpa)) {
+ return soundMap.get(doubleSoundIpa);
}
+ return -1;
}
- public ArrayList getSounds() {
+ ArrayList getSounds() {
if (doubleSounds == null) {
includeAllSounds();
}
return doubleSounds;
}
- // initialize the hashMap when new object created
- private void initMap() {
-
- hashMap = new LinkedHashMap<>();
-
- hashMap.put("pi", R.raw.double_p_i);
- hashMap.put("pɪ", R.raw.double_p_is);
- hashMap.put("peɪ", R.raw.double_p_ei);
- hashMap.put("pɛ", R.raw.double_p_e);
- hashMap.put("pæ", R.raw.double_p_ae);
- hashMap.put("pɑ", R.raw.double_p_a);
- hashMap.put("pɔ", R.raw.double_p_c);
- hashMap.put("poʊ", R.raw.double_p_ou);
- hashMap.put("pʊ", R.raw.double_p_us);
- hashMap.put("pu", R.raw.double_p_u);
- hashMap.put("pʌ", R.raw.double_p_vu);
- hashMap.put("paɪ", R.raw.double_p_ai);
- hashMap.put("paʊ", R.raw.double_p_au);
- hashMap.put("pɔɪ", R.raw.double_p_oi);
- hashMap.put("pɝ", R.raw.double_p_ers);
- hashMap.put("pɑr", R.raw.double_p_ar);
- hashMap.put("pɛr", R.raw.double_p_er);
- hashMap.put("pɪr", R.raw.double_p_ir);
- hashMap.put("pɔr", R.raw.double_p_or);
- hashMap.put("bi", R.raw.double_b_i);
- hashMap.put("bɪ", R.raw.double_b_is);
- hashMap.put("beɪ", R.raw.double_b_ei);
- hashMap.put("bɛ", R.raw.double_b_e);
- hashMap.put("bæ", R.raw.double_b_ae);
- hashMap.put("bɑ", R.raw.double_b_a);
- hashMap.put("bɔ", R.raw.double_b_c);
- hashMap.put("boʊ", R.raw.double_b_ou);
- hashMap.put("bʊ", R.raw.double_b_us);
- hashMap.put("bu", R.raw.double_b_u);
- hashMap.put("bʌ", R.raw.double_b_vu);
- hashMap.put("baɪ", R.raw.double_b_ai);
- hashMap.put("baʊ", R.raw.double_b_au);
- hashMap.put("bɔɪ", R.raw.double_b_oi);
- hashMap.put("bɝ", R.raw.double_b_ers);
- hashMap.put("bɑr", R.raw.double_b_ar);
- hashMap.put("bɛr", R.raw.double_b_er);
- hashMap.put("bɪr", R.raw.double_b_ir);
- hashMap.put("bɔr", R.raw.double_b_or);
- hashMap.put("ti", R.raw.double_t_i);
- hashMap.put("tɪ", R.raw.double_t_is);
- hashMap.put("teɪ", R.raw.double_t_ei);
- hashMap.put("tɛ", R.raw.double_t_e);
- hashMap.put("tæ", R.raw.double_t_ae);
- hashMap.put("tɑ", R.raw.double_t_a);
- hashMap.put("tɔ", R.raw.double_t_c);
- hashMap.put("toʊ", R.raw.double_t_ou);
- hashMap.put("tʊ", R.raw.double_t_us);
- hashMap.put("tu", R.raw.double_t_u);
- hashMap.put("tʌ", R.raw.double_t_vu);
- hashMap.put("taɪ", R.raw.double_t_ai);
- hashMap.put("taʊ", R.raw.double_t_au);
- hashMap.put("tɔɪ", R.raw.double_t_oi);
- hashMap.put("tɝ", R.raw.double_t_ers);
- hashMap.put("tɑr", R.raw.double_t_ar);
- hashMap.put("tɛr", R.raw.double_t_er);
- hashMap.put("tɪr", R.raw.double_t_ir);
- hashMap.put("tɔr", R.raw.double_t_or);
- hashMap.put("di", R.raw.double_d_i);
- hashMap.put("dɪ", R.raw.double_d_is);
- hashMap.put("deɪ", R.raw.double_d_ei);
- hashMap.put("dɛ", R.raw.double_d_e);
- hashMap.put("dæ", R.raw.double_d_ae);
- hashMap.put("dɑ", R.raw.double_d_a);
- hashMap.put("dɔ", R.raw.double_d_c);
- hashMap.put("doʊ", R.raw.double_d_ou);
- hashMap.put("dʊ", R.raw.double_d_us);
- hashMap.put("du", R.raw.double_d_u);
- hashMap.put("dʌ", R.raw.double_d_vu);
- hashMap.put("daɪ", R.raw.double_d_ai);
- hashMap.put("daʊ", R.raw.double_d_au);
- hashMap.put("dɔɪ", R.raw.double_d_oi);
- hashMap.put("dɝ", R.raw.double_d_ers);
- hashMap.put("dɑr", R.raw.double_d_ar);
- hashMap.put("dɛr", R.raw.double_d_er);
- hashMap.put("dɪr", R.raw.double_d_ir);
- hashMap.put("dɔr", R.raw.double_d_or);
- hashMap.put("ki", R.raw.double_k_i);
- hashMap.put("kɪ", R.raw.double_k_is);
- hashMap.put("keɪ", R.raw.double_k_ei);
- hashMap.put("kɛ", R.raw.double_k_e);
- hashMap.put("kæ", R.raw.double_k_ae);
- hashMap.put("kɑ", R.raw.double_k_a);
- hashMap.put("kɔ", R.raw.double_k_c);
- hashMap.put("koʊ", R.raw.double_k_ou);
- hashMap.put("kʊ", R.raw.double_k_us);
- hashMap.put("ku", R.raw.double_k_u);
- hashMap.put("kʌ", R.raw.double_k_vu);
- hashMap.put("kaɪ", R.raw.double_k_ai);
- hashMap.put("kaʊ", R.raw.double_k_au);
- hashMap.put("kɔɪ", R.raw.double_k_oi);
- hashMap.put("kɝ", R.raw.double_k_ers);
- hashMap.put("kɑr", R.raw.double_k_ar);
- hashMap.put("kɛr", R.raw.double_k_er);
- hashMap.put("kɪr", R.raw.double_k_ir);
- hashMap.put("kɔr", R.raw.double_k_or);
- hashMap.put("gi", R.raw.double_g_i);
- hashMap.put("gɪ", R.raw.double_g_is);
- hashMap.put("geɪ", R.raw.double_g_ei);
- hashMap.put("gɛ", R.raw.double_g_e);
- hashMap.put("gæ", R.raw.double_g_ae);
- hashMap.put("gɑ", R.raw.double_g_a);
- hashMap.put("gɔ", R.raw.double_g_c);
- hashMap.put("goʊ", R.raw.double_g_ou);
- hashMap.put("gʊ", R.raw.double_g_us);
- hashMap.put("gu", R.raw.double_g_u);
- hashMap.put("gʌ", R.raw.double_g_vu);
- hashMap.put("gaɪ", R.raw.double_g_ai);
- hashMap.put("gaʊ", R.raw.double_g_au);
- hashMap.put("gɔɪ", R.raw.double_g_oi);
- hashMap.put("gɝ", R.raw.double_g_ers);
- hashMap.put("gɑr", R.raw.double_g_ar);
- hashMap.put("gɛr", R.raw.double_g_er);
- hashMap.put("gɪr", R.raw.double_g_ir);
- hashMap.put("gɔr", R.raw.double_g_or);
- hashMap.put("ʧi", R.raw.double_ch_i);
- hashMap.put("ʧɪ", R.raw.double_ch_is);
- hashMap.put("ʧeɪ", R.raw.double_ch_ei);
- hashMap.put("ʧɛ", R.raw.double_ch_e);
- hashMap.put("ʧæ", R.raw.double_ch_ae);
- hashMap.put("ʧɑ", R.raw.double_ch_a);
- hashMap.put("ʧɔ", R.raw.double_ch_c);
- hashMap.put("ʧoʊ", R.raw.double_ch_ou);
- hashMap.put("ʧʊ", R.raw.double_ch_us);
- hashMap.put("ʧu", R.raw.double_ch_u);
- hashMap.put("ʧʌ", R.raw.double_ch_vu);
- hashMap.put("ʧaɪ", R.raw.double_ch_ai);
- hashMap.put("ʧaʊ", R.raw.double_ch_au);
- hashMap.put("ʧɔɪ", R.raw.double_ch_oi);
- hashMap.put("ʧɝ", R.raw.double_ch_ers);
- hashMap.put("ʧɑr", R.raw.double_ch_ar);
- hashMap.put("ʧɛr", R.raw.double_ch_er);
- hashMap.put("ʧɪr", R.raw.double_ch_ir);
- hashMap.put("ʧɔr", R.raw.double_ch_or);
- hashMap.put("ʤi", R.raw.double_dzh_i);
- hashMap.put("ʤɪ", R.raw.double_dzh_is);
- hashMap.put("ʤeɪ", R.raw.double_dzh_ei);
- hashMap.put("ʤɛ", R.raw.double_dzh_e);
- hashMap.put("ʤæ", R.raw.double_dzh_ae);
- hashMap.put("ʤɑ", R.raw.double_dzh_a);
- hashMap.put("ʤɔ", R.raw.double_dzh_c);
- hashMap.put("ʤoʊ", R.raw.double_dzh_ou);
- hashMap.put("ʤʊ", R.raw.double_dzh_us);
- hashMap.put("ʤu", R.raw.double_dzh_u);
- hashMap.put("ʤʌ", R.raw.double_dzh_vu);
- hashMap.put("ʤaɪ", R.raw.double_dzh_ai);
- hashMap.put("ʤaʊ", R.raw.double_dzh_au);
- hashMap.put("ʤɔɪ", R.raw.double_dzh_oi);
- hashMap.put("ʤɝ", R.raw.double_dzh_ers);
- hashMap.put("ʤɑr", R.raw.double_dzh_ar);
- hashMap.put("ʤɛr", R.raw.double_dzh_er);
- hashMap.put("ʤɪr", R.raw.double_dzh_ir);
- hashMap.put("ʤɔr", R.raw.double_dzh_or);
- hashMap.put("fi", R.raw.double_f_i);
- hashMap.put("fɪ", R.raw.double_f_is);
- hashMap.put("feɪ", R.raw.double_f_ei);
- hashMap.put("fɛ", R.raw.double_f_e);
- hashMap.put("fæ", R.raw.double_f_ae);
- hashMap.put("fɑ", R.raw.double_f_a);
- hashMap.put("fɔ", R.raw.double_f_c);
- hashMap.put("foʊ", R.raw.double_f_ou);
- hashMap.put("fʊ", R.raw.double_f_us);
- hashMap.put("fu", R.raw.double_f_u);
- hashMap.put("fʌ", R.raw.double_f_vu);
- hashMap.put("faɪ", R.raw.double_f_ai);
- hashMap.put("faʊ", R.raw.double_f_au);
- hashMap.put("fɔɪ", R.raw.double_f_oi);
- hashMap.put("fɝ", R.raw.double_f_ers);
- hashMap.put("fɑr", R.raw.double_f_ar);
- hashMap.put("fɛr", R.raw.double_f_er);
- hashMap.put("fɪr", R.raw.double_f_ir);
- hashMap.put("fɔr", R.raw.double_f_or);
- hashMap.put("vi", R.raw.double_v_i);
- hashMap.put("vɪ", R.raw.double_v_is);
- hashMap.put("veɪ", R.raw.double_v_ei);
- hashMap.put("vɛ", R.raw.double_v_e);
- hashMap.put("væ", R.raw.double_v_ae);
- hashMap.put("vɑ", R.raw.double_v_a);
- hashMap.put("vɔ", R.raw.double_v_c);
- hashMap.put("voʊ", R.raw.double_v_ou);
- hashMap.put("vʊ", R.raw.double_v_us);
- hashMap.put("vu", R.raw.double_v_u);
- hashMap.put("vʌ", R.raw.double_v_vu);
- hashMap.put("vaɪ", R.raw.double_v_ai);
- hashMap.put("vaʊ", R.raw.double_v_au);
- hashMap.put("vɔɪ", R.raw.double_v_oi);
- hashMap.put("vɝ", R.raw.double_v_ers);
- hashMap.put("vɑr", R.raw.double_v_ar);
- hashMap.put("vɛr", R.raw.double_v_er);
- hashMap.put("vɪr", R.raw.double_v_ir);
- hashMap.put("vɔr", R.raw.double_v_or);
- hashMap.put("θi", R.raw.double_th_i);
- hashMap.put("θɪ", R.raw.double_th_is);
- hashMap.put("θeɪ", R.raw.double_th_ei);
- hashMap.put("θɛ", R.raw.double_th_e);
- hashMap.put("θæ", R.raw.double_th_ae);
- hashMap.put("θɑ", R.raw.double_th_a);
- hashMap.put("θɔ", R.raw.double_th_c);
- hashMap.put("θoʊ", R.raw.double_th_ou);
- hashMap.put("θʊ", R.raw.double_th_us);
- hashMap.put("θu", R.raw.double_th_u);
- hashMap.put("θʌ", R.raw.double_th_vu);
- hashMap.put("θaɪ", R.raw.double_th_ai);
- hashMap.put("θaʊ", R.raw.double_th_au);
- hashMap.put("θɔɪ", R.raw.double_th_oi);
- hashMap.put("θɝ", R.raw.double_th_ers);
- hashMap.put("θɑr", R.raw.double_th_ar);
- hashMap.put("θɛr", R.raw.double_th_er);
- hashMap.put("θɪr", R.raw.double_th_ir);
- hashMap.put("θɔr", R.raw.double_th_or);
- hashMap.put("ði", R.raw.double_thv_i);
- hashMap.put("ðɪ", R.raw.double_thv_is);
- hashMap.put("ðeɪ", R.raw.double_thv_ei);
- hashMap.put("ðɛ", R.raw.double_thv_e);
- hashMap.put("ðæ", R.raw.double_thv_ae);
- hashMap.put("ðɑ", R.raw.double_thv_a);
- hashMap.put("ðɔ", R.raw.double_thv_c);
- hashMap.put("ðoʊ", R.raw.double_thv_ou);
- hashMap.put("ðʊ", R.raw.double_thv_us);
- hashMap.put("ðu", R.raw.double_thv_u);
- hashMap.put("ðʌ", R.raw.double_thv_vu);
- hashMap.put("ðaɪ", R.raw.double_thv_ai);
- hashMap.put("ðaʊ", R.raw.double_thv_au);
- hashMap.put("ðɔɪ", R.raw.double_thv_oi);
- hashMap.put("ðɝ", R.raw.double_thv_ers);
- hashMap.put("ðɑr", R.raw.double_thv_ar);
- hashMap.put("ðɛr", R.raw.double_thv_er);
- hashMap.put("ðɪr", R.raw.double_thv_ir);
- hashMap.put("ðɔr", R.raw.double_thv_or);
- hashMap.put("si", R.raw.double_s_i);
- hashMap.put("sɪ", R.raw.double_s_is);
- hashMap.put("seɪ", R.raw.double_s_ei);
- hashMap.put("sɛ", R.raw.double_s_e);
- hashMap.put("sæ", R.raw.double_s_ae);
- hashMap.put("sɑ", R.raw.double_s_a);
- hashMap.put("sɔ", R.raw.double_s_c);
- hashMap.put("soʊ", R.raw.double_s_ou);
- hashMap.put("sʊ", R.raw.double_s_us);
- hashMap.put("su", R.raw.double_s_u);
- hashMap.put("sʌ", R.raw.double_s_vu);
- hashMap.put("saɪ", R.raw.double_s_ai);
- hashMap.put("saʊ", R.raw.double_s_au);
- hashMap.put("sɔɪ", R.raw.double_s_oi);
- hashMap.put("sɝ", R.raw.double_s_ers);
- hashMap.put("sɑr", R.raw.double_s_ar);
- hashMap.put("sɛr", R.raw.double_s_er);
- hashMap.put("sɪr", R.raw.double_s_ir);
- hashMap.put("sɔr", R.raw.double_s_or);
- hashMap.put("zi", R.raw.double_z_i);
- hashMap.put("zɪ", R.raw.double_z_is);
- hashMap.put("zeɪ", R.raw.double_z_ei);
- hashMap.put("zɛ", R.raw.double_z_e);
- hashMap.put("zæ", R.raw.double_z_ae);
- hashMap.put("zɑ", R.raw.double_z_a);
- hashMap.put("zɔ", R.raw.double_z_c);
- hashMap.put("zoʊ", R.raw.double_z_ou);
- hashMap.put("zʊ", R.raw.double_z_us);
- hashMap.put("zu", R.raw.double_z_u);
- hashMap.put("zʌ", R.raw.double_z_vu);
- hashMap.put("zaɪ", R.raw.double_z_ai);
- hashMap.put("zaʊ", R.raw.double_z_au);
- hashMap.put("zɔɪ", R.raw.double_z_oi);
- hashMap.put("zɝ", R.raw.double_z_ers);
- hashMap.put("zɑr", R.raw.double_z_ar);
- hashMap.put("zɛr", R.raw.double_z_er);
- hashMap.put("zɪr", R.raw.double_z_ir);
- hashMap.put("zɔr", R.raw.double_z_or);
- hashMap.put("ʃi", R.raw.double_sh_i);
- hashMap.put("ʃɪ", R.raw.double_sh_is);
- hashMap.put("ʃeɪ", R.raw.double_sh_ei);
- hashMap.put("ʃɛ", R.raw.double_sh_e);
- hashMap.put("ʃæ", R.raw.double_sh_ae);
- hashMap.put("ʃɑ", R.raw.double_sh_a);
- hashMap.put("ʃɔ", R.raw.double_sh_c);
- hashMap.put("ʃoʊ", R.raw.double_sh_ou);
- hashMap.put("ʃʊ", R.raw.double_sh_us);
- hashMap.put("ʃu", R.raw.double_sh_u);
- hashMap.put("ʃʌ", R.raw.double_sh_vu);
- hashMap.put("ʃaɪ", R.raw.double_sh_ai);
- hashMap.put("ʃaʊ", R.raw.double_sh_au);
- hashMap.put("ʃɔɪ", R.raw.double_sh_oi);
- hashMap.put("ʃɝ", R.raw.double_sh_ers);
- hashMap.put("ʃɑr", R.raw.double_sh_ar);
- hashMap.put("ʃɛr", R.raw.double_sh_er);
- hashMap.put("ʃɪr", R.raw.double_sh_ir);
- hashMap.put("ʃɔr", R.raw.double_sh_or);
- hashMap.put("ʒi", R.raw.double_zh_i);
- hashMap.put("ʒɪ", R.raw.double_zh_is);
- hashMap.put("ʒeɪ", R.raw.double_zh_ei);
- hashMap.put("ʒɛ", R.raw.double_zh_e);
- hashMap.put("ʒæ", R.raw.double_zh_ae);
- hashMap.put("ʒɑ", R.raw.double_zh_a);
- hashMap.put("ʒɔ", R.raw.double_zh_c);
- hashMap.put("ʒoʊ", R.raw.double_zh_ou);
- hashMap.put("ʒʊ", R.raw.double_zh_us);
- hashMap.put("ʒu", R.raw.double_zh_u);
- hashMap.put("ʒʌ", R.raw.double_zh_vu);
- hashMap.put("ʒaɪ", R.raw.double_zh_ai);
- hashMap.put("ʒaʊ", R.raw.double_zh_au);
- hashMap.put("ʒɔɪ", R.raw.double_zh_oi);
- hashMap.put("ʒɝ", R.raw.double_zh_ers);
- hashMap.put("ʒɑr", R.raw.double_zh_ar);
- hashMap.put("ʒɛr", R.raw.double_zh_er);
- hashMap.put("ʒɪr", R.raw.double_zh_ir);
- hashMap.put("ʒɔr", R.raw.double_zh_or);
- hashMap.put("mi", R.raw.double_m_i);
- hashMap.put("mɪ", R.raw.double_m_is);
- hashMap.put("meɪ", R.raw.double_m_ei);
- hashMap.put("mɛ", R.raw.double_m_e);
- hashMap.put("mæ", R.raw.double_m_ae);
- hashMap.put("mɑ", R.raw.double_m_a);
- hashMap.put("mɔ", R.raw.double_m_c);
- hashMap.put("moʊ", R.raw.double_m_ou);
- hashMap.put("mʊ", R.raw.double_m_us);
- hashMap.put("mu", R.raw.double_m_u);
- hashMap.put("mʌ", R.raw.double_m_vu);
- hashMap.put("maɪ", R.raw.double_m_ai);
- hashMap.put("maʊ", R.raw.double_m_au);
- hashMap.put("mɔɪ", R.raw.double_m_oi);
- hashMap.put("mɝ", R.raw.double_m_ers);
- hashMap.put("mɑr", R.raw.double_m_ar);
- hashMap.put("mɛr", R.raw.double_m_er);
- hashMap.put("mɪr", R.raw.double_m_ir);
- hashMap.put("mɔr", R.raw.double_m_or);
- hashMap.put("ni", R.raw.double_n_i);
- hashMap.put("nɪ", R.raw.double_n_is);
- hashMap.put("neɪ", R.raw.double_n_ei);
- hashMap.put("nɛ", R.raw.double_n_e);
- hashMap.put("næ", R.raw.double_n_ae);
- hashMap.put("nɑ", R.raw.double_n_a);
- hashMap.put("nɔ", R.raw.double_n_c);
- hashMap.put("noʊ", R.raw.double_n_ou);
- hashMap.put("nʊ", R.raw.double_n_us);
- hashMap.put("nu", R.raw.double_n_u);
- hashMap.put("nʌ", R.raw.double_n_vu);
- hashMap.put("naɪ", R.raw.double_n_ai);
- hashMap.put("naʊ", R.raw.double_n_au);
- hashMap.put("nɔɪ", R.raw.double_n_oi);
- hashMap.put("nɝ", R.raw.double_n_ers);
- hashMap.put("nɑr", R.raw.double_n_ar);
- hashMap.put("nɛr", R.raw.double_n_er);
- hashMap.put("nɪr", R.raw.double_n_ir);
- hashMap.put("nɔr", R.raw.double_n_or);
- hashMap.put("li", R.raw.double_l_i);
- hashMap.put("lɪ", R.raw.double_l_is);
- hashMap.put("leɪ", R.raw.double_l_ei);
- hashMap.put("lɛ", R.raw.double_l_e);
- hashMap.put("læ", R.raw.double_l_ae);
- hashMap.put("lɑ", R.raw.double_l_a);
- hashMap.put("lɔ", R.raw.double_l_c);
- hashMap.put("loʊ", R.raw.double_l_ou);
- hashMap.put("lʊ", R.raw.double_l_us);
- hashMap.put("lu", R.raw.double_l_u);
- hashMap.put("lʌ", R.raw.double_l_vu);
- hashMap.put("laɪ", R.raw.double_l_ai);
- hashMap.put("laʊ", R.raw.double_l_au);
- hashMap.put("lɔɪ", R.raw.double_l_oi);
- hashMap.put("lɝ", R.raw.double_l_ers);
- hashMap.put("lɑr", R.raw.double_l_ar);
- hashMap.put("lɛr", R.raw.double_l_er);
- hashMap.put("lɪr", R.raw.double_l_ir);
- hashMap.put("lɔr", R.raw.double_l_or);
- hashMap.put("wi", R.raw.double_w_i);
- hashMap.put("wɪ", R.raw.double_w_is);
- hashMap.put("weɪ", R.raw.double_w_ei);
- hashMap.put("wɛ", R.raw.double_w_e);
- hashMap.put("wæ", R.raw.double_w_ae);
- hashMap.put("wɑ", R.raw.double_w_a);
- hashMap.put("wɔ", R.raw.double_w_c);
- hashMap.put("woʊ", R.raw.double_w_ou);
- hashMap.put("wʊ", R.raw.double_w_us);
- hashMap.put("wu", R.raw.double_w_u);
- hashMap.put("wʌ", R.raw.double_w_vu);
- hashMap.put("waɪ", R.raw.double_w_ai);
- hashMap.put("waʊ", R.raw.double_w_au);
- hashMap.put("wɔɪ", R.raw.double_w_oi);
- hashMap.put("wɝ", R.raw.double_w_ers);
- hashMap.put("wɑr", R.raw.double_w_ar);
- hashMap.put("wɛr", R.raw.double_w_er);
- hashMap.put("wɪr", R.raw.double_w_ir);
- hashMap.put("wɔr", R.raw.double_w_or);
- hashMap.put("ji", R.raw.double_j_i);
- hashMap.put("jɪ", R.raw.double_j_is);
- hashMap.put("jeɪ", R.raw.double_j_ei);
- hashMap.put("jɛ", R.raw.double_j_e);
- hashMap.put("jæ", R.raw.double_j_ae);
- hashMap.put("jɑ", R.raw.double_j_a);
- hashMap.put("jɔ", R.raw.double_j_c);
- hashMap.put("joʊ", R.raw.double_j_ou);
- hashMap.put("jʊ", R.raw.double_j_us);
- hashMap.put("ju", R.raw.double_j_u);
- hashMap.put("jʌ", R.raw.double_j_vu);
- hashMap.put("jaɪ", R.raw.double_j_ai);
- hashMap.put("jaʊ", R.raw.double_j_au);
- hashMap.put("jɔɪ", R.raw.double_j_oi);
- hashMap.put("jɝ", R.raw.double_j_ers);
- hashMap.put("jɑr", R.raw.double_j_ar);
- hashMap.put("jɛr", R.raw.double_j_er);
- hashMap.put("jɪr", R.raw.double_j_ir);
- hashMap.put("jɔr", R.raw.double_j_or);
- hashMap.put("hi", R.raw.double_h_i);
- hashMap.put("hɪ", R.raw.double_h_is);
- hashMap.put("heɪ", R.raw.double_h_ei);
- hashMap.put("hɛ", R.raw.double_h_e);
- hashMap.put("hæ", R.raw.double_h_ae);
- hashMap.put("hɑ", R.raw.double_h_a);
- hashMap.put("hɔ", R.raw.double_h_c);
- hashMap.put("hoʊ", R.raw.double_h_ou);
- hashMap.put("hʊ", R.raw.double_h_us);
- hashMap.put("hu", R.raw.double_h_u);
- hashMap.put("hʌ", R.raw.double_h_vu);
- hashMap.put("haɪ", R.raw.double_h_ai);
- hashMap.put("haʊ", R.raw.double_h_au);
- hashMap.put("hɔɪ", R.raw.double_h_oi);
- hashMap.put("hɝ", R.raw.double_h_ers);
- hashMap.put("hɑr", R.raw.double_h_ar);
- hashMap.put("hɛr", R.raw.double_h_er);
- hashMap.put("hɪr", R.raw.double_h_ir);
- hashMap.put("hɔr", R.raw.double_h_or);
- hashMap.put("ri", R.raw.double_r_i);
- hashMap.put("rɪ", R.raw.double_r_is);
- hashMap.put("reɪ", R.raw.double_r_ei);
- hashMap.put("rɛ", R.raw.double_r_e);
- hashMap.put("ræ", R.raw.double_r_ae);
- hashMap.put("rɑ", R.raw.double_r_a);
- hashMap.put("rɔ", R.raw.double_r_c);
- hashMap.put("roʊ", R.raw.double_r_ou);
- hashMap.put("rʊ", R.raw.double_r_us);
- hashMap.put("ru", R.raw.double_r_u);
- hashMap.put("rʌ", R.raw.double_r_vu);
- hashMap.put("raɪ", R.raw.double_r_ai);
- hashMap.put("raʊ", R.raw.double_r_au);
- hashMap.put("rɔɪ", R.raw.double_r_oi);
- hashMap.put("rɝ", R.raw.double_r_ers);
- hashMap.put("rɑr", R.raw.double_r_ar);
- hashMap.put("rɛr", R.raw.double_r_er);
- hashMap.put("rɪr", R.raw.double_r_ir);
- hashMap.put("rɔr", R.raw.double_r_or);
- hashMap.put("ip", R.raw.double_i_p);
- hashMap.put("ɪp", R.raw.double_is_p);
- hashMap.put("eɪp", R.raw.double_ei_p);
- hashMap.put("ɛp", R.raw.double_e_p);
- hashMap.put("æp", R.raw.double_ae_p);
- hashMap.put("ɑp", R.raw.double_a_p);
- hashMap.put("ɔp", R.raw.double_c_p);
- hashMap.put("oʊp", R.raw.double_ou_p);
- hashMap.put("ʊp", R.raw.double_us_p);
- hashMap.put("up", R.raw.double_u_p);
- hashMap.put("ʌp", R.raw.double_vu_p);
- hashMap.put("aɪp", R.raw.double_ai_p);
- hashMap.put("aʊp", R.raw.double_au_p);
- hashMap.put("ɔɪp", R.raw.double_oi_p);
- hashMap.put("ɝp", R.raw.double_ers_p);
- hashMap.put("ɑrp", R.raw.double_ar_p);
- hashMap.put("ɛrp", R.raw.double_er_p);
- hashMap.put("ɪrp", R.raw.double_ir_p);
- hashMap.put("ɔrp", R.raw.double_or_p);
- hashMap.put("ib", R.raw.double_i_b);
- hashMap.put("ɪb", R.raw.double_is_b);
- hashMap.put("eɪb", R.raw.double_ei_b);
- hashMap.put("ɛb", R.raw.double_e_b);
- hashMap.put("æb", R.raw.double_ae_b);
- hashMap.put("ɑb", R.raw.double_a_b);
- hashMap.put("ɔb", R.raw.double_c_b);
- hashMap.put("oʊb", R.raw.double_ou_b);
- hashMap.put("ʊb", R.raw.double_us_b);
- hashMap.put("ub", R.raw.double_u_b);
- hashMap.put("ʌb", R.raw.double_vu_b);
- hashMap.put("aɪb", R.raw.double_ai_b);
- hashMap.put("aʊb", R.raw.double_au_b);
- hashMap.put("ɔɪb", R.raw.double_oi_b);
- hashMap.put("ɝb", R.raw.double_ers_b);
- hashMap.put("ɑrb", R.raw.double_ar_b);
- hashMap.put("ɛrb", R.raw.double_er_b);
- hashMap.put("ɪrb", R.raw.double_ir_b);
- hashMap.put("ɔrb", R.raw.double_or_b);
- hashMap.put("it", R.raw.double_i_t);
- hashMap.put("ɪt", R.raw.double_is_t);
- hashMap.put("eɪt", R.raw.double_ei_t);
- hashMap.put("ɛt", R.raw.double_e_t);
- hashMap.put("æt", R.raw.double_ae_t);
- hashMap.put("ɑt", R.raw.double_a_t);
- hashMap.put("ɔt", R.raw.double_c_t);
- hashMap.put("oʊt", R.raw.double_ou_t);
- hashMap.put("ʊt", R.raw.double_us_t);
- hashMap.put("ut", R.raw.double_u_t);
- hashMap.put("ʌt", R.raw.double_vu_t);
- hashMap.put("aɪt", R.raw.double_ai_t);
- hashMap.put("aʊt", R.raw.double_au_t);
- hashMap.put("ɔɪt", R.raw.double_oi_t);
- hashMap.put("ɝt", R.raw.double_ers_t);
- hashMap.put("ɑrt", R.raw.double_ar_t);
- hashMap.put("ɛrt", R.raw.double_er_t);
- hashMap.put("ɪrt", R.raw.double_ir_t);
- hashMap.put("ɔrt", R.raw.double_or_t);
- hashMap.put("id", R.raw.double_i_d);
- hashMap.put("ɪd", R.raw.double_is_d);
- hashMap.put("eɪd", R.raw.double_ei_d);
- hashMap.put("ɛd", R.raw.double_e_d);
- hashMap.put("æd", R.raw.double_ae_d);
- hashMap.put("ɑd", R.raw.double_a_d);
- hashMap.put("ɔd", R.raw.double_c_d);
- hashMap.put("oʊd", R.raw.double_ou_d);
- hashMap.put("ʊd", R.raw.double_us_d);
- hashMap.put("ud", R.raw.double_u_d);
- hashMap.put("ʌd", R.raw.double_vu_d);
- hashMap.put("aɪd", R.raw.double_ai_d);
- hashMap.put("aʊd", R.raw.double_au_d);
- hashMap.put("ɔɪd", R.raw.double_oi_d);
- hashMap.put("ɝd", R.raw.double_ers_d);
- hashMap.put("ɑrd", R.raw.double_ar_d);
- hashMap.put("ɛrd", R.raw.double_er_d);
- hashMap.put("ɪrd", R.raw.double_ir_d);
- hashMap.put("ɔrd", R.raw.double_or_d);
- hashMap.put("ik", R.raw.double_i_k);
- hashMap.put("ɪk", R.raw.double_is_k);
- hashMap.put("eɪk", R.raw.double_ei_k);
- hashMap.put("ɛk", R.raw.double_e_k);
- hashMap.put("æk", R.raw.double_ae_k);
- hashMap.put("ɑk", R.raw.double_a_k);
- hashMap.put("ɔk", R.raw.double_c_k);
- hashMap.put("oʊk", R.raw.double_ou_k);
- hashMap.put("ʊk", R.raw.double_us_k);
- hashMap.put("uk", R.raw.double_u_k);
- hashMap.put("ʌk", R.raw.double_vu_k);
- hashMap.put("aɪk", R.raw.double_ai_k);
- hashMap.put("aʊk", R.raw.double_au_k);
- hashMap.put("ɔɪk", R.raw.double_oi_k);
- hashMap.put("ɝk", R.raw.double_ers_k);
- hashMap.put("ɑrk", R.raw.double_ar_k);
- hashMap.put("ɛrk", R.raw.double_er_k);
- hashMap.put("ɪrk", R.raw.double_ir_k);
- hashMap.put("ɔrk", R.raw.double_or_k);
- hashMap.put("ig", R.raw.double_i_g);
- hashMap.put("ɪg", R.raw.double_is_g);
- hashMap.put("eɪg", R.raw.double_ei_g);
- hashMap.put("ɛg", R.raw.double_e_g);
- hashMap.put("æg", R.raw.double_ae_g);
- hashMap.put("ɑg", R.raw.double_a_g);
- hashMap.put("ɔg", R.raw.double_c_g);
- hashMap.put("oʊg", R.raw.double_ou_g);
- hashMap.put("ʊg", R.raw.double_us_g);
- hashMap.put("ug", R.raw.double_u_g);
- hashMap.put("ʌg", R.raw.double_vu_g);
- hashMap.put("aɪg", R.raw.double_ai_g);
- hashMap.put("aʊg", R.raw.double_au_g);
- hashMap.put("ɔɪg", R.raw.double_oi_g);
- hashMap.put("ɝg", R.raw.double_ers_g);
- hashMap.put("ɑrg", R.raw.double_ar_g);
- hashMap.put("ɛrg", R.raw.double_er_g);
- hashMap.put("ɪrg", R.raw.double_ir_g);
- hashMap.put("ɔrg", R.raw.double_or_g);
- hashMap.put("iʧ", R.raw.double_i_ch);
- hashMap.put("ɪʧ", R.raw.double_is_ch);
- hashMap.put("eɪʧ", R.raw.double_ei_ch);
- hashMap.put("ɛʧ", R.raw.double_e_ch);
- hashMap.put("æʧ", R.raw.double_ae_ch);
- hashMap.put("ɑʧ", R.raw.double_a_ch);
- hashMap.put("ɔʧ", R.raw.double_c_ch);
- hashMap.put("oʊʧ", R.raw.double_ou_ch);
- hashMap.put("ʊʧ", R.raw.double_us_ch);
- hashMap.put("uʧ", R.raw.double_u_ch);
- hashMap.put("ʌʧ", R.raw.double_vu_ch);
- hashMap.put("aɪʧ", R.raw.double_ai_ch);
- hashMap.put("aʊʧ", R.raw.double_au_ch);
- hashMap.put("ɔɪʧ", R.raw.double_oi_ch);
- hashMap.put("ɝʧ", R.raw.double_ers_ch);
- hashMap.put("ɑrʧ", R.raw.double_ar_ch);
- hashMap.put("ɛrʧ", R.raw.double_er_ch);
- hashMap.put("ɪrʧ", R.raw.double_ir_ch);
- hashMap.put("ɔrʧ", R.raw.double_or_ch);
- hashMap.put("iʤ", R.raw.double_i_dzh);
- hashMap.put("ɪʤ", R.raw.double_is_dzh);
- hashMap.put("eɪʤ", R.raw.double_ei_dzh);
- hashMap.put("ɛʤ", R.raw.double_e_dzh);
- hashMap.put("æʤ", R.raw.double_ae_dzh);
- hashMap.put("ɑʤ", R.raw.double_a_dzh);
- hashMap.put("ɔʤ", R.raw.double_c_dzh);
- hashMap.put("oʊʤ", R.raw.double_ou_dzh);
- hashMap.put("ʊʤ", R.raw.double_us_dzh);
- hashMap.put("uʤ", R.raw.double_u_dzh);
- hashMap.put("ʌʤ", R.raw.double_vu_dzh);
- hashMap.put("aɪʤ", R.raw.double_ai_dzh);
- hashMap.put("aʊʤ", R.raw.double_au_dzh);
- hashMap.put("ɔɪʤ", R.raw.double_oi_dzh);
- hashMap.put("ɝʤ", R.raw.double_ers_dzh);
- hashMap.put("ɑrʤ", R.raw.double_ar_dzh);
- hashMap.put("ɛrʤ", R.raw.double_er_dzh);
- hashMap.put("ɪrʤ", R.raw.double_ir_dzh);
- hashMap.put("ɔrʤ", R.raw.double_or_dzh);
- hashMap.put("if", R.raw.double_i_f);
- hashMap.put("ɪf", R.raw.double_is_f);
- hashMap.put("eɪf", R.raw.double_ei_f);
- hashMap.put("ɛf", R.raw.double_e_f);
- hashMap.put("æf", R.raw.double_ae_f);
- hashMap.put("ɑf", R.raw.double_a_f);
- hashMap.put("ɔf", R.raw.double_c_f);
- hashMap.put("oʊf", R.raw.double_ou_f);
- hashMap.put("ʊf", R.raw.double_us_f);
- hashMap.put("uf", R.raw.double_u_f);
- hashMap.put("ʌf", R.raw.double_vu_f);
- hashMap.put("aɪf", R.raw.double_ai_f);
- hashMap.put("aʊf", R.raw.double_au_f);
- hashMap.put("ɔɪf", R.raw.double_oi_f);
- hashMap.put("ɝf", R.raw.double_ers_f);
- hashMap.put("ɑrf", R.raw.double_ar_f);
- hashMap.put("ɛrf", R.raw.double_er_f);
- hashMap.put("ɪrf", R.raw.double_ir_f);
- hashMap.put("ɔrf", R.raw.double_or_f);
- hashMap.put("iv", R.raw.double_i_v);
- hashMap.put("ɪv", R.raw.double_is_v);
- hashMap.put("eɪv", R.raw.double_ei_v);
- hashMap.put("ɛv", R.raw.double_e_v);
- hashMap.put("æv", R.raw.double_ae_v);
- hashMap.put("ɑv", R.raw.double_a_v);
- hashMap.put("ɔv", R.raw.double_c_v);
- hashMap.put("oʊv", R.raw.double_ou_v);
- hashMap.put("ʊv", R.raw.double_us_v);
- hashMap.put("uv", R.raw.double_u_v);
- hashMap.put("ʌv", R.raw.double_vu_v);
- hashMap.put("aɪv", R.raw.double_ai_v);
- hashMap.put("aʊv", R.raw.double_au_v);
- hashMap.put("ɔɪv", R.raw.double_oi_v);
- hashMap.put("ɝv", R.raw.double_ers_v);
- hashMap.put("ɑrv", R.raw.double_ar_v);
- hashMap.put("ɛrv", R.raw.double_er_v);
- hashMap.put("ɪrv", R.raw.double_ir_v);
- hashMap.put("ɔrv", R.raw.double_or_v);
- hashMap.put("iθ", R.raw.double_i_th);
- hashMap.put("ɪθ", R.raw.double_is_th);
- hashMap.put("eɪθ", R.raw.double_ei_th);
- hashMap.put("ɛθ", R.raw.double_e_th);
- hashMap.put("æθ", R.raw.double_ae_th);
- hashMap.put("ɑθ", R.raw.double_a_th);
- hashMap.put("ɔθ", R.raw.double_c_th);
- hashMap.put("oʊθ", R.raw.double_ou_th);
- hashMap.put("ʊθ", R.raw.double_us_th);
- hashMap.put("uθ", R.raw.double_u_th);
- hashMap.put("ʌθ", R.raw.double_vu_th);
- hashMap.put("aɪθ", R.raw.double_ai_th);
- hashMap.put("aʊθ", R.raw.double_au_th);
- hashMap.put("ɔɪθ", R.raw.double_oi_th);
- hashMap.put("ɝθ", R.raw.double_ers_th);
- hashMap.put("ɑrθ", R.raw.double_ar_th);
- hashMap.put("ɛrθ", R.raw.double_er_th);
- hashMap.put("ɪrθ", R.raw.double_ir_th);
- hashMap.put("ɔrθ", R.raw.double_or_th);
- hashMap.put("ið", R.raw.double_i_thv);
- hashMap.put("ɪð", R.raw.double_is_thv);
- hashMap.put("eɪð", R.raw.double_ei_thv);
- hashMap.put("ɛð", R.raw.double_e_thv);
- hashMap.put("æð", R.raw.double_ae_thv);
- hashMap.put("ɑð", R.raw.double_a_thv);
- hashMap.put("ɔð", R.raw.double_c_thv);
- hashMap.put("oʊð", R.raw.double_ou_thv);
- hashMap.put("ʊð", R.raw.double_us_thv);
- hashMap.put("uð", R.raw.double_u_thv);
- hashMap.put("ʌð", R.raw.double_vu_thv);
- hashMap.put("aɪð", R.raw.double_ai_thv);
- hashMap.put("aʊð", R.raw.double_au_thv);
- hashMap.put("ɔɪð", R.raw.double_oi_thv);
- hashMap.put("ɝð", R.raw.double_ers_thv);
- hashMap.put("ɑrð", R.raw.double_ar_thv);
- hashMap.put("ɛrð", R.raw.double_er_thv);
- hashMap.put("ɪrð", R.raw.double_ir_thv);
- hashMap.put("ɔrð", R.raw.double_or_thv);
- hashMap.put("is", R.raw.double_i_s);
- hashMap.put("ɪs", R.raw.double_is_s);
- hashMap.put("eɪs", R.raw.double_ei_s);
- hashMap.put("ɛs", R.raw.double_e_s);
- hashMap.put("æs", R.raw.double_ae_s);
- hashMap.put("ɑs", R.raw.double_a_s);
- hashMap.put("ɔs", R.raw.double_c_s);
- hashMap.put("oʊs", R.raw.double_ou_s);
- hashMap.put("ʊs", R.raw.double_us_s);
- hashMap.put("us", R.raw.double_u_s);
- hashMap.put("ʌs", R.raw.double_vu_s);
- hashMap.put("aɪs", R.raw.double_ai_s);
- hashMap.put("aʊs", R.raw.double_au_s);
- hashMap.put("ɔɪs", R.raw.double_oi_s);
- hashMap.put("ɝs", R.raw.double_ers_s);
- hashMap.put("ɑrs", R.raw.double_ar_s);
- hashMap.put("ɛrs", R.raw.double_er_s);
- hashMap.put("ɪrs", R.raw.double_ir_s);
- hashMap.put("ɔrs", R.raw.double_or_s);
- hashMap.put("iz", R.raw.double_i_z);
- hashMap.put("ɪz", R.raw.double_is_z);
- hashMap.put("eɪz", R.raw.double_ei_z);
- hashMap.put("ɛz", R.raw.double_e_z);
- hashMap.put("æz", R.raw.double_ae_z);
- hashMap.put("ɑz", R.raw.double_a_z);
- hashMap.put("ɔz", R.raw.double_c_z);
- hashMap.put("oʊz", R.raw.double_ou_z);
- hashMap.put("ʊz", R.raw.double_us_z);
- hashMap.put("uz", R.raw.double_u_z);
- hashMap.put("ʌz", R.raw.double_vu_z);
- hashMap.put("aɪz", R.raw.double_ai_z);
- hashMap.put("aʊz", R.raw.double_au_z);
- hashMap.put("ɔɪz", R.raw.double_oi_z);
- hashMap.put("ɝz", R.raw.double_ers_z);
- hashMap.put("ɑrz", R.raw.double_ar_z);
- hashMap.put("ɛrz", R.raw.double_er_z);
- hashMap.put("ɪrz", R.raw.double_ir_z);
- hashMap.put("ɔrz", R.raw.double_or_z);
- hashMap.put("iʃ", R.raw.double_i_sh);
- hashMap.put("ɪʃ", R.raw.double_is_sh);
- hashMap.put("eɪʃ", R.raw.double_ei_sh);
- hashMap.put("ɛʃ", R.raw.double_e_sh);
- hashMap.put("æʃ", R.raw.double_ae_sh);
- hashMap.put("ɑʃ", R.raw.double_a_sh);
- hashMap.put("ɔʃ", R.raw.double_c_sh);
- hashMap.put("oʊʃ", R.raw.double_ou_sh);
- hashMap.put("ʊʃ", R.raw.double_us_sh);
- hashMap.put("uʃ", R.raw.double_u_sh);
- hashMap.put("ʌʃ", R.raw.double_vu_sh);
- hashMap.put("aɪʃ", R.raw.double_ai_sh);
- hashMap.put("aʊʃ", R.raw.double_au_sh);
- hashMap.put("ɔɪʃ", R.raw.double_oi_sh);
- hashMap.put("ɝʃ", R.raw.double_ers_sh);
- hashMap.put("ɑrʃ", R.raw.double_ar_sh);
- hashMap.put("ɛrʃ", R.raw.double_er_sh);
- hashMap.put("ɪrʃ", R.raw.double_ir_sh);
- hashMap.put("ɔrʃ", R.raw.double_or_sh);
- hashMap.put("iʒ", R.raw.double_i_zh);
- hashMap.put("ɪʒ", R.raw.double_is_zh);
- hashMap.put("eɪʒ", R.raw.double_ei_zh);
- hashMap.put("ɛʒ", R.raw.double_e_zh);
- hashMap.put("æʒ", R.raw.double_ae_zh);
- hashMap.put("ɑʒ", R.raw.double_a_zh);
- hashMap.put("ɔʒ", R.raw.double_c_zh);
- hashMap.put("oʊʒ", R.raw.double_ou_zh);
- hashMap.put("ʊʒ", R.raw.double_us_zh);
- hashMap.put("uʒ", R.raw.double_u_zh);
- hashMap.put("ʌʒ", R.raw.double_vu_zh);
- hashMap.put("aɪʒ", R.raw.double_ai_zh);
- hashMap.put("aʊʒ", R.raw.double_au_zh);
- hashMap.put("ɔɪʒ", R.raw.double_oi_zh);
- hashMap.put("ɝʒ", R.raw.double_ers_zh);
- hashMap.put("ɑrʒ", R.raw.double_ar_zh);
- hashMap.put("ɛrʒ", R.raw.double_er_zh);
- hashMap.put("ɪrʒ", R.raw.double_ir_zh);
- hashMap.put("ɔrʒ", R.raw.double_or_zh);
- hashMap.put("im", R.raw.double_i_m);
- hashMap.put("ɪm", R.raw.double_is_m);
- hashMap.put("eɪm", R.raw.double_ei_m);
- hashMap.put("ɛm", R.raw.double_e_m);
- hashMap.put("æm", R.raw.double_ae_m);
- hashMap.put("ɑm", R.raw.double_a_m);
- hashMap.put("ɔm", R.raw.double_c_m);
- hashMap.put("oʊm", R.raw.double_ou_m);
- hashMap.put("ʊm", R.raw.double_us_m);
- hashMap.put("um", R.raw.double_u_m);
- hashMap.put("ʌm", R.raw.double_vu_m);
- hashMap.put("aɪm", R.raw.double_ai_m);
- hashMap.put("aʊm", R.raw.double_au_m);
- hashMap.put("ɔɪm", R.raw.double_oi_m);
- hashMap.put("ɝm", R.raw.double_ers_m);
- hashMap.put("ɑrm", R.raw.double_ar_m);
- hashMap.put("ɛrm", R.raw.double_er_m);
- hashMap.put("ɪrm", R.raw.double_ir_m);
- hashMap.put("ɔrm", R.raw.double_or_m);
- hashMap.put("in", R.raw.double_i_n);
- hashMap.put("ɪn", R.raw.double_is_n);
- hashMap.put("eɪn", R.raw.double_ei_n);
- hashMap.put("ɛn", R.raw.double_e_n);
- hashMap.put("æn", R.raw.double_ae_n);
- hashMap.put("ɑn", R.raw.double_a_n);
- hashMap.put("ɔn", R.raw.double_c_n);
- hashMap.put("oʊn", R.raw.double_ou_n);
- hashMap.put("ʊn", R.raw.double_us_n);
- hashMap.put("un", R.raw.double_u_n);
- hashMap.put("ʌn", R.raw.double_vu_n);
- hashMap.put("aɪn", R.raw.double_ai_n);
- hashMap.put("aʊn", R.raw.double_au_n);
- hashMap.put("ɔɪn", R.raw.double_oi_n);
- hashMap.put("ɝn", R.raw.double_ers_n);
- hashMap.put("ɑrn", R.raw.double_ar_n);
- hashMap.put("ɛrn", R.raw.double_er_n);
- hashMap.put("ɪrn", R.raw.double_ir_n);
- hashMap.put("ɔrn", R.raw.double_or_n);
- hashMap.put("iŋ", R.raw.double_i_ng);
- hashMap.put("ɪŋ", R.raw.double_is_ng);
- hashMap.put("eɪŋ", R.raw.double_ei_ng);
- hashMap.put("ɛŋ", R.raw.double_e_ng);
- hashMap.put("æŋ", R.raw.double_ae_ng);
- hashMap.put("ɑŋ", R.raw.double_a_ng);
- hashMap.put("ɔŋ", R.raw.double_c_ng);
- hashMap.put("oʊŋ", R.raw.double_ou_ng);
- hashMap.put("ʊŋ", R.raw.double_us_ng);
- hashMap.put("uŋ", R.raw.double_u_ng);
- hashMap.put("ʌŋ", R.raw.double_vu_ng);
- hashMap.put("aɪŋ", R.raw.double_ai_ng);
- hashMap.put("aʊŋ", R.raw.double_au_ng);
- hashMap.put("ɔɪŋ", R.raw.double_oi_ng);
- hashMap.put("ɝŋ", R.raw.double_ers_ng);
- hashMap.put("ɑrŋ", R.raw.double_ar_ng);
- hashMap.put("ɛrŋ", R.raw.double_er_ng);
- hashMap.put("ɪrŋ", R.raw.double_ir_ng);
- hashMap.put("ɔrŋ", R.raw.double_or_ng);
- hashMap.put("il", R.raw.double_i_l);
- hashMap.put("ɪl", R.raw.double_is_l);
- hashMap.put("eɪl", R.raw.double_ei_l);
- hashMap.put("ɛl", R.raw.double_e_l);
- hashMap.put("æl", R.raw.double_ae_l);
- hashMap.put("ɑl", R.raw.double_a_l);
- hashMap.put("ɔl", R.raw.double_c_l);
- hashMap.put("oʊl", R.raw.double_ou_l);
- hashMap.put("ʊl", R.raw.double_us_l);
- hashMap.put("ul", R.raw.double_u_l);
- hashMap.put("ʌl", R.raw.double_vu_l);
- hashMap.put("aɪl", R.raw.double_ai_l);
- hashMap.put("aʊl", R.raw.double_au_l);
- hashMap.put("ɔɪl", R.raw.double_oi_l);
- hashMap.put("ɝl", R.raw.double_ers_l);
- hashMap.put("ɑrl", R.raw.double_ar_l);
- hashMap.put("ɛrl", R.raw.double_er_l);
- hashMap.put("ɪrl", R.raw.double_ir_l);
- hashMap.put("ɔrl", R.raw.double_or_l);
+ static Pair parse(String ipaDouble) {
+ if (ipaDouble == null || ipaDouble.length() < 2) return null;
+
+ String first;
+ String second;
+
+ if (!startsWithTwoCharVowel(ipaDouble)) {
+ first = ipaDouble.substring(0, 1);
+ second = ipaDouble.substring(1);
+ return new Pair<>(first, second);
+ }
+
+ if (ipaDouble.length() == 2) {
+ // this is technically an error (shouldn't separate a 2-char vowel)
+ first = ipaDouble.substring(0, 1);
+ second = ipaDouble.substring(1);
+ return new Pair<>(first, second);
+ }
+
+ first = ipaDouble.substring(0, 2);
+ second = ipaDouble.substring(2);
+ return new Pair<>(first, second);
+ }
+
+ private static boolean startsWithTwoCharVowel(String ipaDouble) {
+ return ipaDouble.startsWith(Ipa.ai) || ipaDouble.startsWith(Ipa.au)
+ || ipaDouble.startsWith(Ipa.ei) || ipaDouble.startsWith(Ipa.ou)
+ || ipaDouble.startsWith(Ipa.oi) || ipaDouble.startsWith(Ipa.ar)
+ || ipaDouble.startsWith(Ipa.er) || ipaDouble.startsWith(Ipa.ir)
+ || ipaDouble.startsWith(Ipa.or);
+ }
+
+ // initialize the result when new object created
+ private static Map createSoundMap() {
+
+ Map result = new LinkedHashMap<>();
+
+ result.put("pi", R.raw.double_p_i);
+ result.put("pɪ", R.raw.double_p_is);
+ result.put("peɪ", R.raw.double_p_ei);
+ result.put("pɛ", R.raw.double_p_e);
+ result.put("pæ", R.raw.double_p_ae);
+ result.put("pɑ", R.raw.double_p_a);
+ result.put("pɔ", R.raw.double_p_c);
+ result.put("poʊ", R.raw.double_p_ou);
+ result.put("pʊ", R.raw.double_p_us);
+ result.put("pu", R.raw.double_p_u);
+ result.put("pʌ", R.raw.double_p_vu);
+ result.put("paɪ", R.raw.double_p_ai);
+ result.put("paʊ", R.raw.double_p_au);
+ result.put("pɔɪ", R.raw.double_p_oi);
+ result.put("pɝ", R.raw.double_p_ers);
+ result.put("pɑr", R.raw.double_p_ar);
+ result.put("pɛr", R.raw.double_p_er);
+ result.put("pɪr", R.raw.double_p_ir);
+ result.put("pɔr", R.raw.double_p_or);
+ result.put("bi", R.raw.double_b_i);
+ result.put("bɪ", R.raw.double_b_is);
+ result.put("beɪ", R.raw.double_b_ei);
+ result.put("bɛ", R.raw.double_b_e);
+ result.put("bæ", R.raw.double_b_ae);
+ result.put("bɑ", R.raw.double_b_a);
+ result.put("bɔ", R.raw.double_b_c);
+ result.put("boʊ", R.raw.double_b_ou);
+ result.put("bʊ", R.raw.double_b_us);
+ result.put("bu", R.raw.double_b_u);
+ result.put("bʌ", R.raw.double_b_vu);
+ result.put("baɪ", R.raw.double_b_ai);
+ result.put("baʊ", R.raw.double_b_au);
+ result.put("bɔɪ", R.raw.double_b_oi);
+ result.put("bɝ", R.raw.double_b_ers);
+ result.put("bɑr", R.raw.double_b_ar);
+ result.put("bɛr", R.raw.double_b_er);
+ result.put("bɪr", R.raw.double_b_ir);
+ result.put("bɔr", R.raw.double_b_or);
+ result.put("ti", R.raw.double_t_i);
+ result.put("tɪ", R.raw.double_t_is);
+ result.put("teɪ", R.raw.double_t_ei);
+ result.put("tɛ", R.raw.double_t_e);
+ result.put("tæ", R.raw.double_t_ae);
+ result.put("tɑ", R.raw.double_t_a);
+ result.put("tɔ", R.raw.double_t_c);
+ result.put("toʊ", R.raw.double_t_ou);
+ result.put("tʊ", R.raw.double_t_us);
+ result.put("tu", R.raw.double_t_u);
+ result.put("tʌ", R.raw.double_t_vu);
+ result.put("taɪ", R.raw.double_t_ai);
+ result.put("taʊ", R.raw.double_t_au);
+ result.put("tɔɪ", R.raw.double_t_oi);
+ result.put("tɝ", R.raw.double_t_ers);
+ result.put("tɑr", R.raw.double_t_ar);
+ result.put("tɛr", R.raw.double_t_er);
+ result.put("tɪr", R.raw.double_t_ir);
+ result.put("tɔr", R.raw.double_t_or);
+ result.put("di", R.raw.double_d_i);
+ result.put("dɪ", R.raw.double_d_is);
+ result.put("deɪ", R.raw.double_d_ei);
+ result.put("dɛ", R.raw.double_d_e);
+ result.put("dæ", R.raw.double_d_ae);
+ result.put("dɑ", R.raw.double_d_a);
+ result.put("dɔ", R.raw.double_d_c);
+ result.put("doʊ", R.raw.double_d_ou);
+ result.put("dʊ", R.raw.double_d_us);
+ result.put("du", R.raw.double_d_u);
+ result.put("dʌ", R.raw.double_d_vu);
+ result.put("daɪ", R.raw.double_d_ai);
+ result.put("daʊ", R.raw.double_d_au);
+ result.put("dɔɪ", R.raw.double_d_oi);
+ result.put("dɝ", R.raw.double_d_ers);
+ result.put("dɑr", R.raw.double_d_ar);
+ result.put("dɛr", R.raw.double_d_er);
+ result.put("dɪr", R.raw.double_d_ir);
+ result.put("dɔr", R.raw.double_d_or);
+ result.put("ki", R.raw.double_k_i);
+ result.put("kɪ", R.raw.double_k_is);
+ result.put("keɪ", R.raw.double_k_ei);
+ result.put("kɛ", R.raw.double_k_e);
+ result.put("kæ", R.raw.double_k_ae);
+ result.put("kɑ", R.raw.double_k_a);
+ result.put("kɔ", R.raw.double_k_c);
+ result.put("koʊ", R.raw.double_k_ou);
+ result.put("kʊ", R.raw.double_k_us);
+ result.put("ku", R.raw.double_k_u);
+ result.put("kʌ", R.raw.double_k_vu);
+ result.put("kaɪ", R.raw.double_k_ai);
+ result.put("kaʊ", R.raw.double_k_au);
+ result.put("kɔɪ", R.raw.double_k_oi);
+ result.put("kɝ", R.raw.double_k_ers);
+ result.put("kɑr", R.raw.double_k_ar);
+ result.put("kɛr", R.raw.double_k_er);
+ result.put("kɪr", R.raw.double_k_ir);
+ result.put("kɔr", R.raw.double_k_or);
+ result.put("gi", R.raw.double_g_i);
+ result.put("gɪ", R.raw.double_g_is);
+ result.put("geɪ", R.raw.double_g_ei);
+ result.put("gɛ", R.raw.double_g_e);
+ result.put("gæ", R.raw.double_g_ae);
+ result.put("gɑ", R.raw.double_g_a);
+ result.put("gɔ", R.raw.double_g_c);
+ result.put("goʊ", R.raw.double_g_ou);
+ result.put("gʊ", R.raw.double_g_us);
+ result.put("gu", R.raw.double_g_u);
+ result.put("gʌ", R.raw.double_g_vu);
+ result.put("gaɪ", R.raw.double_g_ai);
+ result.put("gaʊ", R.raw.double_g_au);
+ result.put("gɔɪ", R.raw.double_g_oi);
+ result.put("gɝ", R.raw.double_g_ers);
+ result.put("gɑr", R.raw.double_g_ar);
+ result.put("gɛr", R.raw.double_g_er);
+ result.put("gɪr", R.raw.double_g_ir);
+ result.put("gɔr", R.raw.double_g_or);
+ result.put("ʧi", R.raw.double_ch_i);
+ result.put("ʧɪ", R.raw.double_ch_is);
+ result.put("ʧeɪ", R.raw.double_ch_ei);
+ result.put("ʧɛ", R.raw.double_ch_e);
+ result.put("ʧæ", R.raw.double_ch_ae);
+ result.put("ʧɑ", R.raw.double_ch_a);
+ result.put("ʧɔ", R.raw.double_ch_c);
+ result.put("ʧoʊ", R.raw.double_ch_ou);
+ result.put("ʧʊ", R.raw.double_ch_us);
+ result.put("ʧu", R.raw.double_ch_u);
+ result.put("ʧʌ", R.raw.double_ch_vu);
+ result.put("ʧaɪ", R.raw.double_ch_ai);
+ result.put("ʧaʊ", R.raw.double_ch_au);
+ result.put("ʧɔɪ", R.raw.double_ch_oi);
+ result.put("ʧɝ", R.raw.double_ch_ers);
+ result.put("ʧɑr", R.raw.double_ch_ar);
+ result.put("ʧɛr", R.raw.double_ch_er);
+ result.put("ʧɪr", R.raw.double_ch_ir);
+ result.put("ʧɔr", R.raw.double_ch_or);
+ result.put("ʤi", R.raw.double_dzh_i);
+ result.put("ʤɪ", R.raw.double_dzh_is);
+ result.put("ʤeɪ", R.raw.double_dzh_ei);
+ result.put("ʤɛ", R.raw.double_dzh_e);
+ result.put("ʤæ", R.raw.double_dzh_ae);
+ result.put("ʤɑ", R.raw.double_dzh_a);
+ result.put("ʤɔ", R.raw.double_dzh_c);
+ result.put("ʤoʊ", R.raw.double_dzh_ou);
+ result.put("ʤʊ", R.raw.double_dzh_us);
+ result.put("ʤu", R.raw.double_dzh_u);
+ result.put("ʤʌ", R.raw.double_dzh_vu);
+ result.put("ʤaɪ", R.raw.double_dzh_ai);
+ result.put("ʤaʊ", R.raw.double_dzh_au);
+ result.put("ʤɔɪ", R.raw.double_dzh_oi);
+ result.put("ʤɝ", R.raw.double_dzh_ers);
+ result.put("ʤɑr", R.raw.double_dzh_ar);
+ result.put("ʤɛr", R.raw.double_dzh_er);
+ result.put("ʤɪr", R.raw.double_dzh_ir);
+ result.put("ʤɔr", R.raw.double_dzh_or);
+ result.put("fi", R.raw.double_f_i);
+ result.put("fɪ", R.raw.double_f_is);
+ result.put("feɪ", R.raw.double_f_ei);
+ result.put("fɛ", R.raw.double_f_e);
+ result.put("fæ", R.raw.double_f_ae);
+ result.put("fɑ", R.raw.double_f_a);
+ result.put("fɔ", R.raw.double_f_c);
+ result.put("foʊ", R.raw.double_f_ou);
+ result.put("fʊ", R.raw.double_f_us);
+ result.put("fu", R.raw.double_f_u);
+ result.put("fʌ", R.raw.double_f_vu);
+ result.put("faɪ", R.raw.double_f_ai);
+ result.put("faʊ", R.raw.double_f_au);
+ result.put("fɔɪ", R.raw.double_f_oi);
+ result.put("fɝ", R.raw.double_f_ers);
+ result.put("fɑr", R.raw.double_f_ar);
+ result.put("fɛr", R.raw.double_f_er);
+ result.put("fɪr", R.raw.double_f_ir);
+ result.put("fɔr", R.raw.double_f_or);
+ result.put("vi", R.raw.double_v_i);
+ result.put("vɪ", R.raw.double_v_is);
+ result.put("veɪ", R.raw.double_v_ei);
+ result.put("vɛ", R.raw.double_v_e);
+ result.put("væ", R.raw.double_v_ae);
+ result.put("vɑ", R.raw.double_v_a);
+ result.put("vɔ", R.raw.double_v_c);
+ result.put("voʊ", R.raw.double_v_ou);
+ result.put("vʊ", R.raw.double_v_us);
+ result.put("vu", R.raw.double_v_u);
+ result.put("vʌ", R.raw.double_v_vu);
+ result.put("vaɪ", R.raw.double_v_ai);
+ result.put("vaʊ", R.raw.double_v_au);
+ result.put("vɔɪ", R.raw.double_v_oi);
+ result.put("vɝ", R.raw.double_v_ers);
+ result.put("vɑr", R.raw.double_v_ar);
+ result.put("vɛr", R.raw.double_v_er);
+ result.put("vɪr", R.raw.double_v_ir);
+ result.put("vɔr", R.raw.double_v_or);
+ result.put("θi", R.raw.double_th_i);
+ result.put("θɪ", R.raw.double_th_is);
+ result.put("θeɪ", R.raw.double_th_ei);
+ result.put("θɛ", R.raw.double_th_e);
+ result.put("θæ", R.raw.double_th_ae);
+ result.put("θɑ", R.raw.double_th_a);
+ result.put("θɔ", R.raw.double_th_c);
+ result.put("θoʊ", R.raw.double_th_ou);
+ result.put("θʊ", R.raw.double_th_us);
+ result.put("θu", R.raw.double_th_u);
+ result.put("θʌ", R.raw.double_th_vu);
+ result.put("θaɪ", R.raw.double_th_ai);
+ result.put("θaʊ", R.raw.double_th_au);
+ result.put("θɔɪ", R.raw.double_th_oi);
+ result.put("θɝ", R.raw.double_th_ers);
+ result.put("θɑr", R.raw.double_th_ar);
+ result.put("θɛr", R.raw.double_th_er);
+ result.put("θɪr", R.raw.double_th_ir);
+ result.put("θɔr", R.raw.double_th_or);
+ result.put("ði", R.raw.double_thv_i);
+ result.put("ðɪ", R.raw.double_thv_is);
+ result.put("ðeɪ", R.raw.double_thv_ei);
+ result.put("ðɛ", R.raw.double_thv_e);
+ result.put("ðæ", R.raw.double_thv_ae);
+ result.put("ðɑ", R.raw.double_thv_a);
+ result.put("ðɔ", R.raw.double_thv_c);
+ result.put("ðoʊ", R.raw.double_thv_ou);
+ result.put("ðʊ", R.raw.double_thv_us);
+ result.put("ðu", R.raw.double_thv_u);
+ result.put("ðʌ", R.raw.double_thv_vu);
+ result.put("ðaɪ", R.raw.double_thv_ai);
+ result.put("ðaʊ", R.raw.double_thv_au);
+ result.put("ðɔɪ", R.raw.double_thv_oi);
+ result.put("ðɝ", R.raw.double_thv_ers);
+ result.put("ðɑr", R.raw.double_thv_ar);
+ result.put("ðɛr", R.raw.double_thv_er);
+ result.put("ðɪr", R.raw.double_thv_ir);
+ result.put("ðɔr", R.raw.double_thv_or);
+ result.put("si", R.raw.double_s_i);
+ result.put("sɪ", R.raw.double_s_is);
+ result.put("seɪ", R.raw.double_s_ei);
+ result.put("sɛ", R.raw.double_s_e);
+ result.put("sæ", R.raw.double_s_ae);
+ result.put("sɑ", R.raw.double_s_a);
+ result.put("sɔ", R.raw.double_s_c);
+ result.put("soʊ", R.raw.double_s_ou);
+ result.put("sʊ", R.raw.double_s_us);
+ result.put("su", R.raw.double_s_u);
+ result.put("sʌ", R.raw.double_s_vu);
+ result.put("saɪ", R.raw.double_s_ai);
+ result.put("saʊ", R.raw.double_s_au);
+ result.put("sɔɪ", R.raw.double_s_oi);
+ result.put("sɝ", R.raw.double_s_ers);
+ result.put("sɑr", R.raw.double_s_ar);
+ result.put("sɛr", R.raw.double_s_er);
+ result.put("sɪr", R.raw.double_s_ir);
+ result.put("sɔr", R.raw.double_s_or);
+ result.put("zi", R.raw.double_z_i);
+ result.put("zɪ", R.raw.double_z_is);
+ result.put("zeɪ", R.raw.double_z_ei);
+ result.put("zɛ", R.raw.double_z_e);
+ result.put("zæ", R.raw.double_z_ae);
+ result.put("zɑ", R.raw.double_z_a);
+ result.put("zɔ", R.raw.double_z_c);
+ result.put("zoʊ", R.raw.double_z_ou);
+ result.put("zʊ", R.raw.double_z_us);
+ result.put("zu", R.raw.double_z_u);
+ result.put("zʌ", R.raw.double_z_vu);
+ result.put("zaɪ", R.raw.double_z_ai);
+ result.put("zaʊ", R.raw.double_z_au);
+ result.put("zɔɪ", R.raw.double_z_oi);
+ result.put("zɝ", R.raw.double_z_ers);
+ result.put("zɑr", R.raw.double_z_ar);
+ result.put("zɛr", R.raw.double_z_er);
+ result.put("zɪr", R.raw.double_z_ir);
+ result.put("zɔr", R.raw.double_z_or);
+ result.put("ʃi", R.raw.double_sh_i);
+ result.put("ʃɪ", R.raw.double_sh_is);
+ result.put("ʃeɪ", R.raw.double_sh_ei);
+ result.put("ʃɛ", R.raw.double_sh_e);
+ result.put("ʃæ", R.raw.double_sh_ae);
+ result.put("ʃɑ", R.raw.double_sh_a);
+ result.put("ʃɔ", R.raw.double_sh_c);
+ result.put("ʃoʊ", R.raw.double_sh_ou);
+ result.put("ʃʊ", R.raw.double_sh_us);
+ result.put("ʃu", R.raw.double_sh_u);
+ result.put("ʃʌ", R.raw.double_sh_vu);
+ result.put("ʃaɪ", R.raw.double_sh_ai);
+ result.put("ʃaʊ", R.raw.double_sh_au);
+ result.put("ʃɔɪ", R.raw.double_sh_oi);
+ result.put("ʃɝ", R.raw.double_sh_ers);
+ result.put("ʃɑr", R.raw.double_sh_ar);
+ result.put("ʃɛr", R.raw.double_sh_er);
+ result.put("ʃɪr", R.raw.double_sh_ir);
+ result.put("ʃɔr", R.raw.double_sh_or);
+ result.put("ʒi", R.raw.double_zh_i);
+ result.put("ʒɪ", R.raw.double_zh_is);
+ result.put("ʒeɪ", R.raw.double_zh_ei);
+ result.put("ʒɛ", R.raw.double_zh_e);
+ result.put("ʒæ", R.raw.double_zh_ae);
+ result.put("ʒɑ", R.raw.double_zh_a);
+ result.put("ʒɔ", R.raw.double_zh_c);
+ result.put("ʒoʊ", R.raw.double_zh_ou);
+ result.put("ʒʊ", R.raw.double_zh_us);
+ result.put("ʒu", R.raw.double_zh_u);
+ result.put("ʒʌ", R.raw.double_zh_vu);
+ result.put("ʒaɪ", R.raw.double_zh_ai);
+ result.put("ʒaʊ", R.raw.double_zh_au);
+ result.put("ʒɔɪ", R.raw.double_zh_oi);
+ result.put("ʒɝ", R.raw.double_zh_ers);
+ result.put("ʒɑr", R.raw.double_zh_ar);
+ result.put("ʒɛr", R.raw.double_zh_er);
+ result.put("ʒɪr", R.raw.double_zh_ir);
+ result.put("ʒɔr", R.raw.double_zh_or);
+ result.put("mi", R.raw.double_m_i);
+ result.put("mɪ", R.raw.double_m_is);
+ result.put("meɪ", R.raw.double_m_ei);
+ result.put("mɛ", R.raw.double_m_e);
+ result.put("mæ", R.raw.double_m_ae);
+ result.put("mɑ", R.raw.double_m_a);
+ result.put("mɔ", R.raw.double_m_c);
+ result.put("moʊ", R.raw.double_m_ou);
+ result.put("mʊ", R.raw.double_m_us);
+ result.put("mu", R.raw.double_m_u);
+ result.put("mʌ", R.raw.double_m_vu);
+ result.put("maɪ", R.raw.double_m_ai);
+ result.put("maʊ", R.raw.double_m_au);
+ result.put("mɔɪ", R.raw.double_m_oi);
+ result.put("mɝ", R.raw.double_m_ers);
+ result.put("mɑr", R.raw.double_m_ar);
+ result.put("mɛr", R.raw.double_m_er);
+ result.put("mɪr", R.raw.double_m_ir);
+ result.put("mɔr", R.raw.double_m_or);
+ result.put("ni", R.raw.double_n_i);
+ result.put("nɪ", R.raw.double_n_is);
+ result.put("neɪ", R.raw.double_n_ei);
+ result.put("nɛ", R.raw.double_n_e);
+ result.put("næ", R.raw.double_n_ae);
+ result.put("nɑ", R.raw.double_n_a);
+ result.put("nɔ", R.raw.double_n_c);
+ result.put("noʊ", R.raw.double_n_ou);
+ result.put("nʊ", R.raw.double_n_us);
+ result.put("nu", R.raw.double_n_u);
+ result.put("nʌ", R.raw.double_n_vu);
+ result.put("naɪ", R.raw.double_n_ai);
+ result.put("naʊ", R.raw.double_n_au);
+ result.put("nɔɪ", R.raw.double_n_oi);
+ result.put("nɝ", R.raw.double_n_ers);
+ result.put("nɑr", R.raw.double_n_ar);
+ result.put("nɛr", R.raw.double_n_er);
+ result.put("nɪr", R.raw.double_n_ir);
+ result.put("nɔr", R.raw.double_n_or);
+ result.put("li", R.raw.double_l_i);
+ result.put("lɪ", R.raw.double_l_is);
+ result.put("leɪ", R.raw.double_l_ei);
+ result.put("lɛ", R.raw.double_l_e);
+ result.put("læ", R.raw.double_l_ae);
+ result.put("lɑ", R.raw.double_l_a);
+ result.put("lɔ", R.raw.double_l_c);
+ result.put("loʊ", R.raw.double_l_ou);
+ result.put("lʊ", R.raw.double_l_us);
+ result.put("lu", R.raw.double_l_u);
+ result.put("lʌ", R.raw.double_l_vu);
+ result.put("laɪ", R.raw.double_l_ai);
+ result.put("laʊ", R.raw.double_l_au);
+ result.put("lɔɪ", R.raw.double_l_oi);
+ result.put("lɝ", R.raw.double_l_ers);
+ result.put("lɑr", R.raw.double_l_ar);
+ result.put("lɛr", R.raw.double_l_er);
+ result.put("lɪr", R.raw.double_l_ir);
+ result.put("lɔr", R.raw.double_l_or);
+ result.put("wi", R.raw.double_w_i);
+ result.put("wɪ", R.raw.double_w_is);
+ result.put("weɪ", R.raw.double_w_ei);
+ result.put("wɛ", R.raw.double_w_e);
+ result.put("wæ", R.raw.double_w_ae);
+ result.put("wɑ", R.raw.double_w_a);
+ result.put("wɔ", R.raw.double_w_c);
+ result.put("woʊ", R.raw.double_w_ou);
+ result.put("wʊ", R.raw.double_w_us);
+ result.put("wu", R.raw.double_w_u);
+ result.put("wʌ", R.raw.double_w_vu);
+ result.put("waɪ", R.raw.double_w_ai);
+ result.put("waʊ", R.raw.double_w_au);
+ result.put("wɔɪ", R.raw.double_w_oi);
+ result.put("wɝ", R.raw.double_w_ers);
+ result.put("wɑr", R.raw.double_w_ar);
+ result.put("wɛr", R.raw.double_w_er);
+ result.put("wɪr", R.raw.double_w_ir);
+ result.put("wɔr", R.raw.double_w_or);
+ result.put("ji", R.raw.double_j_i);
+ result.put("jɪ", R.raw.double_j_is);
+ result.put("jeɪ", R.raw.double_j_ei);
+ result.put("jɛ", R.raw.double_j_e);
+ result.put("jæ", R.raw.double_j_ae);
+ result.put("jɑ", R.raw.double_j_a);
+ result.put("jɔ", R.raw.double_j_c);
+ result.put("joʊ", R.raw.double_j_ou);
+ result.put("jʊ", R.raw.double_j_us);
+ result.put("ju", R.raw.double_j_u);
+ result.put("jʌ", R.raw.double_j_vu);
+ result.put("jaɪ", R.raw.double_j_ai);
+ result.put("jaʊ", R.raw.double_j_au);
+ result.put("jɔɪ", R.raw.double_j_oi);
+ result.put("jɝ", R.raw.double_j_ers);
+ result.put("jɑr", R.raw.double_j_ar);
+ result.put("jɛr", R.raw.double_j_er);
+ result.put("jɪr", R.raw.double_j_ir);
+ result.put("jɔr", R.raw.double_j_or);
+ result.put("hi", R.raw.double_h_i);
+ result.put("hɪ", R.raw.double_h_is);
+ result.put("heɪ", R.raw.double_h_ei);
+ result.put("hɛ", R.raw.double_h_e);
+ result.put("hæ", R.raw.double_h_ae);
+ result.put("hɑ", R.raw.double_h_a);
+ result.put("hɔ", R.raw.double_h_c);
+ result.put("hoʊ", R.raw.double_h_ou);
+ result.put("hʊ", R.raw.double_h_us);
+ result.put("hu", R.raw.double_h_u);
+ result.put("hʌ", R.raw.double_h_vu);
+ result.put("haɪ", R.raw.double_h_ai);
+ result.put("haʊ", R.raw.double_h_au);
+ result.put("hɔɪ", R.raw.double_h_oi);
+ result.put("hɝ", R.raw.double_h_ers);
+ result.put("hɑr", R.raw.double_h_ar);
+ result.put("hɛr", R.raw.double_h_er);
+ result.put("hɪr", R.raw.double_h_ir);
+ result.put("hɔr", R.raw.double_h_or);
+ result.put("ri", R.raw.double_r_i);
+ result.put("rɪ", R.raw.double_r_is);
+ result.put("reɪ", R.raw.double_r_ei);
+ result.put("rɛ", R.raw.double_r_e);
+ result.put("ræ", R.raw.double_r_ae);
+ result.put("rɑ", R.raw.double_r_a);
+ result.put("rɔ", R.raw.double_r_c);
+ result.put("roʊ", R.raw.double_r_ou);
+ result.put("rʊ", R.raw.double_r_us);
+ result.put("ru", R.raw.double_r_u);
+ result.put("rʌ", R.raw.double_r_vu);
+ result.put("raɪ", R.raw.double_r_ai);
+ result.put("raʊ", R.raw.double_r_au);
+ result.put("rɔɪ", R.raw.double_r_oi);
+ result.put("rɝ", R.raw.double_r_ers);
+ result.put("rɑr", R.raw.double_r_ar);
+ result.put("rɛr", R.raw.double_r_er);
+ result.put("rɪr", R.raw.double_r_ir);
+ result.put("rɔr", R.raw.double_r_or);
+ result.put("ip", R.raw.double_i_p);
+ result.put("ɪp", R.raw.double_is_p);
+ result.put("eɪp", R.raw.double_ei_p);
+ result.put("ɛp", R.raw.double_e_p);
+ result.put("æp", R.raw.double_ae_p);
+ result.put("ɑp", R.raw.double_a_p);
+ result.put("ɔp", R.raw.double_c_p);
+ result.put("oʊp", R.raw.double_ou_p);
+ result.put("ʊp", R.raw.double_us_p);
+ result.put("up", R.raw.double_u_p);
+ result.put("ʌp", R.raw.double_vu_p);
+ result.put("aɪp", R.raw.double_ai_p);
+ result.put("aʊp", R.raw.double_au_p);
+ result.put("ɔɪp", R.raw.double_oi_p);
+ result.put("ɝp", R.raw.double_ers_p);
+ result.put("ɑrp", R.raw.double_ar_p);
+ result.put("ɛrp", R.raw.double_er_p);
+ result.put("ɪrp", R.raw.double_ir_p);
+ result.put("ɔrp", R.raw.double_or_p);
+ result.put("ib", R.raw.double_i_b);
+ result.put("ɪb", R.raw.double_is_b);
+ result.put("eɪb", R.raw.double_ei_b);
+ result.put("ɛb", R.raw.double_e_b);
+ result.put("æb", R.raw.double_ae_b);
+ result.put("ɑb", R.raw.double_a_b);
+ result.put("ɔb", R.raw.double_c_b);
+ result.put("oʊb", R.raw.double_ou_b);
+ result.put("ʊb", R.raw.double_us_b);
+ result.put("ub", R.raw.double_u_b);
+ result.put("ʌb", R.raw.double_vu_b);
+ result.put("aɪb", R.raw.double_ai_b);
+ result.put("aʊb", R.raw.double_au_b);
+ result.put("ɔɪb", R.raw.double_oi_b);
+ result.put("ɝb", R.raw.double_ers_b);
+ result.put("ɑrb", R.raw.double_ar_b);
+ result.put("ɛrb", R.raw.double_er_b);
+ result.put("ɪrb", R.raw.double_ir_b);
+ result.put("ɔrb", R.raw.double_or_b);
+ result.put("it", R.raw.double_i_t);
+ result.put("ɪt", R.raw.double_is_t);
+ result.put("eɪt", R.raw.double_ei_t);
+ result.put("ɛt", R.raw.double_e_t);
+ result.put("æt", R.raw.double_ae_t);
+ result.put("ɑt", R.raw.double_a_t);
+ result.put("ɔt", R.raw.double_c_t);
+ result.put("oʊt", R.raw.double_ou_t);
+ result.put("ʊt", R.raw.double_us_t);
+ result.put("ut", R.raw.double_u_t);
+ result.put("ʌt", R.raw.double_vu_t);
+ result.put("aɪt", R.raw.double_ai_t);
+ result.put("aʊt", R.raw.double_au_t);
+ result.put("ɔɪt", R.raw.double_oi_t);
+ result.put("ɝt", R.raw.double_ers_t);
+ result.put("ɑrt", R.raw.double_ar_t);
+ result.put("ɛrt", R.raw.double_er_t);
+ result.put("ɪrt", R.raw.double_ir_t);
+ result.put("ɔrt", R.raw.double_or_t);
+ result.put("id", R.raw.double_i_d);
+ result.put("ɪd", R.raw.double_is_d);
+ result.put("eɪd", R.raw.double_ei_d);
+ result.put("ɛd", R.raw.double_e_d);
+ result.put("æd", R.raw.double_ae_d);
+ result.put("ɑd", R.raw.double_a_d);
+ result.put("ɔd", R.raw.double_c_d);
+ result.put("oʊd", R.raw.double_ou_d);
+ result.put("ʊd", R.raw.double_us_d);
+ result.put("ud", R.raw.double_u_d);
+ result.put("ʌd", R.raw.double_vu_d);
+ result.put("aɪd", R.raw.double_ai_d);
+ result.put("aʊd", R.raw.double_au_d);
+ result.put("ɔɪd", R.raw.double_oi_d);
+ result.put("ɝd", R.raw.double_ers_d);
+ result.put("ɑrd", R.raw.double_ar_d);
+ result.put("ɛrd", R.raw.double_er_d);
+ result.put("ɪrd", R.raw.double_ir_d);
+ result.put("ɔrd", R.raw.double_or_d);
+ result.put("ik", R.raw.double_i_k);
+ result.put("ɪk", R.raw.double_is_k);
+ result.put("eɪk", R.raw.double_ei_k);
+ result.put("ɛk", R.raw.double_e_k);
+ result.put("æk", R.raw.double_ae_k);
+ result.put("ɑk", R.raw.double_a_k);
+ result.put("ɔk", R.raw.double_c_k);
+ result.put("oʊk", R.raw.double_ou_k);
+ result.put("ʊk", R.raw.double_us_k);
+ result.put("uk", R.raw.double_u_k);
+ result.put("ʌk", R.raw.double_vu_k);
+ result.put("aɪk", R.raw.double_ai_k);
+ result.put("aʊk", R.raw.double_au_k);
+ result.put("ɔɪk", R.raw.double_oi_k);
+ result.put("ɝk", R.raw.double_ers_k);
+ result.put("ɑrk", R.raw.double_ar_k);
+ result.put("ɛrk", R.raw.double_er_k);
+ result.put("ɪrk", R.raw.double_ir_k);
+ result.put("ɔrk", R.raw.double_or_k);
+ result.put("ig", R.raw.double_i_g);
+ result.put("ɪg", R.raw.double_is_g);
+ result.put("eɪg", R.raw.double_ei_g);
+ result.put("ɛg", R.raw.double_e_g);
+ result.put("æg", R.raw.double_ae_g);
+ result.put("ɑg", R.raw.double_a_g);
+ result.put("ɔg", R.raw.double_c_g);
+ result.put("oʊg", R.raw.double_ou_g);
+ result.put("ʊg", R.raw.double_us_g);
+ result.put("ug", R.raw.double_u_g);
+ result.put("ʌg", R.raw.double_vu_g);
+ result.put("aɪg", R.raw.double_ai_g);
+ result.put("aʊg", R.raw.double_au_g);
+ result.put("ɔɪg", R.raw.double_oi_g);
+ result.put("ɝg", R.raw.double_ers_g);
+ result.put("ɑrg", R.raw.double_ar_g);
+ result.put("ɛrg", R.raw.double_er_g);
+ result.put("ɪrg", R.raw.double_ir_g);
+ result.put("ɔrg", R.raw.double_or_g);
+ result.put("iʧ", R.raw.double_i_ch);
+ result.put("ɪʧ", R.raw.double_is_ch);
+ result.put("eɪʧ", R.raw.double_ei_ch);
+ result.put("ɛʧ", R.raw.double_e_ch);
+ result.put("æʧ", R.raw.double_ae_ch);
+ result.put("ɑʧ", R.raw.double_a_ch);
+ result.put("ɔʧ", R.raw.double_c_ch);
+ result.put("oʊʧ", R.raw.double_ou_ch);
+ result.put("ʊʧ", R.raw.double_us_ch);
+ result.put("uʧ", R.raw.double_u_ch);
+ result.put("ʌʧ", R.raw.double_vu_ch);
+ result.put("aɪʧ", R.raw.double_ai_ch);
+ result.put("aʊʧ", R.raw.double_au_ch);
+ result.put("ɔɪʧ", R.raw.double_oi_ch);
+ result.put("ɝʧ", R.raw.double_ers_ch);
+ result.put("ɑrʧ", R.raw.double_ar_ch);
+ result.put("ɛrʧ", R.raw.double_er_ch);
+ result.put("ɪrʧ", R.raw.double_ir_ch);
+ result.put("ɔrʧ", R.raw.double_or_ch);
+ result.put("iʤ", R.raw.double_i_dzh);
+ result.put("ɪʤ", R.raw.double_is_dzh);
+ result.put("eɪʤ", R.raw.double_ei_dzh);
+ result.put("ɛʤ", R.raw.double_e_dzh);
+ result.put("æʤ", R.raw.double_ae_dzh);
+ result.put("ɑʤ", R.raw.double_a_dzh);
+ result.put("ɔʤ", R.raw.double_c_dzh);
+ result.put("oʊʤ", R.raw.double_ou_dzh);
+ result.put("ʊʤ", R.raw.double_us_dzh);
+ result.put("uʤ", R.raw.double_u_dzh);
+ result.put("ʌʤ", R.raw.double_vu_dzh);
+ result.put("aɪʤ", R.raw.double_ai_dzh);
+ result.put("aʊʤ", R.raw.double_au_dzh);
+ result.put("ɔɪʤ", R.raw.double_oi_dzh);
+ result.put("ɝʤ", R.raw.double_ers_dzh);
+ result.put("ɑrʤ", R.raw.double_ar_dzh);
+ result.put("ɛrʤ", R.raw.double_er_dzh);
+ result.put("ɪrʤ", R.raw.double_ir_dzh);
+ result.put("ɔrʤ", R.raw.double_or_dzh);
+ result.put("if", R.raw.double_i_f);
+ result.put("ɪf", R.raw.double_is_f);
+ result.put("eɪf", R.raw.double_ei_f);
+ result.put("ɛf", R.raw.double_e_f);
+ result.put("æf", R.raw.double_ae_f);
+ result.put("ɑf", R.raw.double_a_f);
+ result.put("ɔf", R.raw.double_c_f);
+ result.put("oʊf", R.raw.double_ou_f);
+ result.put("ʊf", R.raw.double_us_f);
+ result.put("uf", R.raw.double_u_f);
+ result.put("ʌf", R.raw.double_vu_f);
+ result.put("aɪf", R.raw.double_ai_f);
+ result.put("aʊf", R.raw.double_au_f);
+ result.put("ɔɪf", R.raw.double_oi_f);
+ result.put("ɝf", R.raw.double_ers_f);
+ result.put("ɑrf", R.raw.double_ar_f);
+ result.put("ɛrf", R.raw.double_er_f);
+ result.put("ɪrf", R.raw.double_ir_f);
+ result.put("ɔrf", R.raw.double_or_f);
+ result.put("iv", R.raw.double_i_v);
+ result.put("ɪv", R.raw.double_is_v);
+ result.put("eɪv", R.raw.double_ei_v);
+ result.put("ɛv", R.raw.double_e_v);
+ result.put("æv", R.raw.double_ae_v);
+ result.put("ɑv", R.raw.double_a_v);
+ result.put("ɔv", R.raw.double_c_v);
+ result.put("oʊv", R.raw.double_ou_v);
+ result.put("ʊv", R.raw.double_us_v);
+ result.put("uv", R.raw.double_u_v);
+ result.put("ʌv", R.raw.double_vu_v);
+ result.put("aɪv", R.raw.double_ai_v);
+ result.put("aʊv", R.raw.double_au_v);
+ result.put("ɔɪv", R.raw.double_oi_v);
+ result.put("ɝv", R.raw.double_ers_v);
+ result.put("ɑrv", R.raw.double_ar_v);
+ result.put("ɛrv", R.raw.double_er_v);
+ result.put("ɪrv", R.raw.double_ir_v);
+ result.put("ɔrv", R.raw.double_or_v);
+ result.put("iθ", R.raw.double_i_th);
+ result.put("ɪθ", R.raw.double_is_th);
+ result.put("eɪθ", R.raw.double_ei_th);
+ result.put("ɛθ", R.raw.double_e_th);
+ result.put("æθ", R.raw.double_ae_th);
+ result.put("ɑθ", R.raw.double_a_th);
+ result.put("ɔθ", R.raw.double_c_th);
+ result.put("oʊθ", R.raw.double_ou_th);
+ result.put("ʊθ", R.raw.double_us_th);
+ result.put("uθ", R.raw.double_u_th);
+ result.put("ʌθ", R.raw.double_vu_th);
+ result.put("aɪθ", R.raw.double_ai_th);
+ result.put("aʊθ", R.raw.double_au_th);
+ result.put("ɔɪθ", R.raw.double_oi_th);
+ result.put("ɝθ", R.raw.double_ers_th);
+ result.put("ɑrθ", R.raw.double_ar_th);
+ result.put("ɛrθ", R.raw.double_er_th);
+ result.put("ɪrθ", R.raw.double_ir_th);
+ result.put("ɔrθ", R.raw.double_or_th);
+ result.put("ið", R.raw.double_i_thv);
+ result.put("ɪð", R.raw.double_is_thv);
+ result.put("eɪð", R.raw.double_ei_thv);
+ result.put("ɛð", R.raw.double_e_thv);
+ result.put("æð", R.raw.double_ae_thv);
+ result.put("ɑð", R.raw.double_a_thv);
+ result.put("ɔð", R.raw.double_c_thv);
+ result.put("oʊð", R.raw.double_ou_thv);
+ result.put("ʊð", R.raw.double_us_thv);
+ result.put("uð", R.raw.double_u_thv);
+ result.put("ʌð", R.raw.double_vu_thv);
+ result.put("aɪð", R.raw.double_ai_thv);
+ result.put("aʊð", R.raw.double_au_thv);
+ result.put("ɔɪð", R.raw.double_oi_thv);
+ result.put("ɝð", R.raw.double_ers_thv);
+ result.put("ɑrð", R.raw.double_ar_thv);
+ result.put("ɛrð", R.raw.double_er_thv);
+ result.put("ɪrð", R.raw.double_ir_thv);
+ result.put("ɔrð", R.raw.double_or_thv);
+ result.put("is", R.raw.double_i_s);
+ result.put("ɪs", R.raw.double_is_s);
+ result.put("eɪs", R.raw.double_ei_s);
+ result.put("ɛs", R.raw.double_e_s);
+ result.put("æs", R.raw.double_ae_s);
+ result.put("ɑs", R.raw.double_a_s);
+ result.put("ɔs", R.raw.double_c_s);
+ result.put("oʊs", R.raw.double_ou_s);
+ result.put("ʊs", R.raw.double_us_s);
+ result.put("us", R.raw.double_u_s);
+ result.put("ʌs", R.raw.double_vu_s);
+ result.put("aɪs", R.raw.double_ai_s);
+ result.put("aʊs", R.raw.double_au_s);
+ result.put("ɔɪs", R.raw.double_oi_s);
+ result.put("ɝs", R.raw.double_ers_s);
+ result.put("ɑrs", R.raw.double_ar_s);
+ result.put("ɛrs", R.raw.double_er_s);
+ result.put("ɪrs", R.raw.double_ir_s);
+ result.put("ɔrs", R.raw.double_or_s);
+ result.put("iz", R.raw.double_i_z);
+ result.put("ɪz", R.raw.double_is_z);
+ result.put("eɪz", R.raw.double_ei_z);
+ result.put("ɛz", R.raw.double_e_z);
+ result.put("æz", R.raw.double_ae_z);
+ result.put("ɑz", R.raw.double_a_z);
+ result.put("ɔz", R.raw.double_c_z);
+ result.put("oʊz", R.raw.double_ou_z);
+ result.put("ʊz", R.raw.double_us_z);
+ result.put("uz", R.raw.double_u_z);
+ result.put("ʌz", R.raw.double_vu_z);
+ result.put("aɪz", R.raw.double_ai_z);
+ result.put("aʊz", R.raw.double_au_z);
+ result.put("ɔɪz", R.raw.double_oi_z);
+ result.put("ɝz", R.raw.double_ers_z);
+ result.put("ɑrz", R.raw.double_ar_z);
+ result.put("ɛrz", R.raw.double_er_z);
+ result.put("ɪrz", R.raw.double_ir_z);
+ result.put("ɔrz", R.raw.double_or_z);
+ result.put("iʃ", R.raw.double_i_sh);
+ result.put("ɪʃ", R.raw.double_is_sh);
+ result.put("eɪʃ", R.raw.double_ei_sh);
+ result.put("ɛʃ", R.raw.double_e_sh);
+ result.put("æʃ", R.raw.double_ae_sh);
+ result.put("ɑʃ", R.raw.double_a_sh);
+ result.put("ɔʃ", R.raw.double_c_sh);
+ result.put("oʊʃ", R.raw.double_ou_sh);
+ result.put("ʊʃ", R.raw.double_us_sh);
+ result.put("uʃ", R.raw.double_u_sh);
+ result.put("ʌʃ", R.raw.double_vu_sh);
+ result.put("aɪʃ", R.raw.double_ai_sh);
+ result.put("aʊʃ", R.raw.double_au_sh);
+ result.put("ɔɪʃ", R.raw.double_oi_sh);
+ result.put("ɝʃ", R.raw.double_ers_sh);
+ result.put("ɑrʃ", R.raw.double_ar_sh);
+ result.put("ɛrʃ", R.raw.double_er_sh);
+ result.put("ɪrʃ", R.raw.double_ir_sh);
+ result.put("ɔrʃ", R.raw.double_or_sh);
+ result.put("iʒ", R.raw.double_i_zh);
+ result.put("ɪʒ", R.raw.double_is_zh);
+ result.put("eɪʒ", R.raw.double_ei_zh);
+ result.put("ɛʒ", R.raw.double_e_zh);
+ result.put("æʒ", R.raw.double_ae_zh);
+ result.put("ɑʒ", R.raw.double_a_zh);
+ result.put("ɔʒ", R.raw.double_c_zh);
+ result.put("oʊʒ", R.raw.double_ou_zh);
+ result.put("ʊʒ", R.raw.double_us_zh);
+ result.put("uʒ", R.raw.double_u_zh);
+ result.put("ʌʒ", R.raw.double_vu_zh);
+ result.put("aɪʒ", R.raw.double_ai_zh);
+ result.put("aʊʒ", R.raw.double_au_zh);
+ result.put("ɔɪʒ", R.raw.double_oi_zh);
+ result.put("ɝʒ", R.raw.double_ers_zh);
+ result.put("ɑrʒ", R.raw.double_ar_zh);
+ result.put("ɛrʒ", R.raw.double_er_zh);
+ result.put("ɪrʒ", R.raw.double_ir_zh);
+ result.put("ɔrʒ", R.raw.double_or_zh);
+ result.put("im", R.raw.double_i_m);
+ result.put("ɪm", R.raw.double_is_m);
+ result.put("eɪm", R.raw.double_ei_m);
+ result.put("ɛm", R.raw.double_e_m);
+ result.put("æm", R.raw.double_ae_m);
+ result.put("ɑm", R.raw.double_a_m);
+ result.put("ɔm", R.raw.double_c_m);
+ result.put("oʊm", R.raw.double_ou_m);
+ result.put("ʊm", R.raw.double_us_m);
+ result.put("um", R.raw.double_u_m);
+ result.put("ʌm", R.raw.double_vu_m);
+ result.put("aɪm", R.raw.double_ai_m);
+ result.put("aʊm", R.raw.double_au_m);
+ result.put("ɔɪm", R.raw.double_oi_m);
+ result.put("ɝm", R.raw.double_ers_m);
+ result.put("ɑrm", R.raw.double_ar_m);
+ result.put("ɛrm", R.raw.double_er_m);
+ result.put("ɪrm", R.raw.double_ir_m);
+ result.put("ɔrm", R.raw.double_or_m);
+ result.put("in", R.raw.double_i_n);
+ result.put("ɪn", R.raw.double_is_n);
+ result.put("eɪn", R.raw.double_ei_n);
+ result.put("ɛn", R.raw.double_e_n);
+ result.put("æn", R.raw.double_ae_n);
+ result.put("ɑn", R.raw.double_a_n);
+ result.put("ɔn", R.raw.double_c_n);
+ result.put("oʊn", R.raw.double_ou_n);
+ result.put("ʊn", R.raw.double_us_n);
+ result.put("un", R.raw.double_u_n);
+ result.put("ʌn", R.raw.double_vu_n);
+ result.put("aɪn", R.raw.double_ai_n);
+ result.put("aʊn", R.raw.double_au_n);
+ result.put("ɔɪn", R.raw.double_oi_n);
+ result.put("ɝn", R.raw.double_ers_n);
+ result.put("ɑrn", R.raw.double_ar_n);
+ result.put("ɛrn", R.raw.double_er_n);
+ result.put("ɪrn", R.raw.double_ir_n);
+ result.put("ɔrn", R.raw.double_or_n);
+ result.put("iŋ", R.raw.double_i_ng);
+ result.put("ɪŋ", R.raw.double_is_ng);
+ result.put("eɪŋ", R.raw.double_ei_ng);
+ result.put("ɛŋ", R.raw.double_e_ng);
+ result.put("æŋ", R.raw.double_ae_ng);
+ result.put("ɑŋ", R.raw.double_a_ng);
+ result.put("ɔŋ", R.raw.double_c_ng);
+ result.put("oʊŋ", R.raw.double_ou_ng);
+ result.put("ʊŋ", R.raw.double_us_ng);
+ result.put("uŋ", R.raw.double_u_ng);
+ result.put("ʌŋ", R.raw.double_vu_ng);
+ result.put("aɪŋ", R.raw.double_ai_ng);
+ result.put("aʊŋ", R.raw.double_au_ng);
+ result.put("ɔɪŋ", R.raw.double_oi_ng);
+ result.put("ɝŋ", R.raw.double_ers_ng);
+ result.put("ɑrŋ", R.raw.double_ar_ng);
+ result.put("ɛrŋ", R.raw.double_er_ng);
+ result.put("ɪrŋ", R.raw.double_ir_ng);
+ result.put("ɔrŋ", R.raw.double_or_ng);
+ result.put("il", R.raw.double_i_l);
+ result.put("ɪl", R.raw.double_is_l);
+ result.put("eɪl", R.raw.double_ei_l);
+ result.put("ɛl", R.raw.double_e_l);
+ result.put("æl", R.raw.double_ae_l);
+ result.put("ɑl", R.raw.double_a_l);
+ result.put("ɔl", R.raw.double_c_l);
+ result.put("oʊl", R.raw.double_ou_l);
+ result.put("ʊl", R.raw.double_us_l);
+ result.put("ul", R.raw.double_u_l);
+ result.put("ʌl", R.raw.double_vu_l);
+ result.put("aɪl", R.raw.double_ai_l);
+ result.put("aʊl", R.raw.double_au_l);
+ result.put("ɔɪl", R.raw.double_oi_l);
+ result.put("ɝl", R.raw.double_ers_l);
+ result.put("ɑrl", R.raw.double_ar_l);
+ result.put("ɛrl", R.raw.double_er_l);
+ result.put("ɪrl", R.raw.double_ir_l);
+ result.put("ɔrl", R.raw.double_or_l);
+
+ return result;
}
+ // initialize the result when new object created
+ private static Map createSpecialSoundMap() {
+
+ Map result = new LinkedHashMap<>();
+
+ result.put("iʔ", R.raw.double_i_glottal);
+ result.put("ɪʔ", R.raw.double_is_glottal);
+ result.put("eɪʔ", R.raw.double_ei_glottal);
+ result.put("ɛʔ", R.raw.double_e_glottal);
+ result.put("æʔ", R.raw.double_ae_glottal);
+ result.put("ɑʔ", R.raw.double_a_glottal);
+ result.put("ɔʔ", R.raw.double_c_glottal);
+ result.put("oʊʔ", R.raw.double_ou_glottal);
+ result.put("ʊʔ", R.raw.double_us_glottal);
+ result.put("uʔ", R.raw.double_u_glottal);
+ result.put("ʌʔ", R.raw.double_vu_glottal);
+ result.put("aɪʔ", R.raw.double_ai_glottal);
+ result.put("aʊʔ", R.raw.double_au_glottal);
+ result.put("ɔɪʔ", R.raw.double_oi_glottal);
+ result.put("ɝʔ", R.raw.double_ers_glottal);
+ result.put("ɑrʔ", R.raw.double_ar_glottal);
+ result.put("ɛrʔ", R.raw.double_er_glottal);
+ result.put("ɪrʔ", R.raw.double_ir_glottal);
+ result.put("ɔrʔ", R.raw.double_or_glottal);
+ result.put("ˈiɾə", R.raw.double_i_flap_shwua);
+ result.put("ˈɪɾə", R.raw.double_is_flap_shwua);
+ result.put("ˈeɪɾə", R.raw.double_ei_flap_shwua);
+ result.put("ˈɛɾə", R.raw.double_e_flap_shwua);
+ result.put("ˈæɾə", R.raw.double_ae_flap_shwua);
+ result.put("ˈɑɾə", R.raw.double_a_flap_shwua);
+ result.put("ˈɔɾə", R.raw.double_c_flap_shwua);
+ result.put("ˈoʊɾə", R.raw.double_ou_flap_shwua);
+ result.put("ˈʊɾə", R.raw.double_us_flap_shwua);
+ result.put("ˈuɾə", R.raw.double_u_flap_shwua);
+ result.put("ˈʌɾə", R.raw.double_vu_flap_shwua);
+ result.put("ˈaɪɾə", R.raw.double_ai_flap_shwua);
+ result.put("ˈaʊɾə", R.raw.double_au_flap_shwua);
+ result.put("ˈɔɪɾə", R.raw.double_oi_flap_shwua);
+ result.put("ˈɝɾə", R.raw.double_ers_flap_shwua);
+ result.put("ˈɑrɾə", R.raw.double_ar_flap_shwua);
+ result.put("ˈɛrɾə", R.raw.double_er_flap_shwua);
+ result.put("ˈɪrɾə", R.raw.double_ir_flap_shwua);
+ result.put("ˈɔrɾə", R.raw.double_or_flap_shwua);
+ result.put("pə", R.raw.double_p_shwua);
+ result.put("tə", R.raw.double_t_shwua);
+ result.put("kə", R.raw.double_k_shwua);
+ result.put("ʧə", R.raw.double_ch_shwua);
+ result.put("fə", R.raw.double_f_shwua);
+ result.put("θə", R.raw.double_th_shwua);
+ result.put("sə", R.raw.double_s_shwua);
+ result.put("ʃə", R.raw.double_sh_shwua);
+ result.put("bə", R.raw.double_b_shwua);
+ result.put("də", R.raw.double_d_shwua);
+ result.put("gə", R.raw.double_g_shwua);
+ result.put("ʤə", R.raw.double_dzh_shwua);
+ result.put("və", R.raw.double_v_shwua);
+ result.put("ðə", R.raw.double_thv_shwua);
+ result.put("zə", R.raw.double_z_shwua);
+ result.put("ʒə", R.raw.double_zh_shwua);
+ result.put("mə", R.raw.double_m_shwua);
+ result.put("nə", R.raw.double_n_shwua);
+ result.put("lə", R.raw.double_l_shwua);
+ result.put("wə", R.raw.double_w_shwua);
+ result.put("jə", R.raw.double_j_shwua);
+ result.put("hə", R.raw.double_h_shwua);
+ result.put("rə", R.raw.double_r_shwua);
+ result.put("əp", R.raw.double_shwua_p);
+ result.put("ət", R.raw.double_shwua_t);
+ result.put("ək", R.raw.double_shwua_k);
+ result.put("əʧ", R.raw.double_shwua_ch);
+ result.put("əf", R.raw.double_shwua_f);
+ result.put("əθ", R.raw.double_shwua_th);
+ result.put("əs", R.raw.double_shwua_s);
+ result.put("əʃ", R.raw.double_shwua_sh);
+ result.put("əb", R.raw.double_shwua_b);
+ result.put("əd", R.raw.double_shwua_d);
+ result.put("əg", R.raw.double_shwua_g);
+ result.put("əʤ", R.raw.double_shwua_dzh);
+ result.put("əv", R.raw.double_shwua_v);
+ result.put("əð", R.raw.double_shwua_thv);
+ result.put("əz", R.raw.double_shwua_z);
+ result.put("əʒ", R.raw.double_shwua_zh);
+ result.put("əm", R.raw.double_shwua_m);
+ result.put("ən", R.raw.double_shwua_n);
+ result.put("əŋ", R.raw.double_shwua_ng);
+ result.put("əl", R.raw.double_shwua_l);
+ result.put("pɚ", R.raw.double_p_eru);
+ result.put("tɚ", R.raw.double_t_eru);
+ result.put("kɚ", R.raw.double_k_eru);
+ result.put("ʧɚ", R.raw.double_ch_eru);
+ result.put("fɚ", R.raw.double_f_eru);
+ result.put("θɚ", R.raw.double_th_eru);
+ result.put("sɚ", R.raw.double_s_eru);
+ result.put("ʃɚ", R.raw.double_sh_eru);
+ result.put("bɚ", R.raw.double_b_eru);
+ result.put("dɚ", R.raw.double_d_eru);
+ result.put("gɚ", R.raw.double_g_eru);
+ result.put("ʤɚ", R.raw.double_dzh_eru);
+ result.put("vɚ", R.raw.double_v_eru);
+ result.put("ðɚ", R.raw.double_thv_eru);
+ result.put("zɚ", R.raw.double_z_eru);
+ result.put("ʒɚ", R.raw.double_zh_eru);
+ result.put("mɚ", R.raw.double_m_eru);
+ result.put("nɚ", R.raw.double_n_eru);
+ result.put("lɚ", R.raw.double_l_eru);
+ result.put("wɚ", R.raw.double_w_eru);
+ result.put("jɚ", R.raw.double_j_eru);
+ result.put("hɚ", R.raw.double_h_eru);
+ result.put("rɚ", R.raw.double_r_eru);
+ result.put("ɚp", R.raw.double_eru_p);
+ result.put("ɚt", R.raw.double_eru_t);
+ result.put("ɚk", R.raw.double_eru_k);
+ result.put("ɚʧ", R.raw.double_eru_ch);
+ result.put("ɚf", R.raw.double_eru_f);
+ result.put("ɚθ", R.raw.double_eru_th);
+ result.put("ɚs", R.raw.double_eru_s);
+ result.put("ɚʃ", R.raw.double_eru_sh);
+ result.put("ɚb", R.raw.double_eru_b);
+ result.put("ɚd", R.raw.double_eru_d);
+ result.put("ɚg", R.raw.double_eru_g);
+ result.put("ɚʤ", R.raw.double_eru_dzh);
+ result.put("ɚv", R.raw.double_eru_v);
+ result.put("ɚð", R.raw.double_eru_thv);
+ result.put("ɚz", R.raw.double_eru_z);
+ result.put("ɚʒ", R.raw.double_eru_zh);
+ result.put("ɚm", R.raw.double_eru_m);
+ result.put("ɚn", R.raw.double_eru_n);
+ result.put("ɚŋ", R.raw.double_eru_ng);
+ result.put("ɚl", R.raw.double_eru_l);
+
+ return result;
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/aepronunciation/ipa/GridSpacingItemDecoration.java b/app/src/main/java/com/aepronunciation/ipa/GridSpacingItemDecoration.java
old mode 100644
new mode 100755
index da3e659..dee4477
--- a/app/src/main/java/com/aepronunciation/ipa/GridSpacingItemDecoration.java
+++ b/app/src/main/java/com/aepronunciation/ipa/GridSpacingItemDecoration.java
@@ -2,9 +2,9 @@
import android.content.Context;
import android.graphics.Rect;
-import android.support.annotation.DimenRes;
-import android.support.annotation.NonNull;
-import android.support.v7.widget.RecyclerView;
+import androidx.annotation.DimenRes;
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
import android.view.View;
class GridSpacingItemDecoration extends RecyclerView.ItemDecoration {
@@ -20,8 +20,8 @@ private GridSpacingItemDecoration(int itemOffset) {
}
@Override
- public void getItemOffsets(Rect outRect, View view, RecyclerView parent,
- RecyclerView.State state) {
+ public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent,
+ @NonNull RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
outRect.set(mItemOffset, mItemOffset, mItemOffset, mItemOffset);
}
diff --git a/app/src/main/java/com/aepronunciation/ipa/HistoryActivity.java b/app/src/main/java/com/aepronunciation/ipa/HistoryActivity.java
old mode 100644
new mode 100755
index d1c1efc..1b7e226
--- a/app/src/main/java/com/aepronunciation/ipa/HistoryActivity.java
+++ b/app/src/main/java/com/aepronunciation/ipa/HistoryActivity.java
@@ -5,12 +5,14 @@
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
-import android.support.v7.widget.Toolbar;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
+import java.lang.ref.WeakReference;
+
import static com.aepronunciation.ipa.MainActivity.PREFS_NAME;
import static com.aepronunciation.ipa.MainActivity.TIME_DEFAULT;
import static com.aepronunciation.ipa.MainActivity.TIME_LEARN_DOUBLE_KEY;
@@ -30,7 +32,7 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_history);
- Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
+ Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// add back arrow to toolbar
if (getSupportActionBar() != null){
@@ -39,9 +41,9 @@ protected void onCreate(Bundle savedInstanceState) {
}
// Create objects
- TextView tvTime = (TextView) findViewById(R.id.tvTotalTime);
- tvHighSingle = (TextView) findViewById(R.id.tvHighScoreSingles);
- tvHighDouble = (TextView) findViewById(R.id.tvHighScoreDoubles);
+ TextView tvTime = findViewById(R.id.tvTotalTime);
+ tvHighSingle = findViewById(R.id.tvHighScoreSingles);
+ tvHighDouble = findViewById(R.id.tvHighScoreDoubles);
// get times from preferences
SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
@@ -58,7 +60,7 @@ protected void onCreate(Bundle savedInstanceState) {
tvTime.setText(TimeUtil.getTimeString(totalTime));
// Get the high scores
- new GetHighScores().execute();
+ new GetHighScores(this).execute();
}
public void timeDetailsClick(View v) {
@@ -84,17 +86,23 @@ public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}
- private class GetHighScores extends AsyncTask {
+ private static class GetHighScores extends AsyncTask {
+
+ private WeakReference activityReference;
+
+ // only retain a weak reference to the activity
+ GetHighScores(HistoryActivity context) {
+ activityReference = new WeakReference<>(context);
+ }
@Override
protected int[] doInBackground(Void... params) {
int[] result = { -1, -1 };
+ HistoryActivity activity = activityReference.get();
try {
-
- MyDatabaseAdapter dbAdapter = new MyDatabaseAdapter(
- getApplicationContext());
+ MyDatabaseAdapter dbAdapter = new MyDatabaseAdapter(activity);
result = dbAdapter.getHighScores();
} catch (Exception e) {
//Log.i("app", e.toString());
@@ -104,17 +112,19 @@ protected int[] doInBackground(Void... params) {
@Override
protected void onPostExecute(int[] result) {
+ HistoryActivity activity = activityReference.get();
+ if (activity == null || activity.isFinishing()) return;
if (result[0] == -1) {
- tvHighSingle.setVisibility(View.GONE);
+ activity.tvHighSingle.setVisibility(View.GONE);
} else {
- tvHighSingle.setText(String.format(getString(R.string.history_tests_type_single), result[0]));
+ activity.tvHighSingle.setText(String.format(activity.getString(R.string.history_tests_type_single), result[0]));
}
if (result[1] == -1) {
- tvHighDouble.setVisibility(View.GONE);
+ activity.tvHighDouble.setVisibility(View.GONE);
} else {
- tvHighDouble.setText(String.format(getString(R.string.history_tests_type_double), result[1]));
+ activity.tvHighDouble.setText(String.format(activity.getString(R.string.history_tests_type_double), result[1]));
}
}
diff --git a/app/src/main/java/com/aepronunciation/ipa/HistoryTestDetailsActivity.java b/app/src/main/java/com/aepronunciation/ipa/HistoryTestDetailsActivity.java
old mode 100644
new mode 100755
index 08daa6e..295a3c1
--- a/app/src/main/java/com/aepronunciation/ipa/HistoryTestDetailsActivity.java
+++ b/app/src/main/java/com/aepronunciation/ipa/HistoryTestDetailsActivity.java
@@ -6,15 +6,16 @@
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
-import android.support.v7.app.AlertDialog;
-import android.support.v7.app.AppCompatActivity;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
-import android.support.v7.widget.Toolbar;
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import androidx.appcompat.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
+import java.lang.ref.WeakReference;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
@@ -24,9 +25,6 @@
public class HistoryTestDetailsActivity extends AppCompatActivity implements
TestResultsRecyclerViewAdapter.ItemClickListener, SoundPool.OnLoadCompleteListener {
- static final String STATE_SCROLL_POSITION = "scrollPosition";
-
- int savedPosition = 0;
private TestResultsRecyclerViewAdapter adapter;
private static final int SRC_QUALITY = 0;
private static final int PRIORITY = 1;
@@ -46,7 +44,7 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_history_test_details);
- Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
+ Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// add back arrow to toolbar
if (getSupportActionBar() != null){
@@ -55,11 +53,11 @@ protected void onCreate(Bundle savedInstanceState) {
}
// create objects
- tvName = (TextView) findViewById(R.id.tvResultName);
- tvDate = (TextView) findViewById(R.id.tvResultDate);
- tvPercent = (TextView) findViewById(R.id.tvResultPercent);
- tvNumberOfQuestions = (TextView) findViewById(R.id.tvResultNumberQuestions);
- tvTime = (TextView) findViewById(R.id.tvResultTime);
+ tvName = findViewById(R.id.tvResultName);
+ tvDate = findViewById(R.id.tvResultDate);
+ tvPercent = findViewById(R.id.tvResultPercent);
+ tvNumberOfQuestions = findViewById(R.id.tvResultNumberQuestions);
+ tvTime = findViewById(R.id.tvResultTime);
// Get extras from Test Activity
Bundle bundle = getIntent().getExtras();
@@ -102,7 +100,7 @@ public void onItemClick(View view, int position) {
playSound(correctIpa);
if (!correctIpa.equals(userIpa)) {
int delay = 1000;
- if (PhonemeTable.INSTANCE.hasTwoPronunciations(correctIpa)) {
+ if (Ipa.hasTwoPronunciations(correctIpa)) {
delay = 2000; // these sounds need a longer delay
}
// delay playing second sound
@@ -116,12 +114,13 @@ public void run() {
}
// call: new GetTest().execute();
- private class GetTest extends AsyncTask {
+ private static class GetTest extends AsyncTask {
- private HistoryTestDetailsActivity activity;
+ private WeakReference activityReference;
- public GetTest(HistoryTestDetailsActivity activity) {
- this.activity = activity;
+ // only retain a weak reference to the activity
+ GetTest(HistoryTestDetailsActivity context) {
+ activityReference = new WeakReference<>(context);
}
@Override
@@ -132,9 +131,8 @@ protected Test doInBackground(Long... params) {
Test test = new Test();
try {
-
- MyDatabaseAdapter dbAdapter = new MyDatabaseAdapter(
- getApplicationContext());
+ HistoryTestDetailsActivity activity = activityReference.get();
+ MyDatabaseAdapter dbAdapter = new MyDatabaseAdapter(activity);
test = dbAdapter.getTest(id);
} catch (Exception e) {
e.printStackTrace();
@@ -145,23 +143,20 @@ protected Test doInBackground(Long... params) {
@Override
protected void onPostExecute(Test test) {
-
-
+ HistoryTestDetailsActivity activity = activityReference.get();
+ if (activity == null || activity.isFinishing()) return;
// Get answers from test
String userName = test.getUserName();
long dateMilliseconds = test.getDate();
- Locale locale = Locale.US; // default
- if (getString(R.string.locale).equals(Locale.CHINESE.toString())) {
- locale = Locale.CHINESE;
- }
+ Locale locale = AppLocale.getLocale(activity);
Date date = new Date(dateMilliseconds);
DateFormat df = SimpleDateFormat.getDateTimeInstance(SimpleDateFormat.SHORT, SimpleDateFormat.SHORT, locale);
String formattedDate = df.format(date);
long timeLength = test.getTimeLength();
- testMode = test.getMode();
+ activity.testMode = test.getMode();
int score = test.getScore();
String[] correctAnswers = test.getCorrectAnswers().split(",");
String[] userAnswers = test.getUserAnswers().split(",");
@@ -175,7 +170,7 @@ protected void onPostExecute(Test test) {
}
// make answer array object to update recyclerview list
- ArrayList answers = new ArrayList();
+ ArrayList answers = new ArrayList<>();
for (int i = 0; i < length; i++) {
Answer answer = new Answer();
answer.setCorrectAnswer(correctAnswers[i]);
@@ -183,20 +178,19 @@ protected void onPostExecute(Test test) {
answers.add(answer);
}
-
- RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rvTestResults);
+ RecyclerView recyclerView = activity.findViewById(R.id.rvTestResults);
recyclerView.setLayoutManager(new LinearLayoutManager(activity));
recyclerView.addItemDecoration(new DividerItemDecoration(activity, R.drawable.divider));
- adapter = new TestResultsRecyclerViewAdapter(activity, answers, testMode);
- adapter.setClickListener(activity);
- recyclerView.setAdapter(adapter);
-
-// // update textviews
- tvName.setText(userName);
- tvDate.setText(formattedDate);
- tvPercent.setText(String.format(getString(R.string.test_results_percent), score));
- tvNumberOfQuestions.setText(String.format(getString(R.string.history_test_details_specific_test_number_of_questions), length));
- tvTime.setText(String.format(getString(R.string.test_results_time), TimeUtil.getTimeString(timeLength)));
+ activity.adapter = new TestResultsRecyclerViewAdapter(activity, answers, activity.testMode);
+ activity.adapter.setClickListener(activity);
+ recyclerView.setAdapter(activity.adapter);
+
+ // update textviews
+ activity.tvName.setText(userName);
+ activity.tvDate.setText(formattedDate);
+ activity.tvPercent.setText(String.format(activity.getString(R.string.test_results_percent), score));
+ activity.tvNumberOfQuestions.setText(String.format(activity.getString(R.string.history_test_details_specific_test_number_of_questions), length));
+ activity.tvTime.setText(String.format(activity.getString(R.string.test_results_time), TimeUtil.getTimeString(timeLength)));
}
diff --git a/app/src/main/java/com/aepronunciation/ipa/HistoryTestsActivity.java b/app/src/main/java/com/aepronunciation/ipa/HistoryTestsActivity.java
old mode 100644
new mode 100755
index 095bfd7..ec1fe9f
--- a/app/src/main/java/com/aepronunciation/ipa/HistoryTestsActivity.java
+++ b/app/src/main/java/com/aepronunciation/ipa/HistoryTestsActivity.java
@@ -1,14 +1,15 @@
package com.aepronunciation.ipa;
+import java.lang.ref.WeakReference;
import java.util.ArrayList;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
-import android.support.v7.widget.Toolbar;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import androidx.appcompat.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
@@ -23,7 +24,7 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_history_test);
- Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
+ Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// add back arrow to toolbar
if (getSupportActionBar() != null){
@@ -32,7 +33,7 @@ protected void onCreate(Bundle savedInstanceState) {
}
// set up the RecyclerView
- RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rvAllTests);
+ RecyclerView recyclerView = findViewById(R.id.rvAllTests);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.addItemDecoration(new DividerItemDecoration(this, R.drawable.divider));
mData = new ArrayList<>();
@@ -41,18 +42,26 @@ protected void onCreate(Bundle savedInstanceState) {
recyclerView.setAdapter(adapter);
// get tests
- new InitializeTestList().execute();
+ new InitializeTestList(this).execute();
}
- private class InitializeTestList extends AsyncTask> {
+ private static class InitializeTestList extends AsyncTask> {
+
+ private WeakReference activityReference;
+
+ // only retain a weak reference to the activity
+ InitializeTestList(HistoryTestsActivity context) {
+ activityReference = new WeakReference<>(context);
+ }
@Override
protected ArrayList doInBackground(Void... params) {
ArrayList result = new ArrayList<>();
+ HistoryTestsActivity activity = activityReference.get();
try {
- MyDatabaseAdapter dbAdapter = new MyDatabaseAdapter(getApplicationContext());
+ MyDatabaseAdapter dbAdapter = new MyDatabaseAdapter(activity);
result = dbAdapter.getAllTestScores();
} catch (Exception e) {
e.printStackTrace();
@@ -63,10 +72,12 @@ protected ArrayList doInBackground(Void... params) {
@Override
protected void onPostExecute(ArrayList result) {
+ HistoryTestsActivity activity = activityReference.get();
+ if (activity == null || activity.isFinishing()) return;
- mData.clear();
- mData.addAll(result);
- adapter.notifyDataSetChanged();
+ activity.mData.clear();
+ activity.mData.addAll(result);
+ activity.adapter.notifyDataSetChanged();
}
}
diff --git a/app/src/main/java/com/aepronunciation/ipa/HistoryTimeActivity.java b/app/src/main/java/com/aepronunciation/ipa/HistoryTimeActivity.java
old mode 100644
new mode 100755
index fdebfb9..63e3422
--- a/app/src/main/java/com/aepronunciation/ipa/HistoryTimeActivity.java
+++ b/app/src/main/java/com/aepronunciation/ipa/HistoryTimeActivity.java
@@ -2,8 +2,8 @@
import android.content.SharedPreferences;
import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
-import android.support.v7.widget.Toolbar;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.widget.Toolbar;
import android.widget.TextView;
import static com.aepronunciation.ipa.MainActivity.PREFS_NAME;
@@ -23,7 +23,7 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_history_time);
- Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
+ Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// add back arrow to toolbar
if (getSupportActionBar() != null){
@@ -32,16 +32,16 @@ protected void onCreate(Bundle savedInstanceState) {
}
// Create objects
- TextView tvTimeLearning = (TextView) findViewById(R.id.tvTimeLearning);
- TextView tvTimeLearningSingles = (TextView) findViewById(R.id.tvTimeLearningSingles);
- TextView tvTimeLearningDoubles = (TextView) findViewById(R.id.tvTimeLearningDoubles);
- TextView tvTimePracticing = (TextView) findViewById(R.id.tvTimePracticing);
- TextView tvTimePracticingSingles = (TextView) findViewById(R.id.tvTimePracticingSingles);
- TextView tvTimePracticingDoubles = (TextView) findViewById(R.id.tvTimePracticingDoubles);
- TextView tvTimeTesting = (TextView) findViewById(R.id.tvTimeTesting);
- TextView tvTimeTestingSingles = (TextView) findViewById(R.id.tvTimeTestingSingles);
- TextView tvTimeTestingDoubles = (TextView) findViewById(R.id.tvTimeTestingDoubles);
- TextView tvTotalTime = (TextView) findViewById(R.id.tvTotalTime);
+ TextView tvTimeLearning = findViewById(R.id.tvTimeLearning);
+ TextView tvTimeLearningSingles = findViewById(R.id.tvTimeLearningSingles);
+ TextView tvTimeLearningDoubles = findViewById(R.id.tvTimeLearningDoubles);
+ TextView tvTimePracticing = findViewById(R.id.tvTimePracticing);
+ TextView tvTimePracticingSingles = findViewById(R.id.tvTimePracticingSingles);
+ TextView tvTimePracticingDoubles = findViewById(R.id.tvTimePracticingDoubles);
+ TextView tvTimeTesting = findViewById(R.id.tvTimeTesting);
+ TextView tvTimeTestingSingles = findViewById(R.id.tvTimeTestingSingles);
+ TextView tvTimeTestingDoubles = findViewById(R.id.tvTimeTestingDoubles);
+ TextView tvTotalTime = findViewById(R.id.tvTotalTime);
// get times from preferences
SharedPreferences settings = getSharedPreferences(PREFS_NAME,
diff --git a/app/src/main/java/com/aepronunciation/ipa/Ipa.java b/app/src/main/java/com/aepronunciation/ipa/Ipa.java
new file mode 100755
index 0000000..ac4efae
--- /dev/null
+++ b/app/src/main/java/com/aepronunciation/ipa/Ipa.java
@@ -0,0 +1,163 @@
+package com.aepronunciation.ipa;
+
+
+import android.util.Pair;
+
+import java.util.ArrayList;
+
+class Ipa {
+
+ static final int NUMBER_OF_VOWELS = 21;
+ static final int NUMBER_OF_VOWELS_FOR_DOUBLES = 19; // not ə, ɚ
+ static final int NUMBER_OF_CONSONANTS = 26;
+ static final int NUMBER_OF_CONSONANTS_FOR_DOUBLES = 24; // not ʔ. ɾ
+
+ // return
+ static Pair splitDoubleSound(String s) {
+ if (isConsonant(s.substring(0, 1))) {
+ return Pair.create(s.substring(0, 1), s.substring(1));
+ }
+ return Pair.create(s.substring(s.length() - 1), s.substring(0, s.length() - 1));
+ }
+
+ static boolean isConsonant(String ipa) {
+ return "ptkʧfθsʃbdgʤvðzʒmnŋlwjhrʔɾ".contains(ipa);
+ }
+
+ static boolean isSpecial(String ipa) {
+ return "ʔɾəɚ".contains(ipa);
+ }
+
+ static boolean hasTwoPronunciations(String ipa) {
+ return "fvθðmnl".contains(ipa);
+ }
+
+ static ArrayList getAllVowels() {
+ ArrayList vowels = new ArrayList<>();
+ vowels.add(i);
+ vowels.add(i_short);
+ vowels.add(e_short);
+ vowels.add(ae);
+ vowels.add(a);
+ vowels.add(c_backwards);
+ vowels.add(u_short);
+ vowels.add(u);
+ vowels.add(v_upsidedown);
+ vowels.add(schwa);
+ vowels.add(ei);
+ vowels.add(ai);
+ vowels.add(au);
+ vowels.add(oi);
+ vowels.add(ou);
+ vowels.add(er_stressed);
+ vowels.add(er_unstressed);
+ vowels.add(ar);
+ vowels.add(er);
+ vowels.add(ir);
+ vowels.add(or);
+ return vowels;
+ }
+
+
+ static ArrayList getAllConsonants() {
+ ArrayList consonants = new ArrayList<>();
+ consonants.add(p);
+ consonants.add(t);
+ consonants.add(k);
+ consonants.add(ch);
+ consonants.add(f);
+ consonants.add(th_voiceless);
+ consonants.add(s);
+ consonants.add(sh);
+ consonants.add(b);
+ consonants.add(d);
+ consonants.add(g);
+ consonants.add(dzh);
+ consonants.add(v);
+ consonants.add(th_voiced);
+ consonants.add(z);
+ consonants.add(zh);
+ consonants.add(m);
+ consonants.add(n);
+ consonants.add(ng);
+ consonants.add(l);
+ consonants.add(w);
+ consonants.add(j);
+ consonants.add(h);
+ consonants.add(r);
+ consonants.add(glottal_stop);
+ consonants.add(flap_t);
+
+ return consonants;
+ }
+ static final String p = "p";
+ static final String t = "t";
+ static final String k = "k";
+ static final String ch = "ʧ";
+ static final String f = "f";
+ static final String th_voiceless = "θ";
+ static final String s = "s";
+ static final String sh = "ʃ";
+ static final String b = "b";
+ static final String d = "d";
+ static final String g = "g";
+ static final String dzh = "ʤ";
+ static final String v = "v";
+ static final String th_voiced = "ð";
+ static final String z = "z";
+ static final String zh = "ʒ";
+ static final String m = "m";
+ static final String n = "n";
+ static final String ng = "ŋ";
+ static final String l = "l";
+ static final String w = "w";
+ static final String j = "j";
+ static final String h = "h";
+ static final String r = "r";
+ static final String i = "i";
+ static final String i_short = "ɪ";
+ static final String e_short = "ɛ";
+ static final String ae = "æ";
+ static final String a = "ɑ";
+ static final String c_backwards = "ɔ";
+ static final String u_short = "ʊ";
+ static final String u = "u";
+ static final String v_upsidedown = "ʌ";
+ static final String schwa = "ə";
+ static final String ei = "eɪ";
+ static final String ai = "aɪ";
+ static final String au = "aʊ";
+ static final String oi = "ɔɪ";
+ static final String ou = "oʊ";
+ static final String flap_t = "ɾ";
+ static final String er_stressed = "ɝ";
+ static final String er_unstressed = "ɚ";
+ static final String ar = "ɑr";
+ static final String er = "ɛr";
+ static final String ir = "ɪr";
+ static final String or = "ɔr";
+ static final String glottal_stop = "ʔ";
+ static final String left_bracket = "[";
+ static final String right_bracket = "]";
+ static final String slash = "/";
+ static final String undertie = "‿";
+ //static final String space = "\u0020";
+ static final String primary_stress = "ˈ";
+ static final String secondary_stress = "ˌ";
+ static final String long_vowel = "ː";
+ //static final String return = "\n";
+ static final String alt_e_short = "e";
+ static final String alt_c_backwards = "ɒ";
+ static final String alt_ou = "əʊ";
+ static final String alt_er_stressed = "ɜː";
+ static final String alt_er_unstressed = "ə";
+ static final String alt_ar = "ɑː";
+ static final String alt_er = "eə";
+ static final String alt_ir = "ɪə";
+ static final String alt_or = "ɔː";
+ static final String alt_l = "ɫ";
+ static final String alt_w = "ʍ";
+ static final String alt_h = "ʰ";
+
+ static final String alt_r = "ɹ";
+}
diff --git a/app/src/main/java/com/aepronunciation/ipa/IpaCheckBox.java b/app/src/main/java/com/aepronunciation/ipa/IpaCheckBox.java
old mode 100644
new mode 100755
index dd26334..f3042d5
--- a/app/src/main/java/com/aepronunciation/ipa/IpaCheckBox.java
+++ b/app/src/main/java/com/aepronunciation/ipa/IpaCheckBox.java
@@ -3,9 +3,9 @@
import android.content.Context;
import android.graphics.Typeface;
import android.util.AttributeSet;
-import android.widget.CheckBox;
+import androidx.appcompat.widget.AppCompatCheckBox;
-public class IpaCheckBox extends CheckBox {
+public class IpaCheckBox extends AppCompatCheckBox {
// Constructors
public IpaCheckBox(Context context, AttributeSet attrs, int defStyle) {
diff --git a/app/src/main/java/com/aepronunciation/ipa/IpaEditText.java b/app/src/main/java/com/aepronunciation/ipa/IpaEditText.java
old mode 100644
new mode 100755
index b8e3265..ded13d9
--- a/app/src/main/java/com/aepronunciation/ipa/IpaEditText.java
+++ b/app/src/main/java/com/aepronunciation/ipa/IpaEditText.java
@@ -2,11 +2,11 @@
import android.content.Context;
import android.graphics.Typeface;
+import androidx.appcompat.widget.AppCompatEditText;
import android.util.AttributeSet;
-import android.widget.EditText;
-public class IpaEditText extends EditText {
+public class IpaEditText extends AppCompatEditText {
// Constructors
public IpaEditText(Context context, AttributeSet attrs, int defStyle) {
diff --git a/app/src/main/java/com/aepronunciation/ipa/IpaTextView.java b/app/src/main/java/com/aepronunciation/ipa/IpaTextView.java
old mode 100644
new mode 100755
index d4d31fe..ee9a527
--- a/app/src/main/java/com/aepronunciation/ipa/IpaTextView.java
+++ b/app/src/main/java/com/aepronunciation/ipa/IpaTextView.java
@@ -2,10 +2,10 @@
import android.content.Context;
import android.graphics.Typeface;
+import androidx.appcompat.widget.AppCompatTextView;
import android.util.AttributeSet;
-import android.widget.TextView;
-public class IpaTextView extends TextView {
+public class IpaTextView extends AppCompatTextView {
// Constructors
public IpaTextView(Context context, AttributeSet attrs, int defStyle) {
diff --git a/app/src/main/java/com/aepronunciation/ipa/KeyboardFragment.java b/app/src/main/java/com/aepronunciation/ipa/KeyboardFragment.java
old mode 100644
new mode 100755
index 0c00d88..e5272c1
--- a/app/src/main/java/com/aepronunciation/ipa/KeyboardFragment.java
+++ b/app/src/main/java/com/aepronunciation/ipa/KeyboardFragment.java
@@ -2,8 +2,9 @@
import android.content.Context;
import android.os.Bundle;
-import android.support.v4.app.Fragment;
-import android.support.v4.content.ContextCompat;
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
+import androidx.core.content.ContextCompat;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -37,7 +38,7 @@ public void onCreate(Bundle savedInstanceState) {
}
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_keyboard, container, false);
@@ -49,7 +50,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
// Add listeners for all keys
for (int id : mLayoutToString.keySet()) {
- RelativeLayout rlKey = (RelativeLayout) view.findViewById(id);
+ RelativeLayout rlKey = view.findViewById(id);
rlKey.setOnClickListener(this);
}
@@ -199,6 +200,8 @@ public void updateKeysFor(SoundMode mode) {
}
public void updateKeyAppearanceForSelectedSounds(ArrayList selectedSounds) {
+ Context context = getContext();
+ if (context == null) return;
int selectedColor = ContextCompat.getColor(getContext(),R.color.keyboard_text_normal);
int unselectedColor = ContextCompat.getColor(getContext(),R.color.keyboard_text_unselected);
@@ -215,7 +218,7 @@ public void updateKeyAppearanceForSelectedSounds(ArrayList selectedSound
break;
}
}
- textView = (IpaTextView) view.findViewById(id);
+ textView = view.findViewById(id);
if (isSelected) {
textView.setTextColor(selectedColor);
} else {
diff --git a/app/src/main/java/com/aepronunciation/ipa/KeyboardInputActivity.java b/app/src/main/java/com/aepronunciation/ipa/KeyboardInputActivity.java
old mode 100644
new mode 100755
index 07da2e0..1bc3d9d
--- a/app/src/main/java/com/aepronunciation/ipa/KeyboardInputActivity.java
+++ b/app/src/main/java/com/aepronunciation/ipa/KeyboardInputActivity.java
@@ -1,17 +1,17 @@
package com.aepronunciation.ipa;
-
-import android.annotation.SuppressLint;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ActivityInfo;
+import android.os.Build;
import android.os.Bundle;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentTransaction;
-import android.support.v7.app.AlertDialog;
-import android.support.v7.app.AppCompatActivity;
-import android.support.v7.widget.Toolbar;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentTransaction;
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.widget.Toolbar;
+import android.text.Editable;
import android.text.InputType;
import android.text.TextUtils;
import android.view.KeyEvent;
@@ -32,27 +32,25 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_keyboard_input);
- Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
+ Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// add back arrow to toolbar
- if (getSupportActionBar() != null){
+ if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
// disable rotation for smaller devices
- if(getResources().getBoolean(R.bool.portrait_only)){
+ if (getResources().getBoolean(R.bool.portrait_only)) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
// prevent system keyboard from appearing
- editText = (IpaEditText) findViewById(R.id.etInputWindow);
- if (android.os.Build.VERSION.SDK_INT >= 11) {
- editText.setRawInputType(InputType.TYPE_CLASS_TEXT);
- editText.setTextIsSelectable(true);
- } else {
- editText.setRawInputType(InputType.TYPE_NULL);
- editText.setFocusable(true);
+ editText = findViewById(R.id.etInputWindow);
+ editText.setRawInputType(InputType.TYPE_CLASS_TEXT);
+ editText.setTextIsSelectable(true);
+ if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ editText.setShowSoftInputOnFocus(false);
}
// load keyboard fragment
@@ -62,8 +60,6 @@ protected void onCreate(Bundle savedInstanceState) {
transaction.commit();
}
- @SuppressLint("NewApi")
- @SuppressWarnings("deprecation")
private void copyText() {
CharSequence text = editText.getText();
@@ -71,22 +67,19 @@ private void copyText() {
return;
}
- int sdk = android.os.Build.VERSION.SDK_INT;
- if(sdk < android.os.Build.VERSION_CODES.HONEYCOMB) {
- android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
- clipboard.setText(text);
- } else {
- android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
- android.content.ClipData clip = android.content.ClipData.newPlainText("IPA text", text);
- clipboard.setPrimaryClip(clip);
- }
+
+ android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
+ android.content.ClipData clip = android.content.ClipData.newPlainText("IPA text", text);
+ clipboard.setPrimaryClip(clip);
Toast.makeText(this, getString(R.string.keyboard_input_toast_text_copied), Toast.LENGTH_SHORT).show();
}
private void clearText() {
- if (editText.getText().length() < CONFIRM_DELETE_TEXT_LENGTH) {
+ Editable text = editText.getText();
+ if (text == null) return;
+ if (text.length() < CONFIRM_DELETE_TEXT_LENGTH) {
editText.setText("");
return;
}
@@ -116,14 +109,14 @@ public void onClick(DialogInterface dialog, int id) {
private void shareText() {
- CharSequence text = editText.getText().toString();
- if (TextUtils.isEmpty(text)) {
+ CharSequence text = editText.getText();
+ if (text == null) {
return;
}
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
- sendIntent.putExtra(Intent.EXTRA_TEXT, text);
+ sendIntent.putExtra(Intent.EXTRA_TEXT, text.toString());
sendIntent.setType("text/plain");
startActivity(Intent.createChooser(sendIntent, getString(R.string.keyboard_menu_share_chooser_title)));
}
@@ -157,10 +150,13 @@ public boolean onOptionsItemSelected(MenuItem item) {
@Override
public void onKeyTouched(String keyString) {
+ Editable text = editText.getText();
+ if (text == null) return;
int start = Math.max(editText.getSelectionStart(), 0);
int end = Math.max(editText.getSelectionEnd(), 0);
- editText.getText().replace(Math.min(start, end), Math.max(start, end),
+ text.replace(Math.min(start, end), Math.max(start, end),
keyString, 0, keyString.length());
+ editText.setSelection(editText.getSelectionEnd());
}
@Override
diff --git a/app/src/main/java/com/aepronunciation/ipa/KeyboardInputFragment.java b/app/src/main/java/com/aepronunciation/ipa/KeyboardInputFragment.java
old mode 100644
new mode 100755
index 9b40c58..9b57739
--- a/app/src/main/java/com/aepronunciation/ipa/KeyboardInputFragment.java
+++ b/app/src/main/java/com/aepronunciation/ipa/KeyboardInputFragment.java
@@ -2,7 +2,8 @@
import android.content.Context;
import android.os.Bundle;
-import android.support.v4.app.Fragment;
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -34,23 +35,23 @@ public void onCreate(Bundle savedInstanceState) {
}
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_keyboard_input, container, false);
// Add listeners for all keys
for (int id : mClickMap.keySet()) {
- RelativeLayout rlKey = (RelativeLayout) view.findViewById(id);
+ RelativeLayout rlKey = view.findViewById(id);
rlKey.setOnClickListener(this);
}
for (int id : mLongClickMap.keySet()) {
- RelativeLayout rlKey = (RelativeLayout) view.findViewById(id);
+ RelativeLayout rlKey = view.findViewById(id);
rlKey.setOnLongClickListener(this);
}
- RelativeLayout rlBackspace = (RelativeLayout) view.findViewById(R.id.key_backspace);
+ RelativeLayout rlBackspace = view.findViewById(R.id.key_backspace);
rlBackspace.setOnClickListener(backspaceClick);
return view;
diff --git a/app/src/main/java/com/aepronunciation/ipa/LearnDoubleDialogFragment.java b/app/src/main/java/com/aepronunciation/ipa/LearnDoubleDialogFragment.java
old mode 100644
new mode 100755
index 5ad0b29..eb33fea
--- a/app/src/main/java/com/aepronunciation/ipa/LearnDoubleDialogFragment.java
+++ b/app/src/main/java/com/aepronunciation/ipa/LearnDoubleDialogFragment.java
@@ -5,23 +5,21 @@
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
-import android.support.annotation.NonNull;
-import android.support.v4.app.DialogFragment;
-import android.support.v7.app.AlertDialog;
-import android.support.v7.widget.GridLayoutManager;
-import android.support.v7.widget.RecyclerView;
+import androidx.annotation.NonNull;
+import androidx.fragment.app.DialogFragment;
+import androidx.appcompat.app.AlertDialog;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
-
public class LearnDoubleDialogFragment extends DialogFragment implements
LearnDoubleRecyclerViewAdapter.ItemClickListener, SoundPool.OnLoadCompleteListener {
private DoubleSound doubleSound;
LearnDoubleRecyclerViewAdapter adapter;
- private SpecialSound specialSound;
String ipa;
private static final int SRC_QUALITY = 0;
@@ -41,19 +39,10 @@ public Dialog onCreateDialog(Bundle savedInstanceState) {
doubleSound = new DoubleSound();
doubleSound.restrictListToAllPairsContaining(ipa);
-
- if (PhonemeTable.INSTANCE.isSpecial(ipa)) {
- specialSound = new SpecialSound();
- specialSound.loadSoundsFor(ipa);
- adapter = new LearnDoubleRecyclerViewAdapter(getActivity(), specialSound.getSounds());
- } else {
- doubleSound = new DoubleSound();
- doubleSound.restrictListToAllPairsContaining(ipa);
- adapter = new LearnDoubleRecyclerViewAdapter(getActivity(), doubleSound.getSounds());
- }
+ adapter = new LearnDoubleRecyclerViewAdapter(getActivity(), doubleSound.getSounds());
// set up the RecyclerView
- RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.rvLearnDouble);
+ RecyclerView recyclerView = view.findViewById(R.id.rvLearnDouble);
int numberOfColumns = 6;
recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), numberOfColumns));
GridSpacingItemDecoration itemDecoration = new GridSpacingItemDecoration(getActivity(), R.dimen.grid_item_spacing);
@@ -118,12 +107,7 @@ public void onItemClick(View view, int position) {
String clickedIpaString = adapter.getItem(position);
// use the string to look up the audio resource id
- int soundId;
- if (PhonemeTable.INSTANCE.isSpecial(ipa)) {
- soundId = specialSound.getSoundResourceId(clickedIpaString);
- } else {
- soundId = doubleSound.getSoundResourceId(clickedIpaString);
- }
+ int soundId = doubleSound.getSoundResourceId(clickedIpaString);
// use the id to load (and play) the sound
soundPool.load(getActivity(), soundId, PRIORITY);
diff --git a/app/src/main/java/com/aepronunciation/ipa/LearnDoubleRecyclerViewAdapter.java b/app/src/main/java/com/aepronunciation/ipa/LearnDoubleRecyclerViewAdapter.java
old mode 100644
new mode 100755
index afce6f1..db85b6f
--- a/app/src/main/java/com/aepronunciation/ipa/LearnDoubleRecyclerViewAdapter.java
+++ b/app/src/main/java/com/aepronunciation/ipa/LearnDoubleRecyclerViewAdapter.java
@@ -1,19 +1,19 @@
package com.aepronunciation.ipa;
import android.content.Context;
-import android.support.v7.widget.RecyclerView;
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
-import java.util.Collections;
import java.util.List;
class LearnDoubleRecyclerViewAdapter extends RecyclerView.Adapter {
- private List mData = Collections.emptyList();
+ private List mData;
private LayoutInflater mInflater;
private ItemClickListener mClickListener;
@@ -24,15 +24,16 @@ class LearnDoubleRecyclerViewAdapter extends RecyclerView.Adapter ipaForVideo = createVideoMap();
+ private Map ipaForDescription = createDescriptionMap();
+ private Map ipaForExample1 = createExample1Map();
+ private Map ipaForExample2 = createExample2Map();
+ private Map ipaForExample3 = createExample3Map();
private static final int SRC_QUALITY = 0;
private static final int PRIORITY = 1;
private SoundPool soundPool = null;
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View layout = inflater.inflate(R.layout.fragment_learn_single, container, false);
- tvIpaSymbol = (TextView) layout.findViewById(R.id.tvLearnSingleIpaSound);
- videoView = (VideoView) layout.findViewById(R.id.videoview);
- tvIpaDescription = (TextView) layout.findViewById(R.id.tvLearnSingleIpaDescription);
- rlExample1 = (RelativeLayout) layout.findViewById(R.id.rlExample1);
- rlExample2 = (RelativeLayout) layout.findViewById(R.id.rlExample2);
- rlExample3 = (RelativeLayout) layout.findViewById(R.id.rlExample3);
- rlMore = (RelativeLayout) layout.findViewById(R.id.rlMore);
- tvExample1 = (TextView) layout.findViewById(R.id.tvExample1);
- tvExample2 = (TextView) layout.findViewById(R.id.tvExample2);
- tvExample3 = (TextView) layout.findViewById(R.id.tvExample3);
+ tvIpaSymbol = layout.findViewById(R.id.tvLearnSingleIpaSound);
+ videoView = layout.findViewById(R.id.videoview);
+ tvIpaDescription = layout.findViewById(R.id.tvLearnSingleIpaDescription);
+ rlExample1 = layout.findViewById(R.id.rlExample1);
+ rlExample2 = layout.findViewById(R.id.rlExample2);
+ rlExample3 = layout.findViewById(R.id.rlExample3);
+ rlMore = layout.findViewById(R.id.rlMore);
+ tvExample1 = layout.findViewById(R.id.tvExample1);
+ tvExample2 = layout.findViewById(R.id.tvExample2);
+ tvExample3 = layout.findViewById(R.id.tvExample3);
// set listeners
rlExample1.setOnClickListener(this);
@@ -103,9 +112,11 @@ public void onActivityCreated(Bundle savedInstanceState) {
} else {
tvIpaSymbol.setText(getString(R.string.key_ae));
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_ae);
- videoView.setVideoURI(videoUri);
- videoView.seekTo(1);
+ if (getActivity() != null) {
+ videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_ae);
+ videoView.setVideoURI(videoUri);
+ videoView.seekTo(1);
+ }
tvIpaDescription.setText(getString(
R.string.ae_description));
tvExample1.setText(getString(R.string.ae_example1));
@@ -126,7 +137,7 @@ public void onPause() {
}
@Override
- public void onSaveInstanceState(Bundle savedInstanceState) {
+ public void onSaveInstanceState(@NonNull Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
//Save the fragment's state here
@@ -162,7 +173,7 @@ public void onClick(View v) {
} else { // Button: "more..."
Bundle args = new Bundle();
- args.putString(LearnDoubleDialogFragment.KEY_DIALOG_IPA, tvIpaSymbol.getText().toString());
+ args.putString(LearnDoubleDialogFragment.KEY_DIALOG_IPA, ipa);
LearnDoubleDialogFragment dialog = new LearnDoubleDialogFragment();
dialog.setArguments(args);
dialog.show(getChildFragmentManager(), "TagDoubleSounds");
@@ -170,754 +181,314 @@ public void onClick(View v) {
}
- public void onNewSelection(String keyString) {
-
- switch (keyString) {
-
- case "i":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_i);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.i_description));
- tvExample1.setText(getString(R.string.i_example1));
- tvExample2.setText(getString(R.string.i_example2));
- tvExample3.setText(getString(R.string.i_example3));
-
- //soundPool.load(context, R.raw.single_i_long, PRIORITY);
- videoView.start();
- break;
-
- case "ɪ":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_i_short);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.i_short_description));
- tvExample1.setText(getString(
- R.string.i_short_example1));
- tvExample2.setText(getString(
- R.string.i_short_example2));
- tvExample3.setText(getString(
- R.string.i_short_example3));
-
- //soundPool.load(context, R.raw.single_i_short, PRIORITY);
- videoView.start();
- break;
-
- case "ɛ":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_e_short);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.e_short_description));
- tvExample1.setText(getString(
- R.string.e_short_example1));
- tvExample2.setText(getString(
- R.string.e_short_example2));
- tvExample3.setText(getString(
- R.string.e_short_example3));
-
- //soundPool.load(context, R.raw.single_e_short, PRIORITY);
- videoView.start();
- break;
-
- case "æ":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_ae);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.ae_description));
- tvExample1.setText(getString(R.string.ae_example1));
- tvExample2.setText(getString(R.string.ae_example2));
- tvExample3.setText(getString(R.string.ae_example3));
-
- //soundPool.load(context, R.raw.single_ae, PRIORITY);
- videoView.start();
- break;
-
- case "ɑ":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_a);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.a_description));
- tvExample1.setText(getString(R.string.a_example1));
- tvExample2.setText(getString(R.string.a_example2));
- tvExample3.setText(getString(R.string.a_example3));
-
- //soundPool.load(context, R.raw.single_a, PRIORITY);
- videoView.start();
- break;
-
- case "ɔ":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_c_backwards);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.c_backwards_description));
- tvExample1.setText(getString(
- R.string.c_backwards_example1));
- tvExample2.setText(getString(
- R.string.c_backwards_example2));
- tvExample3.setText(getString(
- R.string.c_backwards_example3));
-
- //soundPool.load(context, R.raw.single_c_backwards, PRIORITY);
- videoView.start();
- break;
-
- case "ʊ":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_u_short);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.u_short_description));
- tvExample1.setText(getString(
- R.string.u_short_example1));
- tvExample2.setText(getString(
- R.string.u_short_example2));
- tvExample3.setText(getString(
- R.string.u_short_example3));
-
- //soundPool.load(context, R.raw.single_u_short, PRIORITY);
- videoView.start();
- break;
-
- case "u":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_u);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.u_description));
- tvExample1.setText(getString(R.string.u_example1));
- tvExample2.setText(getString(R.string.u_example2));
- tvExample3.setText(getString(R.string.u_example3));
-
- //soundPool.load(context, R.raw.single_u, PRIORITY);
- videoView.start();
- break;
-
- case "ʌ":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_v_upsidedown);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.v_upsidedown_description));
- tvExample1.setText(getString(
- R.string.v_upsidedown_example1));
- tvExample2.setText(getString(
- R.string.v_upsidedown_example2));
- tvExample3.setText(getString(
- R.string.v_upsidedown_example3));
-
- //soundPool.load(context, R.raw.single_v_upsidedown, PRIORITY);
- videoView.start();
- break;
-
- case "ə":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_shwua);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(R.string.schwa_description));
- tvExample1.setText(getResources()
- .getString(R.string.schwa_example1));
- tvExample2.setText(getResources()
- .getString(R.string.schwa_example2));
- tvExample3.setText(getResources()
- .getString(R.string.schwa_example3));
-
- //soundPool.load(context, R.raw.single_schwa, PRIORITY);
- videoView.start();
- break;
-
- case "eɪ":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_ei);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(R.string.ei_description));
- tvExample1.setText(getString(R.string.ei_example1));
- tvExample2.setText(getString(R.string.ei_example2));
- tvExample3.setText(getString(R.string.ei_example3));
-
- //soundPool.load(context, R.raw.single_ei, PRIORITY);
- videoView.start();
- break;
-
- case "aɪ":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_ai);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(R.string.ai_description));
- tvExample1.setText(getString(R.string.ai_example1));
- tvExample2.setText(getString(R.string.ai_example2));
- tvExample3.setText(getString(R.string.ai_example3));
-
- //soundPool.load(context, R.raw.single_ai, PRIORITY);
- videoView.start();
- break;
-
- case "aʊ":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_au);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(R.string.au_description));
- tvExample1.setText(getString(R.string.au_example1));
- tvExample2.setText(getString(R.string.au_example2));
- tvExample3.setText(getString(R.string.au_example3));
-
- //soundPool.load(context, R.raw.single_au, PRIORITY);
- videoView.start();
- break;
-
- case "ɔɪ":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_oi);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(R.string.oi_description));
- tvExample1.setText(getString(R.string.oi_example1));
- tvExample2.setText(getString(R.string.oi_example2));
- tvExample3.setText(getString(R.string.oi_example3));
-
- //soundPool.load(context, R.raw.single_oi, PRIORITY);
- videoView.start();
- break;
-
- case "oʊ":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_ou);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(R.string.ou_description));
- tvExample1.setText(getString(R.string.ou_example1));
- tvExample2.setText(getString(R.string.ou_example2));
- tvExample3.setText(getString(R.string.ou_example3));
-
- //soundPool.load(context, R.raw.single_ou, PRIORITY);
- videoView.start();
- break;
-
- case "ɝ":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_er_stressed);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(R.string.er_stressed_description));
- tvExample1.setText(getString(R.string.er_stressed_example1));
- tvExample2.setText(getString(R.string.er_stressed_example2));
- tvExample3.setText(getString(R.string.er_stressed_example3));
-
- //soundPool.load(context, R.raw.single_er_stressed, PRIORITY);
- videoView.start();
- break;
-
- case "ɚ":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_er_unstressed);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.er_unstressed_description));
- tvExample1.setText(getString(
- R.string.er_unstressed_example1));
- tvExample2.setText(getString(
- R.string.er_unstressed_example2));
- tvExample3.setText(getString(
- R.string.er_unstressed_example3));
-
- //soundPool.load(context, R.raw.single_er_unstressed, PRIORITY);
- videoView.start();
- break;
-
- case "ɑr":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_ar);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.ar_description));
- tvExample1.setText(getString(R.string.ar_example1));
- tvExample2.setText(getString(R.string.ar_example2));
- tvExample3.setText(getString(R.string.ar_example3));
-
- //soundPool.load(context, R.raw.single_ar, PRIORITY);
- videoView.start();
- break;
-
- case "ɛr":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_er);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.er_description));
- tvExample1.setText(getString(R.string.er_example1));
- tvExample2.setText(getString(R.string.er_example2));
- tvExample3.setText(getString(R.string.er_example3));
-
- //soundPool.load(context, R.raw.single_er, PRIORITY);
- videoView.start();
- break;
-
- case "ɪr":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_ir);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.ir_description));
- tvExample1.setText(getString(R.string.ir_example1));
- tvExample2.setText(getString(R.string.ir_example2));
- tvExample3.setText(getString(R.string.ir_example3));
-
- //soundPool.load(context, R.raw.single_ir, PRIORITY);
- videoView.start();
- break;
-
- case "ɔr":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_or);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.or_description));
- tvExample1.setText(getString(R.string.or_example1));
- tvExample2.setText(getString(R.string.or_example2));
- tvExample3.setText(getString(R.string.or_example3));
-
- //soundPool.load(context, R.raw.single_or, PRIORITY);
- videoView.start();
- break;
-
- case "p":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_p);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.p_description));
- tvExample1.setText(getString(R.string.p_example1));
- tvExample2.setText(getString(R.string.p_example2));
- tvExample3.setText(getString(R.string.p_example3));
-
- //soundPool.load(context, R.raw.single_p, PRIORITY);
- videoView.start();
- break;
-
- case "t":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_t);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.t_description));
- tvExample1.setText(getString(R.string.t_example1));
- tvExample2.setText(getString(R.string.t_example2));
- tvExample3.setText(getString(R.string.t_example3));
-
- //soundPool.load(context, R.raw.single_t, PRIORITY);
- videoView.start();
- break;
-
- case "k":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_k);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.k_description));
- tvExample1.setText(getString(R.string.k_example1));
- tvExample2.setText(getString(R.string.k_example2));
- tvExample3.setText(getString(R.string.k_example3));
-
- //soundPool.load(context, R.raw.single_k, PRIORITY);
- videoView.start();
- break;
-
- case "ʧ":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_ch);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.ch_description));
- tvExample1.setText(getString(R.string.ch_example1));
- tvExample2.setText(getString(R.string.ch_example2));
- tvExample3.setText(getString(R.string.ch_example3));
-
- //soundPool.load(context, R.raw.single_ch, PRIORITY);
- videoView.start();
- break;
-
- case "f":
+ public void onNewSelection(String ipa) {
+ if (getActivity() == null) return;
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_f);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.f_description));
- tvExample1.setText(getString(R.string.f_example1));
- tvExample2.setText(getString(R.string.f_example2));
- tvExample3.setText(getString(R.string.f_example3));
-
- //soundPool.load(context, R.raw.single_f, PRIORITY);
- videoView.start();
- break;
-
- case "θ":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_th_voiceless);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.th_voiceless_description));
- tvExample1.setText(getString(
- R.string.th_voiceless_example1));
- tvExample2.setText(getString(
- R.string.th_voiceless_example2));
- tvExample3.setText(getString(
- R.string.th_voiceless_example3));
-
- //soundPool.load(context, R.raw.single_th_voiceless, PRIORITY);
- videoView.start();
- break;
-
- case "s":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_s);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.s_description));
- tvExample1.setText(getString(R.string.s_example1));
- tvExample2.setText(getString(R.string.s_example2));
- tvExample3.setText(getString(R.string.s_example3));
-
- //soundPool.load(context, R.raw.single_s, PRIORITY);
- videoView.start();
- break;
-
- case "ʃ":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_sh);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.sh_description));
- tvExample1.setText(getString(R.string.sh_example1));
- tvExample2.setText(getString(R.string.sh_example2));
- tvExample3.setText(getString(R.string.sh_example3));
-
- //soundPool.load(context, R.raw.single_sh, PRIORITY);
- videoView.start();
- break;
-
- case "b":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_b);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.b_description));
- tvExample1.setText(getString(R.string.b_example1));
- tvExample2.setText(getString(R.string.b_example2));
- tvExample3.setText(getString(R.string.b_example3));
-
- //soundPool.load(context, R.raw.single_b, PRIORITY);
- videoView.start();
- break;
-
- case "d":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_d);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.d_description));
- tvExample1.setText(getString(R.string.d_example1));
- tvExample2.setText(getString(R.string.d_example2));
- tvExample3.setText(getString(R.string.d_example3));
-
- //soundPool.load(context, R.raw.single_d, PRIORITY);
- videoView.start();
- break;
-
- case "g":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_g);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.g_description));
- tvExample1.setText(getString(R.string.g_example1));
- tvExample2.setText(getString(R.string.g_example2));
- tvExample3.setText(getString(R.string.g_example3));
-
- //soundPool.load(context, R.raw.single_g, PRIORITY);
- videoView.start();
- break;
-
- case "ʤ":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_dzh);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.dzh_description));
- tvExample1.setText(getString(R.string.dzh_example1));
- tvExample2.setText(getString(R.string.dzh_example2));
- tvExample3.setText(getString(R.string.dzh_example3));
-
- //soundPool.load(context, R.raw.single_dzh, PRIORITY);
- videoView.start();
- break;
-
- case "v":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_v);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.v_description));
- tvExample1.setText(getString(R.string.v_example1));
- tvExample2.setText(getString(R.string.v_example2));
- tvExample3.setText(getString(R.string.v_example3));
-
- //soundPool.load(context, R.raw.single_v, PRIORITY);
- videoView.start();
- break;
-
- case "ð":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_th_voiced);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.th_voiced_description));
- tvExample1.setText(getString(
- R.string.th_voiced_example1));
- tvExample2.setText(getString(
- R.string.th_voiced_example2));
- tvExample3.setText(getString(
- R.string.th_voiced_example3));
-
- //soundPool.load(context, R.raw.single_th_voiced, PRIORITY);
- videoView.start();
- break;
-
- case "z":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_z);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.z_description));
- tvExample1.setText(getString(R.string.z_example1));
- tvExample2.setText(getString(R.string.z_example2));
- tvExample3.setText(getString(R.string.z_example3));
-
- //soundPool.load(context, R.raw.single_z, PRIORITY);
- videoView.start();
- break;
-
- case "ʒ":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_zh);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.zh_description));
- tvExample1.setText(getString(R.string.zh_example1));
- tvExample2.setText(getString(R.string.zh_example2));
- tvExample3.setText(getString(R.string.zh_example3));
-
- //soundPool.load(context, R.raw.single_zh, PRIORITY);
- videoView.start();
- break;
-
- case "m":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_m);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.m_description));
- tvExample1.setText(getString(R.string.m_example1));
- tvExample2.setText(getString(R.string.m_example2));
- tvExample3.setText(getString(R.string.m_example3));
-
- //soundPool.load(context, R.raw.single_m, PRIORITY);
- videoView.start();
- break;
+ int videoId = ipaForVideo.get(ipa);
+ int descriptionId = ipaForDescription.get(ipa);
+ int example1Id = ipaForExample1.get(ipa);
+ int example2Id = ipaForExample2.get(ipa);
+ int example3Id = ipaForExample3.get(ipa);
- case "n":
+ tvIpaSymbol.setText(ipa);
+ videoUri = Uri.parse("android.resource://"
+ + getActivity().getPackageName()
+ + "/" + videoId);
+ videoView.setVideoURI(videoUri);
+ tvIpaDescription.setText(getString(descriptionId));
+ tvExample1.setText(getString(example1Id));
+ tvExample2.setText(getString(example2Id));
+ tvExample3.setText(getString(example3Id));
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_n);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.n_description));
- tvExample1.setText(getString(R.string.n_example1));
- tvExample2.setText(getString(R.string.n_example2));
- tvExample3.setText(getString(R.string.n_example3));
-
- //soundPool.load(context, R.raw.single_n, PRIORITY);
- videoView.start();
- break;
-
- case "ŋ":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_ng);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.ng_description));
- tvExample1.setText(getString(R.string.ng_example1));
- tvExample2.setText(getString(R.string.ng_example2));
- tvExample3.setText(getString(R.string.ng_example3));
-
- //soundPool.load(context, R.raw.single_ng, PRIORITY);
- videoView.start();
- break;
-
- case "l":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_l);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.l_description));
- tvExample1.setText(getString(R.string.l_example1));
- tvExample2.setText(getString(R.string.l_example2));
- tvExample3.setText(getString(R.string.l_example3));
-
- //soundPool.load(context, R.raw.single_l, PRIORITY);
- videoView.start();
- break;
-
- case "w":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_w);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.w_description));
- tvExample1.setText(getString(R.string.w_example1));
- tvExample2.setText(getString(R.string.w_example2));
- tvExample3.setText(getString(R.string.w_example3));
-
- //soundPool.load(context, R.raw.single_w, PRIORITY);
- videoView.start();
- break;
-
- case "j":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_j);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.j_description));
- tvExample1.setText(getString(R.string.j_example1));
- tvExample2.setText(getString(R.string.j_example2));
- tvExample3.setText(getString(R.string.j_example3));
-
- //soundPool.load(context, R.raw.single_j, PRIORITY);
- videoView.start();
- break;
-
- case "h":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_h);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.h_description));
- tvExample1.setText(getString(R.string.h_example1));
- tvExample2.setText(getString(R.string.h_example2));
- tvExample3.setText(getString(R.string.h_example3));
-
- //soundPool.load(context, R.raw.single_h, PRIORITY);
- videoView.start();
- break;
+ videoView.start();
+ }
- case "r":
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_r);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.r_description));
- tvExample1.setText(getString(R.string.r_example1));
- tvExample2.setText(getString(R.string.r_example2));
- tvExample3.setText(getString(R.string.r_example3));
+ @Override
+ public void onLoadComplete(SoundPool sPool, int sid, int status) {
- //soundPool.load(context, R.raw.single_r, PRIORITY);
- videoView.start();
- break;
+ if (status != 0) // 0=success
+ return;
+ soundPool.play(sid, 1, 1, PRIORITY, 0, 1.0f);
+ soundPool.unload(sid);
- case "ʔ":
+ }
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_glottal_stop);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.glottal_stop_description));
- tvExample1.setText(getString(
- R.string.glottal_stop_example1));
- tvExample2.setText(getString(
- R.string.glottal_stop_example2));
- tvExample3.setText(getString(
- R.string.glottal_stop_example3));
-
- //soundPool.load(context, R.raw.single_glottal_stop, PRIORITY);
- videoView.start();
- break;
-
- case "ɾ":
-
- tvIpaSymbol.setText(keyString);
- videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.v_t_flap);
- videoView.setVideoURI(videoUri);
- tvIpaDescription.setText(getString(
- R.string.flap_t_description));
- tvExample1.setText(getString(
- R.string.flap_t_example1));
- tvExample2.setText(getString(
- R.string.flap_t_example2));
- tvExample3.setText(getString(
- R.string.flap_t_example3));
-
- //soundPool.load(context, R.raw.single_flap_t, PRIORITY);
- videoView.start();
- break;
+ private static Map createVideoMap() {
+
+ Map result = new LinkedHashMap<>();
+
+ result.put("p", R.raw.v_p);
+ result.put("t", R.raw.v_t);
+ result.put("k", R.raw.v_k);
+ result.put("ʧ", R.raw.v_ch);
+ result.put("f", R.raw.v_f);
+ result.put("θ", R.raw.v_th_voiceless);
+ result.put("s", R.raw.v_s);
+ result.put("ʃ", R.raw.v_sh);
+ result.put("b", R.raw.v_b);
+ result.put("d", R.raw.v_d);
+ result.put("g", R.raw.v_g);
+ result.put("ʤ", R.raw.v_dzh);
+ result.put("v", R.raw.v_v);
+ result.put("ð", R.raw.v_th_voiced);
+ result.put("z", R.raw.v_z);
+ result.put("ʒ", R.raw.v_zh);
+ result.put("m", R.raw.v_m);
+ result.put("n", R.raw.v_n);
+ result.put("ŋ", R.raw.v_ng);
+ result.put("l", R.raw.v_l);
+ result.put("w", R.raw.v_w);
+ result.put("j", R.raw.v_j);
+ result.put("h", R.raw.v_h);
+ result.put("r", R.raw.v_r);
+ result.put("i", R.raw.v_i);
+ result.put("ɪ", R.raw.v_i_short);
+ result.put("ɛ", R.raw.v_e_short);
+ result.put("æ", R.raw.v_ae);
+ result.put("ɑ", R.raw.v_a);
+ result.put("ɔ", R.raw.v_c_backwards);
+ result.put("ʊ", R.raw.v_u_short);
+ result.put("u", R.raw.v_u);
+ result.put("ʌ", R.raw.v_v_upsidedown);
+ result.put("ə", R.raw.v_schwa);
+ result.put("eɪ", R.raw.v_ei);
+ result.put("aɪ", R.raw.v_ai);
+ result.put("aʊ", R.raw.v_au);
+ result.put("ɔɪ", R.raw.v_oi);
+ result.put("oʊ", R.raw.v_ou);
+ result.put("ɾ", R.raw.v_flap_t);
+ result.put("ɝ", R.raw.v_er_stressed);
+ result.put("ɚ", R.raw.v_er_unstressed);
+ result.put("ɑr", R.raw.v_ar);
+ result.put("ɛr", R.raw.v_er);
+ result.put("ɪr", R.raw.v_ir);
+ result.put("ɔr", R.raw.v_or);
+ result.put("ʔ", R.raw.v_glottal_stop);
+
+ return result;
+ }
- }
+ private static Map createDescriptionMap() {
+
+ Map result = new LinkedHashMap<>();
+
+ result.put("p", R.string.p_description);
+ result.put("t", R.string.t_description);
+ result.put("k", R.string.k_description);
+ result.put("ʧ", R.string.ch_description);
+ result.put("f", R.string.f_description);
+ result.put("θ", R.string.th_voiceless_description);
+ result.put("s", R.string.s_description);
+ result.put("ʃ", R.string.sh_description);
+ result.put("b", R.string.b_description);
+ result.put("d", R.string.d_description);
+ result.put("g", R.string.g_description);
+ result.put("ʤ", R.string.dzh_description);
+ result.put("v", R.string.v_description);
+ result.put("ð", R.string.th_voiced_description);
+ result.put("z", R.string.z_description);
+ result.put("ʒ", R.string.zh_description);
+ result.put("m", R.string.m_description);
+ result.put("n", R.string.n_description);
+ result.put("ŋ", R.string.ng_description);
+ result.put("l", R.string.l_description);
+ result.put("w", R.string.w_description);
+ result.put("j", R.string.j_description);
+ result.put("h", R.string.h_description);
+ result.put("r", R.string.r_description);
+ result.put("i", R.string.i_description);
+ result.put("ɪ", R.string.i_short_description);
+ result.put("ɛ", R.string.e_short_description);
+ result.put("æ", R.string.ae_description);
+ result.put("ɑ", R.string.a_description);
+ result.put("ɔ", R.string.c_backwards_description);
+ result.put("ʊ", R.string.u_short_description);
+ result.put("u", R.string.u_description);
+ result.put("ʌ", R.string.v_upsidedown_description);
+ result.put("ə", R.string.schwa_description);
+ result.put("eɪ", R.string.ei_description);
+ result.put("aɪ", R.string.ai_description);
+ result.put("aʊ", R.string.au_description);
+ result.put("ɔɪ", R.string.oi_description);
+ result.put("oʊ", R.string.ou_description);
+ result.put("ɾ", R.string.flap_t_description);
+ result.put("ɝ", R.string.er_stressed_description);
+ result.put("ɚ", R.string.er_unstressed_description);
+ result.put("ɑr", R.string.ar_description);
+ result.put("ɛr", R.string.er_description);
+ result.put("ɪr", R.string.ir_description);
+ result.put("ɔr", R.string.or_description);
+ result.put("ʔ", R.string.glottal_stop_description);
+
+ return result;
}
- @Override
- public void onLoadComplete(SoundPool sPool, int sid, int status) {
- if (status != 0) // 0=success
- return;
+ private static Map createExample1Map() {
+
+ Map result = new LinkedHashMap<>();
+
+ result.put("p", R.string.p_example1);
+ result.put("t", R.string.t_example1);
+ result.put("k", R.string.k_example1);
+ result.put("ʧ", R.string.ch_example1);
+ result.put("f", R.string.f_example1);
+ result.put("θ", R.string.th_voiceless_example1);
+ result.put("s", R.string.s_example1);
+ result.put("ʃ", R.string.sh_example1);
+ result.put("b", R.string.b_example1);
+ result.put("d", R.string.d_example1);
+ result.put("g", R.string.g_example1);
+ result.put("ʤ", R.string.dzh_example1);
+ result.put("v", R.string.v_example1);
+ result.put("ð", R.string.th_voiced_example1);
+ result.put("z", R.string.z_example1);
+ result.put("ʒ", R.string.zh_example1);
+ result.put("m", R.string.m_example1);
+ result.put("n", R.string.n_example1);
+ result.put("ŋ", R.string.ng_example1);
+ result.put("l", R.string.l_example1);
+ result.put("w", R.string.w_example1);
+ result.put("j", R.string.j_example1);
+ result.put("h", R.string.h_example1);
+ result.put("r", R.string.r_example1);
+ result.put("i", R.string.i_example1);
+ result.put("ɪ", R.string.i_short_example1);
+ result.put("ɛ", R.string.e_short_example1);
+ result.put("æ", R.string.ae_example1);
+ result.put("ɑ", R.string.a_example1);
+ result.put("ɔ", R.string.c_backwards_example1);
+ result.put("ʊ", R.string.u_short_example1);
+ result.put("u", R.string.u_example1);
+ result.put("ʌ", R.string.v_upsidedown_example1);
+ result.put("ə", R.string.schwa_example1);
+ result.put("eɪ", R.string.ei_example1);
+ result.put("aɪ", R.string.ai_example1);
+ result.put("aʊ", R.string.au_example1);
+ result.put("ɔɪ", R.string.oi_example1);
+ result.put("oʊ", R.string.ou_example1);
+ result.put("ɾ", R.string.flap_t_example1);
+ result.put("ɝ", R.string.er_stressed_example1);
+ result.put("ɚ", R.string.er_unstressed_example1);
+ result.put("ɑr", R.string.ar_example1);
+ result.put("ɛr", R.string.er_example1);
+ result.put("ɪr", R.string.ir_example1);
+ result.put("ɔr", R.string.or_example1);
+ result.put("ʔ", R.string.glottal_stop_example1);
+
+ return result;
+ }
- soundPool.play(sid, 1, 1, PRIORITY, 0, 1.0f);
- soundPool.unload(sid);
+ private static Map createExample2Map() {
+
+ Map result = new LinkedHashMap<>();
+
+ result.put("p", R.string.p_example2);
+ result.put("t", R.string.t_example2);
+ result.put("k", R.string.k_example2);
+ result.put("ʧ", R.string.ch_example2);
+ result.put("f", R.string.f_example2);
+ result.put("θ", R.string.th_voiceless_example2);
+ result.put("s", R.string.s_example2);
+ result.put("ʃ", R.string.sh_example2);
+ result.put("b", R.string.b_example2);
+ result.put("d", R.string.d_example2);
+ result.put("g", R.string.g_example2);
+ result.put("ʤ", R.string.dzh_example2);
+ result.put("v", R.string.v_example2);
+ result.put("ð", R.string.th_voiced_example2);
+ result.put("z", R.string.z_example2);
+ result.put("ʒ", R.string.zh_example2);
+ result.put("m", R.string.m_example2);
+ result.put("n", R.string.n_example2);
+ result.put("ŋ", R.string.ng_example2);
+ result.put("l", R.string.l_example2);
+ result.put("w", R.string.w_example2);
+ result.put("j", R.string.j_example2);
+ result.put("h", R.string.h_example2);
+ result.put("r", R.string.r_example2);
+ result.put("i", R.string.i_example2);
+ result.put("ɪ", R.string.i_short_example2);
+ result.put("ɛ", R.string.e_short_example2);
+ result.put("æ", R.string.ae_example2);
+ result.put("ɑ", R.string.a_example2);
+ result.put("ɔ", R.string.c_backwards_example2);
+ result.put("ʊ", R.string.u_short_example2);
+ result.put("u", R.string.u_example2);
+ result.put("ʌ", R.string.v_upsidedown_example2);
+ result.put("ə", R.string.schwa_example2);
+ result.put("eɪ", R.string.ei_example2);
+ result.put("aɪ", R.string.ai_example2);
+ result.put("aʊ", R.string.au_example2);
+ result.put("ɔɪ", R.string.oi_example2);
+ result.put("oʊ", R.string.ou_example2);
+ result.put("ɾ", R.string.flap_t_example2);
+ result.put("ɝ", R.string.er_stressed_example2);
+ result.put("ɚ", R.string.er_unstressed_example2);
+ result.put("ɑr", R.string.ar_example2);
+ result.put("ɛr", R.string.er_example2);
+ result.put("ɪr", R.string.ir_example2);
+ result.put("ɔr", R.string.or_example2);
+ result.put("ʔ", R.string.glottal_stop_example2);
+
+ return result;
+ }
+ private static Map createExample3Map() {
+
+ Map result = new LinkedHashMap<>();
+
+ result.put("p", R.string.p_example3);
+ result.put("t", R.string.t_example3);
+ result.put("k", R.string.k_example3);
+ result.put("ʧ", R.string.ch_example3);
+ result.put("f", R.string.f_example3);
+ result.put("θ", R.string.th_voiceless_example3);
+ result.put("s", R.string.s_example3);
+ result.put("ʃ", R.string.sh_example3);
+ result.put("b", R.string.b_example3);
+ result.put("d", R.string.d_example3);
+ result.put("g", R.string.g_example3);
+ result.put("ʤ", R.string.dzh_example3);
+ result.put("v", R.string.v_example3);
+ result.put("ð", R.string.th_voiced_example3);
+ result.put("z", R.string.z_example3);
+ result.put("ʒ", R.string.zh_example3);
+ result.put("m", R.string.m_example3);
+ result.put("n", R.string.n_example3);
+ result.put("ŋ", R.string.ng_example3);
+ result.put("l", R.string.l_example3);
+ result.put("w", R.string.w_example3);
+ result.put("j", R.string.j_example3);
+ result.put("h", R.string.h_example3);
+ result.put("r", R.string.r_example3);
+ result.put("i", R.string.i_example3);
+ result.put("ɪ", R.string.i_short_example3);
+ result.put("ɛ", R.string.e_short_example3);
+ result.put("æ", R.string.ae_example3);
+ result.put("ɑ", R.string.a_example3);
+ result.put("ɔ", R.string.c_backwards_example3);
+ result.put("ʊ", R.string.u_short_example3);
+ result.put("u", R.string.u_example3);
+ result.put("ʌ", R.string.v_upsidedown_example3);
+ result.put("ə", R.string.schwa_example3);
+ result.put("eɪ", R.string.ei_example3);
+ result.put("aɪ", R.string.ai_example3);
+ result.put("aʊ", R.string.au_example3);
+ result.put("ɔɪ", R.string.oi_example3);
+ result.put("oʊ", R.string.ou_example3);
+ result.put("ɾ", R.string.flap_t_example3);
+ result.put("ɝ", R.string.er_stressed_example3);
+ result.put("ɚ", R.string.er_unstressed_example3);
+ result.put("ɑr", R.string.ar_example3);
+ result.put("ɛr", R.string.er_example3);
+ result.put("ɪr", R.string.ir_example3);
+ result.put("ɔr", R.string.or_example3);
+ result.put("ʔ", R.string.glottal_stop_example3);
+
+ return result;
}
}
diff --git a/app/src/main/java/com/aepronunciation/ipa/MainActivity.java b/app/src/main/java/com/aepronunciation/ipa/MainActivity.java
old mode 100644
new mode 100755
index 935ea72..7f5ddd9
--- a/app/src/main/java/com/aepronunciation/ipa/MainActivity.java
+++ b/app/src/main/java/com/aepronunciation/ipa/MainActivity.java
@@ -3,14 +3,15 @@
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
-import android.support.design.widget.TabLayout;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentStatePagerAdapter;
-import android.support.v4.view.ViewPager;
-import android.support.v7.app.AppCompatActivity;
+import androidx.annotation.NonNull;
+import com.google.android.material.tabs.TabLayout;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentStatePagerAdapter;
+import androidx.viewpager.widget.ViewPager;
+import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
-import android.support.v7.widget.Toolbar;
+import androidx.appcompat.widget.Toolbar;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
@@ -54,16 +55,16 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
- Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
+ Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
- tabLayout = (TabLayout) findViewById(R.id.tab_layout);
+ tabLayout = findViewById(R.id.tab_layout);
tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.main_tab_learn)));
tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.main_tab_practice)));
tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.main_tab_test)));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
- viewPager = (ViewPager) findViewById(R.id.pager);
+ viewPager = findViewById(R.id.pager);
CustomPagerAdapter adapter = new CustomPagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
@@ -158,6 +159,10 @@ public boolean onOptionsItemSelected(MenuItem item) {
intent = new Intent(this, HistoryActivity.class);
startActivity(intent);
return true;
+ case R.id.action_personal_evaluation:
+ intent = new Intent(this, PersonalEvaluationActivity.class);
+ startActivity(intent);
+ return true;
case R.id.action_about:
intent = new Intent(this, AboutActivity.class);
startActivity(intent);
@@ -171,6 +176,7 @@ public boolean onOptionsItemSelected(MenuItem item) {
@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
if (requestCode == TEST_RESULTS_RESULT) {
if (resultCode == RESULT_OK) {
@@ -201,23 +207,23 @@ private class CustomPagerAdapter extends FragmentStatePagerAdapter {
this.mNumOfTabs = NumOfTabs;
}
+ @NonNull
@Override
public Fragment getItem(int position) {
switch (position) {
- case 0:
- return new LearnFragment();
case 1:
return new PracticeFragment();
case 2:
return new TestFragment();
default:
- return null;
+ return new LearnFragment();
}
}
+ @NonNull
@Override
- public Object instantiateItem(ViewGroup container, int position) {
+ public Object instantiateItem(@NonNull ViewGroup container, int position) {
Fragment createdFragment = (Fragment) super.instantiateItem(container, position);
switch (position) {
case 0:
diff --git a/app/src/main/java/com/aepronunciation/ipa/MyDatabaseAdapter.java b/app/src/main/java/com/aepronunciation/ipa/MyDatabaseAdapter.java
old mode 100644
new mode 100755
index bfc9113..7344799
--- a/app/src/main/java/com/aepronunciation/ipa/MyDatabaseAdapter.java
+++ b/app/src/main/java/com/aepronunciation/ipa/MyDatabaseAdapter.java
@@ -26,7 +26,7 @@ ArrayList getAllTestScores() {
SQLiteDatabase db = helper.getWritableDatabase();
String[] columns = { MyDatabaseHelper.ID, MyDatabaseHelper.USER_NAME,
MyDatabaseHelper.TEST_DATE, MyDatabaseHelper.TEST_MODE,
- MyDatabaseHelper.SCORE, MyDatabaseHelper.CORRECT_ANSWER, MyDatabaseHelper.WRONG };
+ MyDatabaseHelper.SCORE, MyDatabaseHelper.CORRECT_ANSWER };
String orderBy = MyDatabaseHelper.TEST_DATE + " DESC";
Cursor cursor = db.query(MyDatabaseHelper.TESTS_TABLE_NAME, columns,
null, null, null, null, orderBy, null);
@@ -36,7 +36,7 @@ ArrayList getAllTestScores() {
int indexMode = cursor.getColumnIndex(MyDatabaseHelper.TEST_MODE);
int indexScore = cursor.getColumnIndex(MyDatabaseHelper.SCORE);
int indexCorrect = cursor.getColumnIndex(MyDatabaseHelper.CORRECT_ANSWER);
- int indexWrong = cursor.getColumnIndex(MyDatabaseHelper.WRONG);
+ //int indexWrong = cursor.getColumnIndex(MyDatabaseHelper.WRONG);
while (cursor.moveToNext()) {
@@ -56,7 +56,7 @@ ArrayList getAllTestScores() {
test.setScore(cursor.getInt(indexScore));
test.setCorrectAnswers(cursor.getString(indexCorrect));
- test.setWrong(cursor.getString(indexWrong));
+ //test.setWrong(cursor.getString(indexWrong));
allTests.add(test);
}
@@ -75,8 +75,7 @@ Test getTest(long rowId) {
String[] columns = { MyDatabaseHelper.ID, MyDatabaseHelper.USER_NAME,
MyDatabaseHelper.TEST_DATE, MyDatabaseHelper.TIME_LENGTH,
MyDatabaseHelper.TEST_MODE, MyDatabaseHelper.SCORE,
- MyDatabaseHelper.CORRECT_ANSWER, MyDatabaseHelper.USER_ANSWER,
- MyDatabaseHelper.WRONG };
+ MyDatabaseHelper.CORRECT_ANSWER, MyDatabaseHelper.USER_ANSWER };
String whereClause = MyDatabaseHelper.ID + " =?";
String[] whereArgs = { Long.toString(rowId) };
Cursor cursor = db.query(MyDatabaseHelper.TESTS_TABLE_NAME, columns,
@@ -90,7 +89,7 @@ Test getTest(long rowId) {
int indexScore = cursor.getColumnIndex(MyDatabaseHelper.SCORE);
int indexCorrect = cursor.getColumnIndex(MyDatabaseHelper.CORRECT_ANSWER);
int indexUserAnswer = cursor.getColumnIndex(MyDatabaseHelper.USER_ANSWER);
- int indexWrong = cursor.getColumnIndex(MyDatabaseHelper.WRONG);
+ //int indexWrong = cursor.getColumnIndex(MyDatabaseHelper.WRONG);
while (cursor.moveToNext()) {
test.setId(cursor.getLong(indexId));
@@ -107,7 +106,7 @@ Test getTest(long rowId) {
test.setScore(cursor.getInt(indexScore));
test.setCorrectAnswers(cursor.getString(indexCorrect));
test.setUserAnswers(cursor.getString(indexUserAnswer));
- test.setWrong(cursor.getString(indexWrong));
+ //test.setWrong(cursor.getString(indexWrong));
}
cursor.close();
@@ -118,6 +117,8 @@ Test getTest(long rowId) {
int[] getHighScores() {
+ // TODO this could be refactored to use a SQL max function
+
int[] highScores = new int[2];
SQLiteDatabase db = helper.getWritableDatabase();
@@ -158,31 +159,8 @@ int[] getHighScores() {
return highScores;
}
- public ArrayList getAllUsers() {
-
- ArrayList results = new ArrayList<>();
- SQLiteDatabase db = helper.getReadableDatabase();
- String[] columns = { MyDatabaseHelper.USER_NAME };
- Cursor cursor = db.query(true, MyDatabaseHelper.TESTS_TABLE_NAME,
- columns, null, null, null, null, null, null);
-
- int wordIndex = cursor.getColumnIndex(MyDatabaseHelper.USER_NAME);
-
- String tempString;
- while (cursor.moveToNext()) {
-
- tempString = cursor.getString(wordIndex);
- results.add(tempString);
- }
-
- cursor.close();
- db.close();
- return results;
-
- }
-
long addTest(String name, long time, String testmode, int score,
- String correctAnswers, String userAnswers, String wrong) {
+ String correctAnswers, String userAnswers) {
// get current Unix epoc time in milliseconds
long date = System.currentTimeMillis();
@@ -196,24 +174,13 @@ long addTest(String name, long time, String testmode, int score,
contentValues.put(MyDatabaseHelper.SCORE, score);
contentValues.put(MyDatabaseHelper.CORRECT_ANSWER, correctAnswers);
contentValues.put(MyDatabaseHelper.USER_ANSWER, userAnswers);
- contentValues.put(MyDatabaseHelper.WRONG, wrong);
+ contentValues.put(MyDatabaseHelper.WRONG, ""); // Deprecated, inserting dummy value
long id = db.insert(MyDatabaseHelper.TESTS_TABLE_NAME, null,
contentValues);
db.close();
return id;
}
- public int deleteTest(long rowId) {
-
- SQLiteDatabase db = helper.getWritableDatabase();
- String whereClause = MyDatabaseHelper.ID + " =?";
- String[] whereArgs = { Long.toString(rowId) };
- int count = db.delete(MyDatabaseHelper.TESTS_TABLE_NAME, whereClause,
- whereArgs);
- db.close();
- return count;
- }
-
// Making this an inner class rather than a separate class so that outer
// class can securely refer to private variables in this class
private static class MyDatabaseHelper extends SQLiteOpenHelper {
@@ -236,14 +203,22 @@ private static class MyDatabaseHelper extends SQLiteOpenHelper {
private static final String SCORE = "score";
private static final String CORRECT_ANSWER = "correct";
private static final String USER_ANSWER = "user_answer";
- private static final String WRONG = "wrong";
+ private static final String WRONG = "wrong"; // DEPRECATED
+ // I'm only leaving in the WRONG column so that I don't have to
+ // upgrade the database. Just ignoring it for now.
// SQL statements
private static final String CREATE_TEST_TABLE = "CREATE TABLE "
- + TESTS_TABLE_NAME + " (" + ID + " INTEGER PRIMARY KEY,"
- + USER_NAME + " TEXT NOT NULL," + TEST_DATE + " INTEGER,"
- + TIME_LENGTH + " INTEGER," + TEST_MODE + " TEXT NOT NULL,"
- + SCORE + " INTEGER," + CORRECT_ANSWER + " TEXT NOT NULL,"
- + USER_ANSWER + " TEXT NOT NULL," + WRONG + " TEXT NOT NULL)";
+ + TESTS_TABLE_NAME + " ("
+ + ID + " INTEGER PRIMARY KEY,"
+ + USER_NAME + " TEXT NOT NULL,"
+ + TEST_DATE + " INTEGER,"
+ + TIME_LENGTH + " INTEGER,"
+ + TEST_MODE + " TEXT NOT NULL,"
+ + SCORE + " INTEGER,"
+ + CORRECT_ANSWER + " TEXT NOT NULL,"
+ + USER_ANSWER + " TEXT NOT NULL,"
+ + WRONG + " TEXT NOT NULL"
+ + ")";
private static final String DROP_TEST_TABLE = "DROP TABLE IF EXISTS "
+ TESTS_TABLE_NAME;
diff --git a/app/src/main/java/com/aepronunciation/ipa/PersonalEvaluationActivity.java b/app/src/main/java/com/aepronunciation/ipa/PersonalEvaluationActivity.java
new file mode 100755
index 0000000..bb6d5da
--- /dev/null
+++ b/app/src/main/java/com/aepronunciation/ipa/PersonalEvaluationActivity.java
@@ -0,0 +1,43 @@
+package com.aepronunciation.ipa;
+
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.widget.Toolbar;
+import android.view.MenuItem;
+import android.view.View;
+
+public class PersonalEvaluationActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_personal_evaluation);
+
+ Toolbar toolbar = findViewById(R.id.toolbar);
+ setSupportActionBar(toolbar);
+ // add back arrow to toolbar
+ if (getSupportActionBar() != null){
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+ getSupportActionBar().setDisplayShowHomeEnabled(true);
+ }
+
+ }
+
+ public void requestEvaluationClick(View v) {
+ Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.personal_evaluation_contact_url)));
+ startActivity(browserIntent);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ // handle arrow click here
+ if (item.getItemId() == android.R.id.home) {
+ finish(); // close this activity and return to preview activity (if there is any)
+ }
+
+ return super.onOptionsItemSelected(item);
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/aepronunciation/ipa/PhonemeTable.java b/app/src/main/java/com/aepronunciation/ipa/PhonemeTable.java
deleted file mode 100644
index e1c0f86..0000000
--- a/app/src/main/java/com/aepronunciation/ipa/PhonemeTable.java
+++ /dev/null
@@ -1,134 +0,0 @@
-package com.aepronunciation.ipa;
-
-import android.util.Pair;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
-
-class PhonemeTable {
-
- private static final int P_VOWEL = 1;
- private static final int P_CONSONANT = 2;
- private static final int P_SPECIAL = 4;
- private static final int P_UNSTRESSED = 8;
- private static final int P_INITIAL_FINAL = 16;
-
- static final int NUMBER_OF_VOWELS = 21;
- static final int NUMBER_OF_VOWELS_FOR_DOUBLES = 19; // not ə, ɚ
- static final int NUMBER_OF_CONSONANTS = 26;
- static final int NUMBER_OF_CONSONANTS_FOR_DOUBLES = 24; // not ʔ. ɾ
-
- static final PhonemeTable INSTANCE = new PhonemeTable();
-
- private HashMap soundFlagsMap;
-
- private PhonemeTable() {
- init();
- }
-
- boolean isVowel(String s) {
- return (getFlags(s) & P_VOWEL) != 0;
- }
-
- boolean isConsonant(String s) {
- return (getFlags(s) & P_CONSONANT) != 0;
- }
-
- boolean isSpecial(String s) {
- return (getFlags(s) & P_SPECIAL) != 0;
- }
-
- boolean hasTwoPronunciations(String s) {
- return (getFlags(s) & P_INITIAL_FINAL) != 0;
- }
-
-
- private int getFlags(String s) {
- if (soundFlagsMap.containsKey(s)) {
- return soundFlagsMap.get(s);
- }
- return 0;
- }
-
- ArrayList getAllVowels() {
- ArrayList vowels = new ArrayList<>();
- for (Map.Entry entry: soundFlagsMap.entrySet()) {
- if ((entry.getValue() & P_VOWEL) != 0) {
- vowels.add(entry.getKey());
- }
- }
- return vowels;
- }
-
- ArrayList getAllConsonants() {
- ArrayList vowels = new ArrayList<>();
- for (Map.Entry entry: soundFlagsMap.entrySet()) {
- if ((entry.getValue() & P_CONSONANT) != 0) {
- vowels.add(entry.getKey());
- }
- }
- return vowels;
- }
-
- private void init() {
- soundFlagsMap = new HashMap<>();
-
- soundFlagsMap.put("p", P_CONSONANT);
- soundFlagsMap.put("t", P_CONSONANT);
- soundFlagsMap.put("k", P_CONSONANT);
- soundFlagsMap.put("ʧ", P_CONSONANT);
- soundFlagsMap.put("f", P_CONSONANT | P_INITIAL_FINAL);
- soundFlagsMap.put("θ", P_CONSONANT | P_INITIAL_FINAL);
- soundFlagsMap.put("s", P_CONSONANT);
- soundFlagsMap.put("ʃ", P_CONSONANT);
- soundFlagsMap.put("b", P_CONSONANT);
- soundFlagsMap.put("d", P_CONSONANT);
- soundFlagsMap.put("g", P_CONSONANT);
- soundFlagsMap.put("ʤ", P_CONSONANT);
- soundFlagsMap.put("v", P_CONSONANT | P_INITIAL_FINAL);
- soundFlagsMap.put("ð", P_CONSONANT | P_INITIAL_FINAL);
- soundFlagsMap.put("z", P_CONSONANT);
- soundFlagsMap.put("ʒ", P_CONSONANT);
- soundFlagsMap.put("m", P_CONSONANT | P_INITIAL_FINAL);
- soundFlagsMap.put("n", P_CONSONANT | P_INITIAL_FINAL);
- soundFlagsMap.put("ŋ", P_CONSONANT);
- soundFlagsMap.put("l", P_CONSONANT | P_INITIAL_FINAL);
- soundFlagsMap.put("w", P_CONSONANT);
- soundFlagsMap.put("j", P_CONSONANT);
- soundFlagsMap.put("h", P_CONSONANT);
- soundFlagsMap.put("r", P_CONSONANT);
- soundFlagsMap.put("ʔ", P_CONSONANT | P_SPECIAL);
- soundFlagsMap.put("ɾ", P_CONSONANT | P_SPECIAL);
- soundFlagsMap.put("i", P_VOWEL);
- soundFlagsMap.put("ɪ", P_VOWEL);
- soundFlagsMap.put("ɛ", P_VOWEL);
- soundFlagsMap.put("æ", P_VOWEL);
- soundFlagsMap.put("ɑ", P_VOWEL);
- soundFlagsMap.put("ɔ", P_VOWEL);
- soundFlagsMap.put("ʊ", P_VOWEL);
- soundFlagsMap.put("u", P_VOWEL);
- soundFlagsMap.put("ʌ", P_VOWEL);
- soundFlagsMap.put("ə", P_VOWEL | P_UNSTRESSED | P_SPECIAL);
- soundFlagsMap.put("eɪ", P_VOWEL);
- soundFlagsMap.put("aɪ", P_VOWEL);
- soundFlagsMap.put("aʊ", P_VOWEL);
- soundFlagsMap.put("ɔɪ", P_VOWEL);
- soundFlagsMap.put("oʊ", P_VOWEL);
- soundFlagsMap.put("ɝ", P_VOWEL);
- soundFlagsMap.put("ɚ", P_VOWEL | P_UNSTRESSED | P_SPECIAL);
- soundFlagsMap.put("ɑr", P_VOWEL);
- soundFlagsMap.put("ɛr", P_VOWEL);
- soundFlagsMap.put("ɪr", P_VOWEL);
- soundFlagsMap.put("ɔr", P_VOWEL);
- }
-
- // return
- Pair splitDoubleSound(String s) {
- if (isConsonant(s.substring(0, 1))) {
- return Pair.create(s.substring(0,1), s.substring(1));
- } else {
- return Pair.create(s.substring(s.length()-1), s.substring(0, s.length()-1));
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/aepronunciation/ipa/PracticeContentFragment.java b/app/src/main/java/com/aepronunciation/ipa/PracticeContentFragment.java
old mode 100644
new mode 100755
index d895bee..947de14
--- a/app/src/main/java/com/aepronunciation/ipa/PracticeContentFragment.java
+++ b/app/src/main/java/com/aepronunciation/ipa/PracticeContentFragment.java
@@ -2,7 +2,6 @@
import android.annotation.SuppressLint;
import android.content.Context;
-import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.TransitionDrawable;
@@ -11,10 +10,11 @@
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
-import android.support.v4.app.DialogFragment;
-import android.support.v4.app.Fragment;
-import android.support.v4.content.ContextCompat;
-import android.support.v7.app.AlertDialog;
+import androidx.annotation.NonNull;
+import androidx.fragment.app.DialogFragment;
+import androidx.fragment.app.Fragment;
+import androidx.core.content.ContextCompat;
+import androidx.appcompat.app.AlertDialog;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
@@ -31,12 +31,16 @@
import static com.aepronunciation.ipa.MainActivity.PRACTICE_MODE_IS_SINGLE_KEY;
import static com.aepronunciation.ipa.MainActivity.PREFS_NAME;
-public class PracticeContentFragment extends Fragment implements View.OnClickListener,
- SoundPool.OnLoadCompleteListener, SelectSoundDialogFragment.SelectSoundDialogListener {
+public class PracticeContentFragment extends Fragment
+ implements
+ View.OnClickListener,
+ SoundPool.OnLoadCompleteListener,
+ SelectSoundDialogFragment.SelectSoundDialogListener {
public interface PracticeScreenListener {
void updateKeyboardKeysFor(SoundMode mode);
+
void updateKeyboardKeySelectionFor(ArrayList selectedSounds);
}
@@ -50,8 +54,8 @@ public interface PracticeScreenListener {
private TextView tvPercent;
private TextView tvWrong;
private String currentIpa = "";
- TransitionDrawable rightAnswerTransistion;
- TransitionDrawable wrongAnswerTransistion;
+ TransitionDrawable rightAnswerTransition;
+ TransitionDrawable wrongAnswerTransition;
private static final int SRC_QUALITY = 0;
private static final int PRIORITY = 1;
private SoundPool soundPool = null;
@@ -63,28 +67,30 @@ public interface PracticeScreenListener {
private boolean alreadyMadeWrongAnswerForThisIpa = false;
ArrayList previouslyChosenVowels;
ArrayList previouslyChosenConsonants;
+ private static final int SOUND_POOL_LOAD_SUCCESS = 0;
static final int MINIMUM_POPULATION_SIZE_FOR_WHICH_REPEATS_NOT_ALLOWED = 4;
+
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View layout = inflater.inflate(R.layout.fragment_practice_screen, container, false);
// create objects
- tvInputWindow = (TextView) layout.findViewById(R.id.tvInputWindow);
- llInputWindowBorder = (LinearLayout) layout.findViewById(R.id.llInputWindowBorder);
- tvPracticeMode = (TextView) layout.findViewById(R.id.tvPracticeMode);
- tvRight = (TextView) layout.findViewById(R.id.tvPracticeNumberRight);
- tvPercent = (TextView) layout.findViewById(R.id.tvPracticePercentRight);
- tvWrong = (TextView) layout.findViewById(R.id.tvPracticeNumberWrong);
+ tvInputWindow = layout.findViewById(R.id.tvInputWindow);
+ llInputWindowBorder = layout.findViewById(R.id.llInputWindowBorder);
+ tvPracticeMode = layout.findViewById(R.id.tvPracticeMode);
+ tvRight = layout.findViewById(R.id.tvPracticeNumberRight);
+ tvPercent = layout.findViewById(R.id.tvPracticePercentRight);
+ tvWrong = layout.findViewById(R.id.tvPracticeNumberWrong);
singleSound = new SingleSound();
doubleSound = new DoubleSound();
- RelativeLayout rlPlayButton = (RelativeLayout) layout.findViewById(R.id.playButtonLayout);
- RelativeLayout rlSettingsButton = (RelativeLayout) layout.findViewById(R.id.settingsButtonLayout);
- RelativeLayout rlTellMeButton = (RelativeLayout) layout.findViewById(R.id.tellMeButtonLayout);
- ImageView clearButton = (ImageView) layout.findViewById(R.id.ivClear);
+ RelativeLayout rlPlayButton = layout.findViewById(R.id.playButtonLayout);
+ RelativeLayout rlSettingsButton = layout.findViewById(R.id.settingsButtonLayout);
+ RelativeLayout rlTellMeButton = layout.findViewById(R.id.tellMeButtonLayout);
+ ImageView clearButton = layout.findViewById(R.id.ivClear);
// set listeners
rlPlayButton.setOnClickListener(this);
@@ -93,21 +99,17 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
clearButton.setOnClickListener(this);
// Create the green and red effects for right/wrong answers
- Drawable backgrounds[] = new Drawable[2];
- backgrounds[0] = ContextCompat.getDrawable(getActivity(), R.drawable.input_window_normal);
- backgrounds[1] = ContextCompat.getDrawable(getActivity(), R.drawable.input_window_right);
- rightAnswerTransistion = new TransitionDrawable(backgrounds);
- backgrounds[1] = ContextCompat.getDrawable(getActivity(), R.drawable.input_window_wrong);
- wrongAnswerTransistion = new TransitionDrawable(backgrounds);
+ if (getActivity() != null) {
+ Drawable backgrounds[] = new Drawable[2];
+ backgrounds[0] = ContextCompat.getDrawable(getActivity(), R.drawable.input_window_normal);
+ backgrounds[1] = ContextCompat.getDrawable(getActivity(), R.drawable.input_window_right);
+ rightAnswerTransition = new TransitionDrawable(backgrounds);
+ backgrounds[1] = ContextCompat.getDrawable(getActivity(), R.drawable.input_window_wrong);
+ wrongAnswerTransition = new TransitionDrawable(backgrounds);
+ }
// get saved practice mode
- SharedPreferences settings = getActivity().getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
- boolean isSingle = settings.getBoolean(PRACTICE_MODE_IS_SINGLE_KEY, true);
- if (isSingle) {
- practiceMode = SoundMode.Single;
- } else {
- practiceMode = SoundMode.Double;
- }
+ updatePracticeModeFromSharedPreferences();
// Initialize UI
resetToInitialValues();
@@ -144,6 +146,17 @@ public void onAttach(Context context) {
}
}
+ private void updatePracticeModeFromSharedPreferences() {
+ if (getActivity() == null) return;
+ SharedPreferences settings = getActivity().getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
+ boolean isSingle = settings.getBoolean(PRACTICE_MODE_IS_SINGLE_KEY, true);
+ if (isSingle) {
+ practiceMode = SoundMode.Single;
+ } else {
+ practiceMode = SoundMode.Double;
+ }
+ }
+
public void playClick() {
@@ -158,10 +171,10 @@ public void playClick() {
}
// allow repeated sounds for small population sizes
- if (practiceMode==SoundMode.Single &&
+ if (practiceMode == SoundMode.Single &&
singleSound.getSoundCount() < MINIMUM_POPULATION_SIZE_FOR_WHICH_REPEATS_NOT_ALLOWED) {
break;
- } else if (practiceMode==SoundMode.Double &&
+ } else if (practiceMode == SoundMode.Double &&
doubleSound.getSoundCount() < MINIMUM_POPULATION_SIZE_FOR_WHICH_REPEATS_NOT_ALLOWED) {
break;
}
@@ -171,7 +184,7 @@ public void playClick() {
currentIpa = ipa;
readyForNewSound = false;
alreadyMadeWrongAnswerForThisIpa = false;
- rightAnswerTransistion.resetTransition();
+ rightAnswerTransition.resetTransition();
tvInputWindow.setText("");
}
@@ -189,7 +202,7 @@ public void tellMeClick() {
}
tvInputWindow.setText(currentIpa);
- animateBackground(true);
+ animateBackgroundForCorrectAnswer();
playSound(currentIpa);
readyForNewSound = true;
}
@@ -197,7 +210,7 @@ public void tellMeClick() {
public void clearClick() {
tvInputWindow.setText("");
inputKeyCounter = 0;
- rightAnswerTransistion.resetTransition();
+ rightAnswerTransition.resetTransition();
}
public void onKeyTouched(String keyString) {
@@ -207,9 +220,7 @@ public void onKeyTouched(String keyString) {
}
// don't allow more clicks when green
- if (readyForNewSound) {
- return;
- }
+ if (readyForNewSound) return;
if (practiceMode == SoundMode.Double && inputKeyCounter >= 2) {
tvInputWindow.setText("");
@@ -230,8 +241,8 @@ public void onKeyTouched(String keyString) {
// check if right or not
if (userAnswer.equals(currentIpa)) {
- // if right then animate backgound to green and back
- animateBackground(true);
+ // if right then animate background to green and back
+ animateBackgroundForCorrectAnswer();
// update label
if (!alreadyMadeWrongAnswerForThisIpa) {
@@ -243,7 +254,7 @@ public void onKeyTouched(String keyString) {
} else { // wrong answer
// if wrong then animate to red and back
- animateBackground(false);
+ animateBackgroundForWrongAnswer();
// update label
if (!alreadyMadeWrongAnswerForThisIpa) {
@@ -274,14 +285,10 @@ private void playSound(String ipaSound) {
soundId = doubleSound.getSoundResourceId(ipaSound);
if (soundId == -1) {
-
+ if (getActivity() == null) return;
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(Answer.getErrorMessage(getActivity(), ipaSound));
- builder.setPositiveButton(R.string.error_dialog_ok_button, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- // User clicked OK button
- }
- });
+ builder.setPositiveButton(R.string.error_dialog_ok_button, null);
AlertDialog dialog = builder.create();
dialog.show();
return;
@@ -301,7 +308,7 @@ private void resetToInitialValues() {
updateStatLabels();
inputKeyCounter = 0;
tvInputWindow.setText("");
- rightAnswerTransistion.resetTransition();
+ rightAnswerTransition.resetTransition();
if (practiceMode == SoundMode.Single) {
tvPracticeMode.setText(getString(R.string.practice_mode_single));
} else {
@@ -310,11 +317,11 @@ private void resetToInitialValues() {
}
private void updateStatLabels() {
- tvRight.setText(Integer.toString(numberCorrect));
- tvWrong.setText(Integer.toString(numberWrong));
+ tvRight.setText(String.valueOf(numberCorrect));
+ tvWrong.setText(String.valueOf(numberWrong));
if (numberCorrect + numberWrong > 0) {
- int percent = (int) (100 * numberCorrect/(double) (numberCorrect + numberWrong));
- tvPercent.setText(Integer.toString(percent) + "%");
+ int percent = (int) (100 * numberCorrect / (double) (numberCorrect + numberWrong));
+ tvPercent.setText(String.valueOf(percent) + "%");
} else {
tvPercent.setText("0%");
}
@@ -322,49 +329,46 @@ private void updateStatLabels() {
@SuppressWarnings("deprecation")
@SuppressLint("NewApi")
- private void animateBackground(boolean answerIsCorrect) {
-
- if (answerIsCorrect) {
-
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
+ private void animateBackgroundForCorrectAnswer() {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
+ llInputWindowBorder.setBackground(rightAnswerTransition);
+ } else {
+ llInputWindowBorder.setBackgroundDrawable(rightAnswerTransition);
+ }
+ rightAnswerTransition.startTransition(300);
+ }
- //tvInputWindow.setBackground(rightAnswerTransistion);
- llInputWindowBorder.setBackground(rightAnswerTransistion);
- } else {
- llInputWindowBorder.setBackgroundDrawable(rightAnswerTransistion);
- }
+ @SuppressWarnings("deprecation")
+ @SuppressLint("NewApi")
+ private void animateBackgroundForWrongAnswer() {
- rightAnswerTransistion.startTransition(300);
- // rightAnswerTransistion.reverseTransition(300);
+ final int TRANSITION_START_TIME = 300;
+ final int TRANSITION_REVERSE_TIME = 300;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
+ llInputWindowBorder.setBackground(wrongAnswerTransition);
} else {
+ llInputWindowBorder.setBackgroundDrawable(wrongAnswerTransition);
+ }
- final int TRANSITION_START_TIME = 300;
- final int TRANSITION_REVERSE_TIME = 300;
+ wrongAnswerTransition.startTransition(300);
+ wrongAnswerTransition.reverseTransition(300);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
- llInputWindowBorder.setBackground(wrongAnswerTransistion);
- } else {
- llInputWindowBorder.setBackgroundDrawable(wrongAnswerTransistion);
+ Handler handler = new Handler();
+ handler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ tvInputWindow.setText("");
}
+ }, TRANSITION_START_TIME + TRANSITION_REVERSE_TIME);
- wrongAnswerTransistion.startTransition(300);
- wrongAnswerTransistion.reverseTransition(300);
-
- Handler handler = new Handler();
- handler.postDelayed(new Runnable() {
- @Override
- public void run() {
- tvInputWindow.setText("");
- }
- }, TRANSITION_START_TIME + TRANSITION_REVERSE_TIME);
- }
}
+
@Override
public void onLoadComplete(SoundPool sPool, int sid, int status) {
- if (status != 0) // 0=success
+ if (status != SOUND_POOL_LOAD_SUCCESS)
return;
soundPool.play(sid, 1, 1, PRIORITY, 0, 1.0f);
@@ -434,29 +438,31 @@ public void updateUiForSelectedSounds(SoundMode numberSounds,
allChosenSounds.addAll(chosenConsonants);
if (practiceMode == SoundMode.Double) {
if (chosenVowels.isEmpty()) {
- allChosenSounds.addAll(PhonemeTable.INSTANCE.getAllVowels());
+ allChosenSounds.addAll(Ipa.getAllVowels());
}
if (chosenConsonants.isEmpty()) {
- allChosenSounds.addAll(PhonemeTable.INSTANCE.getAllConsonants());
+ allChosenSounds.addAll(Ipa.getAllConsonants());
}
}
mListener.updateKeyboardKeySelectionFor(allChosenSounds);
// update user preferences and time
- SharedPreferences settings = getActivity().getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
- SharedPreferences.Editor editor = settings.edit();
- StudyTimer timer = StudyTimer.getInstance();
- if (practiceMode == SoundMode.Single) {
- editor.putBoolean(PRACTICE_MODE_IS_SINGLE_KEY, true);
- timer.start(getActivity(), StudyTimer.StudyType.PracticeSingle);
- } else {
- editor.putBoolean(PRACTICE_MODE_IS_SINGLE_KEY, false);
- timer.start(getActivity(), StudyTimer.StudyType.PracticeDouble);
+ if (getActivity() != null) {
+ SharedPreferences settings = getActivity().getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
+ SharedPreferences.Editor editor = settings.edit();
+ StudyTimer timer = StudyTimer.getInstance();
+ if (practiceMode == SoundMode.Single) {
+ editor.putBoolean(PRACTICE_MODE_IS_SINGLE_KEY, true);
+ timer.start(getActivity(), StudyTimer.StudyType.PracticeSingle);
+ } else {
+ editor.putBoolean(PRACTICE_MODE_IS_SINGLE_KEY, false);
+ timer.start(getActivity(), StudyTimer.StudyType.PracticeDouble);
+ }
+ editor.apply();
}
- editor.apply();
// update practice mode label
- if (practiceMode== SoundMode.Single) {
+ if (practiceMode == SoundMode.Single) {
tvPracticeMode.setText(getString(R.string.practice_mode_single));
} else {
tvPracticeMode.setText(getString(R.string.practice_mode_double));
@@ -466,12 +472,12 @@ public void updateUiForSelectedSounds(SoundMode numberSounds,
if (practiceMode == SoundMode.Single) {
singleSound.restrictListTo(chosenConsonants, chosenVowels);
} else { // Double
- if ((chosenVowels.size()==0 && chosenConsonants.size() == 0) ||
- (chosenVowels.size() == PhonemeTable.NUMBER_OF_VOWELS_FOR_DOUBLES &&
- chosenConsonants.size() == PhonemeTable.NUMBER_OF_CONSONANTS_FOR_DOUBLES)) {
+ if ((chosenVowels.size() == 0 && chosenConsonants.size() == 0) ||
+ (chosenVowels.size() == Ipa.NUMBER_OF_VOWELS_FOR_DOUBLES &&
+ chosenConsonants.size() == Ipa.NUMBER_OF_CONSONANTS_FOR_DOUBLES)) {
// all or none selected
doubleSound.includeAllSounds();
- } else if (chosenVowels.size()==0 || chosenConsonants.size() == 0) {
+ } else if (chosenVowels.size() == 0 || chosenConsonants.size() == 0) {
// if none of one kind and a few of the other kind, then do inclusive match (any containing pair)
doubleSound.restrictListToPairsContainingAtLeastOneSoundFrom(chosenConsonants, chosenVowels);
} else {
diff --git a/app/src/main/java/com/aepronunciation/ipa/PracticeFragment.java b/app/src/main/java/com/aepronunciation/ipa/PracticeFragment.java
old mode 100644
new mode 100755
index 83543a6..1fe52d6
--- a/app/src/main/java/com/aepronunciation/ipa/PracticeFragment.java
+++ b/app/src/main/java/com/aepronunciation/ipa/PracticeFragment.java
@@ -1,8 +1,9 @@
package com.aepronunciation.ipa;
import android.os.Bundle;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentTransaction;
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -16,12 +17,12 @@ public class PracticeFragment extends Fragment implements PracticeContentFragmen
KeyboardFragment childKeyboardFragment;
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.tab_fragment_practice, container, false);
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
childPracticeFragment = new PracticeContentFragment();
@@ -34,7 +35,7 @@ public void onViewCreated(View view, Bundle savedInstanceState) {
// required method for PracticeContentFragment.PracticeScreenListener
@Override
public void updateKeyboardKeysFor(SoundMode mode) {
- // find the currect fragment and then perform the appropriate action on it
+ // find the correct fragment and then perform the appropriate action on it
Fragment f = getChildFragmentManager().findFragmentById(R.id.keyboard_frame);
if (f instanceof KeyboardFragment) {
// update display
diff --git a/app/src/main/java/com/aepronunciation/ipa/SelectSoundDialogFragment.java b/app/src/main/java/com/aepronunciation/ipa/SelectSoundDialogFragment.java
old mode 100644
new mode 100755
index 457e93f..35855e8
--- a/app/src/main/java/com/aepronunciation/ipa/SelectSoundDialogFragment.java
+++ b/app/src/main/java/com/aepronunciation/ipa/SelectSoundDialogFragment.java
@@ -6,9 +6,9 @@
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.os.Bundle;
-import android.support.annotation.NonNull;
-import android.support.v4.app.DialogFragment;
-import android.support.v7.app.AlertDialog;
+import androidx.annotation.NonNull;
+import androidx.fragment.app.DialogFragment;
+import androidx.appcompat.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
@@ -45,7 +45,7 @@ void onDialogPositiveClick(
CheckBox cbConsonantsCategory;
CheckBox[] checkBoxesVowels;
CheckBox[] checkBoxesConsonants;
- CheckBox cbShwua;
+ CheckBox cbSchwa;
CheckBox cbUnstressedEr;
CheckBox cbGlottalStop;
CheckBox cbFlapT;
@@ -59,12 +59,12 @@ public Dialog onCreateDialog(Bundle savedInstanceState) {
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.dialog_select_sound, null);
- rbSingle = (RadioButton) view.findViewById(R.id.radio_single);
- rbDouble = (RadioButton) view.findViewById(R.id.radio_double);
- cbShwua = (CheckBox) view.findViewById(R.id.cb_shwua);
- cbUnstressedEr = (CheckBox) view.findViewById(R.id.cb_er_unstressed);
- cbGlottalStop = (CheckBox) view.findViewById(R.id.cb_glottal_stop);
- cbFlapT = (CheckBox) view.findViewById(R.id.cb_flap_t);
+ rbSingle = view.findViewById(R.id.radio_single);
+ rbDouble = view.findViewById(R.id.radio_double);
+ cbSchwa = view.findViewById(R.id.cb_shwua);
+ cbUnstressedEr = view.findViewById(R.id.cb_er_unstressed);
+ cbGlottalStop = view.findViewById(R.id.cb_glottal_stop);
+ cbFlapT = view.findViewById(R.id.cb_flap_t);
// get saved practice mode
SharedPreferences settings = getActivity().getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
@@ -73,7 +73,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) {
rbSingle.setChecked(true);
} else {
rbDouble.setChecked(true);
- cbShwua.setVisibility(View.GONE);
+ cbSchwa.setVisibility(View.GONE);
cbUnstressedEr.setVisibility(View.GONE);
cbGlottalStop.setVisibility(View.GONE);
cbFlapT.setVisibility(View.GONE);
@@ -81,7 +81,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) {
initializeCheckBoxes(view);
- final RadioGroup rg = (RadioGroup) view.findViewById(R.id.select_sounds_radio_group);
+ final RadioGroup rg = view.findViewById(R.id.select_sounds_radio_group);
rg.setOnCheckedChangeListener(radioGroupListener);
// disable the OK button
@@ -144,7 +144,7 @@ public void onResume() {
@Override
public void onClick(View v) {
SoundMode soundType = SoundMode.Double;
- RadioButton single = (RadioButton) alertDialog.findViewById(R.id.radio_single);
+ RadioButton single = alertDialog.findViewById(R.id.radio_single);
if (single != null && single.isChecked()) {
soundType = SoundMode.Single;
}
@@ -175,63 +175,63 @@ private void initializeCheckBoxes(View layout) {
checkBoxesVowels = new CheckBox[]{
- (CheckBox) layout.findViewById(R.id.cb_i),
- (CheckBox) layout.findViewById(R.id.cb_i_short),
- (CheckBox) layout.findViewById(R.id.cb_e_short),
- (CheckBox) layout.findViewById(R.id.cb_ae),
- (CheckBox) layout.findViewById(R.id.cb_a),
- (CheckBox) layout.findViewById(R.id.cb_c_backwards),
- (CheckBox) layout.findViewById(R.id.cb_u_short),
- (CheckBox) layout.findViewById(R.id.cb_u),
- (CheckBox) layout.findViewById(R.id.cb_v_upsidedown),
- cbShwua,
- (CheckBox) layout.findViewById(R.id.cb_ei),
- (CheckBox) layout.findViewById(R.id.cb_ai),
- (CheckBox) layout.findViewById(R.id.cb_au),
- (CheckBox) layout.findViewById(R.id.cb_oi),
- (CheckBox) layout.findViewById(R.id.cb_ou),
- (CheckBox) layout.findViewById(R.id.cb_er_stressed),
+ layout.findViewById(R.id.cb_i),
+ layout.findViewById(R.id.cb_i_short),
+ layout.findViewById(R.id.cb_e_short),
+ layout.findViewById(R.id.cb_ae),
+ layout.findViewById(R.id.cb_a),
+ layout.findViewById(R.id.cb_c_backwards),
+ layout.findViewById(R.id.cb_u_short),
+ layout.findViewById(R.id.cb_u),
+ layout.findViewById(R.id.cb_v_upsidedown),
+ cbSchwa,
+ layout.findViewById(R.id.cb_ei),
+ layout.findViewById(R.id.cb_ai),
+ layout.findViewById(R.id.cb_au),
+ layout.findViewById(R.id.cb_oi),
+ layout.findViewById(R.id.cb_ou),
+ layout.findViewById(R.id.cb_er_stressed),
cbUnstressedEr,
- (CheckBox) layout.findViewById(R.id.cb_ar),
- (CheckBox) layout.findViewById(R.id.cb_er),
- (CheckBox) layout.findViewById(R.id.cb_ir),
- (CheckBox) layout.findViewById(R.id.cb_or)
+ layout.findViewById(R.id.cb_ar),
+ layout.findViewById(R.id.cb_er),
+ layout.findViewById(R.id.cb_ir),
+ layout.findViewById(R.id.cb_or)
};
checkBoxesConsonants = new CheckBox[]{
- (CheckBox) layout.findViewById(R.id.cb_p),
- (CheckBox) layout.findViewById(R.id.cb_b),
- (CheckBox) layout.findViewById(R.id.cb_t),
- (CheckBox) layout.findViewById(R.id.cb_d),
- (CheckBox) layout.findViewById(R.id.cb_k),
- (CheckBox) layout.findViewById(R.id.cb_g),
- (CheckBox) layout.findViewById(R.id.cb_ch),
- (CheckBox) layout.findViewById(R.id.cb_dzh),
- (CheckBox) layout.findViewById(R.id.cb_f),
- (CheckBox) layout.findViewById(R.id.cb_v),
- (CheckBox) layout.findViewById(R.id.cb_th_voiceless),
- (CheckBox) layout.findViewById(R.id.cb_th_voiced),
- (CheckBox) layout.findViewById(R.id.cb_s),
- (CheckBox) layout.findViewById(R.id.cb_z),
- (CheckBox) layout.findViewById(R.id.cb_sh),
- (CheckBox) layout.findViewById(R.id.cb_zh),
- (CheckBox) layout.findViewById(R.id.cb_m),
- (CheckBox) layout.findViewById(R.id.cb_n),
- (CheckBox) layout.findViewById(R.id.cb_ng),
- (CheckBox) layout.findViewById(R.id.cb_l),
- (CheckBox) layout.findViewById(R.id.cb_w),
- (CheckBox) layout.findViewById(R.id.cb_j),
- (CheckBox) layout.findViewById(R.id.cb_h),
- (CheckBox) layout.findViewById(R.id.cb_r),
+ layout.findViewById(R.id.cb_p),
+ layout.findViewById(R.id.cb_b),
+ layout.findViewById(R.id.cb_t),
+ layout.findViewById(R.id.cb_d),
+ layout.findViewById(R.id.cb_k),
+ layout.findViewById(R.id.cb_g),
+ layout.findViewById(R.id.cb_ch),
+ layout.findViewById(R.id.cb_dzh),
+ layout.findViewById(R.id.cb_f),
+ layout.findViewById(R.id.cb_v),
+ layout.findViewById(R.id.cb_th_voiceless),
+ layout.findViewById(R.id.cb_th_voiced),
+ layout.findViewById(R.id.cb_s),
+ layout.findViewById(R.id.cb_z),
+ layout.findViewById(R.id.cb_sh),
+ layout.findViewById(R.id.cb_zh),
+ layout.findViewById(R.id.cb_m),
+ layout.findViewById(R.id.cb_n),
+ layout.findViewById(R.id.cb_ng),
+ layout.findViewById(R.id.cb_l),
+ layout.findViewById(R.id.cb_w),
+ layout.findViewById(R.id.cb_j),
+ layout.findViewById(R.id.cb_h),
+ layout.findViewById(R.id.cb_r),
cbGlottalStop,
cbFlapT
};
- if (checkBoxesConsonants.length != PhonemeTable.NUMBER_OF_CONSONANTS ||
- checkBoxesVowels.length != PhonemeTable.NUMBER_OF_VOWELS) {
+ if (checkBoxesConsonants.length != Ipa.NUMBER_OF_CONSONANTS ||
+ checkBoxesVowels.length != Ipa.NUMBER_OF_VOWELS) {
throw new RuntimeException("update number of checkboxes if vowels or consonant number changes");
}
- cbVowelsCategory = (CheckBox) layout.findViewById(R.id.cbVowels);
- cbConsonantsCategory = (CheckBox) layout.findViewById(R.id.cbConsonants);
+ cbVowelsCategory = layout.findViewById(R.id.cbVowels);
+ cbConsonantsCategory = layout.findViewById(R.id.cbConsonants);
// get saved settings
@@ -321,14 +321,14 @@ public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
switch (checkedId) {
case R.id.radio_single:
// show optional sounds (unstressed er, shwua, glottal stop and flap t)
- cbShwua.setVisibility(View.VISIBLE);
+ cbSchwa.setVisibility(View.VISIBLE);
cbUnstressedEr.setVisibility(View.VISIBLE);
cbGlottalStop.setVisibility(View.VISIBLE);
cbFlapT.setVisibility(View.VISIBLE);
break;
case R.id.radio_double:
// hide optional sounds
- cbShwua.setVisibility(View.GONE);
+ cbSchwa.setVisibility(View.GONE);
cbUnstressedEr.setVisibility(View.GONE);
cbGlottalStop.setVisibility(View.GONE);
cbFlapT.setVisibility(View.GONE);
@@ -379,7 +379,7 @@ public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
private boolean getButtonShouldBeEnabledState() {
- // count the number of checked boxes for conconants and vowels
+ // count the number of checked boxes for consonants and vowels
int vowelsChecked = 0;
for (CheckBox cb : checkBoxesVowels) {
if (cb.isChecked() && cb.getVisibility() == View.VISIBLE) {
diff --git a/app/src/main/java/com/aepronunciation/ipa/SingleSound.java b/app/src/main/java/com/aepronunciation/ipa/SingleSound.java
old mode 100644
new mode 100755
diff --git a/app/src/main/java/com/aepronunciation/ipa/SoundMode.java b/app/src/main/java/com/aepronunciation/ipa/SoundMode.java
old mode 100644
new mode 100755
diff --git a/app/src/main/java/com/aepronunciation/ipa/SpecialSound.java b/app/src/main/java/com/aepronunciation/ipa/SpecialSound.java
deleted file mode 100644
index cda3fbd..0000000
--- a/app/src/main/java/com/aepronunciation/ipa/SpecialSound.java
+++ /dev/null
@@ -1,217 +0,0 @@
-package com.aepronunciation.ipa;
-
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-
-import android.text.TextUtils;
-
-class SpecialSound {
-
- // These are double sounds that are used in the learning tab but not in
- // the practice or tests.
-
- // private class variables
- private LinkedHashMap glottalHashMap;
- private LinkedHashMap flapHashMap;
- private LinkedHashMap shwuaHashMap;
- private LinkedHashMap erUnstressedHashMap;
- private ArrayList doubleSounds;
-
- private static final String FLAP_T = "ɾ";
- private static final String GLOTTAL_STOP = "ʔ";
- private static final String SHWUA = "ə";
- private static final String ER_UNSTRESSED = "ɚ";
-
- // constructor
- SpecialSound() {
- initTreeMap();
- }
-
-
- void loadSoundsFor(String ipa) {
-
- // error checking
- if (TextUtils.isEmpty(ipa)) {
- return;
- }
-
- if (ipa.equals(GLOTTAL_STOP)) {
- doubleSounds = new ArrayList<>(glottalHashMap.keySet());
- } else if (ipa.equals(FLAP_T)) {
- doubleSounds = new ArrayList<>(flapHashMap.keySet());
- } else if (ipa.equals(SHWUA)) {
- doubleSounds = new ArrayList<>(shwuaHashMap.keySet());
- } else if (ipa.equals(ER_UNSTRESSED)) {
- doubleSounds = new ArrayList<>(erUnstressedHashMap.keySet());
- }
-
- }
-
-
- int getSoundResourceId(String doubleSoundIpa) {
-
- // returns null if no value found
- if (glottalHashMap.containsKey(doubleSoundIpa)) {
- return glottalHashMap.get(doubleSoundIpa);
- } else if (flapHashMap.containsKey(doubleSoundIpa)) {
- return flapHashMap.get(doubleSoundIpa);
- } else if (shwuaHashMap.containsKey(doubleSoundIpa)) {
- return shwuaHashMap.get(doubleSoundIpa);
- } else if (erUnstressedHashMap.containsKey(doubleSoundIpa)) {
- return erUnstressedHashMap.get(doubleSoundIpa);
- }else{
- return -1;
- }
-
- }
-
- public ArrayList getSounds() {
- if (doubleSounds == null) {
- doubleSounds = new ArrayList<>();
- }
- return doubleSounds;
- }
-
- // initialize the hashMap when new object created
- private void initTreeMap() {
-
- glottalHashMap = new LinkedHashMap<>();
-
- glottalHashMap.put("iʔ", R.raw.double_i_glottal);
- glottalHashMap.put("ɪʔ", R.raw.double_is_glottal);
- glottalHashMap.put("eɪʔ", R.raw.double_ei_glottal);
- glottalHashMap.put("ɛʔ", R.raw.double_e_glottal);
- glottalHashMap.put("æʔ", R.raw.double_ae_glottal);
- glottalHashMap.put("ɑʔ", R.raw.double_a_glottal);
- glottalHashMap.put("ɔʔ", R.raw.double_c_glottal);
- glottalHashMap.put("oʊʔ", R.raw.double_ou_glottal);
- glottalHashMap.put("ʊʔ", R.raw.double_us_glottal);
- glottalHashMap.put("uʔ", R.raw.double_u_glottal);
- glottalHashMap.put("ʌʔ", R.raw.double_vu_glottal);
- glottalHashMap.put("aɪʔ", R.raw.double_ai_glottal);
- glottalHashMap.put("aʊʔ", R.raw.double_au_glottal);
- glottalHashMap.put("ɔɪʔ", R.raw.double_oi_glottal);
- glottalHashMap.put("ɝʔ", R.raw.double_ers_glottal);
- glottalHashMap.put("ɑrʔ", R.raw.double_ar_glottal);
- glottalHashMap.put("ɛrʔ", R.raw.double_er_glottal);
- glottalHashMap.put("ɪrʔ", R.raw.double_ir_glottal);
- glottalHashMap.put("ɔrʔ", R.raw.double_or_glottal);
-
-
- flapHashMap = new LinkedHashMap<>();
-
- flapHashMap.put("ˈiɾə", R.raw.double_i_flap_shwua);
- flapHashMap.put("ˈɪɾə", R.raw.double_is_flap_shwua);
- flapHashMap.put("ˈeɪɾə", R.raw.double_ei_flap_shwua);
- flapHashMap.put("ˈɛɾə", R.raw.double_e_flap_shwua);
- flapHashMap.put("ˈæɾə", R.raw.double_ae_flap_shwua);
- flapHashMap.put("ˈɑɾə", R.raw.double_a_flap_shwua);
- flapHashMap.put("ˈɔɾə", R.raw.double_c_flap_shwua);
- flapHashMap.put("ˈoʊɾə", R.raw.double_ou_flap_shwua);
- flapHashMap.put("ˈʊɾə", R.raw.double_us_flap_shwua);
- flapHashMap.put("ˈuɾə", R.raw.double_u_flap_shwua);
- flapHashMap.put("ˈʌɾə", R.raw.double_vu_flap_shwua);
- flapHashMap.put("ˈaɪɾə", R.raw.double_ai_flap_shwua);
- flapHashMap.put("ˈaʊɾə", R.raw.double_au_flap_shwua);
- flapHashMap.put("ˈɔɪɾə", R.raw.double_oi_flap_shwua);
- flapHashMap.put("ˈɝɾə", R.raw.double_ers_flap_shwua);
- flapHashMap.put("ˈɑrɾə", R.raw.double_ar_flap_shwua);
- flapHashMap.put("ˈɛrɾə", R.raw.double_er_flap_shwua);
- flapHashMap.put("ˈɪrɾə", R.raw.double_ir_flap_shwua);
- flapHashMap.put("ˈɔrɾə", R.raw.double_or_flap_shwua);
-
- shwuaHashMap = new LinkedHashMap<>();
-
- shwuaHashMap.put("pə", R.raw.double_p_shwua);
- shwuaHashMap.put("tə", R.raw.double_t_shwua);
- shwuaHashMap.put("kə", R.raw.double_k_shwua);
- shwuaHashMap.put("ʧə", R.raw.double_ch_shwua);
- shwuaHashMap.put("fə", R.raw.double_f_shwua);
- shwuaHashMap.put("θə", R.raw.double_th_shwua);
- shwuaHashMap.put("sə", R.raw.double_s_shwua);
- shwuaHashMap.put("ʃə", R.raw.double_sh_shwua);
- shwuaHashMap.put("bə", R.raw.double_b_shwua);
- shwuaHashMap.put("də", R.raw.double_d_shwua);
- shwuaHashMap.put("gə", R.raw.double_g_shwua);
- shwuaHashMap.put("ʤə", R.raw.double_dzh_shwua);
- shwuaHashMap.put("və", R.raw.double_v_shwua);
- shwuaHashMap.put("ðə", R.raw.double_thv_shwua);
- shwuaHashMap.put("zə", R.raw.double_z_shwua);
- shwuaHashMap.put("ʒə", R.raw.double_zh_shwua);
- shwuaHashMap.put("mə", R.raw.double_m_shwua);
- shwuaHashMap.put("nə", R.raw.double_n_shwua);
- shwuaHashMap.put("lə", R.raw.double_l_shwua);
- shwuaHashMap.put("wə", R.raw.double_w_shwua);
- shwuaHashMap.put("jə", R.raw.double_j_shwua);
- shwuaHashMap.put("hə", R.raw.double_h_shwua);
- shwuaHashMap.put("rə", R.raw.double_r_shwua);
- shwuaHashMap.put("əp", R.raw.double_shwua_p);
- shwuaHashMap.put("ət", R.raw.double_shwua_t);
- shwuaHashMap.put("ək", R.raw.double_shwua_k);
- shwuaHashMap.put("əʧ", R.raw.double_shwua_ch);
- shwuaHashMap.put("əf", R.raw.double_shwua_f);
- shwuaHashMap.put("əθ", R.raw.double_shwua_th);
- shwuaHashMap.put("əs", R.raw.double_shwua_s);
- shwuaHashMap.put("əʃ", R.raw.double_shwua_sh);
- shwuaHashMap.put("əb", R.raw.double_shwua_b);
- shwuaHashMap.put("əd", R.raw.double_shwua_d);
- shwuaHashMap.put("əg", R.raw.double_shwua_g);
- shwuaHashMap.put("əʤ", R.raw.double_shwua_dzh);
- shwuaHashMap.put("əv", R.raw.double_shwua_v);
- shwuaHashMap.put("əð", R.raw.double_shwua_thv);
- shwuaHashMap.put("əz", R.raw.double_shwua_z);
- shwuaHashMap.put("əʒ", R.raw.double_shwua_zh);
- shwuaHashMap.put("əm", R.raw.double_shwua_m);
- shwuaHashMap.put("ən", R.raw.double_shwua_n);
- shwuaHashMap.put("əŋ", R.raw.double_shwua_ng);
- shwuaHashMap.put("əl", R.raw.double_shwua_l);
-
- erUnstressedHashMap = new LinkedHashMap<>();
-
- erUnstressedHashMap.put("pɚ", R.raw.double_p_eru);
- erUnstressedHashMap.put("tɚ", R.raw.double_t_eru);
- erUnstressedHashMap.put("kɚ", R.raw.double_k_eru);
- erUnstressedHashMap.put("ʧɚ", R.raw.double_ch_eru);
- erUnstressedHashMap.put("fɚ", R.raw.double_f_eru);
- erUnstressedHashMap.put("θɚ", R.raw.double_th_eru);
- erUnstressedHashMap.put("sɚ", R.raw.double_s_eru);
- erUnstressedHashMap.put("ʃɚ", R.raw.double_sh_eru);
- erUnstressedHashMap.put("bɚ", R.raw.double_b_eru);
- erUnstressedHashMap.put("dɚ", R.raw.double_d_eru);
- erUnstressedHashMap.put("gɚ", R.raw.double_g_eru);
- erUnstressedHashMap.put("ʤɚ", R.raw.double_dzh_eru);
- erUnstressedHashMap.put("vɚ", R.raw.double_v_eru);
- erUnstressedHashMap.put("ðɚ", R.raw.double_thv_eru);
- erUnstressedHashMap.put("zɚ", R.raw.double_z_eru);
- erUnstressedHashMap.put("ʒɚ", R.raw.double_zh_eru);
- erUnstressedHashMap.put("mɚ", R.raw.double_m_eru);
- erUnstressedHashMap.put("nɚ", R.raw.double_n_eru);
- erUnstressedHashMap.put("lɚ", R.raw.double_l_eru);
- erUnstressedHashMap.put("wɚ", R.raw.double_w_eru);
- erUnstressedHashMap.put("jɚ", R.raw.double_j_eru);
- erUnstressedHashMap.put("hɚ", R.raw.double_h_eru);
- erUnstressedHashMap.put("rɚ", R.raw.double_r_eru);
- erUnstressedHashMap.put("ɚp", R.raw.double_eru_p);
- erUnstressedHashMap.put("ɚt", R.raw.double_eru_t);
- erUnstressedHashMap.put("ɚk", R.raw.double_eru_k);
- erUnstressedHashMap.put("ɚʧ", R.raw.double_eru_ch);
- erUnstressedHashMap.put("ɚf", R.raw.double_eru_f);
- erUnstressedHashMap.put("ɚθ", R.raw.double_eru_th);
- erUnstressedHashMap.put("ɚs", R.raw.double_eru_s);
- erUnstressedHashMap.put("ɚʃ", R.raw.double_eru_sh);
- erUnstressedHashMap.put("ɚb", R.raw.double_eru_b);
- erUnstressedHashMap.put("ɚd", R.raw.double_eru_d);
- erUnstressedHashMap.put("ɚg", R.raw.double_eru_g);
- erUnstressedHashMap.put("ɚʤ", R.raw.double_eru_dzh);
- erUnstressedHashMap.put("ɚv", R.raw.double_eru_v);
- erUnstressedHashMap.put("ɚð", R.raw.double_eru_thv);
- erUnstressedHashMap.put("ɚz", R.raw.double_eru_z);
- erUnstressedHashMap.put("ɚʒ", R.raw.double_eru_zh);
- erUnstressedHashMap.put("ɚm", R.raw.double_eru_m);
- erUnstressedHashMap.put("ɚn", R.raw.double_eru_n);
- erUnstressedHashMap.put("ɚŋ", R.raw.double_eru_ng);
- erUnstressedHashMap.put("ɚl", R.raw.double_eru_l);
-
- }
-
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/aepronunciation/ipa/StudyTimer.java b/app/src/main/java/com/aepronunciation/ipa/StudyTimer.java
old mode 100644
new mode 100755
diff --git a/app/src/main/java/com/aepronunciation/ipa/Test.java b/app/src/main/java/com/aepronunciation/ipa/Test.java
old mode 100644
new mode 100755
index b384362..38e3a18
--- a/app/src/main/java/com/aepronunciation/ipa/Test.java
+++ b/app/src/main/java/com/aepronunciation/ipa/Test.java
@@ -11,7 +11,7 @@ public class Test {
private int score;
private String correctAnswers;
private String userAnswers;
- private String wrong;
+ //private String wrong;
// constructor
public Test() {}
@@ -49,10 +49,6 @@ String getUserAnswers() {
return userAnswers;
}
- String getWrong() {
- return wrong;
- }
-
// setters
void setId(long id) {
this.id = id;
@@ -86,8 +82,4 @@ void setUserAnswers(String userAnswers) {
this.userAnswers = userAnswers;
}
- void setWrong(String wrong) {
- this.wrong = wrong;
- }
-
}
\ No newline at end of file
diff --git a/app/src/main/java/com/aepronunciation/ipa/TestActivity.java b/app/src/main/java/com/aepronunciation/ipa/TestActivity.java
old mode 100644
new mode 100755
index 4325897..b779615
--- a/app/src/main/java/com/aepronunciation/ipa/TestActivity.java
+++ b/app/src/main/java/com/aepronunciation/ipa/TestActivity.java
@@ -4,9 +4,9 @@
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
-import android.support.v4.app.FragmentTransaction;
-import android.support.v4.app.Fragment;
-import android.support.v7.app.AppCompatActivity;
+import androidx.fragment.app.FragmentTransaction;
+import androidx.fragment.app.Fragment;
+import androidx.appcompat.app.AppCompatActivity;
import static com.aepronunciation.ipa.MainActivity.NUMBER_OF_QUESTIONS_KEY;
import static com.aepronunciation.ipa.MainActivity.TEST_MODE_KEY;
@@ -52,7 +52,7 @@ protected void onCreate(Bundle savedInstanceState) {
@Override
public void onKeyTouched(String keyString) {
- // find the currect fragment and then perform the appropriate action on it
+ // find the correct fragment and then perform the appropriate action on it
Fragment f = getSupportFragmentManager().findFragmentById(R.id.test_content_frame);
if (f instanceof TestContentFragment) {
// update display
diff --git a/app/src/main/java/com/aepronunciation/ipa/TestContentFragment.java b/app/src/main/java/com/aepronunciation/ipa/TestContentFragment.java
old mode 100644
new mode 100755
index 000615f..503bb86
--- a/app/src/main/java/com/aepronunciation/ipa/TestContentFragment.java
+++ b/app/src/main/java/com/aepronunciation/ipa/TestContentFragment.java
@@ -4,7 +4,8 @@
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
-import android.support.v4.app.Fragment;
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
@@ -32,7 +33,6 @@ public class TestContentFragment extends Fragment implements View.OnClickListene
private DoubleSound doubleSound;
private TextView tvInputWindow;
private TextView tvQuestionNumber;
- private RelativeLayout playButton;
private RelativeLayout nextButton;
private String currentIpa = "";
private static final int SRC_QUALITY = 0;
@@ -43,31 +43,36 @@ public class TestContentFragment extends Fragment implements View.OnClickListene
int questionNumber = 0; // zero based
long startTime;
- // single only keys
-
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View layout = inflater.inflate(R.layout.fragment_test_content, container, false);
// get arguments
- studentName = getArguments().getString(TEST_NAME_KEY);
- totalNumberOfQuestions = getArguments().getInt(NUMBER_OF_QUESTIONS_KEY, 50);
- testMode = SoundMode.fromString(getArguments().getString(TEST_MODE_KEY));
+ if (getArguments() == null) {
+ studentName = getString(R.string.test_default_name);
+ totalNumberOfQuestions = 50;
+ testMode = SoundMode.Single;
+ } else {
+ studentName = getArguments().getString(TEST_NAME_KEY);
+ totalNumberOfQuestions = getArguments().getInt(NUMBER_OF_QUESTIONS_KEY, 50);
+ testMode = SoundMode.fromString(getArguments().getString(TEST_MODE_KEY));
+ }
+
// 2D answer array initialization
answers = new ArrayList<>();
// create objects
- tvQuestionNumber = (TextView) layout.findViewById(R.id.tvQuestionNumber);
- tvInputWindow = (TextView) layout.findViewById(R.id.tvInputWindow);
- playButton = (RelativeLayout) layout.findViewById(R.id.playButtonLayout);
- nextButton = (RelativeLayout) layout.findViewById(R.id.nextButtonLayout);
- ImageView clearButton = (ImageView) layout.findViewById(R.id.ivClear);
+ tvQuestionNumber = layout.findViewById(R.id.tvQuestionNumber);
+ tvInputWindow = layout.findViewById(R.id.tvInputWindow);
+ RelativeLayout playButton = layout.findViewById(R.id.playButtonLayout);
+ nextButton = layout.findViewById(R.id.nextButtonLayout);
+ ImageView clearButton = layout.findViewById(R.id.ivClear);
// set mode label
- TextView tvPracticeMode = (TextView) layout.findViewById(R.id.tvTestMode);
+ TextView tvPracticeMode = layout.findViewById(R.id.tvTestMode);
if (testMode == SoundMode.Single) {
tvPracticeMode.setText(getString(R.string.practice_mode_single));
} else {
@@ -82,10 +87,15 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
nextButton.setOnClickListener(this);
clearButton.setOnClickListener(this);
- // question number
- tvQuestionNumber.setText(Integer.toString(questionNumber + 1));
+ // disable sound effects
+ playButton.setSoundEffectsEnabled(false);
+ nextButton.setSoundEffectsEnabled(false);
+ clearButton.setSoundEffectsEnabled(false);
- // start timing the test (seperate from StudyTimer
+ // get ready to play first sound
+ prepareForNextSound();
+
+ // start timing the test (separate from StudyTimer)
if (savedInstanceState == null) {
startTime = System.nanoTime();
}
@@ -127,25 +137,30 @@ public void onPause() {
public void playClick() {
if (readyForNewSound) {
-
-
- String ipa;
- do {
- if (testMode == SoundMode.Single) {
- ipa = singleSound.getRandomIpa();
- } else {
- ipa = doubleSound.getRandomIpa();
- }
- } while (currentIpa.equals(ipa)); // don't allow repeat questions
-
-
- currentIpa = ipa;
- readyForNewSound = false;
- tvInputWindow.setText("");
+ prepareForNextSound();
+ return;
}
playSound(currentIpa);
+ }
+ private void prepareForNextSound() {
+ currentIpa = getRandomIpa();
+ readyForNewSound = false;
+ tvInputWindow.setText("");
+ tvQuestionNumber.setText(String.valueOf(questionNumber + 1));
+ }
+
+ private String getRandomIpa() {
+ String ipa;
+ do {
+ if (testMode == SoundMode.Single) {
+ ipa = singleSound.getRandomIpa();
+ } else {
+ ipa = doubleSound.getRandomIpa();
+ }
+ } while (currentIpa.equals(ipa)); // don't allow repeat questions
+ return ipa;
}
public void clearClick() {
@@ -156,6 +171,7 @@ public void clearClick() {
}
public void nextClick() {
+ if (getActivity() == null) return;
String userAnswer = tvInputWindow.getText().toString();
@@ -186,10 +202,9 @@ public void nextClick() {
} else {
// Auto play next sound
- playButton.performClick();
- tvQuestionNumber.setText(Integer.toString(questionNumber + 1));
+ prepareForNextSound();
+ playSound(currentIpa);
}
-
}
private void playSound(String ipaSound) {
@@ -226,7 +241,8 @@ public void onKeyTouched(String keyString) {
} else if (testMode == SoundMode.Double && inputKeyCounter <= 2) {
String oldText = tvInputWindow.getText().toString();
- tvInputWindow.setText(oldText + keyString);
+ String newText = oldText + keyString;
+ tvInputWindow.setText(newText);
if (TextUtils.isEmpty(oldText)) return;
}
nextButton.setVisibility(View.VISIBLE);
diff --git a/app/src/main/java/com/aepronunciation/ipa/TestFragment.java b/app/src/main/java/com/aepronunciation/ipa/TestFragment.java
old mode 100644
new mode 100755
index 8ae7320..0957272
--- a/app/src/main/java/com/aepronunciation/ipa/TestFragment.java
+++ b/app/src/main/java/com/aepronunciation/ipa/TestFragment.java
@@ -3,7 +3,8 @@
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
-import android.support.v4.app.Fragment;
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
@@ -32,15 +33,16 @@ public class TestFragment extends Fragment implements View.OnClickListener {
SharedPreferences settings;
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.tab_fragment_test, container, false);
// setup name
+ if (getActivity() == null) return view;
SharedPreferences settings = getActivity().getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
String defaultName = getString(R.string.test_default_name);
String name = settings.getString(TEST_NAME_KEY, defaultName);
- etName = (EditText) view.findViewById(R.id.etName);
+ etName = view.findViewById(R.id.etName);
if (!name.equals(defaultName)) {
etName.setText(name);
etName.clearFocus();
@@ -48,8 +50,8 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
// set up test mode
String testModeString = settings.getString(TEST_MODE_KEY, SoundMode.Single.getPersistentMemoryString());
- rbSingle = (RadioButton) view.findViewById(R.id.rbTestSetupSingle);
- RadioButton rbDouble = (RadioButton) view.findViewById(R.id.rbTestSetupDouble);
+ rbSingle = view.findViewById(R.id.rbTestSetupSingle);
+ RadioButton rbDouble = view.findViewById(R.id.rbTestSetupDouble);
if (testModeString.equals(SoundMode.Double.getPersistentMemoryString())) {
rbDouble.setChecked(true);
} else { // default
@@ -57,7 +59,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
}
// Setup spinner
- spinner = (Spinner) view.findViewById(R.id.spinnerQuestions);
+ spinner = view.findViewById(R.id.spinnerQuestions);
ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(), R.array.listvalues,
android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
@@ -68,7 +70,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
spinner.setSelection(spinnerPosition);
// begin button
- RelativeLayout beginButton = (RelativeLayout) view.findViewById(R.id.beginButtonLayout);
+ RelativeLayout beginButton = view.findViewById(R.id.beginButtonLayout);
beginButton.setOnClickListener(this);
return view;
@@ -95,12 +97,15 @@ public void beginClick() {
}
// Save to preferences
- settings = getActivity().getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
- SharedPreferences.Editor editor = settings.edit();
- editor.putString(NUMBER_OF_QUESTIONS_KEY, questions);
- editor.putString(TEST_MODE_KEY, testModeString);
- editor.putString(TEST_NAME_KEY, name);
- editor.apply();
+ if (getActivity() != null) {
+ settings = getActivity().getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
+ SharedPreferences.Editor editor = settings.edit();
+ editor.putString(NUMBER_OF_QUESTIONS_KEY, questions);
+ editor.putString(TEST_MODE_KEY, testModeString);
+ editor.putString(TEST_NAME_KEY, name);
+ editor.apply();
+ }
+
// Start test activity
Intent intent = new Intent(getActivity(), TestActivity.class);
diff --git a/app/src/main/java/com/aepronunciation/ipa/TestResultsActivity.java b/app/src/main/java/com/aepronunciation/ipa/TestResultsActivity.java
old mode 100644
new mode 100755
index d7f7cdb..a3ed017
--- a/app/src/main/java/com/aepronunciation/ipa/TestResultsActivity.java
+++ b/app/src/main/java/com/aepronunciation/ipa/TestResultsActivity.java
@@ -7,12 +7,15 @@
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
-import android.support.v7.app.AlertDialog;
-import android.support.v7.app.AppCompatActivity;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
-import android.support.v7.widget.Toolbar;
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import androidx.appcompat.widget.Toolbar;
+
import java.text.DateFormat;
+
+import android.util.Pair;
import android.view.MenuItem;
import android.view.View;
import android.widget.RelativeLayout;
@@ -34,21 +37,11 @@
public class TestResultsActivity extends AppCompatActivity implements TestResultsRecyclerViewAdapter.ItemClickListener,
SoundPool.OnLoadCompleteListener {
- // Wrong answers are stored in a string in the following format
- // ipa + # + times wrong + ; substituted ipa + # times substituted + ,
- // example: ɪ#3;i#2;ɛ#1,f#1;θ#1
- // comma (,) separates each main sound that was gotten wrong
- // semicolon (;) separates main sound from substituted sounds
- // first sound is always main, following are all subs
- // number sign (#) separates ipa sounds from their count values
-
- //ListView listView;
- private static String userName;
- private static long timeLength;
- public static SoundMode testMode;
- private static int score;
- private static ArrayList answers;
- private static StringBuilder wrong;
+ private String userName;
+ private long timeLength;
+ private SoundMode testMode;
+ private int score;
+ private ArrayList answers;
private TestResultsRecyclerViewAdapter adapter;
private static final int SRC_QUALITY = 0;
@@ -63,10 +56,10 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_results);
- Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
+ Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// add back arrow to toolbar
- if (getSupportActionBar() != null){
+ if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
@@ -80,14 +73,14 @@ protected void onCreate(Bundle savedInstanceState) {
.getParcelableArrayList("com.aepronunciation.ipa.testAnswers");
// create objects
- TextView tvName = (TextView) findViewById(R.id.tvResultName);
- TextView tvDate = (TextView) findViewById(R.id.tvResultDate);
- TextView tvPercent = (TextView) findViewById(R.id.tvResultPercent);
- TextView tvCorrect = (TextView) findViewById(R.id.tvResultCorrect);
- TextView tvWrong = (TextView) findViewById(R.id.tvResultWrong);
- TextView tvTime = (TextView) findViewById(R.id.tvResultTime);
-
- RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rvTestResults);
+ TextView tvName = findViewById(R.id.tvResultName);
+ TextView tvDate = findViewById(R.id.tvResultDate);
+ TextView tvPercent = findViewById(R.id.tvResultPercent);
+ TextView tvCorrect = findViewById(R.id.tvResultCorrect);
+ TextView tvWrong = findViewById(R.id.tvResultWrong);
+ TextView tvTime = findViewById(R.id.tvResultTime);
+
+ RecyclerView recyclerView = findViewById(R.id.rvTestResults);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.addItemDecoration(new DividerItemDecoration(this, R.drawable.divider));
adapter = new TestResultsRecyclerViewAdapter(this, answers, testMode);
@@ -97,10 +90,9 @@ protected void onCreate(Bundle savedInstanceState) {
singleSound = new SingleSound();
doubleSound = new DoubleSound();
- wrong = new StringBuilder();
// calculate score
- int numberCorrect = calculateScore(answers);
+ int numberCorrect = calculateNumberCorrect(answers);
int totalNumber = answers.size();
if (testMode == SoundMode.Double) {
totalNumber *= 2;
@@ -109,22 +101,14 @@ protected void onCreate(Bundle savedInstanceState) {
// hide practice button if all correct
if (numberCorrect == totalNumber) {
- RelativeLayout practiceButton = (RelativeLayout) findViewById(R.id.rlPracticeDifficultButton);
+ RelativeLayout practiceButton = findViewById(R.id.rlPracticeDifficultButton);
practiceButton.setVisibility(View.INVISIBLE);
}
- // get date/time
- Locale locale = Locale.US; // default
- if (getString(R.string.locale).equals(Locale.CHINESE.toString())) {
- locale = Locale.CHINESE;
- }
- Date date = new Date(System.currentTimeMillis());
- DateFormat df = SimpleDateFormat.getDateTimeInstance(SimpleDateFormat.SHORT, SimpleDateFormat.SHORT, locale);
- String formattedDate = df.format(date);
// update textviews
tvName.setText(userName);
- tvDate.setText(formattedDate);
+ tvDate.setText(getFormattedDate());
tvPercent.setText(String.format(getString(R.string.test_results_percent), score));
tvCorrect.setText(String.format(getString(R.string.test_results_right), numberCorrect));
tvWrong.setText(String.format(getString(R.string.test_results_wrong), totalNumber - numberCorrect));
@@ -137,6 +121,13 @@ protected void onCreate(Bundle savedInstanceState) {
}
+ private String getFormattedDate() {
+ Locale locale = AppLocale.getLocale(this);
+ Date date = new Date(System.currentTimeMillis());
+ DateFormat df = SimpleDateFormat.getDateTimeInstance(SimpleDateFormat.SHORT, SimpleDateFormat.SHORT, locale);
+ return df.format(date);
+ }
+
@Override
protected void onResume() {
@@ -167,76 +158,43 @@ protected void onPause() {
}
- private int calculateScore(ArrayList answers) {
+ private int calculateNumberCorrect(ArrayList answers) {
- Answer tempAnswer;
- String correct;
- String user;
int numCorrect = 0;
- for (int i = 0; i < answers.size(); i++) {
-
- tempAnswer = answers.get(i);
- correct = tempAnswer.getCorrectAnswer();
- user = tempAnswer.getUserAnswer();
-
- if (testMode == SoundMode.Double) {
- String[] parsedCorrect;
- String[] parcedUser;
-
- if (correct.equals(user)) {
- numCorrect += 2;
- } else {
- parsedCorrect = Answer.parseDouble(correct);
- parcedUser = Answer.parseDouble(user);
- if (parsedCorrect == null || parcedUser == null) {
- return 0;
- }
- if (parsedCorrect[0].equals(parcedUser[0])) {
- numCorrect++;
- } else {
- if (wrong.length() > 0) {
- wrong.append(",");
- }
- wrong.append(parsedCorrect[0]).append(";").append(parcedUser[0]);
- }
- if (parsedCorrect[1].equals(parcedUser[1])) {
- numCorrect++;
- } else {
- if (wrong.length() > 0) {
- wrong.append(",");
- }
- wrong.append(parsedCorrect[1]).append(";").append(parcedUser[1]);
- }
- }
- } else { // single
- if (correct.equals(user)) {
- numCorrect++;
- } else {
- if (wrong.length() > 0) {
- wrong.append(",");
- }
- wrong.append(correct).append(";").append(user);
- }
+ for (Answer answer : answers) {
+ String correct = answer.getCorrectAnswer();
+ String user = answer.getUserAnswer();
+
+ // Single
+ if (testMode == SoundMode.Single) {
+ if (correct.equals(user)) numCorrect++;
+ continue;
}
- }
+ // Double
+ Pair parsedCorrect = DoubleSound.parse(correct);
+ Pair parsedUser = DoubleSound.parse(user);
+ if (parsedCorrect == null || parsedUser == null) {
+ continue;
+ }
+ if (parsedCorrect.first.equals(parsedUser.first)) {
+ numCorrect++;
+ }
+ if (parsedCorrect.second.equals(parsedUser.second)) {
+ numCorrect++;
+ }
+ }
return numCorrect;
-
}
private Set findNeedToPracticeSounds(ArrayList answers) {
- String userAnswer;
- String correctAnswer;
- String[] parsedCorrect;
- String[] parcedUser;
-
Set practiceSet = new HashSet<>();
for (Answer answer : answers) {
- userAnswer = answer.getUserAnswer();
- correctAnswer = answer.getCorrectAnswer();
+ String userAnswer = answer.getUserAnswer();
+ String correctAnswer = answer.getCorrectAnswer();
if (testMode == SoundMode.Single) {
@@ -247,16 +205,16 @@ private Set findNeedToPracticeSounds(ArrayList answers) {
} else if (testMode == SoundMode.Double) {
- parsedCorrect = Answer.parseDouble(correctAnswer);
- parcedUser = Answer.parseDouble(userAnswer);
- if (parcedUser == null || parsedCorrect == null) return practiceSet;
- if (!parcedUser[0].equals(parsedCorrect[0])) {
- practiceSet.add(parcedUser[0]);
- practiceSet.add(parsedCorrect[0]);
+ Pair parsedCorrect = DoubleSound.parse(correctAnswer);
+ Pair parsedUser = DoubleSound.parse(userAnswer);
+ if (parsedUser == null || parsedCorrect == null) continue;
+ if (!parsedUser.first.equals(parsedCorrect.first)) {
+ practiceSet.add(parsedUser.first);
+ practiceSet.add(parsedCorrect.first);
}
- if (!parcedUser[1].equals(parsedCorrect[1])) {
- practiceSet.add(parcedUser[1]);
- practiceSet.add(parsedCorrect[1]);
+ if (!parsedUser.second.equals(parsedCorrect.second)) {
+ practiceSet.add(parsedUser.second);
+ practiceSet.add(parsedCorrect.second);
}
}
@@ -276,7 +234,7 @@ public void onItemClick(View view, int position) {
playSound(correctIpa);
if (!correctIpa.equals(userIpa)) {
int delay = 1000;
- if (PhonemeTable.INSTANCE.hasTwoPronunciations(correctIpa)) {
+ if (Ipa.hasTwoPronunciations(correctIpa)) {
delay = 2000; // these sounds need a longer delay
}
// delay playing second sound
@@ -296,27 +254,22 @@ protected Void doInBackground(Void... params) {
StringBuilder correctAnswersConcat = new StringBuilder();
StringBuilder userAnswersConcat = new StringBuilder();
- for (int i = 0; i < answers.size(); i++) {
+ for (Answer answer : answers) {
if (correctAnswersConcat.length() > 0) {
// comma separated values
correctAnswersConcat.append(",");
userAnswersConcat.append(",");
}
- correctAnswersConcat.append(answers.get(i).getCorrectAnswer());
- userAnswersConcat.append(answers.get(i).getUserAnswer());
+ correctAnswersConcat.append(answer.getCorrectAnswer());
+ userAnswersConcat.append(answer.getUserAnswer());
}
- // sort wrong ones by frequency
- String sortedWrong = new Wrong().getIpaSortedByFrequency(wrong
- .toString());
-
try {
-
MyDatabaseAdapter dbAdapter = new MyDatabaseAdapter(
getApplicationContext());
- dbAdapter.addTest(userName, timeLength, testMode.getPersistentMemoryString(), score,
+ dbAdapter.addTest(userName, timeLength, testMode.getPersistentMemoryString(), score,
correctAnswersConcat.toString(),
- userAnswersConcat.toString(), sortedWrong);
+ userAnswersConcat.toString());
} catch (Exception e) {
e.printStackTrace();
}
@@ -333,7 +286,7 @@ private void playSound(String ipaSound) {
// look up audio resource id for that sound
if (testMode == SoundMode.Double) {
soundId = doubleSound.getSoundResourceId(ipaSound);
- } else if (testMode == SoundMode.Single){
+ } else if (testMode == SoundMode.Single) {
soundId = singleSound.getSoundResourceId(ipaSound);
}
@@ -383,10 +336,10 @@ public void practiceDifficultClick(View view) {
ArrayList consonantArray = new ArrayList<>();
Set allSounds = findNeedToPracticeSounds(answers);
for (String sound : allSounds) {
- if (PhonemeTable.INSTANCE.isVowel(sound)) {
- vowelArray.add(sound);
- } else {
+ if (Ipa.isConsonant(sound)) {
consonantArray.add(sound);
+ } else {
+ vowelArray.add(sound);
}
}
diff --git a/app/src/main/java/com/aepronunciation/ipa/TestResultsRecyclerViewAdapter.java b/app/src/main/java/com/aepronunciation/ipa/TestResultsRecyclerViewAdapter.java
old mode 100644
new mode 100755
index c73eec3..50f407e
--- a/app/src/main/java/com/aepronunciation/ipa/TestResultsRecyclerViewAdapter.java
+++ b/app/src/main/java/com/aepronunciation/ipa/TestResultsRecyclerViewAdapter.java
@@ -3,9 +3,11 @@
import android.content.Context;
import android.graphics.Color;
-import android.support.v7.widget.RecyclerView;
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
+import android.util.Pair;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -27,18 +29,19 @@ class TestResultsRecyclerViewAdapter extends RecyclerView.Adapter parsedUser = DoubleSound.parse(userAnswer.toString());
+ if (parsedUser == null) {
holder.tvUser.setText(userAnswer);
return;
}
boolean firstWrong = !answer.getCorrectAnswer().startsWith(
- parcedUser[0]);
+ parsedUser.first);
boolean secondWrong = !answer.getCorrectAnswer().endsWith(
- parcedUser[1]);
+ parsedUser.second);
// change wrong sounds to red
if (firstWrong && secondWrong) {
@@ -64,10 +67,10 @@ public void onBindViewHolder(ViewHolder holder, int position) {
userAnswer.length(), 0);
}else if (firstWrong) {
userAnswer.setSpan(new ForegroundColorSpan(Color.RED), 0,
- parcedUser[0].length(), 0);
+ parsedUser.first.length(), 0);
}else{
userAnswer.setSpan(new ForegroundColorSpan(Color.RED),
- parcedUser[0].length(), userAnswer.length(), 0);
+ parsedUser.first.length(), userAnswer.length(), 0);
}
holder.tvUser.setText(userAnswer);
@@ -99,9 +102,9 @@ class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener
ViewHolder(View itemView) {
super(itemView);
- tvNumber = (IpaTextView) itemView.findViewById(R.id.tvNumberItem);
- tvCorrect = (IpaTextView) itemView.findViewById(R.id.tvCorrectAnswerItem);
- tvUser = (IpaTextView) itemView.findViewById(R.id.tvUserAnswerItem);
+ tvNumber = itemView.findViewById(R.id.tvNumberItem);
+ tvCorrect = itemView.findViewById(R.id.tvCorrectAnswerItem);
+ tvUser = itemView.findViewById(R.id.tvUserAnswerItem);
itemView.setOnClickListener(this);
}
diff --git a/app/src/main/java/com/aepronunciation/ipa/TestsAllRecyclerViewAdapter.java b/app/src/main/java/com/aepronunciation/ipa/TestsAllRecyclerViewAdapter.java
old mode 100644
new mode 100755
index 88f5cf5..386d905
--- a/app/src/main/java/com/aepronunciation/ipa/TestsAllRecyclerViewAdapter.java
+++ b/app/src/main/java/com/aepronunciation/ipa/TestsAllRecyclerViewAdapter.java
@@ -2,7 +2,8 @@
import android.content.Context;
-import android.support.v7.widget.RecyclerView;
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -28,15 +29,16 @@ class TestsAllRecyclerViewAdapter extends RecyclerView.Adapter ipaMap = new HashMap<>();
-
- // parse string and put it in a frequency map
- boolean matchFound = false;
- String[] wrongList = concat.split(",");
- String[] pair = new String[2];
- for (String item : wrongList) {
- pair = item.split(";");
- // item[0] is correct answer (that was gotten wrong)
- // item[1] is substitute (wrong guess)
- for (Map.Entry entry : ipaMap.entrySet()) {
- if (entry.getKey().equals(pair[0])) {
- // increment frequency
- ipaMap.put(entry.getKey(), entry.getValue() + 1);
- matchFound = true;
- break;
- }
- }
- if (matchFound) {
- matchFound = false;
- } else {
- // if no matches then add new ipa to list
- ipaMap.put(pair[0], 1);
- }
- }
-
- // sort by frequency
- Map sorted = sortByValues(ipaMap);
- StringBuilder returnString = new StringBuilder();
- boolean firstLoop = true;
- for (Map.Entry entry : sorted.entrySet()) {
- if (firstLoop) {
- returnString.append(entry.getKey()).append("(").append(entry.getValue()).append(")");
- firstLoop = false;
- } else {
- returnString.append(", ");
- returnString.append(entry.getKey()).append("(").append(entry.getValue()).append(")");
- }
- }
-
- return returnString.toString();
- }
-
- /*
- * Java method to sort Map in Java by value e.g. HashMap or Hashtable throw
- * NullPointerException if Map contains null values It also sort values even
- * if they are duplicates
- */
- private static Map sortByValues(
- Map map) {
- List> entries = new LinkedList>(
- map.entrySet());
-
- Collections.sort(entries, new Comparator>() {
-
- @Override
- public int compare(Entry o1, Entry o2) {
- return o2.getValue().compareTo(o1.getValue());
- }
- });
-
- // LinkedHashMap will keep the keys in the order they are inserted
- // which is currently sorted on natural ordering
- Map sortedMap = new LinkedHashMap();
-
- for (Map.Entry entry : entries) {
- sortedMap.put(entry.getKey(), entry.getValue());
- }
-
- return sortedMap;
- }
-
-}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/button.xml b/app/src/main/res/drawable/button.xml
old mode 100644
new mode 100755
diff --git a/app/src/main/res/drawable/divider.xml b/app/src/main/res/drawable/divider.xml
old mode 100644
new mode 100755
diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000..2408e30
--- /dev/null
+++ b/app/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml
new file mode 100644
index 0000000..6bb0037
--- /dev/null
+++ b/app/src/main/res/drawable/ic_launcher_foreground.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/input_window_normal.xml b/app/src/main/res/drawable/input_window_normal.xml
old mode 100644
new mode 100755
diff --git a/app/src/main/res/drawable/input_window_right.xml b/app/src/main/res/drawable/input_window_right.xml
old mode 100644
new mode 100755
diff --git a/app/src/main/res/drawable/input_window_wrong.xml b/app/src/main/res/drawable/input_window_wrong.xml
old mode 100644
new mode 100755
diff --git a/app/src/main/res/drawable/keys.xml b/app/src/main/res/drawable/keys.xml
old mode 100644
new mode 100755
diff --git a/app/src/main/res/drawable/next_button.xml b/app/src/main/res/drawable/next_button.xml
old mode 100644
new mode 100755
diff --git a/app/src/main/res/drawable/rounded_outline.xml b/app/src/main/res/drawable/rounded_outline.xml
old mode 100644
new mode 100755
diff --git a/app/src/main/res/drawable/test_results_list_bg.xml b/app/src/main/res/drawable/test_results_list_bg.xml
old mode 100644
new mode 100755
diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml
old mode 100644
new mode 100755
index c065555..de04b84
--- a/app/src/main/res/layout/activity_about.xml
+++ b/app/src/main/res/layout/activity_about.xml
@@ -5,7 +5,7 @@
android:layout_height="match_parent"
android:orientation="vertical" >
-
-
-
-
-
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_history_test_details.xml b/app/src/main/res/layout/activity_history_test_details.xml
old mode 100644
new mode 100755
index 41120a2..34ca419
--- a/app/src/main/res/layout/activity_history_test_details.xml
+++ b/app/src/main/res/layout/activity_history_test_details.xml
@@ -5,7 +5,7 @@
android:layout_height="match_parent"
android:orientation="vertical">
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_test.xml b/app/src/main/res/layout/activity_test.xml
old mode 100644
new mode 100755
diff --git a/app/src/main/res/layout/activity_test_results.xml b/app/src/main/res/layout/activity_test_results.xml
old mode 100644
new mode 100755
index 9e203df..21f0b29
--- a/app/src/main/res/layout/activity_test_results.xml
+++ b/app/src/main/res/layout/activity_test_results.xml
@@ -5,7 +5,7 @@
android:layout_height="match_parent"
android:orientation="vertical">
-
@@ -79,7 +80,7 @@
-
-
+
-
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 0000000..bbd3e02
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/ic_chevron_right_black_24dp.png b/app/src/main/res/mipmap-hdpi/ic_chevron_right_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-hdpi/ic_clear_black_24dp.png b/app/src/main/res/mipmap-hdpi/ic_clear_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-hdpi/ic_clear_white_24dp.png b/app/src/main/res/mipmap-hdpi/ic_clear_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-hdpi/ic_content_copy_white_24dp.png b/app/src/main/res/mipmap-hdpi/ic_content_copy_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-hdpi/ic_history_white_24dp.png b/app/src/main/res/mipmap-hdpi/ic_history_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-hdpi/ic_info_outline_white_24dp.png b/app/src/main/res/mipmap-hdpi/ic_info_outline_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-hdpi/ic_keyboard_backspace_black_24dp.png b/app/src/main/res/mipmap-hdpi/ic_keyboard_backspace_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-hdpi/ic_keyboard_return_black_24dp.png b/app/src/main/res/mipmap-hdpi/ic_keyboard_return_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-hdpi/ic_keyboard_white_24dp.png b/app/src/main/res/mipmap-hdpi/ic_keyboard_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
old mode 100644
new mode 100755
index fad1b0c..89ccff1
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 0000000..716b182
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_play_arrow_black_48dp.png b/app/src/main/res/mipmap-hdpi/ic_play_arrow_black_48dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-hdpi/ic_settings_black_24dp.png b/app/src/main/res/mipmap-hdpi/ic_settings_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-hdpi/ic_share_white_24dp.png b/app/src/main/res/mipmap-hdpi/ic_share_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-hdpi/ic_space_bar_black_24dp.png b/app/src/main/res/mipmap-hdpi/ic_space_bar_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-mdpi/ic_chevron_right_black_24dp.png b/app/src/main/res/mipmap-mdpi/ic_chevron_right_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-mdpi/ic_clear_black_24dp.png b/app/src/main/res/mipmap-mdpi/ic_clear_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-mdpi/ic_clear_white_24dp.png b/app/src/main/res/mipmap-mdpi/ic_clear_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-mdpi/ic_content_copy_white_24dp.png b/app/src/main/res/mipmap-mdpi/ic_content_copy_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-mdpi/ic_history_white_24dp.png b/app/src/main/res/mipmap-mdpi/ic_history_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-mdpi/ic_info_outline_white_24dp.png b/app/src/main/res/mipmap-mdpi/ic_info_outline_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-mdpi/ic_keyboard_backspace_black_24dp.png b/app/src/main/res/mipmap-mdpi/ic_keyboard_backspace_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-mdpi/ic_keyboard_return_black_24dp.png b/app/src/main/res/mipmap-mdpi/ic_keyboard_return_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-mdpi/ic_keyboard_white_24dp.png b/app/src/main/res/mipmap-mdpi/ic_keyboard_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
old mode 100644
new mode 100755
index 87c4272..64951f5
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 0000000..ad4e990
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_play_arrow_black_48dp.png b/app/src/main/res/mipmap-mdpi/ic_play_arrow_black_48dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-mdpi/ic_settings_black_24dp.png b/app/src/main/res/mipmap-mdpi/ic_settings_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-mdpi/ic_share_white_24dp.png b/app/src/main/res/mipmap-mdpi/ic_share_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-mdpi/ic_space_bar_black_24dp.png b/app/src/main/res/mipmap-mdpi/ic_space_bar_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xhdpi/ic_chevron_right_black_24dp.png b/app/src/main/res/mipmap-xhdpi/ic_chevron_right_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xhdpi/ic_clear_black_24dp.png b/app/src/main/res/mipmap-xhdpi/ic_clear_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xhdpi/ic_clear_white_24dp.png b/app/src/main/res/mipmap-xhdpi/ic_clear_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xhdpi/ic_content_copy_white_24dp.png b/app/src/main/res/mipmap-xhdpi/ic_content_copy_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xhdpi/ic_history_white_24dp.png b/app/src/main/res/mipmap-xhdpi/ic_history_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xhdpi/ic_info_outline_white_24dp.png b/app/src/main/res/mipmap-xhdpi/ic_info_outline_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xhdpi/ic_keyboard_backspace_black_24dp.png b/app/src/main/res/mipmap-xhdpi/ic_keyboard_backspace_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xhdpi/ic_keyboard_return_black_24dp.png b/app/src/main/res/mipmap-xhdpi/ic_keyboard_return_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xhdpi/ic_keyboard_white_24dp.png b/app/src/main/res/mipmap-xhdpi/ic_keyboard_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
old mode 100644
new mode 100755
index 4ee37ff..aa60f7c
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..5554367
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_play_arrow_black_48dp.png b/app/src/main/res/mipmap-xhdpi/ic_play_arrow_black_48dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xhdpi/ic_settings_black_24dp.png b/app/src/main/res/mipmap-xhdpi/ic_settings_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xhdpi/ic_share_white_24dp.png b/app/src/main/res/mipmap-xhdpi/ic_share_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xhdpi/ic_space_bar_black_24dp.png b/app/src/main/res/mipmap-xhdpi/ic_space_bar_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_chevron_right_black_24dp.png b/app/src/main/res/mipmap-xxhdpi/ic_chevron_right_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_clear_black_24dp.png b/app/src/main/res/mipmap-xxhdpi/ic_clear_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_clear_white_24dp.png b/app/src/main/res/mipmap-xxhdpi/ic_clear_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_content_copy_white_24dp.png b/app/src/main/res/mipmap-xxhdpi/ic_content_copy_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_history_white_24dp.png b/app/src/main/res/mipmap-xxhdpi/ic_history_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_info_outline_white_24dp.png b/app/src/main/res/mipmap-xxhdpi/ic_info_outline_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_keyboard_backspace_black_24dp.png b/app/src/main/res/mipmap-xxhdpi/ic_keyboard_backspace_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_keyboard_return_black_24dp.png b/app/src/main/res/mipmap-xxhdpi/ic_keyboard_return_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_keyboard_white_24dp.png b/app/src/main/res/mipmap-xxhdpi/ic_keyboard_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
old mode 100644
new mode 100755
index a92c97a..084b6de
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..bcbaa3f
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_play_arrow_black_48dp.png b/app/src/main/res/mipmap-xxhdpi/ic_play_arrow_black_48dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_settings_black_24dp.png b/app/src/main/res/mipmap-xxhdpi/ic_settings_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_share_white_24dp.png b/app/src/main/res/mipmap-xxhdpi/ic_share_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_space_bar_black_24dp.png b/app/src/main/res/mipmap-xxhdpi/ic_space_bar_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_chevron_right_black_24dp.png b/app/src/main/res/mipmap-xxxhdpi/ic_chevron_right_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_clear_black_24dp.png b/app/src/main/res/mipmap-xxxhdpi/ic_clear_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_clear_white_24dp.png b/app/src/main/res/mipmap-xxxhdpi/ic_clear_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_content_copy_white_24dp.png b/app/src/main/res/mipmap-xxxhdpi/ic_content_copy_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_history_white_24dp.png b/app/src/main/res/mipmap-xxxhdpi/ic_history_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_info_outline_white_24dp.png b/app/src/main/res/mipmap-xxxhdpi/ic_info_outline_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_keyboard_backspace_black_24dp.png b/app/src/main/res/mipmap-xxxhdpi/ic_keyboard_backspace_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_keyboard_return_black_24dp.png b/app/src/main/res/mipmap-xxxhdpi/ic_keyboard_return_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_keyboard_white_24dp.png b/app/src/main/res/mipmap-xxxhdpi/ic_keyboard_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
old mode 100644
new mode 100755
index 21a6b5e..2ee69bd
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..790f10e
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_play_arrow_black_48dp.png b/app/src/main/res/mipmap-xxxhdpi/ic_play_arrow_black_48dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_settings_black_24dp.png b/app/src/main/res/mipmap-xxxhdpi/ic_settings_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_share_white_24dp.png b/app/src/main/res/mipmap-xxxhdpi/ic_share_white_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_space_bar_black_24dp.png b/app/src/main/res/mipmap-xxxhdpi/ic_space_bar_black_24dp.png
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_a_b.mp3 b/app/src/main/res/raw/double_a_b.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_a_ch.mp3 b/app/src/main/res/raw/double_a_ch.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_a_d.mp3 b/app/src/main/res/raw/double_a_d.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_a_dzh.mp3 b/app/src/main/res/raw/double_a_dzh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_a_f.mp3 b/app/src/main/res/raw/double_a_f.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_a_flap_shwua.mp3 b/app/src/main/res/raw/double_a_flap_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_a_g.mp3 b/app/src/main/res/raw/double_a_g.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_a_glottal.mp3 b/app/src/main/res/raw/double_a_glottal.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_a_k.mp3 b/app/src/main/res/raw/double_a_k.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_a_l.mp3 b/app/src/main/res/raw/double_a_l.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_a_m.mp3 b/app/src/main/res/raw/double_a_m.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_a_n.mp3 b/app/src/main/res/raw/double_a_n.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_a_ng.mp3 b/app/src/main/res/raw/double_a_ng.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_a_p.mp3 b/app/src/main/res/raw/double_a_p.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_a_s.mp3 b/app/src/main/res/raw/double_a_s.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_a_sh.mp3 b/app/src/main/res/raw/double_a_sh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_a_t.mp3 b/app/src/main/res/raw/double_a_t.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_a_th.mp3 b/app/src/main/res/raw/double_a_th.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_a_thv.mp3 b/app/src/main/res/raw/double_a_thv.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_a_v.mp3 b/app/src/main/res/raw/double_a_v.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_a_z.mp3 b/app/src/main/res/raw/double_a_z.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_a_zh.mp3 b/app/src/main/res/raw/double_a_zh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ae_b.mp3 b/app/src/main/res/raw/double_ae_b.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ae_ch.mp3 b/app/src/main/res/raw/double_ae_ch.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ae_d.mp3 b/app/src/main/res/raw/double_ae_d.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ae_dzh.mp3 b/app/src/main/res/raw/double_ae_dzh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ae_f.mp3 b/app/src/main/res/raw/double_ae_f.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ae_flap_shwua.mp3 b/app/src/main/res/raw/double_ae_flap_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ae_g.mp3 b/app/src/main/res/raw/double_ae_g.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ae_glottal.mp3 b/app/src/main/res/raw/double_ae_glottal.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ae_k.mp3 b/app/src/main/res/raw/double_ae_k.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ae_l.mp3 b/app/src/main/res/raw/double_ae_l.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ae_m.mp3 b/app/src/main/res/raw/double_ae_m.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ae_n.mp3 b/app/src/main/res/raw/double_ae_n.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ae_ng.mp3 b/app/src/main/res/raw/double_ae_ng.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ae_p.mp3 b/app/src/main/res/raw/double_ae_p.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ae_s.mp3 b/app/src/main/res/raw/double_ae_s.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ae_sh.mp3 b/app/src/main/res/raw/double_ae_sh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ae_t.mp3 b/app/src/main/res/raw/double_ae_t.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ae_th.mp3 b/app/src/main/res/raw/double_ae_th.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ae_thv.mp3 b/app/src/main/res/raw/double_ae_thv.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ae_v.mp3 b/app/src/main/res/raw/double_ae_v.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ae_z.mp3 b/app/src/main/res/raw/double_ae_z.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ae_zh.mp3 b/app/src/main/res/raw/double_ae_zh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ai_b.mp3 b/app/src/main/res/raw/double_ai_b.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ai_ch.mp3 b/app/src/main/res/raw/double_ai_ch.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ai_d.mp3 b/app/src/main/res/raw/double_ai_d.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ai_dzh.mp3 b/app/src/main/res/raw/double_ai_dzh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ai_f.mp3 b/app/src/main/res/raw/double_ai_f.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ai_flap_shwua.mp3 b/app/src/main/res/raw/double_ai_flap_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ai_g.mp3 b/app/src/main/res/raw/double_ai_g.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ai_glottal.mp3 b/app/src/main/res/raw/double_ai_glottal.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ai_k.mp3 b/app/src/main/res/raw/double_ai_k.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ai_l.mp3 b/app/src/main/res/raw/double_ai_l.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ai_m.mp3 b/app/src/main/res/raw/double_ai_m.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ai_n.mp3 b/app/src/main/res/raw/double_ai_n.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ai_ng.mp3 b/app/src/main/res/raw/double_ai_ng.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ai_p.mp3 b/app/src/main/res/raw/double_ai_p.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ai_s.mp3 b/app/src/main/res/raw/double_ai_s.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ai_sh.mp3 b/app/src/main/res/raw/double_ai_sh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ai_t.mp3 b/app/src/main/res/raw/double_ai_t.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ai_th.mp3 b/app/src/main/res/raw/double_ai_th.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ai_thv.mp3 b/app/src/main/res/raw/double_ai_thv.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ai_v.mp3 b/app/src/main/res/raw/double_ai_v.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ai_z.mp3 b/app/src/main/res/raw/double_ai_z.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ai_zh.mp3 b/app/src/main/res/raw/double_ai_zh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ar_b.mp3 b/app/src/main/res/raw/double_ar_b.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ar_ch.mp3 b/app/src/main/res/raw/double_ar_ch.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ar_d.mp3 b/app/src/main/res/raw/double_ar_d.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ar_dzh.mp3 b/app/src/main/res/raw/double_ar_dzh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ar_f.mp3 b/app/src/main/res/raw/double_ar_f.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ar_flap_shwua.mp3 b/app/src/main/res/raw/double_ar_flap_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ar_g.mp3 b/app/src/main/res/raw/double_ar_g.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ar_glottal.mp3 b/app/src/main/res/raw/double_ar_glottal.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ar_k.mp3 b/app/src/main/res/raw/double_ar_k.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ar_l.mp3 b/app/src/main/res/raw/double_ar_l.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ar_m.mp3 b/app/src/main/res/raw/double_ar_m.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ar_n.mp3 b/app/src/main/res/raw/double_ar_n.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ar_ng.mp3 b/app/src/main/res/raw/double_ar_ng.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ar_p.mp3 b/app/src/main/res/raw/double_ar_p.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ar_s.mp3 b/app/src/main/res/raw/double_ar_s.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ar_sh.mp3 b/app/src/main/res/raw/double_ar_sh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ar_t.mp3 b/app/src/main/res/raw/double_ar_t.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ar_th.mp3 b/app/src/main/res/raw/double_ar_th.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ar_thv.mp3 b/app/src/main/res/raw/double_ar_thv.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ar_v.mp3 b/app/src/main/res/raw/double_ar_v.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ar_z.mp3 b/app/src/main/res/raw/double_ar_z.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ar_zh.mp3 b/app/src/main/res/raw/double_ar_zh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_au_b.mp3 b/app/src/main/res/raw/double_au_b.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_au_ch.mp3 b/app/src/main/res/raw/double_au_ch.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_au_d.mp3 b/app/src/main/res/raw/double_au_d.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_au_dzh.mp3 b/app/src/main/res/raw/double_au_dzh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_au_f.mp3 b/app/src/main/res/raw/double_au_f.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_au_flap_shwua.mp3 b/app/src/main/res/raw/double_au_flap_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_au_g.mp3 b/app/src/main/res/raw/double_au_g.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_au_glottal.mp3 b/app/src/main/res/raw/double_au_glottal.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_au_k.mp3 b/app/src/main/res/raw/double_au_k.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_au_l.mp3 b/app/src/main/res/raw/double_au_l.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_au_m.mp3 b/app/src/main/res/raw/double_au_m.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_au_n.mp3 b/app/src/main/res/raw/double_au_n.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_au_ng.mp3 b/app/src/main/res/raw/double_au_ng.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_au_p.mp3 b/app/src/main/res/raw/double_au_p.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_au_s.mp3 b/app/src/main/res/raw/double_au_s.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_au_sh.mp3 b/app/src/main/res/raw/double_au_sh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_au_t.mp3 b/app/src/main/res/raw/double_au_t.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_au_th.mp3 b/app/src/main/res/raw/double_au_th.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_au_thv.mp3 b/app/src/main/res/raw/double_au_thv.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_au_v.mp3 b/app/src/main/res/raw/double_au_v.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_au_z.mp3 b/app/src/main/res/raw/double_au_z.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_au_zh.mp3 b/app/src/main/res/raw/double_au_zh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_b_a.mp3 b/app/src/main/res/raw/double_b_a.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_b_ae.mp3 b/app/src/main/res/raw/double_b_ae.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_b_ai.mp3 b/app/src/main/res/raw/double_b_ai.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_b_ar.mp3 b/app/src/main/res/raw/double_b_ar.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_b_au.mp3 b/app/src/main/res/raw/double_b_au.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_b_c.mp3 b/app/src/main/res/raw/double_b_c.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_b_e.mp3 b/app/src/main/res/raw/double_b_e.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_b_ei.mp3 b/app/src/main/res/raw/double_b_ei.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_b_er.mp3 b/app/src/main/res/raw/double_b_er.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_b_ers.mp3 b/app/src/main/res/raw/double_b_ers.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_b_eru.mp3 b/app/src/main/res/raw/double_b_eru.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_b_i.mp3 b/app/src/main/res/raw/double_b_i.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_b_ir.mp3 b/app/src/main/res/raw/double_b_ir.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_b_is.mp3 b/app/src/main/res/raw/double_b_is.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_b_oi.mp3 b/app/src/main/res/raw/double_b_oi.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_b_or.mp3 b/app/src/main/res/raw/double_b_or.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_b_ou.mp3 b/app/src/main/res/raw/double_b_ou.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_b_shwua.mp3 b/app/src/main/res/raw/double_b_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_b_u.mp3 b/app/src/main/res/raw/double_b_u.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_b_us.mp3 b/app/src/main/res/raw/double_b_us.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_b_vu.mp3 b/app/src/main/res/raw/double_b_vu.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_c_b.mp3 b/app/src/main/res/raw/double_c_b.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_c_ch.mp3 b/app/src/main/res/raw/double_c_ch.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_c_d.mp3 b/app/src/main/res/raw/double_c_d.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_c_dzh.mp3 b/app/src/main/res/raw/double_c_dzh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_c_f.mp3 b/app/src/main/res/raw/double_c_f.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_c_flap_shwua.mp3 b/app/src/main/res/raw/double_c_flap_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_c_g.mp3 b/app/src/main/res/raw/double_c_g.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_c_glottal.mp3 b/app/src/main/res/raw/double_c_glottal.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_c_k.mp3 b/app/src/main/res/raw/double_c_k.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_c_l.mp3 b/app/src/main/res/raw/double_c_l.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_c_m.mp3 b/app/src/main/res/raw/double_c_m.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_c_n.mp3 b/app/src/main/res/raw/double_c_n.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_c_ng.mp3 b/app/src/main/res/raw/double_c_ng.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_c_p.mp3 b/app/src/main/res/raw/double_c_p.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_c_s.mp3 b/app/src/main/res/raw/double_c_s.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_c_sh.mp3 b/app/src/main/res/raw/double_c_sh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_c_t.mp3 b/app/src/main/res/raw/double_c_t.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_c_th.mp3 b/app/src/main/res/raw/double_c_th.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_c_thv.mp3 b/app/src/main/res/raw/double_c_thv.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_c_v.mp3 b/app/src/main/res/raw/double_c_v.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_c_z.mp3 b/app/src/main/res/raw/double_c_z.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_c_zh.mp3 b/app/src/main/res/raw/double_c_zh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ch_a.mp3 b/app/src/main/res/raw/double_ch_a.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ch_ae.mp3 b/app/src/main/res/raw/double_ch_ae.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ch_ai.mp3 b/app/src/main/res/raw/double_ch_ai.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ch_ar.mp3 b/app/src/main/res/raw/double_ch_ar.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ch_au.mp3 b/app/src/main/res/raw/double_ch_au.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ch_c.mp3 b/app/src/main/res/raw/double_ch_c.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ch_e.mp3 b/app/src/main/res/raw/double_ch_e.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ch_ei.mp3 b/app/src/main/res/raw/double_ch_ei.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ch_er.mp3 b/app/src/main/res/raw/double_ch_er.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ch_ers.mp3 b/app/src/main/res/raw/double_ch_ers.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ch_eru.mp3 b/app/src/main/res/raw/double_ch_eru.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ch_i.mp3 b/app/src/main/res/raw/double_ch_i.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ch_ir.mp3 b/app/src/main/res/raw/double_ch_ir.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ch_is.mp3 b/app/src/main/res/raw/double_ch_is.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ch_oi.mp3 b/app/src/main/res/raw/double_ch_oi.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ch_or.mp3 b/app/src/main/res/raw/double_ch_or.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ch_ou.mp3 b/app/src/main/res/raw/double_ch_ou.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ch_shwua.mp3 b/app/src/main/res/raw/double_ch_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ch_u.mp3 b/app/src/main/res/raw/double_ch_u.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ch_us.mp3 b/app/src/main/res/raw/double_ch_us.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ch_vu.mp3 b/app/src/main/res/raw/double_ch_vu.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_d_a.mp3 b/app/src/main/res/raw/double_d_a.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_d_ae.mp3 b/app/src/main/res/raw/double_d_ae.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_d_ai.mp3 b/app/src/main/res/raw/double_d_ai.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_d_ar.mp3 b/app/src/main/res/raw/double_d_ar.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_d_au.mp3 b/app/src/main/res/raw/double_d_au.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_d_c.mp3 b/app/src/main/res/raw/double_d_c.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_d_e.mp3 b/app/src/main/res/raw/double_d_e.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_d_ei.mp3 b/app/src/main/res/raw/double_d_ei.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_d_er.mp3 b/app/src/main/res/raw/double_d_er.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_d_ers.mp3 b/app/src/main/res/raw/double_d_ers.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_d_eru.mp3 b/app/src/main/res/raw/double_d_eru.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_d_i.mp3 b/app/src/main/res/raw/double_d_i.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_d_ir.mp3 b/app/src/main/res/raw/double_d_ir.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_d_is.mp3 b/app/src/main/res/raw/double_d_is.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_d_oi.mp3 b/app/src/main/res/raw/double_d_oi.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_d_or.mp3 b/app/src/main/res/raw/double_d_or.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_d_ou.mp3 b/app/src/main/res/raw/double_d_ou.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_d_shwua.mp3 b/app/src/main/res/raw/double_d_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_d_u.mp3 b/app/src/main/res/raw/double_d_u.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_d_us.mp3 b/app/src/main/res/raw/double_d_us.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_d_vu.mp3 b/app/src/main/res/raw/double_d_vu.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_dzh_a.mp3 b/app/src/main/res/raw/double_dzh_a.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_dzh_ae.mp3 b/app/src/main/res/raw/double_dzh_ae.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_dzh_ai.mp3 b/app/src/main/res/raw/double_dzh_ai.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_dzh_ar.mp3 b/app/src/main/res/raw/double_dzh_ar.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_dzh_au.mp3 b/app/src/main/res/raw/double_dzh_au.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_dzh_c.mp3 b/app/src/main/res/raw/double_dzh_c.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_dzh_e.mp3 b/app/src/main/res/raw/double_dzh_e.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_dzh_ei.mp3 b/app/src/main/res/raw/double_dzh_ei.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_dzh_er.mp3 b/app/src/main/res/raw/double_dzh_er.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_dzh_ers.mp3 b/app/src/main/res/raw/double_dzh_ers.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_dzh_eru.mp3 b/app/src/main/res/raw/double_dzh_eru.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_dzh_i.mp3 b/app/src/main/res/raw/double_dzh_i.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_dzh_ir.mp3 b/app/src/main/res/raw/double_dzh_ir.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_dzh_is.mp3 b/app/src/main/res/raw/double_dzh_is.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_dzh_oi.mp3 b/app/src/main/res/raw/double_dzh_oi.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_dzh_or.mp3 b/app/src/main/res/raw/double_dzh_or.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_dzh_ou.mp3 b/app/src/main/res/raw/double_dzh_ou.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_dzh_shwua.mp3 b/app/src/main/res/raw/double_dzh_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_dzh_u.mp3 b/app/src/main/res/raw/double_dzh_u.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_dzh_us.mp3 b/app/src/main/res/raw/double_dzh_us.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_dzh_vu.mp3 b/app/src/main/res/raw/double_dzh_vu.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_e_b.mp3 b/app/src/main/res/raw/double_e_b.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_e_ch.mp3 b/app/src/main/res/raw/double_e_ch.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_e_d.mp3 b/app/src/main/res/raw/double_e_d.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_e_dzh.mp3 b/app/src/main/res/raw/double_e_dzh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_e_f.mp3 b/app/src/main/res/raw/double_e_f.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_e_flap_shwua.mp3 b/app/src/main/res/raw/double_e_flap_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_e_g.mp3 b/app/src/main/res/raw/double_e_g.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_e_glottal.mp3 b/app/src/main/res/raw/double_e_glottal.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_e_k.mp3 b/app/src/main/res/raw/double_e_k.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_e_l.mp3 b/app/src/main/res/raw/double_e_l.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_e_m.mp3 b/app/src/main/res/raw/double_e_m.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_e_n.mp3 b/app/src/main/res/raw/double_e_n.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_e_ng.mp3 b/app/src/main/res/raw/double_e_ng.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_e_p.mp3 b/app/src/main/res/raw/double_e_p.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_e_s.mp3 b/app/src/main/res/raw/double_e_s.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_e_sh.mp3 b/app/src/main/res/raw/double_e_sh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_e_t.mp3 b/app/src/main/res/raw/double_e_t.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_e_th.mp3 b/app/src/main/res/raw/double_e_th.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_e_thv.mp3 b/app/src/main/res/raw/double_e_thv.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_e_v.mp3 b/app/src/main/res/raw/double_e_v.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_e_z.mp3 b/app/src/main/res/raw/double_e_z.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_e_zh.mp3 b/app/src/main/res/raw/double_e_zh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ei_b.mp3 b/app/src/main/res/raw/double_ei_b.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ei_ch.mp3 b/app/src/main/res/raw/double_ei_ch.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ei_d.mp3 b/app/src/main/res/raw/double_ei_d.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ei_dzh.mp3 b/app/src/main/res/raw/double_ei_dzh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ei_f.mp3 b/app/src/main/res/raw/double_ei_f.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ei_flap_shwua.mp3 b/app/src/main/res/raw/double_ei_flap_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ei_g.mp3 b/app/src/main/res/raw/double_ei_g.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ei_glottal.mp3 b/app/src/main/res/raw/double_ei_glottal.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ei_k.mp3 b/app/src/main/res/raw/double_ei_k.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ei_l.mp3 b/app/src/main/res/raw/double_ei_l.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ei_m.mp3 b/app/src/main/res/raw/double_ei_m.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ei_n.mp3 b/app/src/main/res/raw/double_ei_n.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ei_ng.mp3 b/app/src/main/res/raw/double_ei_ng.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ei_p.mp3 b/app/src/main/res/raw/double_ei_p.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ei_s.mp3 b/app/src/main/res/raw/double_ei_s.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ei_sh.mp3 b/app/src/main/res/raw/double_ei_sh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ei_t.mp3 b/app/src/main/res/raw/double_ei_t.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ei_th.mp3 b/app/src/main/res/raw/double_ei_th.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ei_thv.mp3 b/app/src/main/res/raw/double_ei_thv.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ei_v.mp3 b/app/src/main/res/raw/double_ei_v.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ei_z.mp3 b/app/src/main/res/raw/double_ei_z.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ei_zh.mp3 b/app/src/main/res/raw/double_ei_zh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_er_b.mp3 b/app/src/main/res/raw/double_er_b.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_er_ch.mp3 b/app/src/main/res/raw/double_er_ch.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_er_d.mp3 b/app/src/main/res/raw/double_er_d.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_er_dzh.mp3 b/app/src/main/res/raw/double_er_dzh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_er_f.mp3 b/app/src/main/res/raw/double_er_f.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_er_flap_shwua.mp3 b/app/src/main/res/raw/double_er_flap_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_er_g.mp3 b/app/src/main/res/raw/double_er_g.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_er_glottal.mp3 b/app/src/main/res/raw/double_er_glottal.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_er_k.mp3 b/app/src/main/res/raw/double_er_k.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_er_l.mp3 b/app/src/main/res/raw/double_er_l.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_er_m.mp3 b/app/src/main/res/raw/double_er_m.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_er_n.mp3 b/app/src/main/res/raw/double_er_n.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_er_ng.mp3 b/app/src/main/res/raw/double_er_ng.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_er_p.mp3 b/app/src/main/res/raw/double_er_p.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_er_s.mp3 b/app/src/main/res/raw/double_er_s.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_er_sh.mp3 b/app/src/main/res/raw/double_er_sh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_er_t.mp3 b/app/src/main/res/raw/double_er_t.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_er_th.mp3 b/app/src/main/res/raw/double_er_th.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_er_thv.mp3 b/app/src/main/res/raw/double_er_thv.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_er_v.mp3 b/app/src/main/res/raw/double_er_v.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_er_z.mp3 b/app/src/main/res/raw/double_er_z.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_er_zh.mp3 b/app/src/main/res/raw/double_er_zh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ers_b.mp3 b/app/src/main/res/raw/double_ers_b.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ers_ch.mp3 b/app/src/main/res/raw/double_ers_ch.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ers_d.mp3 b/app/src/main/res/raw/double_ers_d.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ers_dzh.mp3 b/app/src/main/res/raw/double_ers_dzh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ers_f.mp3 b/app/src/main/res/raw/double_ers_f.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ers_flap_shwua.mp3 b/app/src/main/res/raw/double_ers_flap_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ers_g.mp3 b/app/src/main/res/raw/double_ers_g.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ers_glottal.mp3 b/app/src/main/res/raw/double_ers_glottal.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ers_k.mp3 b/app/src/main/res/raw/double_ers_k.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ers_l.mp3 b/app/src/main/res/raw/double_ers_l.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ers_m.mp3 b/app/src/main/res/raw/double_ers_m.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ers_n.mp3 b/app/src/main/res/raw/double_ers_n.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ers_ng.mp3 b/app/src/main/res/raw/double_ers_ng.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ers_p.mp3 b/app/src/main/res/raw/double_ers_p.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ers_s.mp3 b/app/src/main/res/raw/double_ers_s.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ers_sh.mp3 b/app/src/main/res/raw/double_ers_sh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ers_t.mp3 b/app/src/main/res/raw/double_ers_t.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ers_th.mp3 b/app/src/main/res/raw/double_ers_th.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ers_thv.mp3 b/app/src/main/res/raw/double_ers_thv.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ers_v.mp3 b/app/src/main/res/raw/double_ers_v.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ers_z.mp3 b/app/src/main/res/raw/double_ers_z.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ers_zh.mp3 b/app/src/main/res/raw/double_ers_zh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_eru_b.mp3 b/app/src/main/res/raw/double_eru_b.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_eru_ch.mp3 b/app/src/main/res/raw/double_eru_ch.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_eru_d.mp3 b/app/src/main/res/raw/double_eru_d.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_eru_dzh.mp3 b/app/src/main/res/raw/double_eru_dzh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_eru_f.mp3 b/app/src/main/res/raw/double_eru_f.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_eru_g.mp3 b/app/src/main/res/raw/double_eru_g.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_eru_k.mp3 b/app/src/main/res/raw/double_eru_k.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_eru_l.mp3 b/app/src/main/res/raw/double_eru_l.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_eru_m.mp3 b/app/src/main/res/raw/double_eru_m.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_eru_n.mp3 b/app/src/main/res/raw/double_eru_n.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_eru_ng.mp3 b/app/src/main/res/raw/double_eru_ng.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_eru_p.mp3 b/app/src/main/res/raw/double_eru_p.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_eru_s.mp3 b/app/src/main/res/raw/double_eru_s.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_eru_sh.mp3 b/app/src/main/res/raw/double_eru_sh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_eru_t.mp3 b/app/src/main/res/raw/double_eru_t.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_eru_th.mp3 b/app/src/main/res/raw/double_eru_th.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_eru_thv.mp3 b/app/src/main/res/raw/double_eru_thv.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_eru_v.mp3 b/app/src/main/res/raw/double_eru_v.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_eru_z.mp3 b/app/src/main/res/raw/double_eru_z.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_eru_zh.mp3 b/app/src/main/res/raw/double_eru_zh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_f_a.mp3 b/app/src/main/res/raw/double_f_a.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_f_ae.mp3 b/app/src/main/res/raw/double_f_ae.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_f_ai.mp3 b/app/src/main/res/raw/double_f_ai.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_f_ar.mp3 b/app/src/main/res/raw/double_f_ar.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_f_au.mp3 b/app/src/main/res/raw/double_f_au.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_f_c.mp3 b/app/src/main/res/raw/double_f_c.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_f_e.mp3 b/app/src/main/res/raw/double_f_e.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_f_ei.mp3 b/app/src/main/res/raw/double_f_ei.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_f_er.mp3 b/app/src/main/res/raw/double_f_er.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_f_ers.mp3 b/app/src/main/res/raw/double_f_ers.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_f_eru.mp3 b/app/src/main/res/raw/double_f_eru.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_f_i.mp3 b/app/src/main/res/raw/double_f_i.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_f_ir.mp3 b/app/src/main/res/raw/double_f_ir.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_f_is.mp3 b/app/src/main/res/raw/double_f_is.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_f_oi.mp3 b/app/src/main/res/raw/double_f_oi.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_f_or.mp3 b/app/src/main/res/raw/double_f_or.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_f_ou.mp3 b/app/src/main/res/raw/double_f_ou.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_f_shwua.mp3 b/app/src/main/res/raw/double_f_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_f_u.mp3 b/app/src/main/res/raw/double_f_u.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_f_us.mp3 b/app/src/main/res/raw/double_f_us.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_f_vu.mp3 b/app/src/main/res/raw/double_f_vu.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_g_a.mp3 b/app/src/main/res/raw/double_g_a.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_g_ae.mp3 b/app/src/main/res/raw/double_g_ae.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_g_ai.mp3 b/app/src/main/res/raw/double_g_ai.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_g_ar.mp3 b/app/src/main/res/raw/double_g_ar.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_g_au.mp3 b/app/src/main/res/raw/double_g_au.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_g_c.mp3 b/app/src/main/res/raw/double_g_c.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_g_e.mp3 b/app/src/main/res/raw/double_g_e.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_g_ei.mp3 b/app/src/main/res/raw/double_g_ei.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_g_er.mp3 b/app/src/main/res/raw/double_g_er.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_g_ers.mp3 b/app/src/main/res/raw/double_g_ers.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_g_eru.mp3 b/app/src/main/res/raw/double_g_eru.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_g_i.mp3 b/app/src/main/res/raw/double_g_i.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_g_ir.mp3 b/app/src/main/res/raw/double_g_ir.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_g_is.mp3 b/app/src/main/res/raw/double_g_is.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_g_oi.mp3 b/app/src/main/res/raw/double_g_oi.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_g_or.mp3 b/app/src/main/res/raw/double_g_or.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_g_ou.mp3 b/app/src/main/res/raw/double_g_ou.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_g_shwua.mp3 b/app/src/main/res/raw/double_g_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_g_u.mp3 b/app/src/main/res/raw/double_g_u.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_g_us.mp3 b/app/src/main/res/raw/double_g_us.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_g_vu.mp3 b/app/src/main/res/raw/double_g_vu.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_h_a.mp3 b/app/src/main/res/raw/double_h_a.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_h_ae.mp3 b/app/src/main/res/raw/double_h_ae.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_h_ai.mp3 b/app/src/main/res/raw/double_h_ai.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_h_ar.mp3 b/app/src/main/res/raw/double_h_ar.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_h_au.mp3 b/app/src/main/res/raw/double_h_au.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_h_c.mp3 b/app/src/main/res/raw/double_h_c.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_h_e.mp3 b/app/src/main/res/raw/double_h_e.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_h_ei.mp3 b/app/src/main/res/raw/double_h_ei.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_h_er.mp3 b/app/src/main/res/raw/double_h_er.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_h_ers.mp3 b/app/src/main/res/raw/double_h_ers.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_h_eru.mp3 b/app/src/main/res/raw/double_h_eru.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_h_i.mp3 b/app/src/main/res/raw/double_h_i.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_h_ir.mp3 b/app/src/main/res/raw/double_h_ir.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_h_is.mp3 b/app/src/main/res/raw/double_h_is.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_h_oi.mp3 b/app/src/main/res/raw/double_h_oi.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_h_or.mp3 b/app/src/main/res/raw/double_h_or.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_h_ou.mp3 b/app/src/main/res/raw/double_h_ou.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_h_shwua.mp3 b/app/src/main/res/raw/double_h_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_h_u.mp3 b/app/src/main/res/raw/double_h_u.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_h_us.mp3 b/app/src/main/res/raw/double_h_us.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_h_vu.mp3 b/app/src/main/res/raw/double_h_vu.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_i_b.mp3 b/app/src/main/res/raw/double_i_b.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_i_ch.mp3 b/app/src/main/res/raw/double_i_ch.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_i_d.mp3 b/app/src/main/res/raw/double_i_d.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_i_dzh.mp3 b/app/src/main/res/raw/double_i_dzh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_i_f.mp3 b/app/src/main/res/raw/double_i_f.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_i_flap_shwua.mp3 b/app/src/main/res/raw/double_i_flap_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_i_g.mp3 b/app/src/main/res/raw/double_i_g.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_i_glottal.mp3 b/app/src/main/res/raw/double_i_glottal.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_i_k.mp3 b/app/src/main/res/raw/double_i_k.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_i_l.mp3 b/app/src/main/res/raw/double_i_l.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_i_m.mp3 b/app/src/main/res/raw/double_i_m.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_i_n.mp3 b/app/src/main/res/raw/double_i_n.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_i_ng.mp3 b/app/src/main/res/raw/double_i_ng.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_i_p.mp3 b/app/src/main/res/raw/double_i_p.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_i_s.mp3 b/app/src/main/res/raw/double_i_s.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_i_sh.mp3 b/app/src/main/res/raw/double_i_sh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_i_t.mp3 b/app/src/main/res/raw/double_i_t.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_i_th.mp3 b/app/src/main/res/raw/double_i_th.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_i_thv.mp3 b/app/src/main/res/raw/double_i_thv.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_i_v.mp3 b/app/src/main/res/raw/double_i_v.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_i_z.mp3 b/app/src/main/res/raw/double_i_z.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_i_zh.mp3 b/app/src/main/res/raw/double_i_zh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ir_b.mp3 b/app/src/main/res/raw/double_ir_b.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ir_ch.mp3 b/app/src/main/res/raw/double_ir_ch.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ir_d.mp3 b/app/src/main/res/raw/double_ir_d.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ir_dzh.mp3 b/app/src/main/res/raw/double_ir_dzh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ir_f.mp3 b/app/src/main/res/raw/double_ir_f.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ir_flap_shwua.mp3 b/app/src/main/res/raw/double_ir_flap_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ir_g.mp3 b/app/src/main/res/raw/double_ir_g.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ir_glottal.mp3 b/app/src/main/res/raw/double_ir_glottal.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ir_k.mp3 b/app/src/main/res/raw/double_ir_k.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ir_l.mp3 b/app/src/main/res/raw/double_ir_l.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ir_m.mp3 b/app/src/main/res/raw/double_ir_m.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ir_n.mp3 b/app/src/main/res/raw/double_ir_n.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ir_ng.mp3 b/app/src/main/res/raw/double_ir_ng.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ir_p.mp3 b/app/src/main/res/raw/double_ir_p.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ir_s.mp3 b/app/src/main/res/raw/double_ir_s.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ir_sh.mp3 b/app/src/main/res/raw/double_ir_sh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ir_t.mp3 b/app/src/main/res/raw/double_ir_t.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ir_th.mp3 b/app/src/main/res/raw/double_ir_th.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ir_thv.mp3 b/app/src/main/res/raw/double_ir_thv.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ir_v.mp3 b/app/src/main/res/raw/double_ir_v.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ir_z.mp3 b/app/src/main/res/raw/double_ir_z.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ir_zh.mp3 b/app/src/main/res/raw/double_ir_zh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_is_b.mp3 b/app/src/main/res/raw/double_is_b.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_is_ch.mp3 b/app/src/main/res/raw/double_is_ch.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_is_d.mp3 b/app/src/main/res/raw/double_is_d.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_is_dzh.mp3 b/app/src/main/res/raw/double_is_dzh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_is_f.mp3 b/app/src/main/res/raw/double_is_f.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_is_flap_shwua.mp3 b/app/src/main/res/raw/double_is_flap_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_is_g.mp3 b/app/src/main/res/raw/double_is_g.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_is_glottal.mp3 b/app/src/main/res/raw/double_is_glottal.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_is_k.mp3 b/app/src/main/res/raw/double_is_k.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_is_l.mp3 b/app/src/main/res/raw/double_is_l.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_is_m.mp3 b/app/src/main/res/raw/double_is_m.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_is_n.mp3 b/app/src/main/res/raw/double_is_n.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_is_ng.mp3 b/app/src/main/res/raw/double_is_ng.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_is_p.mp3 b/app/src/main/res/raw/double_is_p.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_is_s.mp3 b/app/src/main/res/raw/double_is_s.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_is_sh.mp3 b/app/src/main/res/raw/double_is_sh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_is_t.mp3 b/app/src/main/res/raw/double_is_t.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_is_th.mp3 b/app/src/main/res/raw/double_is_th.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_is_thv.mp3 b/app/src/main/res/raw/double_is_thv.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_is_v.mp3 b/app/src/main/res/raw/double_is_v.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_is_z.mp3 b/app/src/main/res/raw/double_is_z.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_is_zh.mp3 b/app/src/main/res/raw/double_is_zh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_j_a.mp3 b/app/src/main/res/raw/double_j_a.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_j_ae.mp3 b/app/src/main/res/raw/double_j_ae.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_j_ai.mp3 b/app/src/main/res/raw/double_j_ai.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_j_ar.mp3 b/app/src/main/res/raw/double_j_ar.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_j_au.mp3 b/app/src/main/res/raw/double_j_au.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_j_c.mp3 b/app/src/main/res/raw/double_j_c.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_j_e.mp3 b/app/src/main/res/raw/double_j_e.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_j_ei.mp3 b/app/src/main/res/raw/double_j_ei.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_j_er.mp3 b/app/src/main/res/raw/double_j_er.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_j_ers.mp3 b/app/src/main/res/raw/double_j_ers.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_j_eru.mp3 b/app/src/main/res/raw/double_j_eru.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_j_i.mp3 b/app/src/main/res/raw/double_j_i.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_j_ir.mp3 b/app/src/main/res/raw/double_j_ir.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_j_is.mp3 b/app/src/main/res/raw/double_j_is.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_j_oi.mp3 b/app/src/main/res/raw/double_j_oi.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_j_or.mp3 b/app/src/main/res/raw/double_j_or.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_j_ou.mp3 b/app/src/main/res/raw/double_j_ou.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_j_shwua.mp3 b/app/src/main/res/raw/double_j_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_j_u.mp3 b/app/src/main/res/raw/double_j_u.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_j_us.mp3 b/app/src/main/res/raw/double_j_us.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_j_vu.mp3 b/app/src/main/res/raw/double_j_vu.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_k_a.mp3 b/app/src/main/res/raw/double_k_a.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_k_ae.mp3 b/app/src/main/res/raw/double_k_ae.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_k_ai.mp3 b/app/src/main/res/raw/double_k_ai.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_k_ar.mp3 b/app/src/main/res/raw/double_k_ar.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_k_au.mp3 b/app/src/main/res/raw/double_k_au.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_k_c.mp3 b/app/src/main/res/raw/double_k_c.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_k_e.mp3 b/app/src/main/res/raw/double_k_e.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_k_ei.mp3 b/app/src/main/res/raw/double_k_ei.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_k_er.mp3 b/app/src/main/res/raw/double_k_er.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_k_ers.mp3 b/app/src/main/res/raw/double_k_ers.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_k_eru.mp3 b/app/src/main/res/raw/double_k_eru.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_k_i.mp3 b/app/src/main/res/raw/double_k_i.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_k_ir.mp3 b/app/src/main/res/raw/double_k_ir.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_k_is.mp3 b/app/src/main/res/raw/double_k_is.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_k_oi.mp3 b/app/src/main/res/raw/double_k_oi.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_k_or.mp3 b/app/src/main/res/raw/double_k_or.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_k_ou.mp3 b/app/src/main/res/raw/double_k_ou.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_k_shwua.mp3 b/app/src/main/res/raw/double_k_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_k_u.mp3 b/app/src/main/res/raw/double_k_u.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_k_us.mp3 b/app/src/main/res/raw/double_k_us.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_k_vu.mp3 b/app/src/main/res/raw/double_k_vu.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_l_a.mp3 b/app/src/main/res/raw/double_l_a.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_l_ae.mp3 b/app/src/main/res/raw/double_l_ae.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_l_ai.mp3 b/app/src/main/res/raw/double_l_ai.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_l_ar.mp3 b/app/src/main/res/raw/double_l_ar.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_l_au.mp3 b/app/src/main/res/raw/double_l_au.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_l_c.mp3 b/app/src/main/res/raw/double_l_c.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_l_e.mp3 b/app/src/main/res/raw/double_l_e.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_l_ei.mp3 b/app/src/main/res/raw/double_l_ei.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_l_er.mp3 b/app/src/main/res/raw/double_l_er.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_l_ers.mp3 b/app/src/main/res/raw/double_l_ers.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_l_eru.mp3 b/app/src/main/res/raw/double_l_eru.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_l_i.mp3 b/app/src/main/res/raw/double_l_i.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_l_ir.mp3 b/app/src/main/res/raw/double_l_ir.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_l_is.mp3 b/app/src/main/res/raw/double_l_is.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_l_oi.mp3 b/app/src/main/res/raw/double_l_oi.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_l_or.mp3 b/app/src/main/res/raw/double_l_or.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_l_ou.mp3 b/app/src/main/res/raw/double_l_ou.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_l_shwua.mp3 b/app/src/main/res/raw/double_l_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_l_u.mp3 b/app/src/main/res/raw/double_l_u.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_l_us.mp3 b/app/src/main/res/raw/double_l_us.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_l_vu.mp3 b/app/src/main/res/raw/double_l_vu.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_m_a.mp3 b/app/src/main/res/raw/double_m_a.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_m_ae.mp3 b/app/src/main/res/raw/double_m_ae.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_m_ai.mp3 b/app/src/main/res/raw/double_m_ai.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_m_ar.mp3 b/app/src/main/res/raw/double_m_ar.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_m_au.mp3 b/app/src/main/res/raw/double_m_au.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_m_c.mp3 b/app/src/main/res/raw/double_m_c.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_m_e.mp3 b/app/src/main/res/raw/double_m_e.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_m_ei.mp3 b/app/src/main/res/raw/double_m_ei.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_m_er.mp3 b/app/src/main/res/raw/double_m_er.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_m_ers.mp3 b/app/src/main/res/raw/double_m_ers.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_m_eru.mp3 b/app/src/main/res/raw/double_m_eru.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_m_i.mp3 b/app/src/main/res/raw/double_m_i.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_m_ir.mp3 b/app/src/main/res/raw/double_m_ir.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_m_is.mp3 b/app/src/main/res/raw/double_m_is.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_m_oi.mp3 b/app/src/main/res/raw/double_m_oi.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_m_or.mp3 b/app/src/main/res/raw/double_m_or.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_m_ou.mp3 b/app/src/main/res/raw/double_m_ou.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_m_shwua.mp3 b/app/src/main/res/raw/double_m_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_m_u.mp3 b/app/src/main/res/raw/double_m_u.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_m_us.mp3 b/app/src/main/res/raw/double_m_us.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_m_vu.mp3 b/app/src/main/res/raw/double_m_vu.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_n_a.mp3 b/app/src/main/res/raw/double_n_a.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_n_ae.mp3 b/app/src/main/res/raw/double_n_ae.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_n_ai.mp3 b/app/src/main/res/raw/double_n_ai.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_n_ar.mp3 b/app/src/main/res/raw/double_n_ar.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_n_au.mp3 b/app/src/main/res/raw/double_n_au.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_n_c.mp3 b/app/src/main/res/raw/double_n_c.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_n_e.mp3 b/app/src/main/res/raw/double_n_e.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_n_ei.mp3 b/app/src/main/res/raw/double_n_ei.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_n_er.mp3 b/app/src/main/res/raw/double_n_er.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_n_ers.mp3 b/app/src/main/res/raw/double_n_ers.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_n_eru.mp3 b/app/src/main/res/raw/double_n_eru.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_n_i.mp3 b/app/src/main/res/raw/double_n_i.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_n_ir.mp3 b/app/src/main/res/raw/double_n_ir.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_n_is.mp3 b/app/src/main/res/raw/double_n_is.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_n_oi.mp3 b/app/src/main/res/raw/double_n_oi.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_n_or.mp3 b/app/src/main/res/raw/double_n_or.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_n_ou.mp3 b/app/src/main/res/raw/double_n_ou.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_n_shwua.mp3 b/app/src/main/res/raw/double_n_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_n_u.mp3 b/app/src/main/res/raw/double_n_u.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_n_us.mp3 b/app/src/main/res/raw/double_n_us.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_n_vu.mp3 b/app/src/main/res/raw/double_n_vu.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_oi_b.mp3 b/app/src/main/res/raw/double_oi_b.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_oi_ch.mp3 b/app/src/main/res/raw/double_oi_ch.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_oi_d.mp3 b/app/src/main/res/raw/double_oi_d.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_oi_dzh.mp3 b/app/src/main/res/raw/double_oi_dzh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_oi_f.mp3 b/app/src/main/res/raw/double_oi_f.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_oi_flap_shwua.mp3 b/app/src/main/res/raw/double_oi_flap_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_oi_g.mp3 b/app/src/main/res/raw/double_oi_g.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_oi_glottal.mp3 b/app/src/main/res/raw/double_oi_glottal.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_oi_k.mp3 b/app/src/main/res/raw/double_oi_k.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_oi_l.mp3 b/app/src/main/res/raw/double_oi_l.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_oi_m.mp3 b/app/src/main/res/raw/double_oi_m.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_oi_n.mp3 b/app/src/main/res/raw/double_oi_n.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_oi_ng.mp3 b/app/src/main/res/raw/double_oi_ng.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_oi_p.mp3 b/app/src/main/res/raw/double_oi_p.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_oi_s.mp3 b/app/src/main/res/raw/double_oi_s.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_oi_sh.mp3 b/app/src/main/res/raw/double_oi_sh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_oi_t.mp3 b/app/src/main/res/raw/double_oi_t.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_oi_th.mp3 b/app/src/main/res/raw/double_oi_th.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_oi_thv.mp3 b/app/src/main/res/raw/double_oi_thv.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_oi_v.mp3 b/app/src/main/res/raw/double_oi_v.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_oi_z.mp3 b/app/src/main/res/raw/double_oi_z.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_oi_zh.mp3 b/app/src/main/res/raw/double_oi_zh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_or_b.mp3 b/app/src/main/res/raw/double_or_b.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_or_ch.mp3 b/app/src/main/res/raw/double_or_ch.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_or_d.mp3 b/app/src/main/res/raw/double_or_d.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_or_dzh.mp3 b/app/src/main/res/raw/double_or_dzh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_or_f.mp3 b/app/src/main/res/raw/double_or_f.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_or_flap_shwua.mp3 b/app/src/main/res/raw/double_or_flap_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_or_g.mp3 b/app/src/main/res/raw/double_or_g.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_or_glottal.mp3 b/app/src/main/res/raw/double_or_glottal.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_or_k.mp3 b/app/src/main/res/raw/double_or_k.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_or_l.mp3 b/app/src/main/res/raw/double_or_l.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_or_m.mp3 b/app/src/main/res/raw/double_or_m.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_or_n.mp3 b/app/src/main/res/raw/double_or_n.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_or_ng.mp3 b/app/src/main/res/raw/double_or_ng.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_or_p.mp3 b/app/src/main/res/raw/double_or_p.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_or_s.mp3 b/app/src/main/res/raw/double_or_s.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_or_sh.mp3 b/app/src/main/res/raw/double_or_sh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_or_t.mp3 b/app/src/main/res/raw/double_or_t.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_or_th.mp3 b/app/src/main/res/raw/double_or_th.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_or_thv.mp3 b/app/src/main/res/raw/double_or_thv.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_or_v.mp3 b/app/src/main/res/raw/double_or_v.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_or_z.mp3 b/app/src/main/res/raw/double_or_z.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_or_zh.mp3 b/app/src/main/res/raw/double_or_zh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ou_b.mp3 b/app/src/main/res/raw/double_ou_b.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ou_ch.mp3 b/app/src/main/res/raw/double_ou_ch.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ou_d.mp3 b/app/src/main/res/raw/double_ou_d.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ou_dzh.mp3 b/app/src/main/res/raw/double_ou_dzh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ou_f.mp3 b/app/src/main/res/raw/double_ou_f.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ou_flap_shwua.mp3 b/app/src/main/res/raw/double_ou_flap_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ou_g.mp3 b/app/src/main/res/raw/double_ou_g.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ou_glottal.mp3 b/app/src/main/res/raw/double_ou_glottal.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ou_k.mp3 b/app/src/main/res/raw/double_ou_k.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ou_l.mp3 b/app/src/main/res/raw/double_ou_l.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ou_m.mp3 b/app/src/main/res/raw/double_ou_m.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ou_n.mp3 b/app/src/main/res/raw/double_ou_n.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ou_ng.mp3 b/app/src/main/res/raw/double_ou_ng.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ou_p.mp3 b/app/src/main/res/raw/double_ou_p.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ou_s.mp3 b/app/src/main/res/raw/double_ou_s.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ou_sh.mp3 b/app/src/main/res/raw/double_ou_sh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ou_t.mp3 b/app/src/main/res/raw/double_ou_t.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ou_th.mp3 b/app/src/main/res/raw/double_ou_th.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ou_thv.mp3 b/app/src/main/res/raw/double_ou_thv.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ou_v.mp3 b/app/src/main/res/raw/double_ou_v.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ou_z.mp3 b/app/src/main/res/raw/double_ou_z.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_ou_zh.mp3 b/app/src/main/res/raw/double_ou_zh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_p_a.mp3 b/app/src/main/res/raw/double_p_a.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_p_ae.mp3 b/app/src/main/res/raw/double_p_ae.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_p_ai.mp3 b/app/src/main/res/raw/double_p_ai.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_p_ar.mp3 b/app/src/main/res/raw/double_p_ar.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_p_au.mp3 b/app/src/main/res/raw/double_p_au.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_p_c.mp3 b/app/src/main/res/raw/double_p_c.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_p_e.mp3 b/app/src/main/res/raw/double_p_e.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_p_ei.mp3 b/app/src/main/res/raw/double_p_ei.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_p_er.mp3 b/app/src/main/res/raw/double_p_er.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_p_ers.mp3 b/app/src/main/res/raw/double_p_ers.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_p_eru.mp3 b/app/src/main/res/raw/double_p_eru.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_p_i.mp3 b/app/src/main/res/raw/double_p_i.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_p_ir.mp3 b/app/src/main/res/raw/double_p_ir.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_p_is.mp3 b/app/src/main/res/raw/double_p_is.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_p_oi.mp3 b/app/src/main/res/raw/double_p_oi.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_p_or.mp3 b/app/src/main/res/raw/double_p_or.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_p_ou.mp3 b/app/src/main/res/raw/double_p_ou.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_p_shwua.mp3 b/app/src/main/res/raw/double_p_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_p_u.mp3 b/app/src/main/res/raw/double_p_u.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_p_us.mp3 b/app/src/main/res/raw/double_p_us.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_p_vu.mp3 b/app/src/main/res/raw/double_p_vu.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_r_a.mp3 b/app/src/main/res/raw/double_r_a.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_r_ae.mp3 b/app/src/main/res/raw/double_r_ae.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_r_ai.mp3 b/app/src/main/res/raw/double_r_ai.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_r_ar.mp3 b/app/src/main/res/raw/double_r_ar.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_r_au.mp3 b/app/src/main/res/raw/double_r_au.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_r_c.mp3 b/app/src/main/res/raw/double_r_c.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_r_e.mp3 b/app/src/main/res/raw/double_r_e.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_r_ei.mp3 b/app/src/main/res/raw/double_r_ei.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_r_er.mp3 b/app/src/main/res/raw/double_r_er.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_r_ers.mp3 b/app/src/main/res/raw/double_r_ers.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_r_eru.mp3 b/app/src/main/res/raw/double_r_eru.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_r_i.mp3 b/app/src/main/res/raw/double_r_i.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_r_ir.mp3 b/app/src/main/res/raw/double_r_ir.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_r_is.mp3 b/app/src/main/res/raw/double_r_is.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_r_oi.mp3 b/app/src/main/res/raw/double_r_oi.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_r_or.mp3 b/app/src/main/res/raw/double_r_or.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_r_ou.mp3 b/app/src/main/res/raw/double_r_ou.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_r_shwua.mp3 b/app/src/main/res/raw/double_r_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_r_u.mp3 b/app/src/main/res/raw/double_r_u.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_r_us.mp3 b/app/src/main/res/raw/double_r_us.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_r_vu.mp3 b/app/src/main/res/raw/double_r_vu.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_s_a.mp3 b/app/src/main/res/raw/double_s_a.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_s_ae.mp3 b/app/src/main/res/raw/double_s_ae.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_s_ai.mp3 b/app/src/main/res/raw/double_s_ai.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_s_ar.mp3 b/app/src/main/res/raw/double_s_ar.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_s_au.mp3 b/app/src/main/res/raw/double_s_au.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_s_c.mp3 b/app/src/main/res/raw/double_s_c.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_s_e.mp3 b/app/src/main/res/raw/double_s_e.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_s_ei.mp3 b/app/src/main/res/raw/double_s_ei.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_s_er.mp3 b/app/src/main/res/raw/double_s_er.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_s_ers.mp3 b/app/src/main/res/raw/double_s_ers.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_s_eru.mp3 b/app/src/main/res/raw/double_s_eru.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_s_i.mp3 b/app/src/main/res/raw/double_s_i.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_s_ir.mp3 b/app/src/main/res/raw/double_s_ir.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_s_is.mp3 b/app/src/main/res/raw/double_s_is.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_s_oi.mp3 b/app/src/main/res/raw/double_s_oi.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_s_or.mp3 b/app/src/main/res/raw/double_s_or.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_s_ou.mp3 b/app/src/main/res/raw/double_s_ou.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_s_shwua.mp3 b/app/src/main/res/raw/double_s_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_s_u.mp3 b/app/src/main/res/raw/double_s_u.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_s_us.mp3 b/app/src/main/res/raw/double_s_us.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_s_vu.mp3 b/app/src/main/res/raw/double_s_vu.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_sh_a.mp3 b/app/src/main/res/raw/double_sh_a.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_sh_ae.mp3 b/app/src/main/res/raw/double_sh_ae.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_sh_ai.mp3 b/app/src/main/res/raw/double_sh_ai.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_sh_ar.mp3 b/app/src/main/res/raw/double_sh_ar.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_sh_au.mp3 b/app/src/main/res/raw/double_sh_au.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_sh_c.mp3 b/app/src/main/res/raw/double_sh_c.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_sh_e.mp3 b/app/src/main/res/raw/double_sh_e.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_sh_ei.mp3 b/app/src/main/res/raw/double_sh_ei.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_sh_er.mp3 b/app/src/main/res/raw/double_sh_er.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_sh_ers.mp3 b/app/src/main/res/raw/double_sh_ers.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_sh_eru.mp3 b/app/src/main/res/raw/double_sh_eru.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_sh_i.mp3 b/app/src/main/res/raw/double_sh_i.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_sh_ir.mp3 b/app/src/main/res/raw/double_sh_ir.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_sh_is.mp3 b/app/src/main/res/raw/double_sh_is.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_sh_oi.mp3 b/app/src/main/res/raw/double_sh_oi.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_sh_or.mp3 b/app/src/main/res/raw/double_sh_or.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_sh_ou.mp3 b/app/src/main/res/raw/double_sh_ou.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_sh_shwua.mp3 b/app/src/main/res/raw/double_sh_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_sh_u.mp3 b/app/src/main/res/raw/double_sh_u.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_sh_us.mp3 b/app/src/main/res/raw/double_sh_us.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_sh_vu.mp3 b/app/src/main/res/raw/double_sh_vu.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_shwua_b.mp3 b/app/src/main/res/raw/double_shwua_b.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_shwua_ch.mp3 b/app/src/main/res/raw/double_shwua_ch.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_shwua_d.mp3 b/app/src/main/res/raw/double_shwua_d.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_shwua_dzh.mp3 b/app/src/main/res/raw/double_shwua_dzh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_shwua_f.mp3 b/app/src/main/res/raw/double_shwua_f.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_shwua_g.mp3 b/app/src/main/res/raw/double_shwua_g.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_shwua_k.mp3 b/app/src/main/res/raw/double_shwua_k.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_shwua_l.mp3 b/app/src/main/res/raw/double_shwua_l.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_shwua_m.mp3 b/app/src/main/res/raw/double_shwua_m.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_shwua_n.mp3 b/app/src/main/res/raw/double_shwua_n.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_shwua_ng.mp3 b/app/src/main/res/raw/double_shwua_ng.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_shwua_p.mp3 b/app/src/main/res/raw/double_shwua_p.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_shwua_s.mp3 b/app/src/main/res/raw/double_shwua_s.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_shwua_sh.mp3 b/app/src/main/res/raw/double_shwua_sh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_shwua_t.mp3 b/app/src/main/res/raw/double_shwua_t.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_shwua_th.mp3 b/app/src/main/res/raw/double_shwua_th.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_shwua_thv.mp3 b/app/src/main/res/raw/double_shwua_thv.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_shwua_v.mp3 b/app/src/main/res/raw/double_shwua_v.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_shwua_z.mp3 b/app/src/main/res/raw/double_shwua_z.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_shwua_zh.mp3 b/app/src/main/res/raw/double_shwua_zh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_t_a.mp3 b/app/src/main/res/raw/double_t_a.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_t_ae.mp3 b/app/src/main/res/raw/double_t_ae.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_t_ai.mp3 b/app/src/main/res/raw/double_t_ai.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_t_ar.mp3 b/app/src/main/res/raw/double_t_ar.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_t_au.mp3 b/app/src/main/res/raw/double_t_au.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_t_c.mp3 b/app/src/main/res/raw/double_t_c.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_t_e.mp3 b/app/src/main/res/raw/double_t_e.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_t_ei.mp3 b/app/src/main/res/raw/double_t_ei.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_t_er.mp3 b/app/src/main/res/raw/double_t_er.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_t_ers.mp3 b/app/src/main/res/raw/double_t_ers.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_t_eru.mp3 b/app/src/main/res/raw/double_t_eru.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_t_i.mp3 b/app/src/main/res/raw/double_t_i.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_t_ir.mp3 b/app/src/main/res/raw/double_t_ir.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_t_is.mp3 b/app/src/main/res/raw/double_t_is.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_t_oi.mp3 b/app/src/main/res/raw/double_t_oi.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_t_or.mp3 b/app/src/main/res/raw/double_t_or.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_t_ou.mp3 b/app/src/main/res/raw/double_t_ou.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_t_shwua.mp3 b/app/src/main/res/raw/double_t_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_t_u.mp3 b/app/src/main/res/raw/double_t_u.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_t_us.mp3 b/app/src/main/res/raw/double_t_us.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_t_vu.mp3 b/app/src/main/res/raw/double_t_vu.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_th_a.mp3 b/app/src/main/res/raw/double_th_a.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_th_ae.mp3 b/app/src/main/res/raw/double_th_ae.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_th_ai.mp3 b/app/src/main/res/raw/double_th_ai.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_th_ar.mp3 b/app/src/main/res/raw/double_th_ar.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_th_au.mp3 b/app/src/main/res/raw/double_th_au.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_th_c.mp3 b/app/src/main/res/raw/double_th_c.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_th_e.mp3 b/app/src/main/res/raw/double_th_e.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_th_ei.mp3 b/app/src/main/res/raw/double_th_ei.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_th_er.mp3 b/app/src/main/res/raw/double_th_er.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_th_ers.mp3 b/app/src/main/res/raw/double_th_ers.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_th_eru.mp3 b/app/src/main/res/raw/double_th_eru.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_th_i.mp3 b/app/src/main/res/raw/double_th_i.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_th_ir.mp3 b/app/src/main/res/raw/double_th_ir.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_th_is.mp3 b/app/src/main/res/raw/double_th_is.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_th_oi.mp3 b/app/src/main/res/raw/double_th_oi.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_th_or.mp3 b/app/src/main/res/raw/double_th_or.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_th_ou.mp3 b/app/src/main/res/raw/double_th_ou.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_th_shwua.mp3 b/app/src/main/res/raw/double_th_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_th_u.mp3 b/app/src/main/res/raw/double_th_u.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_th_us.mp3 b/app/src/main/res/raw/double_th_us.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_th_vu.mp3 b/app/src/main/res/raw/double_th_vu.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_thv_a.mp3 b/app/src/main/res/raw/double_thv_a.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_thv_ae.mp3 b/app/src/main/res/raw/double_thv_ae.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_thv_ai.mp3 b/app/src/main/res/raw/double_thv_ai.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_thv_ar.mp3 b/app/src/main/res/raw/double_thv_ar.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_thv_au.mp3 b/app/src/main/res/raw/double_thv_au.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_thv_c.mp3 b/app/src/main/res/raw/double_thv_c.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_thv_e.mp3 b/app/src/main/res/raw/double_thv_e.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_thv_ei.mp3 b/app/src/main/res/raw/double_thv_ei.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_thv_er.mp3 b/app/src/main/res/raw/double_thv_er.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_thv_ers.mp3 b/app/src/main/res/raw/double_thv_ers.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_thv_eru.mp3 b/app/src/main/res/raw/double_thv_eru.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_thv_i.mp3 b/app/src/main/res/raw/double_thv_i.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_thv_ir.mp3 b/app/src/main/res/raw/double_thv_ir.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_thv_is.mp3 b/app/src/main/res/raw/double_thv_is.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_thv_oi.mp3 b/app/src/main/res/raw/double_thv_oi.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_thv_or.mp3 b/app/src/main/res/raw/double_thv_or.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_thv_ou.mp3 b/app/src/main/res/raw/double_thv_ou.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_thv_shwua.mp3 b/app/src/main/res/raw/double_thv_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_thv_u.mp3 b/app/src/main/res/raw/double_thv_u.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_thv_us.mp3 b/app/src/main/res/raw/double_thv_us.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_thv_vu.mp3 b/app/src/main/res/raw/double_thv_vu.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_u_b.mp3 b/app/src/main/res/raw/double_u_b.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_u_ch.mp3 b/app/src/main/res/raw/double_u_ch.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_u_d.mp3 b/app/src/main/res/raw/double_u_d.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_u_dzh.mp3 b/app/src/main/res/raw/double_u_dzh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_u_f.mp3 b/app/src/main/res/raw/double_u_f.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_u_flap_shwua.mp3 b/app/src/main/res/raw/double_u_flap_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_u_g.mp3 b/app/src/main/res/raw/double_u_g.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_u_glottal.mp3 b/app/src/main/res/raw/double_u_glottal.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_u_k.mp3 b/app/src/main/res/raw/double_u_k.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_u_l.mp3 b/app/src/main/res/raw/double_u_l.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_u_m.mp3 b/app/src/main/res/raw/double_u_m.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_u_n.mp3 b/app/src/main/res/raw/double_u_n.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_u_ng.mp3 b/app/src/main/res/raw/double_u_ng.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_u_p.mp3 b/app/src/main/res/raw/double_u_p.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_u_s.mp3 b/app/src/main/res/raw/double_u_s.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_u_sh.mp3 b/app/src/main/res/raw/double_u_sh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_u_t.mp3 b/app/src/main/res/raw/double_u_t.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_u_th.mp3 b/app/src/main/res/raw/double_u_th.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_u_thv.mp3 b/app/src/main/res/raw/double_u_thv.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_u_v.mp3 b/app/src/main/res/raw/double_u_v.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_u_z.mp3 b/app/src/main/res/raw/double_u_z.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_u_zh.mp3 b/app/src/main/res/raw/double_u_zh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_us_b.mp3 b/app/src/main/res/raw/double_us_b.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_us_ch.mp3 b/app/src/main/res/raw/double_us_ch.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_us_d.mp3 b/app/src/main/res/raw/double_us_d.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_us_dzh.mp3 b/app/src/main/res/raw/double_us_dzh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_us_f.mp3 b/app/src/main/res/raw/double_us_f.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_us_flap_shwua.mp3 b/app/src/main/res/raw/double_us_flap_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_us_g.mp3 b/app/src/main/res/raw/double_us_g.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_us_glottal.mp3 b/app/src/main/res/raw/double_us_glottal.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_us_k.mp3 b/app/src/main/res/raw/double_us_k.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_us_l.mp3 b/app/src/main/res/raw/double_us_l.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_us_m.mp3 b/app/src/main/res/raw/double_us_m.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_us_n.mp3 b/app/src/main/res/raw/double_us_n.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_us_ng.mp3 b/app/src/main/res/raw/double_us_ng.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_us_p.mp3 b/app/src/main/res/raw/double_us_p.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_us_s.mp3 b/app/src/main/res/raw/double_us_s.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_us_sh.mp3 b/app/src/main/res/raw/double_us_sh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_us_t.mp3 b/app/src/main/res/raw/double_us_t.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_us_th.mp3 b/app/src/main/res/raw/double_us_th.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_us_thv.mp3 b/app/src/main/res/raw/double_us_thv.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_us_v.mp3 b/app/src/main/res/raw/double_us_v.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_us_z.mp3 b/app/src/main/res/raw/double_us_z.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_us_zh.mp3 b/app/src/main/res/raw/double_us_zh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_v_a.mp3 b/app/src/main/res/raw/double_v_a.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_v_ae.mp3 b/app/src/main/res/raw/double_v_ae.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_v_ai.mp3 b/app/src/main/res/raw/double_v_ai.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_v_ar.mp3 b/app/src/main/res/raw/double_v_ar.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_v_au.mp3 b/app/src/main/res/raw/double_v_au.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_v_c.mp3 b/app/src/main/res/raw/double_v_c.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_v_e.mp3 b/app/src/main/res/raw/double_v_e.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_v_ei.mp3 b/app/src/main/res/raw/double_v_ei.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_v_er.mp3 b/app/src/main/res/raw/double_v_er.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_v_ers.mp3 b/app/src/main/res/raw/double_v_ers.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_v_eru.mp3 b/app/src/main/res/raw/double_v_eru.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_v_i.mp3 b/app/src/main/res/raw/double_v_i.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_v_ir.mp3 b/app/src/main/res/raw/double_v_ir.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_v_is.mp3 b/app/src/main/res/raw/double_v_is.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_v_oi.mp3 b/app/src/main/res/raw/double_v_oi.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_v_or.mp3 b/app/src/main/res/raw/double_v_or.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_v_ou.mp3 b/app/src/main/res/raw/double_v_ou.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_v_shwua.mp3 b/app/src/main/res/raw/double_v_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_v_u.mp3 b/app/src/main/res/raw/double_v_u.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_v_us.mp3 b/app/src/main/res/raw/double_v_us.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_v_vu.mp3 b/app/src/main/res/raw/double_v_vu.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_vu_b.mp3 b/app/src/main/res/raw/double_vu_b.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_vu_ch.mp3 b/app/src/main/res/raw/double_vu_ch.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_vu_d.mp3 b/app/src/main/res/raw/double_vu_d.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_vu_dzh.mp3 b/app/src/main/res/raw/double_vu_dzh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_vu_f.mp3 b/app/src/main/res/raw/double_vu_f.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_vu_flap_shwua.mp3 b/app/src/main/res/raw/double_vu_flap_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_vu_g.mp3 b/app/src/main/res/raw/double_vu_g.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_vu_glottal.mp3 b/app/src/main/res/raw/double_vu_glottal.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_vu_k.mp3 b/app/src/main/res/raw/double_vu_k.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_vu_l.mp3 b/app/src/main/res/raw/double_vu_l.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_vu_m.mp3 b/app/src/main/res/raw/double_vu_m.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_vu_n.mp3 b/app/src/main/res/raw/double_vu_n.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_vu_ng.mp3 b/app/src/main/res/raw/double_vu_ng.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_vu_p.mp3 b/app/src/main/res/raw/double_vu_p.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_vu_s.mp3 b/app/src/main/res/raw/double_vu_s.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_vu_sh.mp3 b/app/src/main/res/raw/double_vu_sh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_vu_t.mp3 b/app/src/main/res/raw/double_vu_t.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_vu_th.mp3 b/app/src/main/res/raw/double_vu_th.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_vu_thv.mp3 b/app/src/main/res/raw/double_vu_thv.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_vu_v.mp3 b/app/src/main/res/raw/double_vu_v.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_vu_z.mp3 b/app/src/main/res/raw/double_vu_z.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_vu_zh.mp3 b/app/src/main/res/raw/double_vu_zh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_w_a.mp3 b/app/src/main/res/raw/double_w_a.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_w_ae.mp3 b/app/src/main/res/raw/double_w_ae.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_w_ai.mp3 b/app/src/main/res/raw/double_w_ai.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_w_ar.mp3 b/app/src/main/res/raw/double_w_ar.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_w_au.mp3 b/app/src/main/res/raw/double_w_au.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_w_c.mp3 b/app/src/main/res/raw/double_w_c.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_w_e.mp3 b/app/src/main/res/raw/double_w_e.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_w_ei.mp3 b/app/src/main/res/raw/double_w_ei.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_w_er.mp3 b/app/src/main/res/raw/double_w_er.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_w_ers.mp3 b/app/src/main/res/raw/double_w_ers.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_w_eru.mp3 b/app/src/main/res/raw/double_w_eru.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_w_i.mp3 b/app/src/main/res/raw/double_w_i.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_w_ir.mp3 b/app/src/main/res/raw/double_w_ir.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_w_is.mp3 b/app/src/main/res/raw/double_w_is.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_w_oi.mp3 b/app/src/main/res/raw/double_w_oi.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_w_or.mp3 b/app/src/main/res/raw/double_w_or.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_w_ou.mp3 b/app/src/main/res/raw/double_w_ou.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_w_shwua.mp3 b/app/src/main/res/raw/double_w_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_w_u.mp3 b/app/src/main/res/raw/double_w_u.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_w_us.mp3 b/app/src/main/res/raw/double_w_us.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_w_vu.mp3 b/app/src/main/res/raw/double_w_vu.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_z_a.mp3 b/app/src/main/res/raw/double_z_a.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_z_ae.mp3 b/app/src/main/res/raw/double_z_ae.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_z_ai.mp3 b/app/src/main/res/raw/double_z_ai.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_z_ar.mp3 b/app/src/main/res/raw/double_z_ar.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_z_au.mp3 b/app/src/main/res/raw/double_z_au.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_z_c.mp3 b/app/src/main/res/raw/double_z_c.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_z_e.mp3 b/app/src/main/res/raw/double_z_e.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_z_ei.mp3 b/app/src/main/res/raw/double_z_ei.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_z_er.mp3 b/app/src/main/res/raw/double_z_er.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_z_ers.mp3 b/app/src/main/res/raw/double_z_ers.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_z_eru.mp3 b/app/src/main/res/raw/double_z_eru.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_z_i.mp3 b/app/src/main/res/raw/double_z_i.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_z_ir.mp3 b/app/src/main/res/raw/double_z_ir.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_z_is.mp3 b/app/src/main/res/raw/double_z_is.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_z_oi.mp3 b/app/src/main/res/raw/double_z_oi.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_z_or.mp3 b/app/src/main/res/raw/double_z_or.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_z_ou.mp3 b/app/src/main/res/raw/double_z_ou.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_z_shwua.mp3 b/app/src/main/res/raw/double_z_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_z_u.mp3 b/app/src/main/res/raw/double_z_u.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_z_us.mp3 b/app/src/main/res/raw/double_z_us.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_z_vu.mp3 b/app/src/main/res/raw/double_z_vu.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_zh_a.mp3 b/app/src/main/res/raw/double_zh_a.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_zh_ae.mp3 b/app/src/main/res/raw/double_zh_ae.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_zh_ai.mp3 b/app/src/main/res/raw/double_zh_ai.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_zh_ar.mp3 b/app/src/main/res/raw/double_zh_ar.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_zh_au.mp3 b/app/src/main/res/raw/double_zh_au.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_zh_c.mp3 b/app/src/main/res/raw/double_zh_c.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_zh_e.mp3 b/app/src/main/res/raw/double_zh_e.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_zh_ei.mp3 b/app/src/main/res/raw/double_zh_ei.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_zh_er.mp3 b/app/src/main/res/raw/double_zh_er.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_zh_ers.mp3 b/app/src/main/res/raw/double_zh_ers.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_zh_eru.mp3 b/app/src/main/res/raw/double_zh_eru.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_zh_i.mp3 b/app/src/main/res/raw/double_zh_i.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_zh_ir.mp3 b/app/src/main/res/raw/double_zh_ir.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_zh_is.mp3 b/app/src/main/res/raw/double_zh_is.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_zh_oi.mp3 b/app/src/main/res/raw/double_zh_oi.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_zh_or.mp3 b/app/src/main/res/raw/double_zh_or.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_zh_ou.mp3 b/app/src/main/res/raw/double_zh_ou.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_zh_shwua.mp3 b/app/src/main/res/raw/double_zh_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_zh_u.mp3 b/app/src/main/res/raw/double_zh_u.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_zh_us.mp3 b/app/src/main/res/raw/double_zh_us.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/double_zh_vu.mp3 b/app/src/main/res/raw/double_zh_vu.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_a.mp3 b/app/src/main/res/raw/single_a.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_ae.mp3 b/app/src/main/res/raw/single_ae.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_ai.mp3 b/app/src/main/res/raw/single_ai.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_ar.mp3 b/app/src/main/res/raw/single_ar.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_au.mp3 b/app/src/main/res/raw/single_au.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_b.mp3 b/app/src/main/res/raw/single_b.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_c_backwards.mp3 b/app/src/main/res/raw/single_c_backwards.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_ch.mp3 b/app/src/main/res/raw/single_ch.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_d.mp3 b/app/src/main/res/raw/single_d.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_dzh.mp3 b/app/src/main/res/raw/single_dzh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_e.mp3 b/app/src/main/res/raw/single_e.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_ei.mp3 b/app/src/main/res/raw/single_ei.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_er.mp3 b/app/src/main/res/raw/single_er.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_er_stressed.mp3 b/app/src/main/res/raw/single_er_stressed.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_er_unstressed.mp3 b/app/src/main/res/raw/single_er_unstressed.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_f.mp3 b/app/src/main/res/raw/single_f.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_flap_t.mp3 b/app/src/main/res/raw/single_flap_t.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_g.mp3 b/app/src/main/res/raw/single_g.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_glottal_stop.mp3 b/app/src/main/res/raw/single_glottal_stop.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_h.mp3 b/app/src/main/res/raw/single_h.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_i.mp3 b/app/src/main/res/raw/single_i.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_i_short.mp3 b/app/src/main/res/raw/single_i_short.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_ir.mp3 b/app/src/main/res/raw/single_ir.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_j.mp3 b/app/src/main/res/raw/single_j.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_k.mp3 b/app/src/main/res/raw/single_k.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_l.mp3 b/app/src/main/res/raw/single_l.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_m.mp3 b/app/src/main/res/raw/single_m.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_n.mp3 b/app/src/main/res/raw/single_n.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_ng.mp3 b/app/src/main/res/raw/single_ng.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_oi.mp3 b/app/src/main/res/raw/single_oi.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_or.mp3 b/app/src/main/res/raw/single_or.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_ou.mp3 b/app/src/main/res/raw/single_ou.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_p.mp3 b/app/src/main/res/raw/single_p.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_r.mp3 b/app/src/main/res/raw/single_r.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_s.mp3 b/app/src/main/res/raw/single_s.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_sh.mp3 b/app/src/main/res/raw/single_sh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_shwua.mp3 b/app/src/main/res/raw/single_shwua.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_t.mp3 b/app/src/main/res/raw/single_t.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_th_voiced.mp3 b/app/src/main/res/raw/single_th_voiced.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_th_voiceless.mp3 b/app/src/main/res/raw/single_th_voiceless.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_u.mp3 b/app/src/main/res/raw/single_u.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_u_short.mp3 b/app/src/main/res/raw/single_u_short.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_v.mp3 b/app/src/main/res/raw/single_v.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_v_upsidedown.mp3 b/app/src/main/res/raw/single_v_upsidedown.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_w.mp3 b/app/src/main/res/raw/single_w.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_z.mp3 b/app/src/main/res/raw/single_z.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/single_zh.mp3 b/app/src/main/res/raw/single_zh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_a.mp4 b/app/src/main/res/raw/v_a.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_ae.mp4 b/app/src/main/res/raw/v_ae.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_ai.mp4 b/app/src/main/res/raw/v_ai.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_ar.mp4 b/app/src/main/res/raw/v_ar.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_au.mp4 b/app/src/main/res/raw/v_au.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_b.mp4 b/app/src/main/res/raw/v_b.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_c_backwards.mp4 b/app/src/main/res/raw/v_c_backwards.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_ch.mp4 b/app/src/main/res/raw/v_ch.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_d.mp4 b/app/src/main/res/raw/v_d.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_dzh.mp4 b/app/src/main/res/raw/v_dzh.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_e_short.mp4 b/app/src/main/res/raw/v_e_short.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_ei.mp4 b/app/src/main/res/raw/v_ei.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_er.mp4 b/app/src/main/res/raw/v_er.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_er_stressed.mp4 b/app/src/main/res/raw/v_er_stressed.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_er_unstressed.mp4 b/app/src/main/res/raw/v_er_unstressed.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_f.mp4 b/app/src/main/res/raw/v_f.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_t_flap.mp4 b/app/src/main/res/raw/v_flap_t.mp4
old mode 100644
new mode 100755
similarity index 100%
rename from app/src/main/res/raw/v_t_flap.mp4
rename to app/src/main/res/raw/v_flap_t.mp4
diff --git a/app/src/main/res/raw/v_g.mp4 b/app/src/main/res/raw/v_g.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_glottal_stop.mp4 b/app/src/main/res/raw/v_glottal_stop.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_h.mp4 b/app/src/main/res/raw/v_h.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_i.mp4 b/app/src/main/res/raw/v_i.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_i_short.mp4 b/app/src/main/res/raw/v_i_short.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_ir.mp4 b/app/src/main/res/raw/v_ir.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_j.mp4 b/app/src/main/res/raw/v_j.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_k.mp4 b/app/src/main/res/raw/v_k.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_l.mp4 b/app/src/main/res/raw/v_l.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_m.mp4 b/app/src/main/res/raw/v_m.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_n.mp4 b/app/src/main/res/raw/v_n.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_ng.mp4 b/app/src/main/res/raw/v_ng.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_oi.mp4 b/app/src/main/res/raw/v_oi.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_or.mp4 b/app/src/main/res/raw/v_or.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_ou.mp4 b/app/src/main/res/raw/v_ou.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_p.mp4 b/app/src/main/res/raw/v_p.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_r.mp4 b/app/src/main/res/raw/v_r.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_s.mp4 b/app/src/main/res/raw/v_s.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_shwua.mp4 b/app/src/main/res/raw/v_schwa.mp4
old mode 100644
new mode 100755
similarity index 100%
rename from app/src/main/res/raw/v_shwua.mp4
rename to app/src/main/res/raw/v_schwa.mp4
diff --git a/app/src/main/res/raw/v_sh.mp4 b/app/src/main/res/raw/v_sh.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_t.mp4 b/app/src/main/res/raw/v_t.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_th_voiced.mp4 b/app/src/main/res/raw/v_th_voiced.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_th_voiceless.mp4 b/app/src/main/res/raw/v_th_voiceless.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_u.mp4 b/app/src/main/res/raw/v_u.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_u_short.mp4 b/app/src/main/res/raw/v_u_short.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_v.mp4 b/app/src/main/res/raw/v_v.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_v_upsidedown.mp4 b/app/src/main/res/raw/v_v_upsidedown.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_w.mp4 b/app/src/main/res/raw/v_w.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_z.mp4 b/app/src/main/res/raw/v_z.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/v_zh.mp4 b/app/src/main/res/raw/v_zh.mp4
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_above.mp3 b/app/src/main/res/raw/word_above.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_again.mp3 b/app/src/main/res/raw/word_again.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_age.mp3 b/app/src/main/res/raw/word_age.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_agile.mp3 b/app/src/main/res/raw/word_agile.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_ahead.mp3 b/app/src/main/res/raw/word_ahead.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_aired.mp3 b/app/src/main/res/raw/word_aired.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_arm.mp3 b/app/src/main/res/raw/word_arm.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_ash.mp3 b/app/src/main/res/raw/word_ash.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_bad.mp3 b/app/src/main/res/raw/word_bad.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_bat.mp3 b/app/src/main/res/raw/word_bat.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_bathe.mp3 b/app/src/main/res/raw/word_bathe.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_beige.mp3 b/app/src/main/res/raw/word_beige.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_bill.mp3 b/app/src/main/res/raw/word_bill.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_birthday.mp3 b/app/src/main/res/raw/word_birthday.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_bite.mp3 b/app/src/main/res/raw/word_bite.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_blue.mp3 b/app/src/main/res/raw/word_blue.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_boy.mp3 b/app/src/main/res/raw/word_boy.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_button.mp3 b/app/src/main/res/raw/word_button.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_call.mp3 b/app/src/main/res/raw/word_call.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_car.mp3 b/app/src/main/res/raw/word_car.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_card.mp3 b/app/src/main/res/raw/word_card.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_cards.mp3 b/app/src/main/res/raw/word_cards.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_cars.mp3 b/app/src/main/res/raw/word_cars.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_chairs.mp3 b/app/src/main/res/raw/word_chairs.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_church.mp3 b/app/src/main/res/raw/word_church.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_cool.mp3 b/app/src/main/res/raw/word_cool.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_cove.mp3 b/app/src/main/res/raw/word_cove.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_cow.mp3 b/app/src/main/res/raw/word_cow.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_cube.mp3 b/app/src/main/res/raw/word_cube.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_delicious.mp3 b/app/src/main/res/raw/word_delicious.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_each.mp3 b/app/src/main/res/raw/word_each.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_eachof.mp3 b/app/src/main/res/raw/word_eachof.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_ear.mp3 b/app/src/main/res/raw/word_ear.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_earth.mp3 b/app/src/main/res/raw/word_earth.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_edge.mp3 b/app/src/main/res/raw/word_edge.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_every.mp3 b/app/src/main/res/raw/word_every.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_father.mp3 b/app/src/main/res/raw/word_father.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_fly.mp3 b/app/src/main/res/raw/word_fly.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_gift.mp3 b/app/src/main/res/raw/word_gift.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_good.mp3 b/app/src/main/res/raw/word_good.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_have.mp3 b/app/src/main/res/raw/word_have.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_her.mp3 b/app/src/main/res/raw/word_her.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_here.mp3 b/app/src/main/res/raw/word_here.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_him.mp3 b/app/src/main/res/raw/word_him.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_if.mp3 b/app/src/main/res/raw/word_if.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_im.mp3 b/app/src/main/res/raw/word_im.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_it.mp3 b/app/src/main/res/raw/word_it.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_jonathan.mp3 b/app/src/main/res/raw/word_jonathan.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_jump.mp3 b/app/src/main/res/raw/word_jump.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_little.mp3 b/app/src/main/res/raw/word_little.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_loud.mp3 b/app/src/main/res/raw/word_loud.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_low.mp3 b/app/src/main/res/raw/word_low.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_ma.mp3 b/app/src/main/res/raw/word_ma.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_may.mp3 b/app/src/main/res/raw/word_may.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_me.mp3 b/app/src/main/res/raw/word_me.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_mother.mp3 b/app/src/main/res/raw/word_mother.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_new.mp3 b/app/src/main/res/raw/word_new.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_north.mp3 b/app/src/main/res/raw/word_north.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_oars.mp3 b/app/src/main/res/raw/word_oars.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_oath.mp3 b/app/src/main/res/raw/word_oath.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_oil.mp3 b/app/src/main/res/raw/word_oil.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_on.mp3 b/app/src/main/res/raw/word_on.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_ooze.mp3 b/app/src/main/res/raw/word_ooze.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_ought.mp3 b/app/src/main/res/raw/word_ought.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_out.mp3 b/app/src/main/res/raw/word_out.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_panda.mp3 b/app/src/main/res/raw/word_panda.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_part.mp3 b/app/src/main/res/raw/word_part.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_pass.mp3 b/app/src/main/res/raw/word_pass.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_perform.mp3 b/app/src/main/res/raw/word_perform.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_pig.mp3 b/app/src/main/res/raw/word_pig.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_pleasure.mp3 b/app/src/main/res/raw/word_pleasure.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_put.mp3 b/app/src/main/res/raw/word_put.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_put_glottal.mp3 b/app/src/main/res/raw/word_put_glottal.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_raced.mp3 b/app/src/main/res/raw/word_raced.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_raised.mp3 b/app/src/main/res/raw/word_raised.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_read.mp3 b/app/src/main/res/raw/word_read.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_real.mp3 b/app/src/main/res/raw/word_real.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_rib.mp3 b/app/src/main/res/raw/word_rib.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_ringing.mp3 b/app/src/main/res/raw/word_ringing.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_roar.mp3 b/app/src/main/res/raw/word_roar.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_safe.mp3 b/app/src/main/res/raw/word_safe.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_said.mp3 b/app/src/main/res/raw/word_said.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_saw.mp3 b/app/src/main/res/raw/word_saw.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_set.mp3 b/app/src/main/res/raw/word_set.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_shoot.mp3 b/app/src/main/res/raw/word_shoot.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_should.mp3 b/app/src/main/res/raw/word_should.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_skill.mp3 b/app/src/main/res/raw/word_skill.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_speak.mp3 b/app/src/main/res/raw/word_speak.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_sting.mp3 b/app/src/main/res/raw/word_sting.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_stop.mp3 b/app/src/main/res/raw/word_stop.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_sun.mp3 b/app/src/main/res/raw/word_sun.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_sung.mp3 b/app/src/main/res/raw/word_sung.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_there.mp3 b/app/src/main/res/raw/word_there.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_think.mp3 b/app/src/main/res/raw/word_think.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_thirty.mp3 b/app/src/main/res/raw/word_thirty.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_toad.mp3 b/app/src/main/res/raw/word_toad.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_twelve.mp3 b/app/src/main/res/raw/word_twelve.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_uhhuh.mp3 b/app/src/main/res/raw/word_uhhuh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_uhoh.mp3 b/app/src/main/res/raw/word_uhoh.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_up.mp3 b/app/src/main/res/raw/word_up.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_usually.mp3 b/app/src/main/res/raw/word_usually.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_very.mp3 b/app/src/main/res/raw/word_very.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_voice.mp3 b/app/src/main/res/raw/word_voice.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_wary.mp3 b/app/src/main/res/raw/word_wary.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_water.mp3 b/app/src/main/res/raw/word_water.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_week.mp3 b/app/src/main/res/raw/word_week.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_weird.mp3 b/app/src/main/res/raw/word_weird.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_what.mp3 b/app/src/main/res/raw/word_what.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_wished.mp3 b/app/src/main/res/raw/word_wished.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_wonderful.mp3 b/app/src/main/res/raw/word_wonderful.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_year.mp3 b/app/src/main/res/raw/word_year.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_yellow.mp3 b/app/src/main/res/raw/word_yellow.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/raw/word_zoo.mp3 b/app/src/main/res/raw/word_zoo.mp3
old mode 100644
new mode 100755
diff --git a/app/src/main/res/values-large/bools.xml b/app/src/main/res/values-large/bools.xml
old mode 100644
new mode 100755
diff --git a/app/src/main/res/values-sw600dp/bools.xml b/app/src/main/res/values-sw600dp/bools.xml
old mode 100644
new mode 100755
diff --git a/app/src/main/res/values-w820dp/dimens.xml b/app/src/main/res/values-w820dp/dimens.xml
old mode 100644
new mode 100755
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
old mode 100644
new mode 100755
index 552cf61..1eaef4f
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -1,13 +1,8 @@
-
-
- 5
- - 10
- - 25
- - 50
- - 100
-
+
+ zh-rCN
在英式英语中/i/音标通常写作/i:/,两个点代表发长音。但是在美式发音中加点与不加点没多大区别。所以美式音标不加两个点。它在浊辅音前发长音,清辅音前发短音。
在英式英语中/ɑ/音标通常写作/ɑː/。注意在美式英语中它的发音与/ʌ/有很大区别。还有/ɑ/与汉语拼音中\"a\"也不同。(在国际音标中,汉语拼音的\"a\"写作/a/)。
@@ -16,7 +11,7 @@
/ʊ/与/u/发音不同。在长音与短音方面区别不是很大,而是嘴型的大小和舌头的位置。
/ʌ/与/ɑ/读音不同。在长音与短音方面区别不是很大,而是嘴型的大小和舌头的位置。注意它的发音与英式英语/ʌ/音标的发音稍微有所不同。当/ʌ/不读成重音时,通常写成/ə/。
英式英语的音标中使用/e/音标来表示这个发音。实际上,根据标准国际音标它应该被写成/ɛ/。嘴张开的程度比/æ/小,舌尖更靠前一点。
- "发/æ/音时,嘴张开的程度要像/ɑ/一样大,嘴角像/ɛ/那样拉向两边,但舌头应该比/ɛ/更往后一些。
+ 发/æ/音时,嘴张开的程度要像/ɑ/一样大,嘴角像/ɛ/那样拉向两边,但舌头应该比/ɛ/更往后一些。
根据国际音标,美式英语中使用的/ɔ/这个音标应该被写成/ɒ/,但为了和大多数词典保持一致,我们使用了/ɔ/。(注意,/ɔː/用于英式音标时发音是不一样的,英式音标的/ɔː/是标准国际音标。)大约40%的美国人不发这个音,他们用/ɑ/代替,上述的例子可以这样发音:/ɑt/,/kɑt/,和/sɑ/。
元音/ə/是美式发音中最常见的一个音。它常用于非重读音节的单词。当此元音重读时通常写成/ʌ/。
/eɪ/是双元音。它由/e/和/ɪ/两个单音组成。在有些美式发音的词典中有时也写成/e/。不要与英式音标/e/混淆,事实上它发/ɛ/音,美式英语中带/eɪ/音的词,英式英语中的发音应该为/ɛi/。但是它们依旧都写成/eɪ/。
@@ -58,6 +53,7 @@
这个音标叫做齿龈闪音,在中国英语课本中通常不教,但是它在美式发音中非常重要。当/t/音出现在非重读的音节中并在两个元音之间,/ɾ/音通常会代替/t/音。尽管不准确,但是/ɾ/音标也可以写成/d/。这种情况下,上述例子应该被写成/ˈwɑdɚ/,/ˈlɪdəl/和/\'θɝdi/。
美式发音
输入音标
+ 人工测试
关于应用
历史记录
/%1$s/的延伸
@@ -111,7 +107,6 @@
练习
测试
单音标
- zh
双音标 (%1$d)
单音标 (%1$d)
双音标: %1$d%%
@@ -126,4 +121,5 @@
单音标
无名
+
\ No newline at end of file
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
new file mode 100755
index 0000000..787e87a
--- /dev/null
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+ zh-rTW
+
+ 在英式英語中/i/音標通常寫作/i:/,兩個點代表發長音。但是在美式發音中加點與不加點沒多大區別。所以美式音標不加兩個點。它在濁輔音前發長音,清輔音前發短音。
+ 在英式英語中/ɑ/音標通常寫作/ɑː/。注意在美式英語中它的發音與/ʌ/有很大區別。還有/ɑ/與漢語拼音中\"a\"也不同。(在國際音標中,漢語拼音的\"a\"寫作/a/)。
+ 在英式英語中/u/音標通常寫作/uː/,但是像/iː/、/aː/、/ɔː/這些長元音的點在美式英語中不必加。美式英語中所有重讀的元音在濁輔音前發長音,清輔音前發短音。
+ /ɪ/與/i/發音不同。在長音與短音方面區別不是很大,最主要的區別是你嘴型的大小和舌頭的位置。跟/i/音相比,嘴要稍微再咧開一點,舌頭的放置要靠後一點。
+ /ʊ/與/u/發音不同。在長音與短音方面區別不是很大,而是嘴型的大小和舌頭的位置。
+ /ʌ/與/ɑ/讀音不同。在長音與短音方面區別不是很大,而是嘴型的大小和舌頭的位置。注意它的發音與英式英語/ʌ/音標的發音稍微有所不同。當/ʌ/不讀成重音時,通常寫成/ə/。
+ 英式英語的音標中使用/e/音標來表示這個發音。實際上,根據標準國際音標它應該被寫成/ɛ/。嘴張開的程度比/æ/小,舌尖更靠前一點。
+ 發/æ/音時,嘴張開的程度要像/ɑ/一樣大,嘴角像/ɛ/那樣拉向兩邊,但舌頭應該比/ɛ/更往後一些。
+ 根據國際音標,美式英語中使用的/ɔ/這個音標應該被寫成/ɒ/,但為了和大多數詞典保持一致,我們使用了/ɔ/。(注意,/ɔː/用於英式音標時發音是不一樣的,英式音標的/ɔː/是標準國際音標。)大約40%的美國人不發這個音,他們用/ɑ/代替,上述的例子可以這樣發音:/ɑt/,/kɑt/,和/sɑ/。
+ 元音/ə/是美式發音中最常見的一個音。它常用於非重讀音節的單詞。當此元音重讀時通常寫成/ʌ/。
+ /eɪ/是雙元音。它由/e/和/ɪ/兩個單音組成。在有些美式發音的詞典中有時也寫成/e/。不要與英式音標/e/混淆,事實上它發/ɛ/音,美式英語中帶/eɪ/音的詞,英式英語中的發音應該為/ɛi/。但是它們依舊都寫成/eɪ/。
+ /aɪ/是雙元音。它由/a/和/ɪ/兩個單音組成。注意:/aɪ/與/æ/發音不同。
+ /aʊ/是雙元音。它由/a/和/ʊ/兩個單音組成。注意:/aʊ/與/ɔ/發音不同。還要注意/aʊ/與漢語拼音中\"ao\"發音也不同。
+ /ɔɪ/是雙元音。它由/ɔ/和/ɪ/兩個單音組成。/ɔɪ/中的ɔ與此應用中的/ɔ/發音不同。(這是因為在美式英語中,/ɔ/應該寫為/ɒ/。)讀/ɔɪ/時,口型由小而圓開始。
+ /oʊ/是雙元音。它由/o/和/ʊ/兩個單音組成。在有些美式發音的詞典中有時也寫成/o/。注意它與英式發音/əʊ/有輕微的不同。
+ /ɝ/音有時候寫為/ər/或/əɹ/。這是在重讀音節或單音節詞中的發音。當/ɝ/非重讀時,寫成/ɚ/。英式英語中沒有/ɝ/音,美國人發/ɝ/的單詞中英國人發/ɜː/音。
+ /ɚ/的發音與/ɝ/相同,/ɚ/用於輕讀的音節,而/ɝ/用於重讀的音節。它有時寫為/ər/或/əɹ/。英式英語中沒有/ɚ/音,美國人發/ɚ/的單詞中英國人發/ə/音。
+ 根據國際音標更加正確地寫法是/ɑɹ/或者/ɑɚ/。英式英語中沒有/ɑr/音,美國人發/ɑr/的單詞中英國人發/ɑː/音。
+ 根據國際音標更加正確的寫法是/ɛɹ/或者/ɛɚ/。英式英語中沒有/ɛr/音,美國人發/ɛr/的單詞中英國人發/eə/音。
+ 根據國際音標更加正確的寫法是/ɪɹ/或者/ɪɚ/。英式英語中沒有/ɪr/音,美國人發/ɑr/的單詞中英國人發/ɪr/音。
+ 根據國際音標更加正確的寫法是/ɔɹ/或者/ɔɚ/。/ɔr/中的ɔ與此應用中的/ɔ/發音不同。(這是因為在美式英語中,/ɔ/應該寫為/ɒ/。)讀/ɔr/時,口型由小而圓開始。英式英語中沒有/ɔr/音,美國人發/ɔr/的單詞中英國人發/ɔ:/音。
+ 位於詞首時是送氣音[pʰ],但在字母s後和詞尾時是非送氣的[p](跟漢語拼音的\"b\"音一樣)。注意不要把第三個例子讀成/stapə/。
+ 位於詞首時是送氣音[tʰ],但在字母s後和詞尾時是非送氣的[t](跟漢語拼音的\"d\"音一樣)。注意不要把第三個例子讀成/ɪtə/,/ɪts/或/ɪtʰ/,還要注意\"t\"在美式英語發音中經常改變發音,像/ɾ/和/ʔ/。
+ 位於詞首時是送氣音[kʰ],但在字母s後和詞尾時是非送氣的[k](跟漢語拼音的\"g\"音一樣)。注意不要把第三個例子讀成/wikə/。
+ 注意/b/在單詞詞尾的發音,不要把第三個例子讀成/rɪbə/或者是/rɪp/。英語中的/b/和漢語拼音中的\"b\"不同。
+ 注意/d/在單詞詞尾的發音,不要把第三個例子讀成/kɑrdə/或者是/kɑrt/。英語中的/d/和漢語拼音中的\"d\"不同。
+ 注意/g/在單詞詞尾的發音,不要把第三個例子讀成/pɪgə/或者是/pɪk/。英語中的/g/和漢語拼音中的\"g\"不同。
+ 注意/f/在單詞詞尾的發音,不要把第三個例子讀成/ɪfə/。
+ 注意/s/在單詞詞尾的發音,不要把第三個例子讀成/pæsə/。
+ 注意/ʧ/在單詞詞尾的發音,不要把第三個例子讀成/ʧɝʧə/。英語中的/ʧ/和漢語拼音中的\"ch\"、\"q\"不同。(在國際音標中,漢語拼音的\"ch\"是[ʈʂʰ]音,\"q\"是[tɕʰ]音。)
+ 注意/ʃ/在單詞詞尾的發音,不要把第三個例子讀成/æʃə/。英語中的/ʃ/和漢語拼音中的\"sh\"、\"x\"不同。(在國際音標中,漢語拼音的\"sh\"是[ʂ]音,\"x\"是[ɕ]音。)
+ 注意/ʤ/在單詞詞尾的發音,不要把第三個例子讀成/ɛʤə/。英語中的/ʤ/和漢語拼音中的\"zh\"、\"j\"不同。(在國際音標中,漢語拼音的\"zh\"是[ʈʂ]音,\"j\"是[tɕ]音。)
+ /v/和/f/口型相同。唯一的不同之處就是/v/是濁音。注意/v/與/w/兩者發音的不同。發/v/音時,上齒要輕輕接觸下唇。還要注意第三個例子不要讀成/hævə/。
+ /z/和/s/口型相同。唯一的不同之處就是/z/是濁音。不要讀成/dz/。英語中的/z/和漢語拼音中的\"z\"不同。(在國際音標中,漢語拼音的\"z\"是[ts]音,\"c\"是[tsʰ]音。)
+ /ʒ/和/ʃ/口型相同。唯一的不同之處就是/ʒ/是濁音。注意區別/r/和/ʒ/。
+ /ð/和/θ/口型相同,最主要的區別就是/ð/是濁音。發/ð/時舌頭輕觸上齒的底部。
+ 這個音標的發音,舌頭輕微觸到上齒底部,不要讀成/s/。
+ 注意/m/在單詞詞尾的發音,不要把第三個例子讀成/ɑrmə/。
+ 注意/n/在單詞詞尾的發音,不要把第三個例子讀成/sʌnə/。
+ 這個音不會出現在英語單詞的詞首。
+ 這個音不會出現在英語單詞的詞尾。注意/w/和/v/的不同之處。讀/w/音時,嘴唇要形成一個小圓且不要觸碰牙齒。一小部分美國人將\"wh\"音發成/hw/(在國際音標中是/ʍ/)。
+ 這個音不會出現在英語單詞的詞尾。注意year和ear的不同之處。
+ 這個音不會出現在英語單詞的詞尾。注意英語中的/h/與漢語拼音中的\"h\"不同。(在國際音標中,漢語拼音的\"h\"是[x]音。)
+ 當/l/在單詞開頭時,它就讀國際音標中本身的音標。當字母l在單詞詞尾時發音有所不同,它就發國際音標的[ɫ]音。但是在這個應用的練習和考試中,我們用/l/音標代替[ɫ]音(在許多課本和詞典中也是如此)。第二個例子也能寫成/kuəl/,不要把最後倆個例子讀成/kuo/或/bɪo/。你的嘴唇應該放鬆且不能移動。
+ 根據國際音標,這個音應該寫為/ɹ/。(國際音標中的/r/實際上是顫音,就像蒙語中的\"r\")。然而,為了與許多課本和詞典保持一致,在這裡使用/r/音標。要注意/r/和/ʒ/的不同之處,也要注意英語中的/r/與漢語拼音中的\"r\"的不同之處。(在國際音標中,漢語拼音的\"r\"是/ɻ/音。)
+ 這個音被稱作為聲門塞音。在中國的英語課本中通常不講,但是它在美式發音中非常重要。注意例一put的不同發音,/pʊt/與/pʊʔ/。/ʔ/音經常代替/t/音,特別是在單詞詞尾和句子中間。
+ 這個音標叫做齒齦閃音,在中國英語課本中通常不教,但是它在美式發音中非常重要。當/t/音出現在非重讀的音節中並在兩個元音之間,/ɾ/音通常會代替/t/音。儘管不準確,但是/ɾ/音標也可以寫成/d/。這種情況下,上述例子應該被寫成/ˈwɑdɚ/,/ˈlɪdəl/和/\'θɝdi/。
+ 美式發音
+ 輸入音標
+ 人工測試
+ 關於應用
+ 歷史記錄
+ /%1$s/的延伸
+ 雙音標
+ 選擇音標
+ 雙音標
+ 單音標
+ 確定
+ 取消
+ 輔音
+ 元音
+ 姓名
+ 數量:
+ 開始
+ 雙音標
+ 單音標
+ 類型:
+ 測試
+ 考試結果
+ 正確: %1$d
+ 錯誤: %1$d
+ 用時: %1$s
+ 糾錯練習
+ 歷史記錄
+ 總時長
+ 最佳記錄
+ 詳情
+ 時間詳情
+ 測試詳情
+ 美式發音
+ 關於應用
+ 如果你有任何問題或者建議,請聯繫我們。
+ 聯繫方式
+ 已複製
+ 刪除
+ 複製
+ 分享
+ 分享到
+ 輸入音標
+ 測試詳情
+ 確定要全部刪除嗎?
+ 刪除
+ 在此應用以r結尾的只有這5個(ɝ,ɑr,ɛr,ɪr,ɔr),不需要另外加工。
+ 你輸入的是%1$s和%2$s(兩個輔音)。你應該輸入一個元音和一個輔音。
+ 你輸入的是%1$s和%2$s(兩個元音)。你應該輸入一個元音和一個輔音。
+ 你輸入的是%1$s和%2$s。但是%2$s不會出現在單詞結尾。
+ 你輸入的是%1$s和%2$s。但是在英語中,%2$s不會出現在單詞開頭。
+ 知道了
+ 更多示例
+ 學習
+ 練習
+ 測試
+ 單音標
+ 雙音標 (%1$d)
+ 單音標 (%1$d)
+ 雙音標: %1$d%%
+ 單音標: %1$d%%
+ 數量: %1$d
+ 版本%1$s
+ 學習時長
+ 練習時長
+ 考試時長
+ 總時長
+ 雙音標
+ 單音標
+ 無名
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml
new file mode 100755
index 0000000..61b636e
--- /dev/null
+++ b/app/src/main/res/values-zh/strings.xml
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+ zh
+
+ 在英式英語中/i/音標通常寫作/i:/,兩個點代表發長音。但是在美式發音中加點與不加點沒多大區別。所以美式音標不加兩個點。它在濁輔音前發長音,清輔音前發短音。
+ 在英式英語中/ɑ/音標通常寫作/ɑː/。注意在美式英語中它的發音與/ʌ/有很大區別。還有/ɑ/與漢語拼音中\"a\"也不同。(在國際音標中,漢語拼音的\"a\"寫作/a/)。
+ 在英式英語中/u/音標通常寫作/uː/,但是像/iː/、/aː/、/ɔː/這些長元音的點在美式英語中不必加。美式英語中所有重讀的元音在濁輔音前發長音,清輔音前發短音。
+ /ɪ/與/i/發音不同。在長音與短音方面區別不是很大,最主要的區別是你嘴型的大小和舌頭的位置。跟/i/音相比,嘴要稍微再咧開一點,舌頭的放置要靠後一點。
+ /ʊ/與/u/發音不同。在長音與短音方面區別不是很大,而是嘴型的大小和舌頭的位置。
+ /ʌ/與/ɑ/讀音不同。在長音與短音方面區別不是很大,而是嘴型的大小和舌頭的位置。注意它的發音與英式英語/ʌ/音標的發音稍微有所不同。當/ʌ/不讀成重音時,通常寫成/ə/。
+ 英式英語的音標中使用/e/音標來表示這個發音。實際上,根據標準國際音標它應該被寫成/ɛ/。嘴張開的程度比/æ/小,舌尖更靠前一點。
+ 發/æ/音時,嘴張開的程度要像/ɑ/一樣大,嘴角像/ɛ/那樣拉向兩邊,但舌頭應該比/ɛ/更往後一些。
+ 根據國際音標,美式英語中使用的/ɔ/這個音標應該被寫成/ɒ/,但為了和大多數詞典保持一致,我們使用了/ɔ/。(注意,/ɔː/用於英式音標時發音是不一樣的,英式音標的/ɔː/是標準國際音標。)大約40%的美國人不發這個音,他們用/ɑ/代替,上述的例子可以這樣發音:/ɑt/,/kɑt/,和/sɑ/。
+ 元音/ə/是美式發音中最常見的一個音。它常用於非重讀音節的單詞。當此元音重讀時通常寫成/ʌ/。
+ /eɪ/是雙元音。它由/e/和/ɪ/兩個單音組成。在有些美式發音的詞典中有時也寫成/e/。不要與英式音標/e/混淆,事實上它發/ɛ/音,美式英語中帶/eɪ/音的詞,英式英語中的發音應該為/ɛi/。但是它們依舊都寫成/eɪ/。
+ /aɪ/是雙元音。它由/a/和/ɪ/兩個單音組成。注意:/aɪ/與/æ/發音不同。
+ /aʊ/是雙元音。它由/a/和/ʊ/兩個單音組成。注意:/aʊ/與/ɔ/發音不同。還要注意/aʊ/與漢語拼音中\"ao\"發音也不同。
+ /ɔɪ/是雙元音。它由/ɔ/和/ɪ/兩個單音組成。/ɔɪ/中的ɔ與此應用中的/ɔ/發音不同。(這是因為在美式英語中,/ɔ/應該寫為/ɒ/。)讀/ɔɪ/時,口型由小而圓開始。
+ /oʊ/是雙元音。它由/o/和/ʊ/兩個單音組成。在有些美式發音的詞典中有時也寫成/o/。注意它與英式發音/əʊ/有輕微的不同。
+ /ɝ/音有時候寫為/ər/或/əɹ/。這是在重讀音節或單音節詞中的發音。當/ɝ/非重讀時,寫成/ɚ/。英式英語中沒有/ɝ/音,美國人發/ɝ/的單詞中英國人發/ɜː/音。
+ /ɚ/的發音與/ɝ/相同,/ɚ/用於輕讀的音節,而/ɝ/用於重讀的音節。它有時寫為/ər/或/əɹ/。英式英語中沒有/ɚ/音,美國人發/ɚ/的單詞中英國人發/ə/音。
+ 根據國際音標更加正確地寫法是/ɑɹ/或者/ɑɚ/。英式英語中沒有/ɑr/音,美國人發/ɑr/的單詞中英國人發/ɑː/音。
+ 根據國際音標更加正確的寫法是/ɛɹ/或者/ɛɚ/。英式英語中沒有/ɛr/音,美國人發/ɛr/的單詞中英國人發/eə/音。
+ 根據國際音標更加正確的寫法是/ɪɹ/或者/ɪɚ/。英式英語中沒有/ɪr/音,美國人發/ɑr/的單詞中英國人發/ɪr/音。
+ 根據國際音標更加正確的寫法是/ɔɹ/或者/ɔɚ/。/ɔr/中的ɔ與此應用中的/ɔ/發音不同。(這是因為在美式英語中,/ɔ/應該寫為/ɒ/。)讀/ɔr/時,口型由小而圓開始。英式英語中沒有/ɔr/音,美國人發/ɔr/的單詞中英國人發/ɔ:/音。
+ 位於詞首時是送氣音[pʰ],但在字母s後和詞尾時是非送氣的[p](跟漢語拼音的\"b\"音一樣)。注意不要把第三個例子讀成/stapə/。
+ 位於詞首時是送氣音[tʰ],但在字母s後和詞尾時是非送氣的[t](跟漢語拼音的\"d\"音一樣)。注意不要把第三個例子讀成/ɪtə/,/ɪts/或/ɪtʰ/,還要注意\"t\"在美式英語發音中經常改變發音,像/ɾ/和/ʔ/。
+ 位於詞首時是送氣音[kʰ],但在字母s後和詞尾時是非送氣的[k](跟漢語拼音的\"g\"音一樣)。注意不要把第三個例子讀成/wikə/。
+ 注意/b/在單詞詞尾的發音,不要把第三個例子讀成/rɪbə/或者是/rɪp/。英語中的/b/和漢語拼音中的\"b\"不同。
+ 注意/d/在單詞詞尾的發音,不要把第三個例子讀成/kɑrdə/或者是/kɑrt/。英語中的/d/和漢語拼音中的\"d\"不同。
+ 注意/g/在單詞詞尾的發音,不要把第三個例子讀成/pɪgə/或者是/pɪk/。英語中的/g/和漢語拼音中的\"g\"不同。
+ 注意/f/在單詞詞尾的發音,不要把第三個例子讀成/ɪfə/。
+ 注意/s/在單詞詞尾的發音,不要把第三個例子讀成/pæsə/。
+ 注意/ʧ/在單詞詞尾的發音,不要把第三個例子讀成/ʧɝʧə/。英語中的/ʧ/和漢語拼音中的\"ch\"、\"q\"不同。(在國際音標中,漢語拼音的\"ch\"是[ʈʂʰ]音,\"q\"是[tɕʰ]音。)
+ 注意/ʃ/在單詞詞尾的發音,不要把第三個例子讀成/æʃə/。英語中的/ʃ/和漢語拼音中的\"sh\"、\"x\"不同。(在國際音標中,漢語拼音的\"sh\"是[ʂ]音,\"x\"是[ɕ]音。)
+ 注意/ʤ/在單詞詞尾的發音,不要把第三個例子讀成/ɛʤə/。英語中的/ʤ/和漢語拼音中的\"zh\"、\"j\"不同。(在國際音標中,漢語拼音的\"zh\"是[ʈʂ]音,\"j\"是[tɕ]音。)
+ /v/和/f/口型相同。唯一的不同之處就是/v/是濁音。注意/v/與/w/兩者發音的不同。發/v/音時,上齒要輕輕接觸下唇。還要注意第三個例子不要讀成/hævə/。
+ /z/和/s/口型相同。唯一的不同之處就是/z/是濁音。不要讀成/dz/。英語中的/z/和漢語拼音中的\"z\"不同。(在國際音標中,漢語拼音的\"z\"是[ts]音,\"c\"是[tsʰ]音。)
+ /ʒ/和/ʃ/口型相同。唯一的不同之處就是/ʒ/是濁音。注意區別/r/和/ʒ/。
+ /ð/和/θ/口型相同,最主要的區別就是/ð/是濁音。發/ð/時舌頭輕觸上齒的底部。
+ 這個音標的發音,舌頭輕微觸到上齒底部,不要讀成/s/。
+ 注意/m/在單詞詞尾的發音,不要把第三個例子讀成/ɑrmə/。
+ 注意/n/在單詞詞尾的發音,不要把第三個例子讀成/sʌnə/。
+ 這個音不會出現在英語單詞的詞首。
+ 這個音不會出現在英語單詞的詞尾。注意/w/和/v/的不同之處。讀/w/音時,嘴唇要形成一個小圓且不要觸碰牙齒。一小部分美國人將\"wh\"音發成/hw/(在國際音標中是/ʍ/)。
+ 這個音不會出現在英語單詞的詞尾。注意year和ear的不同之處。
+ 這個音不會出現在英語單詞的詞尾。注意英語中的/h/與漢語拼音中的\"h\"不同。(在國際音標中,漢語拼音的\"h\"是[x]音。)
+ 當/l/在單詞開頭時,它就讀國際音標中本身的音標。當字母l在單詞詞尾時發音有所不同,它就發國際音標的[ɫ]音。但是在這個應用的練習和考試中,我們用/l/音標代替[ɫ]音(在許多課本和詞典中也是如此)。第二個例子也能寫成/kuəl/,不要把最後倆個例子讀成/kuo/或/bɪo/。你的嘴唇應該放鬆且不能移動。
+ 根據國際音標,這個音應該寫為/ɹ/。(國際音標中的/r/實際上是顫音,就像蒙語中的\"r\")。然而,為了與許多課本和詞典保持一致,在這裡使用/r/音標。要注意/r/和/ʒ/的不同之處,也要注意英語中的/r/與漢語拼音中的\"r\"的不同之處。(在國際音標中,漢語拼音的\"r\"是/ɻ/音。)
+ 這個音被稱作為聲門塞音。在中國的英語課本中通常不講,但是它在美式發音中非常重要。注意例一put的不同發音,/pʊt/與/pʊʔ/。/ʔ/音經常代替/t/音,特別是在單詞詞尾和句子中間。
+ 這個音標叫做齒齦閃音,在中國英語課本中通常不教,但是它在美式發音中非常重要。當/t/音出現在非重讀的音節中並在兩個元音之間,/ɾ/音通常會代替/t/音。儘管不準確,但是/ɾ/音標也可以寫成/d/。這種情況下,上述例子應該被寫成/ˈwɑdɚ/,/ˈlɪdəl/和/\'θɝdi/。
+ 美式發音
+ 輸入音標
+ 人工測試
+ 關於應用
+ 歷史記錄
+ /%1$s/的延伸
+ 雙音標
+ 選擇音標
+ 雙音標
+ 單音標
+ 確定
+ 取消
+ 輔音
+ 元音
+ 姓名
+ 數量:
+ 開始
+ 雙音標
+ 單音標
+ 類型:
+ 測試
+ 考試結果
+ 正確: %1$d
+ 錯誤: %1$d
+ 用時: %1$s
+ 糾錯練習
+ 歷史記錄
+ 總時長
+ 最佳記錄
+ 詳情
+ 時間詳情
+ 測試詳情
+ 美式發音
+ 關於應用
+ 如果你有任何問題或者建議,請聯繫我們。
+ 聯繫方式
+ 已複製
+ 刪除
+ 複製
+ 分享
+ 分享到
+ 輸入音標
+ 測試詳情
+ 確定要全部刪除嗎?
+ 刪除
+ 在此應用以r結尾的只有這5個(ɝ,ɑr,ɛr,ɪr,ɔr),不需要另外加工。
+ 你輸入的是%1$s和%2$s(兩個輔音)。你應該輸入一個元音和一個輔音。
+ 你輸入的是%1$s和%2$s(兩個元音)。你應該輸入一個元音和一個輔音。
+ 你輸入的是%1$s和%2$s。但是%2$s不會出現在單詞結尾。
+ 你輸入的是%1$s和%2$s。但是在英語中,%2$s不會出現在單詞開頭。
+ 知道了
+ 更多示例
+ 學習
+ 練習
+ 測試
+ 單音標
+ 雙音標 (%1$d)
+ 單音標 (%1$d)
+ 雙音標: %1$d%%
+ 單音標: %1$d%%
+ 數量: %1$d
+ 版本%1$s
+ 學習時長
+ 練習時長
+ 考試時長
+ 總時長
+ 雙音標
+ 單音標
+ 無名
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml
old mode 100644
new mode 100755
diff --git a/app/src/main/res/values/bools.xml b/app/src/main/res/values/bools.xml
old mode 100644
new mode 100755
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
old mode 100644
new mode 100755
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
old mode 100644
new mode 100755
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
old mode 100644
new mode 100755
index 73b8d5b..a0cb858
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -6,6 +6,7 @@
Keyboard
History
+ Personal evaluation
About
@@ -86,7 +87,13 @@
Version %1$s
If you have any questions, comments, or suggestions, then please leave a message.
Contact
- http://www.aepronunciation.com/app/
+ http://www.aepronunciation.com
+
+
+
+ A limitation of this app is that it is unable to give you feedback on your actual spoken pronunciation. If you would like the app author to evaluate a recording of your pronunciation, you can use this third-party website.
+ Request evaluation
+ https://www.fiverr.com/suragch/analyze-your-pronunciation-of-american-english
Write IPA
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
old mode 100644
new mode 100755
index d1358c7..e3ba013
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -6,6 +6,7 @@
- @color/primary
- @color/primary_dark
- @color/accent
+ - false