44import android .content .Context ;
55import android .graphics .PorterDuff ;
66import android .media .AudioManager ;
7- import android .os .CountDownTimer ;
87import android .util .Log ;
98import android .view .MotionEvent ;
109import android .view .View ;
2019import com .seetext .Mode ;
2120import com .seetext .R ;
2221import com .seetext .profile .Profile ;
22+ import com .seetext .utils .Utils ;
2323
2424import java .util .Objects ;
2525import java .util .concurrent .ExecutionException ;
@@ -32,7 +32,6 @@ public abstract class AbstractUIMainActivity extends AbstractMainActivity {
3232
3333 protected abstract void bindPreview (ProcessCameraProvider cameraProvider , int lensFacing );
3434 protected abstract void rebindPreview ();
35- protected abstract void setOutputLanguage (int languageId );
3635 protected abstract void flashLight (boolean flashLightStatus );
3736 protected abstract void startTTS (String ttsSentence );
3837
@@ -54,6 +53,10 @@ public void setupUI() {
5453 speechTextView = findViewById (R .id .speechTextView );
5554 faceCheckImageView = findViewById (R .id .faceCheckImageView );
5655 frontCameraOverlayImageView = findViewById (R .id .frontCameraOverlayImageView );
56+ swapLanguageImageView = findViewById (R .id .swapLanguageImageView );
57+ swapInputLanguage = findViewById (R .id .inputLanguageTextView );
58+ swapOutputLanguage = findViewById (R .id .outputLanguageTextView );
59+
5760 graphicOverlay = findViewById (R .id .graphicOverlay );
5861 progressOverlay = findViewById (R .id .progress_overlay );
5962 languageSpinner = findViewById (R .id .languageSpinner );
@@ -67,6 +70,7 @@ public void setupUI() {
6770 setOnTouchListener (speechDetectionImageView , R .drawable .speech_detection );
6871 setOnTouchListener (objectDetectionImageView , R .drawable .objects_detection );
6972 setOnTouchListener (audioImageView , R .drawable .tts_audio );
73+ setOnTouchListener (swapLanguageImageView , R .drawable .swap_language );
7074
7175 ArrayAdapter <CharSequence > adapter = ArrayAdapter .createFromResource (this , R .array .languages_array , android .R .layout .simple_spinner_item );
7276 adapter .setDropDownViewResource (android .R .layout .simple_spinner_dropdown_item );
@@ -75,6 +79,8 @@ public void setupUI() {
7579
7680 frontCameraOverlayImageView .setVisibility (View .INVISIBLE );
7781
82+ setSwapLanguageTextViews ();
83+
7884 cameraProviderFuture = ProcessCameraProvider .getInstance (this );
7985 cameraProviderFuture .addListener (() -> {
8086 try {
@@ -89,6 +95,7 @@ public void setupUI() {
8995 speechDetectionImageView .setImageResource (R .drawable .speech_detection_enabled );
9096 } else {
9197 objectDetectionImageView .setImageResource (R .drawable .objects_detection_enabled );
98+ toggleFastSwapLanguages (View .INVISIBLE );
9299 }
93100 }
94101
@@ -114,6 +121,7 @@ public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l)
114121 Profile profile = new Profile (getInputLanguage (), getOutputLanguage (), lensFacing , currentMode .ordinal ());
115122 sharedPreferenceHelper .saveProfile (profile );
116123 languageTextView .setText (item );
124+ swapOutputLanguage .setText (item );
117125 }
118126 }
119127
@@ -143,6 +151,8 @@ private void touchActions(int action, int drawable, View view) {
143151 modeAction (Mode .ObjectDetection , R .drawable .speech_detection , R .drawable .objects_detection_enabled );
144152 } else if (drawable == R .drawable .tts_audio ) {
145153 ttsAction ();
154+ } else if (drawable == R .drawable .swap_language ) {
155+ swapLanguage ();
146156 }
147157 }
148158 }
@@ -177,9 +187,11 @@ private void modeAction(Mode mode, int speechDrawable, int objectDetectionDrawab
177187 currentMode = mode ;
178188 if (mode == Mode .SpeechRecognition ) {
179189 faceDetected = false ; // Reset and ready to fire the face check anim
190+ toggleFastSwapLanguages (View .VISIBLE );
180191 } else {
181192 speechTextView .setVisibility (View .INVISIBLE );
182193 audioImageView .setVisibility (View .INVISIBLE );
194+ toggleFastSwapLanguages (View .INVISIBLE );
183195 }
184196 speechDetectionImageView .setImageResource (speechDrawable );
185197 objectDetectionImageView .setImageResource (objectDetectionDrawable );
@@ -204,4 +216,28 @@ private void ttsAction() {
204216 Log .d (TAG , ttsSentence );
205217 }
206218 }
219+
220+ private void setSwapLanguageTextViews () {
221+ if (getInputLanguage () > -1 || getOutputLanguage () > -1 ) {
222+ swapInputLanguage .setText (Utils .getLanguageByTag (getInputLanguage ()));
223+ swapOutputLanguage .setText (Utils .getLanguageByTag (getOutputLanguage ()));
224+ }
225+ }
226+
227+ private void swapLanguage () {
228+ int input = getInputLanguage ();
229+ setInputLanguage (getOutputLanguage ());
230+ setOutputLanguage (input );
231+ setSwapLanguageTextViews (); // Update both swap in and out language
232+ languageTextView .setText (Utils .getLanguageByTag (getOutputLanguage ())); // Update language output
233+
234+ Profile profile = new Profile (getInputLanguage (), getOutputLanguage (), lensFacing , currentMode .ordinal ());
235+ sharedPreferenceHelper .saveProfile (profile );
236+ }
237+
238+ private void toggleFastSwapLanguages (int state ) {
239+ swapInputLanguage .setVisibility (state );
240+ swapLanguageImageView .setVisibility (state );
241+ swapOutputLanguage .setVisibility (state );
242+ }
207243}
0 commit comments