diff --git a/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java index 1a583c69..9d1276f3 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java @@ -41,7 +41,6 @@ import android.support.v4.content.FileProvider; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; -import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.Menu; @@ -55,6 +54,7 @@ import com.health.openscale.core.OpenScale; import com.health.openscale.core.bluetooth.BluetoothCommunication; import com.health.openscale.core.datatypes.ScaleMeasurement; import com.health.openscale.core.datatypes.ScaleUser; +import com.health.openscale.gui.activities.BaseAppCompatActivity; import com.health.openscale.gui.activities.DataEntryActivity; import com.health.openscale.gui.activities.SettingsActivity; import com.health.openscale.gui.activities.UserSettingsActivity; @@ -70,7 +70,7 @@ import java.util.List; import cat.ereza.customactivityoncrash.config.CaocConfig; -public class MainActivity extends AppCompatActivity +public class MainActivity extends BaseAppCompatActivity implements SharedPreferences.OnSharedPreferenceChangeListener{ private SharedPreferences prefs; private static boolean firstAppStart = true; @@ -91,16 +91,9 @@ public class MainActivity extends AppCompatActivity @Override protected void onCreate(Bundle savedInstanceState) { - prefs = PreferenceManager.getDefaultSharedPreferences(this); - - String app_theme = prefs.getString("app_theme", "Light"); - - if (app_theme.equals("Dark")) { - setTheme(R.style.AppTheme_Dark); - } - super.onCreate(savedInstanceState); + prefs = PreferenceManager.getDefaultSharedPreferences(this); prefs.registerOnSharedPreferenceChangeListener(this); CaocConfig.Builder.create() diff --git a/android_app/app/src/main/java/com/health/openscale/gui/activities/BaseAppCompatActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/activities/BaseAppCompatActivity.java new file mode 100644 index 00000000..9262727f --- /dev/null +++ b/android_app/app/src/main/java/com/health/openscale/gui/activities/BaseAppCompatActivity.java @@ -0,0 +1,77 @@ +/* Copyright (C) 2018 Erik Johansson +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see +*/ + +package com.health.openscale.gui.activities; + +import android.content.Context; +import android.content.SharedPreferences; +import android.content.res.Configuration; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.support.v7.app.AppCompatActivity; +import android.text.TextUtils; + +import com.health.openscale.R; + +import java.util.Locale; + +public class BaseAppCompatActivity extends AppCompatActivity { + public static final String PREFERENCE_APP_THEME = "app_theme"; + public static final String PREFERENCE_LANGUAGE = "language"; + + public static Context createBaseContext(Context context) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + + String language = prefs.getString(PREFERENCE_LANGUAGE, ""); + if (language.isEmpty()) { + return context; + } + + Locale locale; + String[] localeParts = TextUtils.split(language, "-"); + if (localeParts.length == 2) { + locale = new Locale(localeParts[0], localeParts[1]); + } + else { + locale = new Locale(localeParts[0]); + } + Locale.setDefault(locale); + + Configuration config = context.getResources().getConfiguration(); + config.setLocale(locale); + + return context.createConfigurationContext(config); + } + + public static void applyTheme(Context context) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + + if (prefs.getString(PREFERENCE_APP_THEME, "").equals("Dark")) { + context.setTheme(R.style.AppTheme_Dark); + } + } + + @Override + protected void attachBaseContext(Context context) { + super.attachBaseContext(createBaseContext(context)); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + applyTheme(this); + super.onCreate(savedInstanceState); + } +} diff --git a/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java index 5fa221e7..6f7fac94 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java @@ -24,7 +24,6 @@ import android.graphics.drawable.Drawable; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.graphics.drawable.DrawableCompat; -import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuInflater; @@ -49,7 +48,7 @@ import java.text.DateFormat; import java.util.Date; import java.util.List; -public class DataEntryActivity extends AppCompatActivity { +public class DataEntryActivity extends BaseAppCompatActivity { public static String EXTRA_ID = "id"; private static String PREF_EXPAND = "expandEvaluator"; @@ -80,12 +79,6 @@ public class DataEntryActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { - String app_theme = PreferenceManager.getDefaultSharedPreferences(this).getString("app_theme", "Light"); - - if (app_theme.equals("Dark")) { - setTheme(R.style.AppTheme_Dark); - } - super.onCreate(savedInstanceState); setContentView(R.layout.activity_dataentry); diff --git a/android_app/app/src/main/java/com/health/openscale/gui/activities/SettingsActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/activities/SettingsActivity.java index 623311d4..af6c4590 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/activities/SettingsActivity.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/activities/SettingsActivity.java @@ -16,6 +16,7 @@ package com.health.openscale.gui.activities; import android.app.Fragment; +import android.content.Context; import android.content.SharedPreferences; import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; @@ -37,14 +38,14 @@ public class SettingsActivity extends PreferenceActivity private static List fragments = new ArrayList(); private Fragment currentFragment; + @Override + protected void attachBaseContext(Context context) { + super.attachBaseContext(BaseAppCompatActivity.createBaseContext(context)); + } + @Override public void onCreate(Bundle savedInstanceState) { - String app_theme = PreferenceManager.getDefaultSharedPreferences(this).getString("app_theme", "Light"); - - if (app_theme.equals("Dark")) { - setTheme(R.style.AppTheme_Dark); - } - + BaseAppCompatActivity.applyTheme(this); super.onCreate(savedInstanceState); } @@ -65,7 +66,8 @@ public class SettingsActivity extends PreferenceActivity @Override public void onSharedPreferenceChanged(SharedPreferences preferences, String key) { - if (key.equals("app_theme")) { + if (key.equals(BaseAppCompatActivity.PREFERENCE_APP_THEME) + || key.equals(BaseAppCompatActivity.PREFERENCE_LANGUAGE)) { recreate(); } } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/activities/UserSettingsActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/activities/UserSettingsActivity.java index 623137b2..4299beb6 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/activities/UserSettingsActivity.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/activities/UserSettingsActivity.java @@ -23,9 +23,7 @@ import android.content.Intent; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Bundle; -import android.preference.PreferenceManager; import android.support.v4.graphics.drawable.DrawableCompat; -import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuInflater; @@ -46,7 +44,7 @@ import java.util.Calendar; import java.util.Date; import java.util.List; -public class UserSettingsActivity extends AppCompatActivity { +public class UserSettingsActivity extends BaseAppCompatActivity { public static String EXTRA_ID = "id"; public static String EXTRA_MODE = "mode"; @@ -74,13 +72,8 @@ public class UserSettingsActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { - String app_theme = PreferenceManager.getDefaultSharedPreferences(this).getString("app_theme", "Light"); - - if (app_theme.equals("Dark")) { - setTheme(R.style.AppTheme_Dark); - } - super.onCreate(savedInstanceState); + setContentView(R.layout.activity_usersettings); context = this; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/preferences/BluetoothPreferences.java b/android_app/app/src/main/java/com/health/openscale/gui/preferences/BluetoothPreferences.java index 008c234f..41d073a1 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/preferences/BluetoothPreferences.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/preferences/BluetoothPreferences.java @@ -97,11 +97,11 @@ public class BluetoothPreferences extends PreferenceFragment implements SharedPr for (Map.Entry entry : foundDevices.entrySet()) { if (getActivity() != null) { - Preference prefBtDevice = new Preference(getActivity().getBaseContext()); + Preference prefBtDevice = new Preference(getActivity()); prefBtDevice.setSummary(entry.getKey()); for (BluetoothCommunication.BT_DEVICE_ID btScaleID : BluetoothCommunication.BT_DEVICE_ID.values()) { - BluetoothCommunication btDevice = BluetoothCommunication.getBtDevice(getActivity().getBaseContext(), btScaleID); + BluetoothCommunication btDevice = BluetoothCommunication.getBtDevice(getActivity(), btScaleID); if (btDevice.checkDeviceName(entry.getValue())) { prefBtDevice.setOnPreferenceClickListener(new onClickListenerDeviceSelect()); diff --git a/android_app/app/src/main/java/com/health/openscale/gui/preferences/UsersPreferences.java b/android_app/app/src/main/java/com/health/openscale/gui/preferences/UsersPreferences.java index 2459ff32..76599b0a 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/preferences/UsersPreferences.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/preferences/UsersPreferences.java @@ -50,7 +50,7 @@ public class UsersPreferences extends PreferenceFragment { for (ScaleUser scaleUser : scaleUserList) { - Preference prefUser = new Preference(getActivity().getBaseContext()); + Preference prefUser = new Preference(getActivity()); prefUser.setOnPreferenceClickListener(new onClickListenerUserSelect()); if (scaleUser.getId() == selectedUserId) { @@ -66,7 +66,7 @@ public class UsersPreferences extends PreferenceFragment { } - Preference prefAddUser = new Preference(getActivity().getBaseContext()); + Preference prefAddUser = new Preference(getActivity()); prefAddUser.setOnPreferenceClickListener(new onClickListenerAddUser()); prefAddUser.setTitle("+ " + getResources().getString(R.string.label_add_user)); diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java index 2f01024f..c1a759d8 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java @@ -81,13 +81,6 @@ public abstract class MeasurementView extends TableLayout { public MeasurementView(Context context, String text, Drawable icon) { super(context); - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - String app_theme = prefs.getString("app_theme", "Light"); - - if (app_theme.equals("Dark")) { - context.setTheme(R.style.AppTheme_Dark); - } - initView(context); nameView.setText(text); diff --git a/android_app/app/src/main/res/values/arrays.xml b/android_app/app/src/main/res/values/arrays.xml new file mode 100644 index 00000000..10bbc433 --- /dev/null +++ b/android_app/app/src/main/res/values/arrays.xml @@ -0,0 +1,36 @@ + + + + @string/language_default + @string/language_brazilian_portuguese + @string/language_catalan + @string/language_czech + @string/language_dutch + @string/language_english + @string/language_french + @string/language_german + @string/language_japanese + @string/language_polish + @string/language_slovak + @string/language_spanish + @string/language_swedish + @string/language_turkish + + + + + pt-BR + ca + cs + nl + en + fr + de + ja + pl + sk + es + sv + tr + + \ No newline at end of file diff --git a/android_app/app/src/main/res/values/strings.xml b/android_app/app/src/main/res/values/strings.xml index 9160ad12..db993dc7 100644 --- a/android_app/app/src/main/res/values/strings.xml +++ b/android_app/app/src/main/res/values/strings.xml @@ -200,4 +200,19 @@ Measurement in % Estimate measurement Estimation formula + System default + Language + Brazilian Portuguese + Catalan (català) + Czech (čeština) + Dutch (Nederlands) + English + French (français) + German (Deutsch) + Japanese (日本語 (にほんご)) + Polish (język polski) + Slovak (Slovenčina) + Spanish (Español) + Swedish (Svenska) + Turkish (Türkçe) diff --git a/android_app/app/src/main/res/xml/general_preferences.xml b/android_app/app/src/main/res/xml/general_preferences.xml index c1a22025..95760210 100644 --- a/android_app/app/src/main/res/xml/general_preferences.xml +++ b/android_app/app/src/main/res/xml/general_preferences.xml @@ -1,5 +1,11 @@ + \ No newline at end of file