diff --git a/src/androidTest/java/de/dennisguse/opentracks/EspressoCategoryUnitTest.java b/src/androidTest/java/de/dennisguse/opentracks/EspressoCategoryUnitTest.java index 52370ea42..f11097dad 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/EspressoCategoryUnitTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/EspressoCategoryUnitTest.java @@ -1,6 +1,7 @@ package de.dennisguse.opentracks; +import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.view.ViewParent; @@ -12,6 +13,7 @@ import androidx.test.espresso.ViewInteraction; import androidx.test.ext.junit.rules.ActivityScenarioRule; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.LargeTest; +import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.rule.GrantPermissionRule; import org.hamcrest.Description; @@ -19,6 +21,7 @@ import org.hamcrest.Matcher; import org.hamcrest.TypeSafeMatcher; import org.junit.Rule; import org.junit.Test; +import org.junit.rules.TestRule; import org.junit.runner.RunWith; import static androidx.test.espresso.Espresso.onData; @@ -47,7 +50,12 @@ public class EspressoCategoryUnitTest { public ActivityScenarioRule mActivityTestRule = new ActivityScenarioRule<>(TrackListActivity.class); @Rule - public GrantPermissionRule mRuntimePermissionRule = GrantPermissionRule.grant(android.Manifest.permission.ACCESS_FINE_LOCATION); + public TestRule mRuntimePermissionRule = GrantPermissionRule.grant(android.Manifest.permission.ACCESS_FINE_LOCATION); + + private final Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); + + @Rule + public TestRule mLocaleRule = new PreferenceMetricUnitRule(context, true); @Test public void changeBetweenCategoryUpdateProperlyUnitTest() { diff --git a/src/androidTest/java/de/dennisguse/opentracks/PreferenceMetricUnitRule.java b/src/androidTest/java/de/dennisguse/opentracks/PreferenceMetricUnitRule.java new file mode 100644 index 000000000..066d363aa --- /dev/null +++ b/src/androidTest/java/de/dennisguse/opentracks/PreferenceMetricUnitRule.java @@ -0,0 +1,40 @@ +package de.dennisguse.opentracks; + +import android.content.Context; +import android.content.SharedPreferences; + +import androidx.annotation.NonNull; + +import org.junit.rules.TestRule; +import org.junit.runner.Description; +import org.junit.runners.model.Statement; + +import de.dennisguse.opentracks.util.PreferencesUtils; + +public class PreferenceMetricUnitRule implements TestRule { + private final Context context; + private final boolean metricUnits; + + public PreferenceMetricUnitRule(@NonNull Context context, boolean metricUnits) { + this.context = context; + this.metricUnits = metricUnits; + } + + @Override + public Statement apply(final Statement base, final Description description) { + return new Statement() { + @Override + public void evaluate() throws Throwable { + SharedPreferences sharedPreferences = PreferencesUtils.getSharedPreferences(context); + final boolean previousMetricUnits = PreferencesUtils.isMetricUnits(sharedPreferences, context); + + try { + PreferencesUtils.setMetricUnits(sharedPreferences, context, metricUnits); + base.evaluate(); + } finally { + PreferencesUtils.setMetricUnits(sharedPreferences, context, previousMetricUnits); + } + } + }; + } +} diff --git a/src/main/java/de/dennisguse/opentracks/Startup.java b/src/main/java/de/dennisguse/opentracks/Startup.java index 8362f297f..62ed75323 100644 --- a/src/main/java/de/dennisguse/opentracks/Startup.java +++ b/src/main/java/de/dennisguse/opentracks/Startup.java @@ -30,8 +30,7 @@ public class Startup extends Application { // Set default values of preferences on first start. SharedPreferences sharedPreferences = PreferencesUtils.resetPreferences(this, false); if (PreferencesUtils.getString(sharedPreferences, this, R.string.stats_units_key, "").equals("")) { - String statsUnits = getString(Locale.US.equals(Locale.getDefault()) ? R.string.stats_units_imperial : R.string.stats_units_metric); - PreferencesUtils.setString(sharedPreferences, this, R.string.stats_units_key, statsUnits); + PreferencesUtils.setMetricUnits(sharedPreferences, this, !Locale.US.equals(Locale.getDefault())); } ActivityUtils.applyNightMode(sharedPreferences, this); diff --git a/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java index 5fdad16fb..6431b7b33 100644 --- a/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java @@ -112,6 +112,16 @@ public class PreferencesUtils { return STATS_UNIT.equals(getString(sharedPreferences, context, R.string.stats_units_key, STATS_UNIT)); } + public static void setMetricUnits(SharedPreferences sharedPreferences, Context context, boolean metricUnits) { + String unit; + if (metricUnits) { + unit = context.getString(R.string.stats_units_metric); + } else { + unit = context.getString(R.string.stats_units_imperial); + } + setString(sharedPreferences, context, R.string.stats_units_key, unit); + } + public static boolean isReportSpeed(SharedPreferences sharedPreferences, Context context, String category) { final String STATS_RATE_DEFAULT = context.getString(R.string.stats_rate_default); String currentStatsRate = getString(sharedPreferences, context, R.string.stats_rate_key, STATS_RATE_DEFAULT);