Skip to content

Commit bbf6c2d

Browse files
committed
Initial implementation of model manager
1 parent ff65af5 commit bbf6c2d

8 files changed

Lines changed: 348 additions & 19 deletions

File tree

app/src/main/java/nie/translator/rtranslator/Global.java

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -100,11 +100,13 @@ public void onCreate() {
100100
createNotificationChannel();
101101
}
102102

103-
public void initializeTranslator(NeuralNetworkApi.InitListener initListener){
103+
public void initializeTranslator(Translator.GeneralListener initListener){
104104
if(translator == null) {
105-
translator = new Translator(this, Translator.TRANSLATOR_MODE, initListener);
105+
SharedPreferences sharedPreferences = getSharedPreferences("default", Context.MODE_PRIVATE);
106+
int mode = sharedPreferences.getInt("selectedTranslationModel", Translator.MOZILLA);
107+
translator = new Translator(this, mode, initListener);
106108
}else{
107-
initListener.onInitializationFinished();
109+
initListener.onSuccess();
108110
}
109111
}
110112

@@ -122,6 +124,13 @@ public void initializeBluetoothCommunicator(){
122124
}
123125
}
124126

127+
public void restartTranslator(Translator.GeneralListener listener){
128+
getLanguages(false);
129+
SharedPreferences sharedPreferences = getSharedPreferences("default", Context.MODE_PRIVATE);
130+
int mode = sharedPreferences.getInt("selectedTranslationModel", Translator.MOZILLA);
131+
translator.restart(mode, listener);
132+
}
133+
125134
@Nullable
126135
public ConversationBluetoothCommunicator getBluetoothCommunicator() {
127136
return bluetoothCommunicator;
@@ -172,7 +181,14 @@ public ArrayList<CustomLocale> getTranslatorLanguages(final boolean recycleResul
172181
if (recycleResult && !translatorLanguages.isEmpty()) {
173182
return translatorLanguages;
174183
} else {
175-
ArrayList<CustomLocale> languages = Translator.getSupportedLanguages(Global.this, Translator.TRANSLATOR_MODE);
184+
int mode;
185+
if(translator != null){
186+
mode = translator.getMode();
187+
}else{
188+
SharedPreferences sharedPreferences = getSharedPreferences("default", Context.MODE_PRIVATE);
189+
mode = sharedPreferences.getInt("selectedTranslationModel", Translator.MOZILLA);
190+
}
191+
ArrayList<CustomLocale> languages = Translator.getSupportedLanguages(Global.this, mode);
176192
translatorLanguages = languages;
177193
return languages;
178194
}
@@ -411,8 +427,10 @@ public void setFirstLanguage(CustomLocale language, @Nullable Translator.General
411427
SharedPreferences.Editor editor = sharedPreferences.edit();
412428
editor.putString("firstLanguage", language.getCode());
413429
editor.apply();
414-
if(Translator.TRANSLATOR_MODE == Translator.MOZILLA) {
430+
if(translator.getMode() == Translator.MOZILLA) {
415431
translator.loadMozillaModels(language, getSecondLanguage(true), RTranslatorMode.WALKIE_TALKIE_MODE, listener);
432+
}else{
433+
if(listener != null) listener.onSuccess();
416434
}
417435
}
418436

@@ -422,8 +440,10 @@ public void setSecondLanguage(CustomLocale language, @Nullable Translator.Genera
422440
SharedPreferences.Editor editor = sharedPreferences.edit();
423441
editor.putString("secondLanguage", language.getCode());
424442
editor.apply();
425-
if(Translator.TRANSLATOR_MODE == Translator.MOZILLA) {
443+
if(translator.getMode() == Translator.MOZILLA) {
426444
translator.loadMozillaModels(getFirstLanguage(true), language, RTranslatorMode.WALKIE_TALKIE_MODE, listener);
445+
}else{
446+
if(listener != null) listener.onSuccess();
427447
}
428448
}
429449

@@ -433,8 +453,10 @@ public void setFirstTextLanguage(CustomLocale language, @Nullable Translator.Gen
433453
SharedPreferences.Editor editor = sharedPreferences.edit();
434454
editor.putString("firstTextLanguage", language.getCode());
435455
editor.apply();
436-
if(Translator.TRANSLATOR_MODE == Translator.MOZILLA) {
456+
if(translator.getMode() == Translator.MOZILLA) {
437457
translator.loadMozillaModels(language, getSecondTextLanguage(true), RTranslatorMode.TEXT_TRANSLATION_MODE, listener);
458+
}else{
459+
if(listener != null) listener.onSuccess();
438460
}
439461
}
440462

@@ -445,8 +467,10 @@ public void setSecondTextLanguage(CustomLocale language, @Nullable Translator.Ge
445467
SharedPreferences.Editor editor = sharedPreferences.edit();
446468
editor.putString("secondTextLanguage", language.getCode());
447469
editor.apply();
448-
if(Translator.TRANSLATOR_MODE == Translator.MOZILLA) {
470+
if(translator.getMode() == Translator.MOZILLA) {
449471
translator.loadMozillaModels(getFirstTextLanguage(true), language, RTranslatorMode.TEXT_TRANSLATION_MODE, listener);
472+
}else{
473+
if(listener != null) listener.onSuccess();
450474
}
451475
}
452476

@@ -455,7 +479,7 @@ public void switchTextLanguages(){
455479
CustomLocale secondLanguage = getSecondTextLanguage(true);
456480
this.firstTextLanguage = secondLanguage;
457481
this.secondTextLanguage = firstLanguage;
458-
if(Translator.TRANSLATOR_MODE == Translator.MOZILLA) translator.loadMozillaModels(secondLanguage, firstLanguage, RTranslatorMode.TEXT_TRANSLATION_MODE, null);
482+
if(translator.getMode() == Translator.MOZILLA) translator.loadMozillaModels(secondLanguage, firstLanguage, RTranslatorMode.TEXT_TRANSLATION_MODE, null);
459483
SharedPreferences sharedPreferences = this.getSharedPreferences("default", Context.MODE_PRIVATE);
460484
SharedPreferences.Editor editor = sharedPreferences.edit();
461485
editor.putString("firstTextLanguage", this.firstLanguage.getCode());

app/src/main/java/nie/translator/rtranslator/LoadingActivity.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,9 @@ private void initializeApp(boolean ignoreTTSError) {
103103
global.getLanguagesAndCheckTTS(false, ignoreTTSError, new Global.GetLocalesListListener() {
104104
@Override
105105
public void onSuccess(ArrayList<CustomLocale> result) {
106-
global.initializeTranslator(new Translator.InitListener() {
106+
global.initializeTranslator(new Translator.GeneralListener() {
107107
@Override
108-
public void onInitializationFinished() {
108+
public void onSuccess() {
109109
global.initializeSpeechRecognizer(new NeuralNetworkApi.InitListener() {
110110
@Override
111111
public void onInitializationFinished() {
@@ -123,7 +123,7 @@ public void onError(int[] reasons, long value) {
123123
}
124124

125125
@Override
126-
public void onError(int[] reasons, long value) {
126+
public void onFailure(int[] reasons, long value) {
127127
global.deleteTranslator(); //we do this to ensure the restart of the loading of models when the app is restarted
128128
LoadingActivity.this.onFailure(reasons, value);
129129
}
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
package nie.translator.rtranslator.settings;
2+
3+
import android.content.Context;
4+
import android.content.SharedPreferences;
5+
import android.os.Bundle;
6+
import android.view.LayoutInflater;
7+
import android.view.View;
8+
import android.view.ViewGroup;
9+
import android.widget.Button;
10+
import android.widget.ProgressBar;
11+
import android.widget.RadioGroup;
12+
13+
import androidx.annotation.NonNull;
14+
import androidx.annotation.Nullable;
15+
import androidx.fragment.app.Fragment;
16+
import androidx.recyclerview.widget.DefaultItemAnimator;
17+
import androidx.recyclerview.widget.LinearLayoutManager;
18+
import androidx.recyclerview.widget.RecyclerView;
19+
20+
import nie.translator.rtranslator.Global;
21+
import nie.translator.rtranslator.R;
22+
import nie.translator.rtranslator.voice_translation.VoiceTranslationActivity;
23+
import nie.translator.rtranslator.voice_translation.neural_networks.translation.Translator;
24+
25+
public class ModelManagerFragment extends Fragment {
26+
private SettingsActivity activity;
27+
private Global global;
28+
private RadioGroup radioGroup;
29+
private boolean restartTranslator = false;
30+
private Button applyButton;
31+
private ProgressBar loading;
32+
private boolean applyingModel = false;
33+
34+
35+
@Override
36+
public void onCreate(@Nullable Bundle savedInstanceState) {
37+
super.onCreate(savedInstanceState);
38+
}
39+
40+
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
41+
// Inflate the layout for this fragment
42+
return inflater.inflate(R.layout.fragment_model_manager, container, false);
43+
}
44+
45+
@Override
46+
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
47+
super.onViewCreated(view, savedInstanceState);
48+
radioGroup = view.findViewById(R.id.model_radios);
49+
applyButton = view.findViewById(R.id.apply_button);
50+
loading = view.findViewById(R.id.loading_models);
51+
}
52+
53+
@Override
54+
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
55+
super.onActivityCreated(savedInstanceState);
56+
activity = (SettingsActivity) requireActivity();
57+
global = (Global) activity.getApplication();
58+
59+
//initialize check with the current mode
60+
SharedPreferences sharedPreferences = global.getSharedPreferences("default", Context.MODE_PRIVATE);
61+
int mode = sharedPreferences.getInt("selectedTranslationModel", Translator.MOZILLA);
62+
switch (mode) {
63+
case Translator.MOZILLA:
64+
radioGroup.check(R.id.mozilla_radio);
65+
break;
66+
case Translator.NLLB:
67+
case Translator.NLLB_CACHE:
68+
radioGroup.check(R.id.nllb_radio);
69+
break;
70+
case Translator.MADLAD:
71+
case Translator.MADLAD_CACHE:
72+
radioGroup.check(R.id.madlad_radio);
73+
break;
74+
case Translator.GEMMA:
75+
radioGroup.check(R.id.gemma_radio);
76+
break;
77+
}
78+
79+
radioGroup.setOnCheckedChangeListener((group, checkedId) -> {
80+
switch (checkedId){
81+
case R.id.mozilla_radio:
82+
changeModel(Translator.MOZILLA);
83+
break;
84+
case R.id.nllb_radio:
85+
changeModel(Translator.NLLB_CACHE);
86+
break;
87+
case R.id.madlad_radio:
88+
changeModel(Translator.MADLAD_CACHE);
89+
break;
90+
case R.id.gemma_radio:
91+
changeModel(Translator.GEMMA);
92+
break;
93+
}
94+
});
95+
applyButton.setOnClickListener((v) -> {
96+
radioGroup.setActivated(false);
97+
applyButton.setActivated(false);
98+
loading.setVisibility(View.VISIBLE);
99+
applyingModel = true;
100+
global.restartTranslator(new Translator.GeneralListener() {
101+
@Override
102+
public void onSuccess() {
103+
radioGroup.setActivated(true);
104+
applyButton.setActivated(true);
105+
applyButton.setVisibility(View.INVISIBLE);
106+
loading.setVisibility(View.INVISIBLE);
107+
applyingModel = false;
108+
}
109+
110+
@Override
111+
public void onFailure(int[] reasons, long value) {
112+
113+
}
114+
});
115+
});
116+
}
117+
118+
@Override
119+
public void onStart() {
120+
super.onStart();
121+
}
122+
123+
private void changeModel(int newModel){
124+
SharedPreferences sharedPreferences = global.getSharedPreferences("default", Context.MODE_PRIVATE);
125+
SharedPreferences.Editor edit = sharedPreferences.edit();
126+
edit.putInt("selectedTranslationModel", newModel);
127+
edit.apply();
128+
restartTranslator = global.getTranslator().getMode() != newModel;
129+
if(restartTranslator){
130+
applyButton.setVisibility(View.VISIBLE);
131+
}else{
132+
applyButton.setVisibility(View.INVISIBLE);
133+
}
134+
}
135+
136+
@Override
137+
public void onStop() {
138+
super.onStop();
139+
}
140+
}

app/src/main/java/nie/translator/rtranslator/settings/SettingsActivity.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929

3030
public class SettingsActivity extends GeneralActivity {
3131
public static final String SETTINGS_FRAGMENT = "startSettings";
32+
public static final String MODEL_MANAGER = "startModelManager";
3233
private Fragment fragment;
3334

3435
@Override
@@ -66,6 +67,17 @@ public void startFragment(String action, Bundle bundle) {
6667
fragment = accessFragment;
6768
break;
6869
}
70+
case MODEL_MANAGER: {
71+
ModelManagerFragment modelManagerFragment = new ModelManagerFragment();
72+
if (bundle != null) {
73+
modelManagerFragment.setArguments(bundle);
74+
}
75+
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
76+
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE);
77+
transaction.replace(R.id.fragment_settings_container, modelManagerFragment);
78+
transaction.commit();
79+
fragment = modelManagerFragment;
80+
}
6981
}
7082
}
7183

@@ -97,6 +109,8 @@ public void onBackPressed() {
97109
}else {
98110
super.onBackPressed();
99111
}
112+
}else if (fragment instanceof ModelManagerFragment) {
113+
startFragment(SETTINGS_FRAGMENT, null);
100114
}else{
101115
super.onBackPressed();
102116
}

app/src/main/java/nie/translator/rtranslator/settings/SettingsFragment.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,16 @@ public boolean onPreferenceClick(Preference preference) {
189189
}
190190
});
191191

192+
// link models manager initialization
193+
Preference modelsManagerPreference = findPreference("modelsManager");
194+
modelsManagerPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
195+
@Override
196+
public boolean onPreferenceClick(Preference preference) {
197+
activity.startFragment(SettingsActivity.MODEL_MANAGER, null);
198+
return true;
199+
}
200+
});
201+
192202
// change microphone sensibility initialization
193203
SeekBarPreference beamSizePreference = (SeekBarPreference) findPreference("BeamSizeSetting");
194204
beamSizePreference.initialize(activity, SeekBarPreference.BEAM_SIZE_MODE);

0 commit comments

Comments
 (0)