aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChumva <faiver.unknown@gmail.com>2019-10-22 17:17:12 +0300
committerChumva <faiver.unknown@gmail.com>2019-10-22 17:17:12 +0300
commitddfe4a0361dd3bef6c026a97d25a1250a4adaa7f (patch)
treebcfc25e3cf90e50642234179b4c850d5e435e995
parent2f40c6fb565b8c0bf947938ee46e4e2fa6f81743 (diff)
downloadOsmand-ddfe4a0361dd3bef6c026a97d25a1250a4adaa7f.tar.gz
Introduce general preferences
-rw-r--r--OsmAnd/res/values/strings.xml3
-rw-r--r--OsmAnd/src/net/osmand/plus/OsmandSettings.java48
-rw-r--r--OsmAnd/src/net/osmand/plus/settings/GeneralProfileSettingsFragment.java18
-rw-r--r--OsmAnd/src/net/osmand/plus/settings/bottomsheets/ChangeGeneralProfilesPrefBottomSheet.java44
4 files changed, 51 insertions, 62 deletions
diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml
index 8e2a6b8a0b..f776c8c864 100644
--- a/OsmAnd/res/values/strings.xml
+++ b/OsmAnd/res/values/strings.xml
@@ -11,7 +11,8 @@
Thx - Hardy
-->
-
+ <string name="apply_preference_to_all_profiles">You can apply this change to all profiles or only to selected.</string>
+ <string name="shared_preference">Shared</string>
<string name="shared_string_memory_used_tb_desc">Used %1$s TB</string>
<string name="shared_string_memory_used_gb_desc">Used %1$s GB</string>
<string name="shared_string_memory_used_mb_desc">Used %1$s MB</string>
diff --git a/OsmAnd/src/net/osmand/plus/OsmandSettings.java b/OsmAnd/src/net/osmand/plus/OsmandSettings.java
index f58d8e6c25..3b06898288 100644
--- a/OsmAnd/src/net/osmand/plus/OsmandSettings.java
+++ b/OsmAnd/src/net/osmand/plus/OsmandSettings.java
@@ -239,6 +239,20 @@ public class OsmandSettings {
return registeredPreferences.get(key);
}
+ public boolean setSharedGeneralPreference(String key, Object value) {
+ OsmandPreference<?> preference = registeredPreferences.get(key);
+ if (preference != null) {
+ for (ApplicationMode mode : ApplicationMode.values(ctx)) {
+ settingsAPI.edit(getProfilePreferences(mode)).remove(key).commit();
+ }
+ if (preference instanceof CommonPreference) {
+ ((CommonPreference) preference).cachedValue = null;
+ }
+ return setPreference(key, value, ApplicationMode.DEFAULT);
+ }
+ return false;
+ }
+
public boolean setPreference(String key, Object value) {
return setPreference(key, value, APPLICATION_MODE.get());
}
@@ -516,6 +530,7 @@ public class OsmandSettings {
public abstract class CommonPreference<T> extends PreferenceWithListener<T> {
private final String id;
private boolean global;
+ private boolean general;
private T cachedValue;
private Object cachedPreference;
private boolean cache;
@@ -544,6 +559,11 @@ public class OsmandSettings {
return this;
}
+ public CommonPreference<T> makeGeneral() {
+ general = true;
+ return this;
+ }
+
protected Object getPreferences() {
return global ? globalPreferences : profilePreferences;
}
@@ -582,7 +602,7 @@ public class OsmandSettings {
if (pt != null) {
return getProfileDefaultValue(pt);
}
- if (settingsAPI.contains(defaultProfilePreferences, getId())) {
+ if (general && settingsAPI.contains(defaultProfilePreferences, getId())) {
return getValue(defaultProfilePreferences, defaultValue);
} else {
return defaultValue;
@@ -1179,7 +1199,7 @@ public class OsmandSettings {
public final OsmandPreference<Boolean> FIRST_MAP_IS_DOWNLOADED = new BooleanPreference(
"first_map_is_downloaded", false);
- public final CommonPreference<Boolean> DRIVING_REGION_AUTOMATIC = new BooleanPreference("driving_region_automatic", true).makeProfile().cache();
+ public final CommonPreference<Boolean> DRIVING_REGION_AUTOMATIC = new BooleanPreference("driving_region_automatic", true).makeProfile().makeGeneral().cache();
public final OsmandPreference<DrivingRegion> DRIVING_REGION = new EnumIntPreference<DrivingRegion>(
"default_driving_region", DrivingRegion.EUROPE_ASIA, DrivingRegion.values()) {
protected boolean setValue(Object prefs, DrivingRegion val) {
@@ -1211,7 +1231,7 @@ public class OsmandSettings {
return DrivingRegion.EUROPE_ASIA;
}
- }.makeProfile().cache();
+ }.makeProfile().makeGeneral().cache();
public final CommonPreference<Boolean> METRIC_SYSTEM_CHANGED_MANUALLY = new BooleanPreference("metric_system_changed_manually", false).makeGlobal();
@@ -1223,7 +1243,7 @@ public class OsmandSettings {
return DRIVING_REGION.get().defMetrics;
}
- }.makeProfile();
+ }.makeProfile().makeGeneral();
//public final OsmandPreference<Integer> COORDINATES_FORMAT = new IntPreference("coordinates_format", PointDescription.FORMAT_DEGREES).makeGlobal();
@@ -1233,7 +1253,7 @@ public class OsmandSettings {
protected AngularConstants getValue(Object prefs, AngularConstants defaultValue) {
return super.getValue(prefs, defaultValue);
}
- }.makeProfile();
+ }.makeProfile().makeGeneral();
public final OsmandPreference<SpeedConstants> SPEED_SYSTEM = new EnumIntPreference<SpeedConstants>(
@@ -1263,7 +1283,7 @@ public class OsmandSettings {
;
- }.makeProfile();
+ }.makeProfile().makeGeneral();
// this value string is synchronized with settings_pref.xml preference name
@@ -1327,8 +1347,8 @@ public class OsmandSettings {
new BooleanAccessibilityPreference("direction_haptic_feedback", false).makeGlobal();
// magnetic field doesn'torkmost of the time on some phones
- public final OsmandPreference<Boolean> USE_MAGNETIC_FIELD_SENSOR_COMPASS = new BooleanPreference("use_magnetic_field_sensor_compass", false).makeProfile().cache();
- public final OsmandPreference<Boolean> USE_KALMAN_FILTER_FOR_COMPASS = new BooleanPreference("use_kalman_filter_compass", true).makeProfile().cache();
+ public final OsmandPreference<Boolean> USE_MAGNETIC_FIELD_SENSOR_COMPASS = new BooleanPreference("use_magnetic_field_sensor_compass", false).makeProfile().makeGeneral().cache();
+ public final OsmandPreference<Boolean> USE_KALMAN_FILTER_FOR_COMPASS = new BooleanPreference("use_kalman_filter_compass", true).makeProfile().makeGeneral().cache();
public final OsmandPreference<Boolean> DO_NOT_SHOW_STARTUP_MESSAGES = new BooleanPreference("do_not_show_startup_messages", false).makeGlobal().cache();
public final OsmandPreference<Boolean> DO_NOT_USE_ANIMATIONS = new BooleanPreference("do_not_use_animations", false).makeProfile().cache();
@@ -1339,7 +1359,7 @@ public class OsmandSettings {
public final OsmandPreference<Integer> SEND_ANONYMOUS_DATA_REQUESTS_COUNT = new IntPreference("send_anonymous_data_requests_count", 0).makeGlobal().cache();
public final OsmandPreference<Integer> SEND_ANONYMOUS_DATA_LAST_REQUEST_NS = new IntPreference("send_anonymous_data_last_request_ns", -1).makeGlobal().cache();
- public final OsmandPreference<Boolean> MAP_EMPTY_STATE_ALLOWED = new BooleanPreference("map_empty_state_allowed", true).makeProfile().cache();
+ public final OsmandPreference<Boolean> MAP_EMPTY_STATE_ALLOWED = new BooleanPreference("map_empty_state_allowed", true).makeProfile().makeGeneral().cache();
public final CommonPreference<Float> TEXT_SCALE = new FloatPreference("text_scale", 1f).makeProfile().cache();
@@ -1684,7 +1704,7 @@ public class OsmandSettings {
// this value string is synchronized with settings_pref.xml preference name
public final OsmandPreference<Integer> MAP_SCREEN_ORIENTATION =
- new IntPreference("map_screen_orientation", -1/*ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED*/).makeProfile();
+ new IntPreference("map_screen_orientation", -1/*ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED*/).makeProfile().makeGeneral();
// this value string is synchronized with settings_pref.xml preference name
// public final CommonPreference<Boolean> SHOW_VIEW_ANGLE = new BooleanPreference("show_view_angle", false).makeProfile().cache();
@@ -1741,7 +1761,7 @@ public class OsmandSettings {
public static final int ROTATE_MAP_BEARING = 1;
public static final int ROTATE_MAP_COMPASS = 2;
public final CommonPreference<Integer> ROTATE_MAP =
- new IntPreference("rotate_map", ROTATE_MAP_NONE).makeProfile().cache();
+ new IntPreference("rotate_map", ROTATE_MAP_NONE).makeProfile().makeGeneral().cache();
{
ROTATE_MAP.setModeDefaultValue(ApplicationMode.CAR, ROTATE_MAP_BEARING);
@@ -1853,7 +1873,7 @@ public class OsmandSettings {
public final OsmandPreference<Boolean> ANIMATE_MY_LOCATION = new BooleanPreference("animate_my_location", true).makeProfile().cache();
- public final OsmandPreference<Integer> EXTERNAL_INPUT_DEVICE = new IntPreference("external_input_device", 0).makeProfile();
+ public final OsmandPreference<Integer> EXTERNAL_INPUT_DEVICE = new IntPreference("external_input_device", 0).makeProfile().makeGeneral();
public final OsmandPreference<Boolean> ROUTE_MAP_MARKERS_START_MY_LOC = new BooleanPreference("route_map_markers_start_my_loc", false).makeGlobal().cache();
public final OsmandPreference<Boolean> ROUTE_MAP_MARKERS_ROUND_TRIP = new BooleanPreference("route_map_markers_round_trip", false).makeGlobal().cache();
@@ -3042,7 +3062,7 @@ public class OsmandSettings {
// this value string is synchronized with settings_pref.xml preference name
public final OsmandPreference<String> CONTRIBUTION_INSTALL_APP_DATE = new StringPreference("CONTRIBUTION_INSTALL_APP_DATE", null).makeGlobal();
- public final OsmandPreference<Integer> COORDINATES_FORMAT = new IntPreference("coordinates_format", PointDescription.FORMAT_DEGREES).makeProfile();
+ public final OsmandPreference<Integer> COORDINATES_FORMAT = new IntPreference("coordinates_format", PointDescription.FORMAT_DEGREES).makeProfile().makeGeneral();
public final OsmandPreference<Boolean> FOLLOW_THE_ROUTE = new BooleanPreference("follow_to_route", false).makeGlobal();
public final OsmandPreference<String> FOLLOW_THE_GPX_ROUTE = new StringPreference("follow_gpx", null).makeGlobal();
@@ -3108,7 +3128,7 @@ public class OsmandSettings {
new IntPreference("FAVORITES_TAB", 0).makeGlobal().cache();
public final CommonPreference<Integer> OSMAND_THEME =
- new IntPreference("osmand_theme", OSMAND_LIGHT_THEME).makeProfile().cache();
+ new IntPreference("osmand_theme", OSMAND_LIGHT_THEME).makeProfile().makeGeneral().cache();
public boolean isLightActionBar() {
return isLightContent();
diff --git a/OsmAnd/src/net/osmand/plus/settings/GeneralProfileSettingsFragment.java b/OsmAnd/src/net/osmand/plus/settings/GeneralProfileSettingsFragment.java
index ba5299fc04..8fdd53a396 100644
--- a/OsmAnd/src/net/osmand/plus/settings/GeneralProfileSettingsFragment.java
+++ b/OsmAnd/src/net/osmand/plus/settings/GeneralProfileSettingsFragment.java
@@ -21,6 +21,7 @@ import android.widget.TextView;
import net.osmand.AndroidUtils;
import net.osmand.data.PointDescription;
+import net.osmand.plus.ApplicationMode;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.base.MapViewTrackingUtilities;
@@ -82,8 +83,8 @@ public class GeneralProfileSettingsFragment extends BaseSettingsFragment impleme
if (TextUtils.isEmpty(summary)) {
summary = preference.getSummary();
}
- if (!osmandPreference.isSetForMode(getSelectedAppMode())) {
- String baseString = getString(R.string.shared_string_by_default) + ": %s";
+ if (!osmandPreference.isSetForMode(getSelectedAppMode()) || getSelectedAppMode().equals(ApplicationMode.DEFAULT)) {
+ String baseString = getString(R.string.shared_preference) + ": %s";
summary = AndroidUtils.getStyledString(baseString, summary, new CustomTypefaceSpan(FontCache.getRobotoMedium(app)), null);
}
summaryView.setText(summary);
@@ -336,16 +337,11 @@ public class GeneralProfileSettingsFragment extends BaseSettingsFragment impleme
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
- OsmandSettings.OsmandPreference pref = settings.getPreference(preference.getKey());
- if (pref != null && !pref.isSetForMode(getSelectedAppMode())) {
- FragmentManager fragmentManager = getFragmentManager();
- if (fragmentManager != null) {
- ChangeGeneralProfilesPrefBottomSheet.showInstance(fragmentManager, preference.getKey(), newValue, this, false);
- }
- return false;
+ FragmentManager fragmentManager = getFragmentManager();
+ if (fragmentManager != null) {
+ ChangeGeneralProfilesPrefBottomSheet.showInstance(fragmentManager, preference.getKey(), newValue, this, false);
}
-
- return true;
+ return false;
}
@Override
diff --git a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/ChangeGeneralProfilesPrefBottomSheet.java b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/ChangeGeneralProfilesPrefBottomSheet.java
index a66573051b..8e8ebeb3f3 100644
--- a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/ChangeGeneralProfilesPrefBottomSheet.java
+++ b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/ChangeGeneralProfilesPrefBottomSheet.java
@@ -1,13 +1,11 @@
package net.osmand.plus.settings.bottomsheets;
-import android.graphics.Typeface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.view.View;
-import net.osmand.AndroidUtils;
import net.osmand.PlatformUtil;
import net.osmand.plus.ApplicationMode;
import net.osmand.plus.OsmandApplication;
@@ -22,10 +20,6 @@ import net.osmand.plus.settings.BaseSettingsFragment;
import org.apache.commons.logging.Log;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
public class ChangeGeneralProfilesPrefBottomSheet extends BasePreferenceBottomSheet {
public static final String TAG = ChangeGeneralProfilesPrefBottomSheet.class.getSimpleName();
@@ -44,34 +38,12 @@ public class ChangeGeneralProfilesPrefBottomSheet extends BasePreferenceBottomSh
final String prefId = args.getString(PREFERENCE_ID);
CommonPreference pref = getPreference(prefId);
- OsmandPreference osmandPref = app.getSettings().getPreference(prefId);
- if (pref == null || osmandPref == null) {
+ if (pref == null) {
return;
}
items.add(new TitleItem(getString(R.string.change_default_settings)));
-
- StringBuilder builder = new StringBuilder();
- final List<ApplicationMode> values = ApplicationMode.values(app);
- List<ApplicationMode> appModesDefaultValue = new ArrayList<>();
-
- for (int i = 0; i < values.size(); i++) {
- ApplicationMode mode = values.get(i);
- if (!osmandPref.isSetForMode(mode)) {
- appModesDefaultValue.add(mode);
- }
- }
-
- Iterator<ApplicationMode> iterator = appModesDefaultValue.iterator();
- while (iterator.hasNext()) {
- builder.append(iterator.next().toHumanString(app));
- builder.append(iterator.hasNext() ? ", " : '.');
- }
-
- if (builder.length() > 0) {
- CharSequence description = AndroidUtils.getStyledString(app.getString(R.string.pref_selected_by_default_for_profiles), builder.toString(), Typeface.BOLD);
- items.add(new LongDescriptionItem(description));
- }
+ items.add(new LongDescriptionItem(getString(R.string.apply_preference_to_all_profiles)));
BaseBottomSheetItem applyToAllProfiles = new SimpleBottomSheetItem.Builder()
.setTitle(getString(R.string.apply_to_all_profiles))
@@ -80,12 +52,12 @@ public class ChangeGeneralProfilesPrefBottomSheet extends BasePreferenceBottomSh
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- for (ApplicationMode mode : values) {
- app.getSettings().setPreference(prefId, newValue, mode);
- }
- BaseSettingsFragment target = (BaseSettingsFragment) getTargetFragment();
- if (target != null) {
- target.updateAllSettings();
+ boolean valueSaved = app.getSettings().setSharedGeneralPreference(prefId, newValue);
+ if (valueSaved) {
+ BaseSettingsFragment target = (BaseSettingsFragment) getTargetFragment();
+ if (target != null) {
+ target.updateAllSettings();
+ }
}
dismiss();
}