Commit bc5ad9e4 authored by Elodie Gauthier's avatar Elodie Gauthier

fix bug on ElicitationMode. NB: do not update the google-play-services

lib. Use the one in /Dev/ (on https://forge.imag.fr/docman/?group_id=805
)

upgrade Check modes + fix bugs + improve the layouts
+ fix errors in RecordeElicitation

set input "spk_birth_year" to empty if age=0
before the modification we were forced to
entered a date while it is an optional field.

ModeSelection.java: add the treatment of the "non and erase files" case
for CheckMode.

ThumbRespeakActivityLig.java: add a more specific catch
in order to understand why we cannot respeak/translate
an audio file recorded in Elicitation mode.

CheckTranscription.java and CheckWordVariant.java: modification
of the date.

RecordElicitation.java: add the possibility to backup of the current session
when Validate button is pressed.

ModeSelection.java: add the callback to the button "no and erase files"
for all the submodes of Elicitation Mode.

RecordElicitation.java: create a linker file for Elicitation by Text.
parent 9c204d73
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Check transcription mode" android:text="Check transcription mode"
android:layout_marginTop="40dp"
android:layout_marginBottom="20dp"/> android:layout_marginBottom="20dp"/>
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -54,20 +55,23 @@ ...@@ -54,20 +55,23 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Please, listen the audio and check the box if the transcription corresponds." android:text="Please, listen the audio and check the box if the transcription corresponds."
android:layout_marginBottom="25dp" /> android:layout_marginBottom="35dp" />
</TableLayout> </TableLayout>
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" > android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp" >
<TextView <TextView
android:id="@+id/transcription_id" android:id="@+id/transcription_id"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="TextView" android:text="TextView"
android:textSize="20sp" android:textSize="25sp"
android:typeface="serif" /> android:typeface="serif"
/>
<View <View
android:id="@+id/view1" android:id="@+id/view1"
...@@ -82,7 +86,9 @@ ...@@ -82,7 +86,9 @@
android:id="@+id/phrase_player" android:id="@+id/phrase_player"
android:name="org.lp20.aikuma.ui.ListenFragment" android:name="org.lp20.aikuma.ui.ListenFragment"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" /> android:layout_height="match_parent"
android:textSize="30sp"
/>
</LinearLayout> </LinearLayout>
...@@ -90,13 +96,16 @@ ...@@ -90,13 +96,16 @@
android:id="@+id/ll_variant" android:id="@+id/ll_variant"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" > android:orientation="vertical"
android:layout_marginTop="20dp">
</LinearLayout> </LinearLayout>
<LinearLayout <RelativeLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="2" > android:layout_weight="2"
android:layout_marginTop="30dp"
android:layout_marginBottom="20dp" >
<ImageButton <ImageButton
android:id="@+id/btn_next" android:id="@+id/btn_next"
...@@ -106,20 +115,30 @@ ...@@ -106,20 +115,30 @@
android:onClick="onNextClick" android:onClick="onNextClick"
android:src="@drawable/arrow_circle_o_right" /> android:src="@drawable/arrow_circle_o_right" />
</LinearLayout> </RelativeLayout>
<ImageButton <RelativeLayout
android:id="@+id/btn_validate"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="2" android:layout_weight="2"
android:onClick="onValidate" android:layout_marginTop="40dp"
android:src="@drawable/ok_32" /> android:layout_toRightOf="@id/btn_next">
<LinearLayout <ImageButton
android:id="@+id/btn_validate"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="2"
android:onClick="onValidate"
android:src="@drawable/ok_32" />
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal" > android:orientation="horizontal"
android:layout_marginTop="40dp">
<TextView <TextView
android:id="@+id/check_phrase_number" android:id="@+id/check_phrase_number"
......
...@@ -38,14 +38,15 @@ ...@@ -38,14 +38,15 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Check variant mode" android:text="Check variant mode"
android:layout_marginBottom="20dp"/> android:layout_marginBottom="20dp"
android:layout_marginTop="40dp"/>
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0.2dp" android:layout_height="0.2dp"
android:id="@+id/separator" android:id="@+id/separator"
android:visibility="visible" android:visibility="visible"
android:background="@android:color/darker_gray" android:background="@android:color/darker_gray"
android:layout_marginBottom="25dp"/> android:layout_marginBottom="35dp"/>
<TextView <TextView
android:id="@+id/maintextView2" android:id="@+id/maintextView2"
...@@ -64,19 +65,24 @@ ...@@ -64,19 +65,24 @@
android:text="TextView" android:text="TextView"
android:textSize="30sp" android:textSize="30sp"
android:textStyle="bold" android:textStyle="bold"
android:typeface="serif" /> android:typeface="serif"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"/>
<LinearLayout <LinearLayout
android:id="@+id/ll_variant" android:id="@+id/ll_variant"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" > android:orientation="vertical"
android:textSize="25sp" >
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="2" > android:layout_weight="2"
android:layout_marginTop="20dp" >
<ImageButton <ImageButton
android:id="@+id/btn_next" android:id="@+id/btn_next"
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -92,12 +98,14 @@ ...@@ -92,12 +98,14 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="2" android:layout_weight="2"
android:onClick="onValidate" android:onClick="onValidate"
android:src="@drawable/ok_32" /> android:src="@drawable/ok_32"
android:layout_marginTop="40dp"/>
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal" > android:orientation="horizontal"
android:layout_marginTop="40dp" >
<TextView <TextView
android:id="@+id/check_line_number" android:id="@+id/check_line_number"
...@@ -117,8 +125,7 @@ ...@@ -117,8 +125,7 @@
android:id="@+id/seek_check_progression" android:id="@+id/seek_check_progression"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:maxHeight="3dp" android:maxHeight="3dp" />
/>
</LinearLayout> </LinearLayout>
......
...@@ -39,7 +39,9 @@ ...@@ -39,7 +39,9 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Check transcription mode" android:text="Check transcription mode"
android:layout_marginBottom="20dp"/> android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
android:textSize="30sp"/>
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0.2dp" android:layout_height="0.2dp"
...@@ -54,7 +56,8 @@ ...@@ -54,7 +56,8 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Please, listen the audio and check the box if the transcription corresponds." android:text="Please, listen the audio and check the box if the transcription corresponds."
android:layout_marginBottom="25dp" /> android:layout_marginBottom="25dp"
android:textSize="20sp"/>
</TableLayout> </TableLayout>
<LinearLayout <LinearLayout
...@@ -82,7 +85,8 @@ ...@@ -82,7 +85,8 @@
android:id="@+id/phrase_player" android:id="@+id/phrase_player"
android:name="org.lp20.aikuma.ui.ListenFragment" android:name="org.lp20.aikuma.ui.ListenFragment"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" /> android:layout_height="match_parent"
android:textSize="23sp"/>
</LinearLayout> </LinearLayout>
...@@ -96,7 +100,8 @@ ...@@ -96,7 +100,8 @@
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="2" > android:layout_weight="2"
android:layout_marginTop="20dp">
<ImageButton <ImageButton
android:id="@+id/btn_next" android:id="@+id/btn_next"
...@@ -114,12 +119,14 @@ ...@@ -114,12 +119,14 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="2" android:layout_weight="2"
android:onClick="onValidate" android:onClick="onValidate"
android:src="@drawable/ok_32" /> android:src="@drawable/ok_32"
android:layout_marginTop="20dp"/>
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal" > android:orientation="horizontal"
android:layout_marginTop="20dp">
<TextView <TextView
android:id="@+id/check_phrase_number" android:id="@+id/check_phrase_number"
......
...@@ -39,22 +39,24 @@ ...@@ -39,22 +39,24 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Check variant mode" android:text="Check variant mode"
android:layout_marginBottom="20dp"/> android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
android:textSize="30sp"/>
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0.2dp" android:layout_height="0.2dp"
android:id="@+id/separator" android:id="@+id/separator"
android:visibility="visible" android:visibility="visible"
android:background="@android:color/darker_gray" android:background="@android:color/darker_gray"
android:layout_marginBottom="25dp"/> android:layout_marginBottom="25dp"/>
<TextView <TextView
android:id="@+id/maintextView2" android:id="@+id/maintextView2"
style="@style/SecondTitle" style="@style/SecondTitle"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Please, read the bold line and check the box if the word is a variant." android:text="Please, read the bold line and check the box if the word is a variant."
android:layout_marginBottom="25dp" /> android:layout_marginBottom="25dp"
android:textSize="20sp"/>
</TableLayout> </TableLayout>
<TextView <TextView
...@@ -79,13 +81,15 @@ ...@@ -79,13 +81,15 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingBottom="20dp" android:paddingBottom="20dp"
android:text="Variant" android:text="Variant"
android:textSize="15sp" /> android:textSize="23sp" />
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="2" > android:layout_weight="2"
android:layout_marginTop="20dp"
android:layout_marginBottom="10dp">
<ImageButton <ImageButton
android:id="@+id/btn_next" android:id="@+id/btn_next"
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -106,7 +110,8 @@ ...@@ -106,7 +110,8 @@
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal" > android:orientation="horizontal"
android:layout_marginTop="20dp">
<TextView <TextView
android:id="@+id/check_line_number" android:id="@+id/check_line_number"
......
...@@ -412,7 +412,7 @@ ...@@ -412,7 +412,7 @@
android:id="@+id/textView17" android:id="@+id/textView17"
android:text="@string/speaker_name" android:text="@string/speaker_name"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/respeak_TextviewMetadata4"/> style="@style/respeak_TextviewMetadata2"/>
<EditText <EditText
android:id="@+id/respeak_edit_spkr_name" android:id="@+id/respeak_edit_spkr_name"
......
...@@ -5,12 +5,12 @@ import java.io.File; ...@@ -5,12 +5,12 @@ import java.io.File;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.LinkedList;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Random; import java.util.Random;
import java.util.zip.Inflater;
import org.lp20.aikuma.model.Language;
import org.lp20.aikuma.model.RecordingLig;
import org.lp20.aikuma.ui.CheckMode; import org.lp20.aikuma.ui.CheckMode;
import org.lp20.aikuma.ui.CheckTranscription; import org.lp20.aikuma.ui.CheckTranscription;
import org.lp20.aikuma.ui.CheckWordVariant; import org.lp20.aikuma.ui.CheckWordVariant;
...@@ -19,9 +19,9 @@ import org.lp20.aikuma.ui.RecordElicitation; ...@@ -19,9 +19,9 @@ import org.lp20.aikuma.ui.RecordElicitation;
import org.lp20.aikuma.ui.RecordingMetadataLig; import org.lp20.aikuma.ui.RecordingMetadataLig;
import org.lp20.aikuma.ui.RespeakingSelection; import org.lp20.aikuma.ui.RespeakingSelection;
import org.lp20.aikuma.ui.ThumbRespeakActivityLig; import org.lp20.aikuma.ui.ThumbRespeakActivityLig;
import org.lp20.aikuma.ui.ThumbRespeakSummaryLig;
import org.lp20.aikuma.ui.sensors.LocationDetector; import org.lp20.aikuma.ui.sensors.LocationDetector;
import org.lp20.aikuma.util.AikumaSettings; import org.lp20.aikuma.util.AikumaSettings;
import org.lp20.aikuma.util.FileIO;
import org.lp20.aikuma2.R; import org.lp20.aikuma2.R;
import android.app.Activity; import android.app.Activity;
...@@ -179,7 +179,7 @@ public class ModeSelection extends Activity implements OnClickListener{ ...@@ -179,7 +179,7 @@ public class ModeSelection extends Activity implements OnClickListener{
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
Log.i(TAG,"yes"); Log.i(TAG,"yes, retrieve the session");
retrieveSession(); retrieveSession();
} }
}) })
...@@ -187,21 +187,21 @@ public class ModeSelection extends Activity implements OnClickListener{ ...@@ -187,21 +187,21 @@ public class ModeSelection extends Activity implements OnClickListener{
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
Log.i(TAG,"no but keep"); Log.i(TAG,"no don't retrieve the session but keep files");
prefsUserSession = getSharedPreferences(getString(R.string.userSession), MODE_PRIVATE); prefsUserSession = getSharedPreferences(getString(R.string.userSession), MODE_PRIVATE);
// TODO complete -> what behaviour to adopt? clear sharedPrefs? removes files ? //clear sharedPrefs
ed.clear(); ed.clear();
// ed.putBoolean(getString(R.string.sessionActive), false);
ed.commit(); ed.commit();
} }
}) })
.setNeutralButton("No, but erase files", new DialogInterface.OnClickListener() { .setNeutralButton("No, and erase files", new DialogInterface.OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
Log.i(TAG,"no and erase"); Log.i(TAG,"no don't retrieve the session and erase files");
prefsUserSession = getSharedPreferences(getString(R.string.userSession), MODE_PRIVATE); //remove files
// TODO complete -> what behaviour to adopt? clear sharedPrefs? removes files ? eraseFiles();
//clear sharedPrefs
ed.clear(); ed.clear();
// ed.putBoolean(getString(R.string.sessionActive), false); // ed.putBoolean(getString(R.string.sessionActive), false);
ed.commit(); ed.commit();
...@@ -212,13 +212,9 @@ public class ModeSelection extends Activity implements OnClickListener{ ...@@ -212,13 +212,9 @@ public class ModeSelection extends Activity implements OnClickListener{
public void retrieveSession() { public void retrieveSession() {
String mode = prefsUserSession.getString(getString(R.string.sessionMode), null); String mode = prefsUserSession.getString(getString(R.string.sessionMode), null);
Log.d(TAG, "mode retrieval: "+mode);
Intent intent; Intent intent;
// if (mode.compareTo(ThumbRespeakSummaryLig.TAG) == 0) { if (mode.compareToIgnoreCase(CheckTranscription.TAG) == 0) {
//
// } else if (mode.compareTo(RecordElicitation.TAG) == 0) {
//
// } else
if (mode.compareToIgnoreCase(CheckTranscription.TAG) == 0) {
intent = new Intent(getActivity(), CheckTranscription.class); intent = new Intent(getActivity(), CheckTranscription.class);
} else if (mode.compareToIgnoreCase(CheckWordVariant.TAG) == 0) { } else if (mode.compareToIgnoreCase(CheckWordVariant.TAG) == 0) {
intent = new Intent(getActivity(), CheckWordVariant.class); intent = new Intent(getActivity(), CheckWordVariant.class);
...@@ -226,8 +222,8 @@ public class ModeSelection extends Activity implements OnClickListener{ ...@@ -226,8 +222,8 @@ public class ModeSelection extends Activity implements OnClickListener{
intent = new Intent(getActivity(), ThumbRespeakActivityLig.class); intent = new Intent(getActivity(), ThumbRespeakActivityLig.class);
} else if (mode.compareToIgnoreCase(RecordElicitation.TAG) == 0) { } else if (mode.compareToIgnoreCase(RecordElicitation.TAG) == 0) {
intent = new Intent(getActivity(), RecordElicitation.class); intent = new Intent(getActivity(), RecordElicitation.class);
}else { } else {
Toast.makeText(getActivity(), "An error ocurred, the session could not be retrieved", Toast.LENGTH_LONG).show(); Toast.makeText(getActivity(), "An error ocurred. The session could not be retrieved", Toast.LENGTH_LONG).show();
return; return;
} }
startActivity(intent); startActivity(intent);
...@@ -283,5 +279,70 @@ public class ModeSelection extends Activity implements OnClickListener{ ...@@ -283,5 +279,70 @@ public class ModeSelection extends Activity implements OnClickListener{
((TextView) ll.findViewById(R.id.session_input_file)).setText(file); ((TextView) ll.findViewById(R.id.session_input_file)).setText(file);
} }
} }
public void eraseFiles() {
File savedFile;
String savedMode = prefsUserSession.getString(getString(R.string.sessionMode), null);
String savedSubmode = prefsUserSession.getString(getString(R.string.session_submode), "undefined");
Log.d(TAG, "saved mode: "+savedMode);
Log.d(TAG, "saved submode: "+savedSubmode);
/*Check Mode*/
if (savedMode.compareToIgnoreCase(CheckWordVariant.TAG) == 0 || savedMode.compareTo(CheckTranscription.TAG) == 0) {
savedFile = new File(prefsUserSession.getString(getString(R.string.sessionCheckExportFile),"undefined"));
Log.d(TAG, "saved file: "+savedFile);
savedFile.delete();
Log.i(TAG, "saved file erased: "+savedFile);
/*Elicitation Mode*/
} else if (savedMode.compareToIgnoreCase(RecordElicitation.TAG) == 0) {
Log.d(TAG, "saved submode: "+savedSubmode);
String idDevice = Aikuma.getDeviceId();
String savedDate = prefsUserSession.getString(getString(R.string.sessionDate), "");
Language savedRecordLang = new Language(prefsUserSession.getString(getString(R.string.language_name), ""),
prefsUserSession.getString(getString(R.string.languageCode), ""));
String name = savedDate + "_" +
savedRecordLang.getCode() + "_" + idDevice;
//erase linker
File savedTextFile = new File(FileIO.getOwnerPath()+"/recordings/"+name + "/" + name + "_linker.txt");
Log.d(TAG, "saved linker file: "+savedTextFile);
savedTextFile.delete();
Log.i(TAG, "saved file erased: "+savedTextFile);
//erase metadata and audio files
int savedProgress = prefsUserSession.getInt(getString(R.string.currentLine), 0);
Log.d(TAG, "saved progress: "+savedProgress);
for (int i=savedProgress; i>=0; i--) {
File savedMetadataFile = new File(FileIO.getOwnerPath()+"/recordings/"+name + "/" + name + "_" + i + RecordingLig.METADATA_SUFFIX);
File savedWavFile = new File(FileIO.getOwnerPath()+"/recordings/"+name + "/" + name + "_" + i +".wav");
Log.d(TAG, "saved metadata file: "+savedMetadataFile);
Log.d(TAG, "saved metadata file: "+savedWavFile);
savedMetadataFile.delete();
savedWavFile.delete();
Log.i(TAG, "saved metadata file erased: "+savedMetadataFile);
Log.i(TAG, "saved audio erased: "+savedWavFile);
}
/*Respeaking or Translating Mode*/
/*TODO
* Erase the respeaking or translating files if the
* user does not want to save its session
* nor its recordings
*/
} else if (savedMode.compareToIgnoreCase(ThumbRespeakActivityLig.TAG) == 0) {
if (savedSubmode.compareToIgnoreCase(getString(R.string.respeak)) == 0) {
/*TODO
* erase the _rspk files
*/
} else if (savedSubmode.compareToIgnoreCase(getString(R.string.translation)) == 0) {
/*TODO
* erase the _trsl files
*/
}
}
Toast.makeText(this, "Session and files erased.", Toast.LENGTH_LONG).show();
}
} }
package org.lp20.aikuma.ui; package org.lp20.aikuma.ui;
import java.io.BufferedInputStream;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.BufferedWriter; import java.io.BufferedWriter;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.Locale; import java.util.Locale;
import java.util.UUID;
import org.apache.commons.io.FileUtils;
import org.lp20.aikuma.Aikuma;
import org.lp20.aikuma.MainActivity;
import org.lp20.aikuma.ModeSelection;
import org.lp20.aikuma.model.Language;
import org.lp20.aikuma.util.AikumaSettings;
import org.lp20.aikuma.util.FileIO;
import org.lp20.aikuma2.R; import org.lp20.aikuma2.R;