mirror of
https://github.com/oliexdev/openScale.git
synced 2025-08-20 23:41:45 +02:00
Add language preference
Make it possible to select a language that differs from the system default. This can be useful when doing translations (as hinted in issue #186), or if you just want to use openScale in a different language from the system one. Also moved theme setting to a new common base class for activities.
This commit is contained in:
@@ -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()
|
||||
|
@@ -0,0 +1,77 @@
|
||||
/* Copyright (C) 2018 Erik Johansson <erik@ejohansson.se>
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
@@ -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);
|
||||
|
@@ -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<String> fragments = new ArrayList<String>();
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -97,11 +97,11 @@ public class BluetoothPreferences extends PreferenceFragment implements SharedPr
|
||||
|
||||
for (Map.Entry<String, String> 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());
|
||||
|
@@ -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));
|
||||
|
@@ -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);
|
||||
|
36
android_app/app/src/main/res/values/arrays.xml
Normal file
36
android_app/app/src/main/res/values/arrays.xml
Normal file
@@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string-array name="language_entries">
|
||||
<item>@string/language_default</item>
|
||||
<item>@string/language_brazilian_portuguese</item>
|
||||
<item>@string/language_catalan</item>
|
||||
<item>@string/language_czech</item>
|
||||
<item>@string/language_dutch</item>
|
||||
<item>@string/language_english</item>
|
||||
<item>@string/language_french</item>
|
||||
<item>@string/language_german</item>
|
||||
<item>@string/language_japanese</item>
|
||||
<item>@string/language_polish</item>
|
||||
<item>@string/language_slovak</item>
|
||||
<item>@string/language_spanish</item>
|
||||
<item>@string/language_swedish</item>
|
||||
<item>@string/language_turkish</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="language_values">
|
||||
<item />
|
||||
<item>pt-BR</item>
|
||||
<item>ca</item>
|
||||
<item>cs</item>
|
||||
<item>nl</item>
|
||||
<item>en</item>
|
||||
<item>fr</item>
|
||||
<item>de</item>
|
||||
<item>ja</item>
|
||||
<item>pl</item>
|
||||
<item>sk</item>
|
||||
<item>es</item>
|
||||
<item>sv</item>
|
||||
<item>tr</item>
|
||||
</string-array>
|
||||
</resources>
|
@@ -200,4 +200,19 @@
|
||||
<string name="label_measurement_in_percent">Measurement in %</string>
|
||||
<string name="label_estimate_measurement">Estimate measurement</string>
|
||||
<string name="label_estimation_formula">Estimation formula</string>
|
||||
<string name="language_default">System default</string>
|
||||
<string name="label_language">Language</string>
|
||||
<string name="language_brazilian_portuguese" translatable="false">Brazilian Portuguese</string>
|
||||
<string name="language_catalan" translatable="false">Catalan (català)</string>
|
||||
<string name="language_czech" translatable="false">Czech (čeština)</string>
|
||||
<string name="language_dutch" translatable="false">Dutch (Nederlands)</string>
|
||||
<string name="language_english" translatable="false">English</string>
|
||||
<string name="language_french" translatable="false">French (français)</string>
|
||||
<string name="language_german" translatable="false">German (Deutsch)</string>
|
||||
<string name="language_japanese" translatable="false">Japanese (日本語 (にほんご))</string>
|
||||
<string name="language_polish" translatable="false">Polish (język polski)</string>
|
||||
<string name="language_slovak" translatable="false">Slovak (Slovenčina)</string>
|
||||
<string name="language_spanish" translatable="false">Spanish (Español)</string>
|
||||
<string name="language_swedish" translatable="false">Swedish (Svenska)</string>
|
||||
<string name="language_turkish" translatable="false">Turkish (Türkçe)</string>
|
||||
</resources>
|
||||
|
@@ -1,5 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<ListPreference
|
||||
android:defaultValue=""
|
||||
android:entries="@array/language_entries"
|
||||
android:entryValues="@array/language_values"
|
||||
android:key="language"
|
||||
android:title="@string/label_language" />
|
||||
<ListPreference android:title="@string/label_theme" android:entries="@array/themes_entries" android:entryValues="@array/themes_values" android:key="app_theme" android:defaultValue="Light"/>
|
||||
<CheckBoxPreference android:title="@string/label_delete_confirmation" android:summaryOn="@string/info_is_enable" android:summaryOff="@string/info_is_not_enable" android:key="deleteConfirmationEnable" android:defaultValue="true" />
|
||||
</PreferenceScreen>
|
Reference in New Issue
Block a user