Skip to content

Commit eac0a86

Browse files
authored
Preference language
1 parent 9644f56 commit eac0a86

1 file changed

Lines changed: 238 additions & 3 deletions

File tree

main/src/main/java/org/xedox/webaide/SettingsActivity.java

Lines changed: 238 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,21 @@
22

33
import android.content.Context;
44
import android.content.SharedPreferences;
5+
import android.content.res.Configuration;
56
import android.os.Bundle;
67
import android.view.MenuItem;
78
import androidx.appcompat.app.AppCompatActivity;
8-
import androidx.preference.CheckBoxPreference;
9-
import androidx.preference.ListPreference;
109
import androidx.preference.Preference;
1110
import androidx.preference.PreferenceFragmentCompat;
1211
import androidx.preference.PreferenceManager;
1312
import com.google.android.material.appbar.MaterialToolbar;
1413
import java.io.File;
1514
import java.util.Arrays;
1615
import java.util.List;
16+
import java.util.Locale;
1717
import org.xedox.utils.BaseActivity;
1818
import org.xedox.utils.dialog.ErrorDialog;
1919
import org.xedox.utils.format.FormatConfig;
20-
import org.xedox.utils.format.IFormat;
2120
import org.xedox.utils.preference.MaterialListPreference;
2221
import org.xedox.webaide.dialog.CopyAssetsDialog;
2322
import org.xedox.webaide.sora.SoraEditorManager;
@@ -28,13 +27,249 @@ public class SettingsActivity extends BaseActivity {
2827

2928
@Override
3029
protected void onCreate(Bundle savedInstanceState) {
30+
applyLocale(this);
3131
super.onCreate(savedInstanceState);
3232
try {
3333
setContentView(R.layout.activity_settings);
3434
toolbar = findViewById(R.id.toolbar);
3535
setSupportActionBar(toolbar);
3636
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
3737
getSupportActionBar().setDisplayShowHomeEnabled(true);
38+
if (savedInstanceState == null) {
39+
getSupportFragmentManager()
40+
.beginTransaction()
41+
.replace(R.id.content, new SettingsFragment())
42+
.commit();
43+
}
44+
} catch (Exception err) {
45+
ErrorDialog.show(this, err);
46+
}
47+
}
48+
49+
public static void applyLocale(Context context) {
50+
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
51+
String lang = prefs.getString("language_pref", "en");
52+
Locale locale = new Locale(lang);
53+
Locale.setDefault(locale);
54+
Configuration config = new Configuration();
55+
config.setLocale(locale);
56+
context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());
57+
}
58+
59+
@Override
60+
public boolean onOptionsItemSelected(MenuItem item) {
61+
int id = item.getItemId();
62+
if (id == android.R.id.home) {
63+
handleBackPressed();
64+
return true;
65+
}
66+
return super.onOptionsItemSelected(item);
67+
}
68+
69+
@Override
70+
public void handleBackPressed() {
71+
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
72+
getSupportFragmentManager().popBackStack();
73+
} else {
74+
finish();
75+
}
76+
}
77+
78+
public static class SettingsFragment extends PreferenceFragmentCompat
79+
implements Preference.OnPreferenceClickListener {
80+
81+
public SettingsFragment() {}
82+
83+
@Override
84+
public void onCreatePreferences(Bundle extraArgs, String root) {
85+
setPreferencesFromResource(R.xml.settings_preferences, root);
86+
Preference generalPref = findPreference("general_settings");
87+
Preference editorPref = findPreference("editor_settings");
88+
if (generalPref != null) {
89+
generalPref.setOnPreferenceClickListener(this);
90+
}
91+
if (editorPref != null) {
92+
editorPref.setOnPreferenceClickListener(this);
93+
}
94+
}
95+
96+
@Override
97+
public boolean onPreferenceClick(Preference preference) {
98+
String key = preference.getKey();
99+
if (key.equals("general_settings")) {
100+
navigateToFragment(new GeneralFragment());
101+
return true;
102+
} else if (key.equals("editor_settings")) {
103+
navigateToFragment(new EditorFragment());
104+
return true;
105+
}
106+
return false;
107+
}
108+
109+
private void navigateToFragment(PreferenceFragmentCompat fragment) {
110+
requireActivity()
111+
.getSupportFragmentManager()
112+
.beginTransaction()
113+
.replace(R.id.content, fragment)
114+
.addToBackStack(null)
115+
.commit();
116+
}
117+
}
118+
119+
public static class GeneralFragment extends PreferenceFragmentCompat
120+
implements Preference.OnPreferenceChangeListener {
121+
122+
public GeneralFragment() {}
123+
124+
@Override
125+
public void onCreatePreferences(Bundle extraArgs, String root) {
126+
setPreferencesFromResource(R.xml.settings_general, root);
127+
Preference appDialogTypePref = findPreference("app_dialog_type");
128+
Preference recopyAssetsPref = findPreference("recopy_assets");
129+
recopyAssetsPref.setOnPreferenceClickListener(
130+
(v) -> {
131+
CopyAssetsDialog.show(requireActivity());
132+
return true;
133+
});
134+
if (appDialogTypePref != null) {
135+
appDialogTypePref.setOnPreferenceChangeListener(this);
136+
}
137+
138+
MaterialListPreference languagePref = new MaterialListPreference(requireContext());
139+
languagePref.setKey("language_pref");
140+
languagePref.setTitle("Application language");
141+
languagePref.setSummary("Select language for the app");
142+
languagePref.setEntries(new CharSequence[]{"English", "Русский"});
143+
languagePref.setEntryValues(new CharSequence[]{"en", "ru"});
144+
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(requireContext());
145+
String currentLang = sp.getString("language_pref", "en");
146+
languagePref.setValue(currentLang);
147+
languagePref.setOnPreferenceChangeListener((preference, newValue) -> {
148+
String lang = newValue.toString();
149+
sp.edit().putString("language_pref", lang).apply();
150+
applyLocale(requireContext());
151+
requireActivity().recreate();
152+
return true;
153+
});
154+
getPreferenceScreen().addPreference(languagePref);
155+
}
156+
157+
@Override
158+
public boolean onPreferenceChange(Preference preference, Object newValue) {
159+
String key = preference.getKey();
160+
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(requireContext());
161+
SharedPreferences.Editor editor = sp.edit();
162+
if (key.equals("app_dialog_type")) {
163+
editor.putString(key, newValue.toString()).apply();
164+
AppCore.setDialogType(newValue.toString());
165+
return true;
166+
}
167+
return false;
168+
}
169+
}
170+
171+
public static class EditorFragment extends PreferenceFragmentCompat
172+
implements Preference.OnPreferenceChangeListener {
173+
174+
public EditorFragment() {}
175+
176+
@Override
177+
public void onCreatePreferences(Bundle extraArgs, String root) {
178+
setPreferencesFromResource(R.xml.settings_editor, root);
179+
Preference useTabPref = findPreference("editor_use_tab");
180+
Preference indentSizePref = findPreference("editor_indent_size");
181+
if (useTabPref != null) {
182+
useTabPref.setOnPreferenceChangeListener(this);
183+
}
184+
if (indentSizePref != null) {
185+
indentSizePref.setOnPreferenceChangeListener(this);
186+
}
187+
MaterialListPreference fontsPref = findPreference("editor_font");
188+
try {
189+
List<File> fontSources = Arrays.asList(AppCore.fontList());
190+
String[] entries = new String[fontSources.size()];
191+
String[] values = new String[fontSources.size()];
192+
for (int i = 0; i < fontSources.size(); i++) {
193+
File fontFile = fontSources.get(i);
194+
entries[i] = fontFile.getName();
195+
values[i] = fontFile.getAbsolutePath();
196+
}
197+
fontsPref.setEntries(entries);
198+
fontsPref.setEntryValues(values);
199+
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(requireContext());
200+
String currentFont = sp.getString("editor_font", null);
201+
if (currentFont == null) {
202+
String defaultFont = AppCore.dir("fonts") + "SourceCodePro-Regular.ttf";
203+
fontsPref.setValue(defaultFont);
204+
sp.edit().putString("editor_font", defaultFont).apply();
205+
} else {
206+
fontsPref.setValue(currentFont);
207+
}
208+
} catch (Exception err) {
209+
ErrorDialog.show(requireActivity(), err);
210+
}
211+
MaterialListPreference themesPref = findPreference("editor_theme");
212+
try {
213+
SoraEditorManager.Theme[] themes = SoraEditorManager.getThemesList();
214+
String[] names = new String[themes.length];
215+
for (int i = 0; i < themes.length; i++) {
216+
names[i] = themes[i].name;
217+
}
218+
themesPref.setEntries(names);
219+
themesPref.setEntryValues(names);
220+
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(requireContext());
221+
String currentTheme = sp.getString("editor_theme", null);
222+
if (currentTheme == null) {
223+
String defaultTheme = "Darcula";
224+
themesPref.setValue(defaultTheme);
225+
sp.edit().putString("editor_theme", defaultTheme).apply();
226+
} else {
227+
themesPref.setValue(currentTheme);
228+
}
229+
} catch (Exception err) {
230+
ErrorDialog.show(requireActivity(), err);
231+
}
232+
if (themesPref != null) {
233+
themesPref.setOnPreferenceChangeListener(this);
234+
}
235+
if (fontsPref != null) {
236+
fontsPref.setOnPreferenceChangeListener(this);
237+
}
238+
}
239+
240+
@Override
241+
public boolean onPreferenceChange(Preference preference, Object newValue) {
242+
String key = preference.getKey();
243+
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(requireContext());
244+
SharedPreferences.Editor editor = sp.edit();
245+
String value = newValue.toString();
246+
if (key.equals("editor_use_tab")) {
247+
boolean useTab = (Boolean) newValue;
248+
editor.putBoolean(key, useTab).apply();
249+
FormatConfig.getInstance().setUseTab(useTab);
250+
return true;
251+
} else if (key.equals("editor_font")) {
252+
editor.putString(key, value).apply();
253+
SoraEditorManager.updateFont(value);
254+
return true;
255+
} else if (key.equals("editor_theme")) {
256+
editor.putString(key, value).apply();
257+
SoraEditorManager.updateTheme(value);
258+
return true;
259+
} else if (key.equals("editor_indent_size")) {
260+
try {
261+
int indentSize = Integer.parseInt(value);
262+
editor.putString(key, value).apply();
263+
FormatConfig.getInstance().setIndentSize(indentSize);
264+
} catch (Exception e) {
265+
ErrorDialog.show(requireActivity(), e);
266+
}
267+
return true;
268+
}
269+
return false;
270+
}
271+
}
272+
} getSupportActionBar().setDisplayShowHomeEnabled(true);
38273

39274
if (savedInstanceState == null) {
40275
getSupportFragmentManager()

0 commit comments

Comments
 (0)