Skip to content

Commit f26438c

Browse files
authored
Merge pull request #28 from DPigeon/integration
V2.4.1: Fast Swap Between Input & Output Language
2 parents a66cb9b + c73f65f commit f26438c

29 files changed

Lines changed: 182 additions & 42 deletions

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,7 @@ To make sure the build passes, run the test script on the root directory
2929
<a href="https://www.flaticon.com/authors/vectors-market">Vectors Market: Document Icon</a>
3030

3131
<a href="https://www.flaticon.com/authors/freepik">Freepik: CameraFlash</a>
32+
33+
<a href="https://www.flaticon.com/authors/google">Google: Swap Language Icon</a> from <a href="https://www.flaticon.com/" title="Flaticon"> www.flaticon.com</a>
34+
35+
<a href="https://www.flaticon.com/authors/kiranshastry">Kiranshastry: Microphone Icon</a> from <a href="https://www.flaticon.com/" title="Flaticon"> www.flaticon.com</a>

app/build.gradle

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ android {
1010
applicationId "com.seetext"
1111
minSdkVersion 23
1212
targetSdkVersion 29
13-
versionCode 3 // Edit when new release
14-
versionName "2.4-alpha" // Edit when new release
13+
versionCode 4 // Edit when new release
14+
versionName "2.4.1-alpha" // Edit when new release
1515
// To improve image processing performance
1616
renderscriptTargetApi 21
1717
renderscriptSupportModeEnabled true
@@ -34,7 +34,10 @@ android {
3434
sourceCompatibility = 1.8
3535
targetCompatibility = 1.8
3636
}
37-
37+
lintOptions {
38+
disable "UnsafeExperimentalUsageError",
39+
"UnsafeExperimentalUsageWarning"
40+
}
3841
}
3942

4043
dependencies {
@@ -56,10 +59,10 @@ dependencies {
5659
implementation 'com.pnikosis:materialish-progress:1.7'
5760

5861
// CameraX core library using the camera2 implementation
59-
def camerax_version = "1.0.0-beta07" // was beta06 before
60-
implementation "androidx.camera:camera-camera2:${camerax_version}"
62+
def cameraX_version = "1.0.0-beta07" // was beta06 before
63+
implementation "androidx.camera:camera-camera2:${cameraX_version}"
6164
// If you want to additionally use the CameraX Lifecycle library
62-
implementation "androidx.camera:camera-lifecycle:${camerax_version}"
65+
implementation "androidx.camera:camera-lifecycle:${cameraX_version}"
6366
// If you want to additionally use the CameraX View class
6467
implementation "androidx.camera:camera-view:1.0.0-alpha14"
6568
// If you want to additionally use the CameraX Extensions library

app/src/androidTest/java/com/seetext/activities/main/MainActivityInstrumentedTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,24 @@ public void testFrontFlashLight() {
141141
onView(withId(R.id.frontCameraOverlayImageView))
142142
.check(matches(isDisplayed()));
143143
}
144+
145+
@Test
146+
public void testSwapLanguageButton() {
147+
int input = 11; // English
148+
int output = 16; // Finnish
149+
mainActivity.setInputLanguage(input);
150+
mainActivity.setOutputLanguage(output);
151+
152+
onView(withId(R.id.swapLanguageImageView))
153+
.perform(click()); // Swap
154+
155+
onView(withId(R.id.inputLanguageTextView))
156+
.check(matches(withText(Utils.getLanguageByTag(output))));
157+
onView(withId(R.id.outputLanguageTextView))
158+
.check(matches(withText(Utils.getLanguageByTag(input))));
159+
onView(withId(R.id.languageTextView))
160+
.check(matches(withText(Utils.getLanguageByTag(input))));
161+
}
144162
}
145163

146164

app/src/main/java/com/seetext/activities/definition/AbstractDefinitionActivity.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package com.seetext.activities.definition;
22

3+
import android.content.Intent;
34
import android.os.Bundle;
45
import android.widget.ListView;
56
import android.widget.Switch;
67
import android.widget.TextView;
78

89
import com.seetext.R;
910
import com.seetext.activities.AbstractActivity;
11+
import com.seetext.activities.main.MainActivity;
1012
import com.seetext.objectdetection.definition.DefinitionListViewAdapter;
1113
import com.seetext.objectdetection.definition.DefinitionRowItem;
1214

@@ -39,4 +41,16 @@ protected void onCreate(Bundle savedInstanceState) {
3941
protected int getLayoutResourceId() {
4042
return R.layout.activity_definition;
4143
}
44+
45+
@Override
46+
public void onBackPressed() {
47+
startActivity(new Intent(this, MainActivity.class));
48+
}
49+
50+
@Override
51+
public boolean onSupportNavigateUp() {
52+
onBackPressed();
53+
overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right);
54+
return true;
55+
}
4256
}

app/src/main/java/com/seetext/activities/main/AbstractMainActivity.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ public abstract class AbstractMainActivity extends AbstractActivity {
5050
protected abstract void startRecognition();
5151
protected abstract void stopListeningSpeech();
5252
protected abstract void goToProfileActivity(String firstTime);
53+
protected abstract void setInputLanguage(int number);
54+
protected abstract void setOutputLanguage(int number);
5355
protected abstract int getInputLanguage();
5456
protected abstract int getOutputLanguage();
5557
protected abstract boolean connectedToInternet();
@@ -61,9 +63,11 @@ public abstract class AbstractMainActivity extends AbstractActivity {
6163
protected static final int MY_PERMISSIONS = 100; // Request code response for camera & microphone
6264
protected int inputLanguage = FirebaseTranslateLanguage.EN;
6365
protected int outputLanguage = FirebaseTranslateLanguage.EN; // Default is english
64-
protected ImageView userProfileImageView, cameraModeImageView, flashLightImageView, languagesImageView, speechDetectionImageView, objectDetectionImageView, faceCheckImageView, audioImageView, frontCameraOverlayImageView;
66+
protected ImageView userProfileImageView, cameraModeImageView, flashLightImageView, languagesImageView, speechDetectionImageView, objectDetectionImageView, faceCheckImageView, audioImageView, frontCameraOverlayImageView, swapLanguageImageView;
6567
protected Spinner languageSpinner;
6668
protected TextView languageTextView;
69+
protected TextView swapInputLanguage;
70+
protected TextView swapOutputLanguage;
6771
protected boolean faceProcessing = false; // For throttling the calls
6872
protected long animationDuration = 1000; // milliseconds
6973
protected boolean faceDetected = false; // For face check imageView anim to run once

app/src/main/java/com/seetext/activities/main/AbstractUIMainActivity.java

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import android.content.Context;
55
import android.graphics.PorterDuff;
66
import android.media.AudioManager;
7-
import android.os.CountDownTimer;
87
import android.util.Log;
98
import android.view.MotionEvent;
109
import android.view.View;
@@ -20,6 +19,7 @@
2019
import com.seetext.Mode;
2120
import com.seetext.R;
2221
import com.seetext.profile.Profile;
22+
import com.seetext.utils.Utils;
2323

2424
import java.util.Objects;
2525
import 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
}

app/src/main/java/com/seetext/activities/profile/AbstractProfileActivity.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.seetext.activities.profile;
22

33
import android.content.Context;
4+
import android.content.Intent;
45
import android.os.Bundle;
56
import android.view.Menu;
67
import android.view.MenuItem;
@@ -12,6 +13,7 @@
1213

1314
import com.seetext.R;
1415
import com.seetext.activities.AbstractActivity;
16+
import com.seetext.activities.main.MainActivity;
1517
import com.seetext.profile.SharedPreferenceHelper;
1618

1719
import java.util.Objects;
@@ -68,4 +70,16 @@ public boolean onOptionsItemSelected(MenuItem item) {
6870
}
6971
return super.onOptionsItemSelected(item);
7072
}
73+
74+
@Override
75+
public void onBackPressed() {
76+
startActivity(new Intent(this, MainActivity.class));
77+
}
78+
79+
@Override
80+
public boolean onSupportNavigateUp() {
81+
onBackPressed();
82+
overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right);
83+
return true;
84+
}
7185
}

app/src/main/java/com/seetext/activities/profile/ProfileActivity.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,5 +119,6 @@ protected void toastMessage(String message) { // Shows a toast message
119119
void goToActivity() { // Function that goes from the main activity to another one
120120
Intent intent = new Intent(ProfileActivity.this, MainActivity.class);
121121
startActivity(intent);
122+
overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right);
122123
}
123124
}

app/src/main/java/com/seetext/utils/GraphicOverlay.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ protected void onDraw(Canvas canvas) {
189189
}
190190
}
191191

192-
/* Performs actions when touching an overlayed object */
192+
/* Performs actions when touching an overlay object */
193193
@Override
194194
public boolean onTouchEvent(MotionEvent event) {
195195
super.onTouchEvent(event);
@@ -203,5 +203,4 @@ public boolean onTouchEvent(MotionEvent event) {
203203
invalidate();
204204
return true;
205205
}
206-
207206
}

app/src/main/java/com/seetext/utils/Utils.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,10 @@ public static ArrayList<String> getLanguageList() {
4242
}
4343

4444
public static String getLanguageByTag(int tag) {
45-
String language = FirebaseTranslateLanguage.languageCodeForLanguage(tag);
45+
String language = "English";
46+
if (tag > 0) {
47+
language = FirebaseTranslateLanguage.languageCodeForLanguage(tag);
48+
}
4649
return Locale.forLanguageTag(language).getDisplayName();
4750
}
4851

0 commit comments

Comments
 (0)