From bef015b0c2a9978bc9b2742bc11e99358aae0b07 Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Thu, 7 Oct 2021 14:32:09 +0200 Subject: [PATCH] Add new getSupportedLanguageSettings() to coordinator to get rid of all those arrays There is one big generic one now, unssupported languages will be removed at runtime. Tested with Amazfit Bip U. --- .../DeviceSettingsActivity.java | 17 ++++++- .../DeviceSpecificSettingsFragment.java | 25 ++++++++-- .../devices/AbstractDeviceCoordinator.java | 5 ++ .../devices/DeviceCoordinator.java | 6 +++ .../amazfitbipu/AmazfitBipUCoordinator.java | 27 +++++++++++ .../devices/huami/HuamiLanguageType.java | 7 +++ app/src/main/res/values/arrays.xml | 48 +++++++++++++++++++ .../res/xml/devicesettings_amazfitbipu.xml | 8 ---- .../xml/devicesettings_language_generic.xml | 11 +++++ 9 files changed, 141 insertions(+), 13 deletions(-) create mode 100644 app/src/main/res/xml/devicesettings_language_generic.xml diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSettingsActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSettingsActivity.java index dcfa9bce1..87afb872d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSettingsActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSettingsActivity.java @@ -50,13 +50,20 @@ public class DeviceSettingsActivity extends AbstractGBActivity implements if (fragment == null) { DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(device); int[] supportedSettings = coordinator.getSupportedDeviceSpecificSettings(device); + String[] supportedLanguages = coordinator.getSupportedLanguageSettings(device); + + if (supportedLanguages != null) { + supportedSettings = ArrayUtils.insert(0, supportedSettings, R.xml.devicesettings_language_generic); + } if (coordinator.supportsActivityTracking()) { supportedSettings = ArrayUtils.addAll(supportedSettings, R.xml.devicesettings_chartstabs); } + + // FIXME: this does not belong here if (!ArrayUtils.contains(supportedSettings, R.xml.devicesettings_transliteration)) { supportedSettings = ArrayUtils.addAll(supportedSettings, R.xml.devicesettings_transliteration); } - fragment = DeviceSpecificSettingsFragment.newInstance(device.getAddress(), supportedSettings); + fragment = DeviceSpecificSettingsFragment.newInstance(device.getAddress(), supportedSettings, supportedLanguages); } getSupportFragmentManager() .beginTransaction() @@ -70,11 +77,17 @@ public class DeviceSettingsActivity extends AbstractGBActivity implements public boolean onPreferenceStartScreen(PreferenceFragmentCompat caller, PreferenceScreen preferenceScreen) { DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(device); int[] supportedSettings = coordinator.getSupportedDeviceSpecificSettings(device); + String[] supportedLanguages = coordinator.getSupportedLanguageSettings(device); + + if (supportedLanguages != null) { + supportedSettings = ArrayUtils.insert(0, supportedSettings, R.xml.devicesettings_language_generic); + } + if (coordinator.supportsActivityTracking()) { supportedSettings = ArrayUtils.addAll(supportedSettings, R.xml.devicesettings_chartstabs); } - PreferenceFragmentCompat fragment = DeviceSpecificSettingsFragment.newInstance(device.getAddress(), supportedSettings); + PreferenceFragmentCompat fragment = DeviceSpecificSettingsFragment.newInstance(device.getAddress(), supportedSettings, supportedLanguages); Bundle args = fragment.getArguments(); args.putString(PreferenceFragmentCompat.ARG_PREFERENCE_ROOT, preferenceScreen.getKey()); fragment.setArguments(args); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSpecificSettingsFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSpecificSettingsFragment.java index effd93614..71ee4bfbe 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSpecificSettingsFragment.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSpecificSettingsFragment.java @@ -23,12 +23,14 @@ import android.widget.EditText; import androidx.annotation.NonNull; import androidx.fragment.app.DialogFragment; import androidx.preference.EditTextPreference; +import androidx.preference.ListPreference; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; import com.mobeta.android.dslv.DragSortListPreference; import com.mobeta.android.dslv.DragSortListPreferenceFragment; +import org.apache.commons.lang3.ArrayUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -36,6 +38,7 @@ import java.util.ArrayList; import java.util.Objects; import nodomain.freeyourgadget.gadgetbridge.GBApplication; +import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst; import nodomain.freeyourgadget.gadgetbridge.devices.makibeshr3.MakibesHR3Constants; import nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst; @@ -145,10 +148,11 @@ public class DeviceSpecificSettingsFragment extends PreferenceFragmentCompat { static final String FRAGMENT_TAG = "DEVICE_SPECIFIC_SETTINGS_FRAGMENT"; - private void setSettingsFileSuffix(String settingsFileSuffix, @NonNull int[] supportedSettings) { + private void setSettingsFileSuffix(String settingsFileSuffix, @NonNull int[] supportedSettings, String[] supportedLanguages) { Bundle args = new Bundle(); args.putString("settingsFileSuffix", settingsFileSuffix); args.putIntArray("supportedSettings", supportedSettings); + args.putStringArray("supportedLanguages", supportedLanguages); setArguments(args); } @@ -161,6 +165,8 @@ public class DeviceSpecificSettingsFragment extends PreferenceFragmentCompat { } String settingsFileSuffix = arguments.getString("settingsFileSuffix", null); int[] supportedSettings = arguments.getIntArray("supportedSettings"); + String[] supportedLanguages = arguments.getStringArray("supportedLanguages"); + if (settingsFileSuffix == null || supportedSettings == null) { return; } @@ -177,6 +183,19 @@ public class DeviceSpecificSettingsFragment extends PreferenceFragmentCompat { } else { addPreferencesFromResource(setting); } + if (setting == R.xml.devicesettings_language_generic) { + ListPreference languageListPreference = findPreference("language"); + CharSequence[] entries = languageListPreference.getEntries(); + CharSequence[] values = languageListPreference.getEntryValues(); + for (int i=entries.length-1;i>=0;i--) { + if (!ArrayUtils.contains(supportedLanguages,values[i])) { + entries = ArrayUtils.remove(entries,i); + values = ArrayUtils.remove(values,i); + } + } + languageListPreference.setEntries(entries); + languageListPreference.setEntryValues(values); + } } } else { // Now, this is ugly: search all the xml files for the rootKey @@ -678,9 +697,9 @@ public class DeviceSpecificSettingsFragment extends PreferenceFragmentCompat { } } - static DeviceSpecificSettingsFragment newInstance(String settingsFileSuffix, @NonNull int[] supportedSettings) { + static DeviceSpecificSettingsFragment newInstance(String settingsFileSuffix, @NonNull int[] supportedSettings, String[] supportedLanguages) { DeviceSpecificSettingsFragment fragment = new DeviceSpecificSettingsFragment(); - fragment.setSettingsFileSuffix(settingsFileSuffix, supportedSettings); + fragment.setSettingsFileSuffix(settingsFileSuffix, supportedSettings, supportedLanguages); return fragment; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractDeviceCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractDeviceCoordinator.java index 25a128c2d..df3202a54 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractDeviceCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractDeviceCoordinator.java @@ -236,6 +236,11 @@ public abstract class AbstractDeviceCoordinator implements DeviceCoordinator { return null; } + @Override + public String[] getSupportedLanguageSettings(GBDevice device) { + return null; + } + @Nullable @Override public Class getCalibrationActivity() { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java index a07416793..ce7c246fa 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java @@ -342,4 +342,10 @@ public interface DeviceCoordinator { * Indicates which device specific settings the device supports (not per device type or family, but unique per device). */ int[] getSupportedDeviceSpecificSettings(GBDevice device); + + /** + * Indicates which device specific language the device supports + */ + String[] getSupportedLanguageSettings(GBDevice device); + } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/amazfitbipu/AmazfitBipUCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/amazfitbipu/AmazfitBipUCoordinator.java index 55be94998..97ea091ff 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/amazfitbipu/AmazfitBipUCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/amazfitbipu/AmazfitBipUCoordinator.java @@ -105,6 +105,33 @@ public class AmazfitBipUCoordinator extends HuamiCoordinator { }; } + @Override + public String[] getSupportedLanguageSettings(GBDevice device) { + return new String[]{ + "auto", + "zh_CH", + "zh_TW", + "cs_CZ", + "de_DE", + "el_GR", + "en_US", + "es_ES", + "fr_FR", + "id_ID", + "it_IT", + "ja_JP", + "ko_KO", + "nl_NL", + "pl_PL", + "pt_BR", + "ru_RU", + "th_TH", + "uk_UA", + "vi_VN", + "tr_TR", + }; + } + @Override public int getBondingStyle() { return BONDING_STYLE_REQUIRE_KEY; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiLanguageType.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiLanguageType.java index c021e46f6..3953d8080 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiLanguageType.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiLanguageType.java @@ -34,11 +34,18 @@ public class HuamiLanguageType { put("de_DE", 0x07); put("de_AT", 0x07); put("de_CH", 0x07); + put("id_ID", 0x08); put("pl_PL", 0x09); put("it_IT", 0x0a); + put("ja_JP", 0x0b); + put("th_TH", 0x0c); + put("vi_VN", 0x0e); put("pt_PT", 0x0f); + put("nl_NL", 0x10); put("tr_TR", 0x11); + put("uk_UA", 0x12); put("pt_BR", 0x14); put("cs_CZ", 0x16); + put("el_GR", 0x17); }}; } diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 4e4ec872f..85c683784 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -1268,6 +1268,54 @@ @string/p_call_privacy_mode_complete + + @string/automatic + @string/simplified_chinese + @string/traditional_chinese + @string/english + @string/spanish + @string/german + @string/italian + @string/french + @string/portuguese + @string/dutch + @string/polish + @string/turkish + @string/greek + @string/russian + @string/ukrainian + @string/arabic + @string/indonesian + @string/thai + @string/vietnamese + @string/japanese + @string/korean + + + + auto + zh_CN + zh_TW + en_US + es_ES + de_DE + it_IT + fr_FR + pt_BR + nl_NL + pl_PL + tr_TR + el_GR + ru_RU + uk_UA + ar_SA + id_ID + th_TH + vi_VN + ja_JP + ko_KO + + @string/automatic @string/simplified_chinese diff --git a/app/src/main/res/xml/devicesettings_amazfitbipu.xml b/app/src/main/res/xml/devicesettings_amazfitbipu.xml index 3356f829d..fe91aa5f0 100644 --- a/app/src/main/res/xml/devicesettings_amazfitbipu.xml +++ b/app/src/main/res/xml/devicesettings_amazfitbipu.xml @@ -10,12 +10,4 @@ android:persistent="true" android:summary="@string/mi2_prefs_display_items_summary" android:title="@string/mi2_prefs_display_items" /> - diff --git a/app/src/main/res/xml/devicesettings_language_generic.xml b/app/src/main/res/xml/devicesettings_language_generic.xml new file mode 100644 index 000000000..371bf3197 --- /dev/null +++ b/app/src/main/res/xml/devicesettings_language_generic.xml @@ -0,0 +1,11 @@ + + + +