diff options
author | Mert Tumer <merttumer@outlook.com> | 2018-09-18 23:29:57 +0300 |
---|---|---|
committer | Tomaž Vajngerl <quikee@gmail.com> | 2018-10-18 12:32:15 +0200 |
commit | f2e35a695671028b32139df1824ff536e7610d35 (patch) | |
tree | 0f9e7f4858943b11ab34451f9d9075422b293234 /android | |
parent | 81974604d859da8365146ce126f3584d902224b8 (diff) |
Added language support on Android Viewer
Change-Id: I05a189dcee9cf4415ce59771da03c08cf0fef6c4
Signed-off-by: Mert Tumer <merttumer@outlook.com>
Reviewed-on: https://gerrit.libreoffice.org/60727
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'android')
6 files changed, 92 insertions, 1 deletions
diff --git a/android/source/res/values/arrays.xml b/android/source/res/values/arrays.xml index f2326764aa76..f331e672c35e 100644 --- a/android/source/res/values/arrays.xml +++ b/android/source/res/values/arrays.xml @@ -12,6 +12,9 @@ <item >1</item> <item >2</item> </string-array> + <string-array name="SupportedLanguagesValues"> + <item >en</item> + </string-array> <string-array name="SortModeStringValues"> <item >0</item> <item >1</item> @@ -36,6 +39,9 @@ <item>@string/filter_presentations</item> <item>@string/filter_drawings</item> </string-array> + <string-array name="SupportedLanguages"> + <item>English</item> + </string-array> <string-array name="SortModeNames"> <item >@string/sort_az</item> <item >@string/sort_za</item> diff --git a/android/source/res/xml/libreoffice_preferences.xml b/android/source/res/xml/libreoffice_preferences.xml index 3bc04d769278..86ad3af81971 100644 --- a/android/source/res/xml/libreoffice_preferences.xml +++ b/android/source/res/xml/libreoffice_preferences.xml @@ -22,6 +22,15 @@ android:title="@string/pref_file_explorer_title" android:key="EXPLORER_VIEW_TYPE" android:summary="@string/pref_viewmode_summary" /> + + <ListPreference + android:title="Display Language" + android:summary="Set the default display language" + android:entries="@array/SupportedLanguages" + android:entryValues="@array/SupportedLanguagesValues" + android:key="DISPLAY_LANGUAGE" + /> + <CheckBoxPreference android:title="@string/pref_show_hidden_files" android:key="ENABLE_SHOW_HIDDEN_FILES" diff --git a/android/source/src/java/org/libreoffice/LibreOfficeApplication.java b/android/source/src/java/org/libreoffice/LibreOfficeApplication.java index 67655c7689cd..07c14663860e 100644 --- a/android/source/src/java/org/libreoffice/LibreOfficeApplication.java +++ b/android/source/src/java/org/libreoffice/LibreOfficeApplication.java @@ -11,6 +11,7 @@ package org.libreoffice; import android.app.Application; +import android.content.Context; import android.os.Handler; public class LibreOfficeApplication extends Application { @@ -24,4 +25,9 @@ public class LibreOfficeApplication extends Application { public static Handler getMainHandler() { return mainHandler; } + + @Override + protected void attachBaseContext(Context base) { + super.attachBaseContext(LocaleHelper.onAttach(base, "en")); + } } diff --git a/android/source/src/java/org/libreoffice/LocaleHelper.java b/android/source/src/java/org/libreoffice/LocaleHelper.java new file mode 100644 index 000000000000..26a31e431397 --- /dev/null +++ b/android/source/src/java/org/libreoffice/LocaleHelper.java @@ -0,0 +1,56 @@ +package org.libreoffice; + +import android.content.Context; +import android.content.SharedPreferences; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.os.Build; +import android.preference.PreferenceManager; + +import java.util.Locale; + +public class LocaleHelper { + + private static final String SELECTED_LANG = "org.libreoffice.selected.lang"; + + public static Context onAttach(Context context){ + String lang = getPersistedData(context, Locale.getDefault().getLanguage()); + return setLocale(context, lang); + } + + public static Context onAttach(Context context, String defLang){ + String lang = getPersistedData(context, defLang); + return setLocale(context, lang); + } + + public static Context setLocale(Context context, String lang) { + persist(context, lang); + return updateResources(context, lang); + } + + @SuppressWarnings("deprecation") + private static Context updateResources(Context context, String lang) { + Locale locale = new Locale(lang); + Locale.setDefault(locale); + + Resources res = context.getResources(); + Configuration cfg = res.getConfiguration(); + cfg.locale = locale; + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) + cfg.setLayoutDirection(locale); + + res.updateConfiguration(cfg, res.getDisplayMetrics()); + return context; + } + + private static void persist(Context context, String lang) { + SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); + preferences.edit().putString(SELECTED_LANG, lang); + preferences.edit().apply(); + } + + private static String getPersistedData(Context context, String lang) { + SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); + return preferences.getString(SELECTED_LANG, lang); + } +} diff --git a/android/source/src/java/org/libreoffice/SettingsActivity.java b/android/source/src/java/org/libreoffice/SettingsActivity.java index 4ef7277d7d53..de5f388c7c25 100644 --- a/android/source/src/java/org/libreoffice/SettingsActivity.java +++ b/android/source/src/java/org/libreoffice/SettingsActivity.java @@ -48,6 +48,9 @@ public class SettingsActivity extends Activity { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { SettingsListenerModel.getInstance().changePreferenceState(sharedPreferences, key); + if(key.equals("DISPLAY_LANGUAGE")){ + getActivity().recreate(); + } } } } diff --git a/android/source/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java b/android/source/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java index fd1e2a217b14..d6501f08bd85 100644 --- a/android/source/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java +++ b/android/source/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java @@ -67,6 +67,7 @@ import android.widget.Toast; import org.libreoffice.AboutDialogFragment; import org.libreoffice.LOKitShell; import org.libreoffice.LibreOfficeMainActivity; +import org.libreoffice.LocaleHelper; import org.libreoffice.R; import org.libreoffice.SettingsActivity; import org.libreoffice.SettingsListenerModel; @@ -95,6 +96,8 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings private int viewMode; private int sortMode; private boolean showHiddenFiles; + private String displayLanguage; + // dynamic permissions IDs private static final int PERMISSION_READ_EXTERNAL_STORAGE = 0; @@ -115,6 +118,7 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings public static final String SORT_MODE_KEY = "SORT_MODE"; private static final String RECENT_DOCUMENTS_KEY = "RECENT_DOCUMENTS"; private static final String ENABLE_SHOW_HIDDEN_FILES_KEY = "ENABLE_SHOW_HIDDEN_FILES"; + private static final String DISPLAY_LANGUAGE = "DISPLAY_LANGUAGE"; public static final String NEW_FILE_PATH_KEY = "NEW_FILE_PATH_KEY"; public static final String NEW_DOC_TYPE_KEY = "NEW_DOC_TYPE_KEY"; @@ -148,7 +152,6 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings private LinearLayout impressLayout; private LinearLayout calcLayout; - @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -173,6 +176,11 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings fabCloseAnimation = AnimationUtils.loadAnimation(this, R.anim.fab_close); } + @Override + protected void attachBaseContext(Context newBase) { + super.attachBaseContext(LocaleHelper.onAttach(newBase,"en")); + } + public void createUI() { setContentView(R.layout.activity_document_browser); @@ -834,6 +842,7 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings viewMode = Integer.valueOf(defaultPrefs.getString(EXPLORER_VIEW_TYPE_KEY, ""+ GRID_VIEW)); filterMode = Integer.valueOf(defaultPrefs.getString(FILTER_MODE_KEY , "-1")); showHiddenFiles = defaultPrefs.getBoolean(ENABLE_SHOW_HIDDEN_FILES_KEY, false); + displayLanguage = defaultPrefs.getString(DISPLAY_LANGUAGE, "en"); Intent i = this.getIntent(); if (i.hasExtra(CURRENT_DIRECTORY_KEY)) { @@ -855,6 +864,8 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings viewMode = i.getIntExtra( EXPLORER_VIEW_TYPE_KEY, GRID_VIEW); Log.d(LOGTAG, EXPLORER_VIEW_TYPE_KEY); } + + LocaleHelper.setLocale(this, displayLanguage); } @Override |