Endurain: Make remaining strings translatable and rename settings screen

This commit is contained in:
Arjan Schrijver
2026-06-19 23:31:23 +02:00
parent 8b9b64b513
commit 3d917887f6
11 changed files with 78 additions and 53 deletions
+2 -2
View File
@@ -260,8 +260,8 @@
android:label="@string/healthconnect_settings" android:label="@string/healthconnect_settings"
android:parentActivityName=".activities.SettingsActivity" /> android:parentActivityName=".activities.SettingsActivity" />
<activity <activity
android:name=".activities.endurain.EndurainPreferencesActivity" android:name=".activities.endurain.OnlineFitnessTrackersPreferencesActivity"
android:label="Endurain" android:label="@string/prefs_online_fitness_trackers_title"
android:parentActivityName=".activities.SettingsActivity" /> android:parentActivityName=".activities.SettingsActivity" />
<activity <activity
android:name=".activities.AboutUserPreferencesActivity" android:name=".activities.AboutUserPreferencesActivity"
@@ -66,7 +66,7 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.activities.automations.AutomationsSettingsActivity; import nodomain.freeyourgadget.gadgetbridge.activities.automations.AutomationsSettingsActivity;
import nodomain.freeyourgadget.gadgetbridge.activities.charts.ChartsPreferencesActivity; import nodomain.freeyourgadget.gadgetbridge.activities.charts.ChartsPreferencesActivity;
import nodomain.freeyourgadget.gadgetbridge.activities.discovery.DiscoveryPairingPreferenceActivity; import nodomain.freeyourgadget.gadgetbridge.activities.discovery.DiscoveryPairingPreferenceActivity;
import nodomain.freeyourgadget.gadgetbridge.activities.endurain.EndurainPreferencesActivity; import nodomain.freeyourgadget.gadgetbridge.activities.endurain.OnlineFitnessTrackersPreferencesActivity;
import nodomain.freeyourgadget.gadgetbridge.activities.maps.MapsSettingsActivity; import nodomain.freeyourgadget.gadgetbridge.activities.maps.MapsSettingsActivity;
import nodomain.freeyourgadget.gadgetbridge.activities.preferences.HealthConnectPreferencesActivity; import nodomain.freeyourgadget.gadgetbridge.activities.preferences.HealthConnectPreferencesActivity;
import nodomain.freeyourgadget.gadgetbridge.externalevents.TimeChangeReceiver; import nodomain.freeyourgadget.gadgetbridge.externalevents.TimeChangeReceiver;
@@ -415,10 +415,10 @@ public class SettingsActivity extends AbstractSettingsActivityV2 {
}); });
} }
pref = findPreference("pref_category_endurain"); pref = findPreference("pref_category_online_fitness_trackers");
if (pref != null) { if (pref != null) {
pref.setOnPreferenceClickListener(preference -> { pref.setOnPreferenceClickListener(preference -> {
Intent enableIntent = new Intent(requireContext(), EndurainPreferencesActivity.class); Intent enableIntent = new Intent(requireContext(), OnlineFitnessTrackersPreferencesActivity.class);
startActivity(enableIntent); startActivity(enableIntent);
return true; return true;
}); });
@@ -35,7 +35,7 @@ class EndurainOAuthCallbackActivity : AbstractGBActivity() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
// Bring us back to front to dismiss the custom tab // Bring us back to front to dismiss the custom tab
val dismissIntent = Intent(applicationContext, EndurainPreferencesActivity::class.java).apply { val dismissIntent = Intent(applicationContext, OnlineFitnessTrackersPreferencesActivity::class.java).apply {
flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP
} }
startActivity(dismissIntent) startActivity(dismissIntent)
@@ -28,16 +28,16 @@ import nodomain.freeyourgadget.gadgetbridge.activities.AbstractSettingsActivityV
import nodomain.freeyourgadget.gadgetbridge.util.DateTimeUtils import nodomain.freeyourgadget.gadgetbridge.util.DateTimeUtils
import nodomain.freeyourgadget.gadgetbridge.util.GB import nodomain.freeyourgadget.gadgetbridge.util.GB
class EndurainPreferencesActivity : AbstractSettingsActivityV2() { class OnlineFitnessTrackersPreferencesActivity : AbstractSettingsActivityV2() {
override fun newFragment(): PreferenceFragmentCompat = override fun newFragment(): PreferenceFragmentCompat =
EndurainPreferencesFragment() OnlineFitnessTrackersPreferencesFragment()
class EndurainPreferencesFragment : AbstractPreferenceFragment() { class OnlineFitnessTrackersPreferencesFragment : AbstractPreferenceFragment() {
private val vm: EndurainSetupViewModel by viewModels() private val vm: EndurainSetupViewModel by viewModels()
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.endurain_preferences, rootKey) setPreferencesFromResource(R.xml.online_fitness_trackers_preferences, rootKey)
updateNetworkWarning() updateNetworkWarning()
wireLoginPreference() wireLoginPreference()
@@ -704,7 +704,8 @@ class WorkoutDetailsFragment : Fragment(), MenuProvider {
val gpxFile = ActivitySummaryUtils.getShareableGpxFile(activityTrackProvider, workout.summary) val gpxFile = ActivitySummaryUtils.getShareableGpxFile(activityTrackProvider, workout.summary)
if (gpxFile == null) { if (gpxFile == null) {
GB.toast(requireContext(), "No GPX track in this activity", Toast.LENGTH_LONG, GB.INFO) GB.toast(requireContext(),
getString(R.string.no_gpx_track_in_activity_toast), Toast.LENGTH_LONG, GB.INFO)
return return
} }
@@ -713,7 +714,7 @@ class WorkoutDetailsFragment : Fragment(), MenuProvider {
} catch (e: Exception) { } catch (e: Exception) {
GB.toast( GB.toast(
requireContext(), requireContext(),
"Unable to display GPX track: ${e.localizedMessage}", getString(R.string.unable_to_display_gpx_track_toast, e.localizedMessage),
Toast.LENGTH_LONG, Toast.LENGTH_LONG,
GB.ERROR, GB.ERROR,
e e
@@ -727,7 +728,7 @@ class WorkoutDetailsFragment : Fragment(), MenuProvider {
val gpxFile = ActivitySummaryUtils.getShareableGpxFile(activityTrackProvider, workout.summary) val gpxFile = ActivitySummaryUtils.getShareableGpxFile(activityTrackProvider, workout.summary)
if (gpxFile == null) { if (gpxFile == null) {
GB.toast(requireContext(), "No GPX track in this activity", Toast.LENGTH_LONG, GB.INFO) GB.toast(requireContext(), getString(R.string.no_gpx_track_in_activity_toast), Toast.LENGTH_LONG, GB.INFO)
return return
} }
@@ -736,7 +737,7 @@ class WorkoutDetailsFragment : Fragment(), MenuProvider {
} catch (e: Exception) { } catch (e: Exception) {
GB.toast( GB.toast(
requireContext(), requireContext(),
"Unable to share GPX track: ${e.localizedMessage}", getString(R.string.unable_to_share_gpx_track_toast, e.localizedMessage),
Toast.LENGTH_LONG, Toast.LENGTH_LONG,
GB.ERROR, GB.ERROR,
e e
@@ -752,7 +753,7 @@ class WorkoutDetailsFragment : Fragment(), MenuProvider {
val gpxFile = ActivitySummaryUtils.getShareableGpxFile(activityTrackProvider, workout.summary) val gpxFile = ActivitySummaryUtils.getShareableGpxFile(activityTrackProvider, workout.summary)
if (gpxFile == null) { if (gpxFile == null) {
GB.toast("No GPX track in this activity", Toast.LENGTH_LONG, GB.INFO) GB.toast(getString(R.string.no_gpx_track_in_activity_toast), Toast.LENGTH_LONG, GB.INFO)
return return
} }
@@ -770,13 +771,13 @@ class WorkoutDetailsFragment : Fragment(), MenuProvider {
activity?.runOnUiThread { activity?.runOnUiThread {
if (newId != null) if (newId != null)
GB.toast( GB.toast(
"Successfully uploaded to Endurain", getString(R.string.endurain_successfully_uploaded_toast),
Toast.LENGTH_SHORT, Toast.LENGTH_SHORT,
GB.INFO GB.INFO
) )
else else
GB.toast( GB.toast(
"Error while uploading to Endurain", getString(R.string.endurain_error_while_uploading_toast),
Toast.LENGTH_SHORT, Toast.LENGTH_SHORT,
GB.INFO GB.INFO
) )
@@ -785,7 +786,7 @@ class WorkoutDetailsFragment : Fragment(), MenuProvider {
} }
} catch (e: Exception) { } catch (e: Exception) {
GB.toast( GB.toast(
"Unable to upload GPX file to Endurain: ${e.localizedMessage}", getString(R.string.endurain_unable_to_upload_gpx_file_toast, e.localizedMessage),
Toast.LENGTH_LONG, Toast.LENGTH_LONG,
GB.ERROR, GB.ERROR,
e e
@@ -12,7 +12,7 @@
android:id="@+id/title" android:id="@+id/title"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Endurain setup" android:text="@string/endurain_setup_title"
android:textAppearance="?attr/textAppearanceHeadlineSmall" /> android:textAppearance="?attr/textAppearanceHeadlineSmall" />
<!-- SERVER --> <!-- SERVER -->
@@ -20,7 +20,7 @@
android:id="@+id/server_layout" android:id="@+id/server_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:hint="Endurain server"> android:hint="@string/endurain_setup_server">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
android:id="@+id/server_input" android:id="@+id/server_input"
@@ -42,14 +42,14 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:text="Local" /> android:text="@string/endurain_setup_login_type_local" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/sso_login_button" android:id="@+id/sso_login_button"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:text="SSO" /> android:text="@string/endurain_setup_login_type_sso" />
</com.google.android.material.button.MaterialButtonToggleGroup> </com.google.android.material.button.MaterialButtonToggleGroup>
<!-- LOCAL LOGIN --> <!-- LOCAL LOGIN -->
@@ -91,7 +91,7 @@
android:id="@+id/mfa_input" android:id="@+id/mfa_input"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:hint="MFA Code" android:hint="@string/endurain_setup_mfa_code"
android:inputType="number" android:inputType="number"
android:maxLength="6" /> android:maxLength="6" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@@ -114,7 +114,7 @@
android:id="@+id/next_button" android:id="@+id/next_button"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Next" /> android:text="@string/endurain_setup_next" />
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
@@ -53,7 +53,7 @@
<item <item
android:id="@+id/activity_action_upload_to_endurain" android:id="@+id/activity_action_upload_to_endurain"
android:icon="@drawable/ic_file_upload" android:icon="@drawable/ic_file_upload"
android:title="Upload to Endurain" android:title="@string/activity_detail_upload_to_endurain"
app:showAsAction="never" /> app:showAsAction="never" />
<item <item
+22
View File
@@ -4960,4 +4960,26 @@
<string name="endurain_server_version">\nServer version: %1$s</string> <string name="endurain_server_version">\nServer version: %1$s</string>
<string name="endurain_logout_failed">Logout failed</string> <string name="endurain_logout_failed">Logout failed</string>
<string name="endurain_logged_out_successfully">Logged out successfully</string> <string name="endurain_logged_out_successfully">Logged out successfully</string>
<string name="prefs_online_fitness_trackers_title">Online fitness trackers</string>
<string name="prefs_online_fitness_trackers_summary">Configure how to reach and use online fitness trackers</string>
<string name="warning_network_required_title">Network required</string>
<string name="warning_network_required_summary">This integration requires network connectivity. Please install and enable the internet helper add-on app.</string>
<string name="pref_info_endurain_status_title">Endurain status</string>
<string name="pref_endurain_log_in_title">Log in to Endurain</string>
<string name="pref_endurain_log_in_summary">Tap here to enter the Endurain server and log in</string>
<string name="pref_endurain_log_out_title">Log out of Endurain</string>
<string name="pref_endurain_log_out_summary">Tap here to log out, this disables the integration</string>
<string name="no_gpx_track_in_activity_toast">No GPX track in this activity</string>
<string name="unable_to_display_gpx_track_toast">Unable to display GPX track: %1$s</string>
<string name="unable_to_share_gpx_track_toast">Unable to share GPX track: %1$s</string>
<string name="endurain_successfully_uploaded_toast">Successfully uploaded to Endurain</string>
<string name="endurain_error_while_uploading_toast">Error while uploading to Endurain</string>
<string name="endurain_unable_to_upload_gpx_file_toast">Unable to upload GPX file to Endurain: %1$s</string>
<string name="endurain_setup_title">Endurain setup</string>
<string name="endurain_setup_server">Endurain server</string>
<string name="endurain_setup_login_type_local">Local</string>
<string name="endurain_setup_login_type_sso">SSO</string>
<string name="endurain_setup_mfa_code">MFA code</string>
<string name="endurain_setup_next">Next</string>
<string name="activity_detail_upload_to_endurain">Upload to Endurain</string>
</resources> </resources>
@@ -1,24 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<Preference
android:icon="@drawable/ic_warning"
android:key="pref_key_network_required"
android:title="Network required"
android:summary="This integration requires network connectivity. Please install and enable the internet helper add-on app." />
<Preference
android:icon="@drawable/ic_info"
android:key="pref_key_status"
android:title="Endurain status"
android:summary="Logged in on endurain.example.com" />
<Preference
android:icon="@drawable/ic_language"
android:key="pref_key_log_in"
android:title="Log in to Endurain"
android:summary="Tap here to enter the Endurain server and log in" />
<Preference
android:icon="@drawable/ic_language"
android:key="pref_key_log_out"
android:title="Log out of Endurain"
android:summary="Tap here to log out, this disables the integration" />
</PreferenceScreen>
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<Preference
android:icon="@drawable/ic_warning"
android:key="pref_key_network_required"
android:title="@string/warning_network_required_title"
android:summary="@string/warning_network_required_summary" />
<PreferenceCategory
android:title="Endurain">
<Preference
android:icon="@drawable/ic_info"
android:key="pref_key_status"
android:title="@string/pref_info_endurain_status_title"
android:summary="Logged in on endurain.example.com" />
<Preference
android:icon="@drawable/ic_language"
android:key="pref_key_log_in"
android:title="@string/pref_endurain_log_in_title"
android:summary="@string/pref_endurain_log_in_summary" />
<Preference
android:icon="@drawable/ic_language"
android:key="pref_key_log_out"
android:title="@string/pref_endurain_log_out_title"
android:summary="@string/pref_endurain_log_out_summary" />
</PreferenceCategory>
</PreferenceScreen>
+3 -4
View File
@@ -388,12 +388,11 @@
android:title="@string/prefs_internet_helper_title" android:title="@string/prefs_internet_helper_title"
android:summary="@string/prefs_internet_helper_summary" /> android:summary="@string/prefs_internet_helper_summary" />
<!-- FIXME: Use Endurain logo and translate strings -->
<PreferenceScreen <PreferenceScreen
android:icon="@drawable/ic_shoe" android:icon="@drawable/ic_shoe"
android:key="pref_category_endurain" android:key="pref_category_online_fitness_trackers"
android:title="Endurain" android:title="@string/prefs_online_fitness_trackers_title"
android:summary="Configure how to reach and use this self-hosted online fitness tracker" /> android:summary="@string/prefs_online_fitness_trackers_summary" />
</PreferenceScreen> </PreferenceScreen>
<Preference <Preference