Skip to content

Commit 615f5d4

Browse files
author
Matthew Barnard
committed
FirebaseStorage/dynamic language selection
1 parent 8dba268 commit 615f5d4

File tree

7 files changed

+204
-23
lines changed

7 files changed

+204
-23
lines changed

app/build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,13 @@ dependencies {
3434
implementation 'com.google.firebase:firebase-ml-vision:24.0.1'
3535
implementation 'com.google.firebase:firebase-ml-natural-language:22.0.0'
3636
implementation 'com.google.firebase:firebase-ml-natural-language-translate-model:20.0.7'
37+
implementation 'com.google.firebase:firebase-ml-natural-language-translate-model:19.0.0'
3738
implementation 'com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7'
3839
implementation 'com.google.firebase:firebase-auth:19.2.0'
3940
implementation 'com.google.android.gms:play-services-auth:17.0.0'
41+
implementation 'com.google.firebase:firebase-firestore:21.3.1'
42+
43+
4044
}
4145

4246
apply plugin: 'com.google.gms.google-services'

app/google-services.json

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,14 @@
1414
}
1515
},
1616
"oauth_client": [
17+
{
18+
"client_id": "930445243029-22sara4qugm5h9t3t4n3m04h5nre4sol.apps.googleusercontent.com",
19+
"client_type": 1,
20+
"android_info": {
21+
"package_name": "com.example.menumap",
22+
"certificate_hash": "d1c2b9843dffe04173dfd77d169056dc6aed4f67"
23+
}
24+
},
1725
{
1826
"client_id": "930445243029-agaoneokk1rtanp2m4h022rdofugodp7.apps.googleusercontent.com",
1927
"client_type": 3
@@ -28,7 +36,7 @@
2836
"appinvite_service": {
2937
"other_platform_oauth_client": [
3038
{
31-
"client_id": "930445243029-agaoneokk1rtanp2m4h022rdofugodp7.apps.googleusercontent.com",
39+
"client_id": "930445243029-hpqrjr81777u3c3c7mj2rf8pilanauar.apps.googleusercontent.com",
3240
"client_type": 3
3341
}
3442
]

app/src/main/AndroidManifest.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,11 @@
1313
android:theme="@style/AppTheme">
1414
<activity
1515
android:name=".SignInActivity">
16+
<intent-filter>
17+
<action android:name="android.intent.action.MAIN" />
1618

19+
<category android:name="android.intent.category.LAUNCHER" />
20+
</intent-filter>
1721
</activity>
1822

1923
<meta-data
@@ -22,11 +26,7 @@
2226
<activity
2327
android:name=".MainActivity"
2428
android:label="@string/app_name">
25-
<intent-filter>
26-
<action android:name="android.intent.action.MAIN" />
2729

28-
<category android:name="android.intent.category.LAUNCHER" />
29-
</intent-filter>
3030
</activity>
3131
<activity android:name=".CameraActivity"></activity>
3232
</application>

app/src/main/java/com/example/menumap/CameraActivity.java

Lines changed: 105 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,16 @@
2020
import androidx.annotation.NonNull;
2121
import androidx.annotation.RequiresApi;
2222
import androidx.appcompat.app.AppCompatActivity;
23+
24+
import com.google.android.gms.tasks.OnCompleteListener;
2325
import com.google.android.gms.tasks.OnFailureListener;
2426
import com.google.android.gms.tasks.OnSuccessListener;
2527
import com.google.android.gms.tasks.Task;
28+
import com.google.firebase.auth.FirebaseAuth;
29+
import com.google.firebase.auth.FirebaseUser;
30+
import com.google.firebase.firestore.DocumentReference;
31+
import com.google.firebase.firestore.DocumentSnapshot;
32+
import com.google.firebase.firestore.FirebaseFirestore;
2633
import com.google.firebase.ml.common.modeldownload.FirebaseModelDownloadConditions;
2734
import com.google.firebase.ml.naturallanguage.FirebaseNaturalLanguage;
2835
import com.google.firebase.ml.naturallanguage.languageid.FirebaseLanguageIdentification;
@@ -35,7 +42,9 @@
3542
import com.google.firebase.ml.vision.text.FirebaseVisionText;
3643
import com.google.firebase.ml.vision.text.FirebaseVisionTextRecognizer;
3744

45+
import java.util.HashMap;
3846
import java.util.Locale;
47+
import java.util.Map;
3948

4049
public class CameraActivity extends AppCompatActivity implements View.OnClickListener{
4150

@@ -49,8 +58,8 @@ public class CameraActivity extends AppCompatActivity implements View.OnClickLis
4958
private Button mBackBtn;
5059
private Button mAddBtn;
5160
private FirebaseVisionTextRecognizer mDetector;
52-
53-
61+
private FirebaseFirestore mDB;
62+
private DocumentSnapshot user;
5463

5564
@Override
5665
protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -71,9 +80,11 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
7180
mAddBtn = findViewById(R.id.addBtn);
7281
mDetector = FirebaseVision.getInstance()
7382
.getCloudTextRecognizer();
74-
83+
mDB = FirebaseFirestore.getInstance();
84+
DocumentSnapshot user;
7585
processImage(photo);
7686

87+
getUser();
7788
}
7889
private FirebaseVisionImage imageFromBitmap(Bitmap bitmap) {
7990
// [START image_from_bitmap]
@@ -130,17 +141,13 @@ public void onFailure(@NonNull Exception e) {
130141
}
131142

132143
public void downloadTranslator(String text) {
133-
int sourceLanguage = 0;
134-
try {
135-
sourceLanguage = FirebaseTranslateLanguage
136-
.languageForLanguageCode(text);
137-
} catch (NullPointerException e) {
138-
e.printStackTrace();
139-
}
144+
int sourceLanguage = getLang(user.get("sourceLangPref").toString());
145+
int targetLanguage = getLang(user.get("targetLangPref").toString());
146+
140147
FirebaseTranslatorOptions options =
141148
new FirebaseTranslatorOptions.Builder()
142149
.setSourceLanguage(sourceLanguage)
143-
.setTargetLanguage(FirebaseTranslateLanguage.EN)
150+
.setTargetLanguage(targetLanguage)
144151
.build();
145152
final FirebaseTranslator langTranslator =
146153
FirebaseNaturalLanguage.getInstance().getTranslator(options);
@@ -194,15 +201,101 @@ public void onFailure(@NonNull Exception e) {
194201

195202
@Override
196203
public void onClick(View v) {
204+
197205
if(v == mTranslateBtn) {
198206
mTranslateView.setVisibility(View.VISIBLE);
199207
mTranslateView.setText(mTranslateText);
208+
200209
}
201210
else if(v == mBackBtn) {
202211
finish();
203212
}
204213
else {
205-
214+
addToDB();
206215
}
207216
}
217+
218+
public void addToDB() {
219+
220+
221+
String[] translateArray = mTranslateText.split("\\s+");
222+
String[] resultArray = mResultText.split("\\s+");
223+
224+
for (int i = 0; i < resultArray.length; i++) {
225+
226+
Map<String, String> translation = new HashMap<>();
227+
translation.put("sourceText", resultArray[i]);
228+
// replace with actual values
229+
translation.put("sourceLang", user.get("sourceLangPref").toString());
230+
translation.put("resultText", translateArray[i]);
231+
translation.put("resultLang", user.get("targetLangPref").toString());
232+
233+
mDB.collection("translations")
234+
.add(translation)
235+
.addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
236+
@Override
237+
public void onSuccess(DocumentReference documentReference) {
238+
Log.d("added doc", documentReference.getId());
239+
}
240+
})
241+
.addOnFailureListener(new OnFailureListener() {
242+
@Override
243+
public void onFailure(@NonNull Exception e) {
244+
e.printStackTrace();
245+
}
246+
});
247+
248+
}
249+
}
250+
251+
252+
253+
private void getUser(){
254+
FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
255+
DocumentReference docRef = mDB.collection("users").document(currentUser.getUid());
256+
257+
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
258+
@Override
259+
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
260+
if (task.isSuccessful()) {
261+
DocumentSnapshot document = task.getResult();
262+
if (document.exists()){
263+
user = document;
264+
}
265+
else {
266+
Log.d("not found", "no doc");
267+
}
268+
}
269+
else {
270+
Log.d("get failed", task.getException().toString());
271+
}
272+
}
273+
});
274+
}
275+
276+
private int getLang(String lang) {
277+
switch (lang) {
278+
case "English":
279+
return FirebaseTranslateLanguage.EN;
280+
case "Spanish":
281+
return FirebaseTranslateLanguage.ES;
282+
case "Chinese":
283+
return FirebaseTranslateLanguage.ZH;
284+
case "French":
285+
return FirebaseTranslateLanguage.FR;
286+
case "Dutch":
287+
return FirebaseTranslateLanguage.NL;
288+
case "German":
289+
return FirebaseTranslateLanguage.DE;
290+
case "Korean":
291+
return FirebaseTranslateLanguage.KO;
292+
case "Japanese":
293+
return FirebaseTranslateLanguage.JA;
294+
case "Russian":
295+
return FirebaseTranslateLanguage.RU;
296+
297+
}
298+
299+
return -1;
300+
}
208301
}

app/src/main/java/com/example/menumap/SignInActivity.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,26 @@
1414
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
1515
import com.google.android.gms.common.api.ApiException;
1616
import com.google.android.gms.tasks.OnCompleteListener;
17+
import com.google.android.gms.tasks.OnFailureListener;
18+
import com.google.android.gms.tasks.OnSuccessListener;
1719
import com.google.android.gms.tasks.Task;
1820
import com.google.android.material.snackbar.Snackbar;
1921
import com.google.firebase.auth.AuthCredential;
2022
import com.google.firebase.auth.AuthResult;
2123
import com.google.firebase.auth.FirebaseAuth;
2224
import com.google.firebase.auth.FirebaseUser;
2325
import com.google.firebase.auth.GoogleAuthProvider;
26+
import com.google.firebase.firestore.DocumentReference;
27+
import com.google.firebase.firestore.FirebaseFirestore;
28+
29+
import java.util.HashMap;
30+
import java.util.Map;
2431

2532
public class SignInActivity extends AppCompatActivity implements View.OnClickListener {
2633

2734
GoogleSignInClient mGoogleSignInClient;
2835
private FirebaseAuth mAuth;
36+
private FirebaseFirestore mDB;
2937

3038

3139
@Override
@@ -42,6 +50,7 @@ protected void onCreate(Bundle savedInstanceState) {
4250
mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
4351

4452
mAuth = FirebaseAuth.getInstance();
53+
mDB = FirebaseFirestore.getInstance();
4554

4655
findViewById(R.id.sign_in_button).setOnClickListener(this);
4756
}
@@ -82,7 +91,26 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
8291
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
8392
try {
8493
// Google Sign In was successful, authenticate with Firebase
85-
GoogleSignInAccount account = task.getResult(ApiException.class);
94+
final GoogleSignInAccount account = task.getResult(ApiException.class);
95+
96+
Map<String, String> user = new HashMap<>();
97+
user.put("email", account.getEmail());
98+
99+
mDB.collection("users").document(account.getId())
100+
.set(user)
101+
.addOnSuccessListener(new OnSuccessListener<Void>() {
102+
@Override
103+
public void onSuccess(Void aVoid) {
104+
Log.d("user created", account.getId());
105+
}
106+
})
107+
.addOnFailureListener(new OnFailureListener() {
108+
@Override
109+
public void onFailure(@NonNull Exception e) {
110+
e.printStackTrace();
111+
}
112+
});
113+
86114
firebaseAuthWithGoogle(account);
87115
} catch (ApiException e) {
88116
// Google Sign In failed, update UI appropriately

app/src/main/java/com/example/menumap/ui/notifications/NotificationsFragment.java

Lines changed: 52 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,28 @@
1717
import android.widget.ArrayAdapter;
1818

1919
import com.example.menumap.R;
20+
import com.example.menumap.ui.dashboard.DashboardFragment;
21+
import com.google.android.gms.tasks.OnFailureListener;
22+
import com.google.android.gms.tasks.OnSuccessListener;
23+
import com.google.firebase.auth.FirebaseAuth;
24+
import com.google.firebase.auth.FirebaseUser;
25+
import com.google.firebase.firestore.FirebaseFirestore;
26+
import com.google.firebase.firestore.SetOptions;
27+
28+
import java.util.HashMap;
29+
import java.util.Map;
2030

2131
public class NotificationsFragment extends Fragment {
2232

2333
private NotificationsViewModel notificationsViewModel;
34+
private FirebaseFirestore mDB;
2435

2536
public View onCreateView(@NonNull LayoutInflater inflater,
2637
ViewGroup container, Bundle savedInstanceState) {
2738
notificationsViewModel =
2839
ViewModelProviders.of(this).get(NotificationsViewModel.class);
2940
View root = inflater.inflate(R.layout.fragment_notifications, container, false);
30-
41+
DashboardFragment cameraFragment = (DashboardFragment) getFragmentManager().findFragmentById(R.id.navigation_dashboard);
3142
Spinner language_spinner = (Spinner) root.findViewById(R.id.language_spinner);
3243
Spinner targetSpinner = (Spinner) root.findViewById(R.id.targetSpinner);
3344

@@ -42,11 +53,31 @@ public View onCreateView(@NonNull LayoutInflater inflater,
4253
targetSpinner.setAdapter(languageAdapter);
4354
//The code below gets the string value of the language selected
4455

56+
mDB = FirebaseFirestore.getInstance();
57+
final FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
58+
4559
language_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
4660
@Override
4761
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
48-
String selected_language = adapterView.getItemAtPosition(i).toString();
49-
Log.d("Language Chosen: ", selected_language);
62+
final String selected_language = adapterView.getItemAtPosition(i).toString();
63+
64+
Map<String, String> lang = new HashMap<>();
65+
lang.put("sourceLangPref", selected_language);
66+
67+
mDB.collection("users").document(currentUser.getUid())
68+
.set(lang, SetOptions.merge())
69+
.addOnSuccessListener(new OnSuccessListener<Void>() {
70+
@Override
71+
public void onSuccess(Void aVoid) {
72+
Log.d("source lang update", selected_language);
73+
}
74+
})
75+
.addOnFailureListener(new OnFailureListener() {
76+
@Override
77+
public void onFailure(@NonNull Exception e) {
78+
e.printStackTrace();
79+
}
80+
});
5081
}
5182

5283
@Override
@@ -57,8 +88,24 @@ public void onNothingSelected(AdapterView<?> adapterView) {
5788
targetSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
5889
@Override
5990
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
60-
String selected_language = adapterView.getItemAtPosition(i).toString();
61-
Log.d("Language Chosen: ", selected_language);
91+
final String selected_language = adapterView.getItemAtPosition(i).toString();
92+
Map<String, String> lang = new HashMap<>();
93+
lang.put("targetLangPref", selected_language);
94+
95+
mDB.collection("users").document(currentUser.getUid())
96+
.set(lang, SetOptions.merge())
97+
.addOnSuccessListener(new OnSuccessListener<Void>() {
98+
@Override
99+
public void onSuccess(Void aVoid) {
100+
Log.d("source lang update", selected_language);
101+
}
102+
})
103+
.addOnFailureListener(new OnFailureListener() {
104+
@Override
105+
public void onFailure(@NonNull Exception e) {
106+
e.printStackTrace();
107+
}
108+
});
62109
}
63110

64111
@Override

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,5 @@
3131
<item>Japanese</item>
3232
<item>Russian</item>
3333
</string-array>
34+
<string name="server_client_id">http://930445243029-agaoneokk1rtanp2m4h022rdofugodp7.apps.googleusercontent.com</string>
3435
</resources>

0 commit comments

Comments
 (0)