Merge pull request #8148 from osmandapp/preferences_improvements
Copy and reset profile preferences
This commit is contained in:
commit
e8d5d85df2
25 changed files with 652 additions and 109 deletions
17
OsmAnd/res/layout/bottom_sheet_item_pref_info.xml
Normal file
17
OsmAnd/res/layout/bottom_sheet_item_pref_info.xml
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<net.osmand.plus.widgets.TextViewEx xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/description"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:letterSpacing="@dimen/text_button_letter_spacing"
|
||||||
|
android:minHeight="@dimen/bottom_sheet_list_item_height"
|
||||||
|
android:paddingLeft="@dimen/content_padding"
|
||||||
|
android:paddingTop="@dimen/content_padding"
|
||||||
|
android:paddingRight="@dimen/content_padding"
|
||||||
|
android:paddingBottom="@dimen/content_padding"
|
||||||
|
android:textColor="?android:textColorPrimary"
|
||||||
|
android:textSize="@dimen/default_list_text_size"
|
||||||
|
app:typeface="@string/font_roboto_regular"
|
||||||
|
tools:text="@string/reset_all_profile_settings_descr" />
|
61
OsmAnd/res/layout/preference_profile_item_with_radio_btn.xml
Normal file
61
OsmAnd/res/layout/preference_profile_item_with_radio_btn.xml
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:minHeight="@dimen/bottom_sheet_large_list_item_height"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/icon"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="@dimen/content_padding"
|
||||||
|
android:layout_marginTop="@dimen/bottom_sheet_icon_margin"
|
||||||
|
android:layout_marginRight="@dimen/content_padding"
|
||||||
|
android:layout_marginBottom="@dimen/bottom_sheet_icon_margin"
|
||||||
|
tools:src="@drawable/ic_action_coordinates_latitude"
|
||||||
|
tools:tint="?attr/default_icon_color" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/title"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="2"
|
||||||
|
android:textAppearance="@style/TextAppearance.ListItemTitle"
|
||||||
|
android:textColor="?android:textColorPrimary"
|
||||||
|
tools:text="Item Title" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/description"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:textColor="?android:textColorSecondary"
|
||||||
|
tools:text="Item additional desription" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<android.support.v7.widget.AppCompatRadioButton
|
||||||
|
android:id="@+id/compound_button"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:layout_marginLeft="@dimen/content_padding"
|
||||||
|
android:layout_marginRight="@dimen/content_padding"
|
||||||
|
android:background="@null"
|
||||||
|
android:clickable="false"
|
||||||
|
android:focusable="false"
|
||||||
|
android:saveEnabled="false" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
|
@ -11,6 +11,9 @@
|
||||||
Thx - Hardy
|
Thx - Hardy
|
||||||
|
|
||||||
-->
|
-->
|
||||||
|
<string name="reset_confirmation_descr">By clicking %1$s, you will lose all your changes.</string>
|
||||||
|
<string name="reset_all_profile_settings_descr">All profile settings will be reset to the state after installation.</string>
|
||||||
|
<string name="reset_all_profile_settings">Reset all profile settings to default?</string>
|
||||||
<string name="select_navigation_icon">Select navigation icon</string>
|
<string name="select_navigation_icon">Select navigation icon</string>
|
||||||
<string name="select_map_icon">Select map icon</string>
|
<string name="select_map_icon">Select map icon</string>
|
||||||
<string name="delete_profiles_descr">After you tap Apply, deleted profiles will be lost completely.</string>
|
<string name="delete_profiles_descr">After you tap Apply, deleted profiles will be lost completely.</string>
|
||||||
|
|
|
@ -53,7 +53,7 @@
|
||||||
tools:icon="@drawable/ic_action_offroad" />
|
tools:icon="@drawable/ic_action_offroad" />
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
android:layout="@layout/list_item_divider"
|
android:layout="@layout/simple_divider_item"
|
||||||
android:selectable="false" />
|
android:selectable="false" />
|
||||||
|
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
|
@ -78,6 +78,24 @@
|
||||||
android:title="@string/export_profile"
|
android:title="@string/export_profile"
|
||||||
tools:icon="@drawable/ic_action_app_configuration" />
|
tools:icon="@drawable/ic_action_app_configuration" />
|
||||||
|
|
||||||
|
<Preference
|
||||||
|
android:key="copy_profile_settings"
|
||||||
|
android:layout="@layout/preference_button"
|
||||||
|
android:persistent="false"
|
||||||
|
android:title="@string/copy_from_other_profile"
|
||||||
|
tools:icon="@drawable/ic_action_copy" />
|
||||||
|
|
||||||
|
<Preference
|
||||||
|
android:layout="@layout/simple_divider_item"
|
||||||
|
android:selectable="false" />
|
||||||
|
|
||||||
|
<Preference
|
||||||
|
android:key="reset_to_default"
|
||||||
|
android:layout="@layout/preference_button"
|
||||||
|
android:persistent="false"
|
||||||
|
android:title="@string/reset_to_default"
|
||||||
|
tools:icon="@drawable/ic_action_reset_to_default_dark" />
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
android:key="delete_profile"
|
android:key="delete_profile"
|
||||||
android:layout="@layout/preference_button"
|
android:layout="@layout/preference_button"
|
||||||
|
@ -85,13 +103,6 @@
|
||||||
android:title="@string/profile_alert_delete_title"
|
android:title="@string/profile_alert_delete_title"
|
||||||
tools:icon="@drawable/ic_action_delete_dark" />
|
tools:icon="@drawable/ic_action_delete_dark" />
|
||||||
|
|
||||||
<Preference
|
|
||||||
android:key="export_profile_descr"
|
|
||||||
android:layout="@layout/preference_info_descr_with_title"
|
|
||||||
android:title="@string/profile_import"
|
|
||||||
android:summary="@string/profile_import_descr"
|
|
||||||
android:selectable="false" />
|
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
android:layout="@layout/card_bottom_divider"
|
android:layout="@layout/card_bottom_divider"
|
||||||
android:selectable="false" />
|
android:selectable="false" />
|
||||||
|
|
|
@ -95,6 +95,8 @@ public class AppInitializer implements IProgress {
|
||||||
public static final int VERSION_3_2 = 32;
|
public static final int VERSION_3_2 = 32;
|
||||||
// 35 - 3.5
|
// 35 - 3.5
|
||||||
public static final int VERSION_3_5 = 35;
|
public static final int VERSION_3_5 = 35;
|
||||||
|
// 36 - 3.6
|
||||||
|
public static final int VERSION_3_6 = 36;
|
||||||
|
|
||||||
|
|
||||||
public static final boolean TIPS_AND_TRICKS = false;
|
public static final boolean TIPS_AND_TRICKS = false;
|
||||||
|
@ -160,6 +162,7 @@ public class AppInitializer implements IProgress {
|
||||||
if(initSettings) {
|
if(initSettings) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
ApplicationMode.onApplicationStart(app);
|
||||||
startPrefs = app.getSharedPreferences(
|
startPrefs = app.getSharedPreferences(
|
||||||
getLocalClassName(app.getAppCustomization().getMapActivity().getName()),
|
getLocalClassName(app.getAppCustomization().getMapActivity().getName()),
|
||||||
Context.MODE_PRIVATE);
|
Context.MODE_PRIVATE);
|
||||||
|
@ -200,14 +203,16 @@ public class AppInitializer implements IProgress {
|
||||||
app.getSettings().migrateHomeWorkParkingToFavorites();
|
app.getSettings().migrateHomeWorkParkingToFavorites();
|
||||||
startPrefs.edit().putInt(VERSION_INSTALLED_NUMBER, VERSION_3_5).commit();
|
startPrefs.edit().putInt(VERSION_INSTALLED_NUMBER, VERSION_3_5).commit();
|
||||||
}
|
}
|
||||||
|
if (prevAppVersion < VERSION_3_6) {
|
||||||
|
app.getSettings().migratePreferences();
|
||||||
|
startPrefs.edit().putInt(VERSION_INSTALLED_NUMBER, VERSION_3_6).commit();
|
||||||
|
}
|
||||||
startPrefs.edit().putString(VERSION_INSTALLED, Version.getFullVersion(app)).commit();
|
startPrefs.edit().putString(VERSION_INSTALLED, Version.getFullVersion(app)).commit();
|
||||||
appVersionChanged = true;
|
appVersionChanged = true;
|
||||||
}
|
}
|
||||||
app.getSettings().SHOW_TRAVEL_UPDATE_CARD.set(true);
|
app.getSettings().SHOW_TRAVEL_UPDATE_CARD.set(true);
|
||||||
app.getSettings().SHOW_TRAVEL_NEEDED_MAPS_CARD.set(true);
|
app.getSettings().SHOW_TRAVEL_NEEDED_MAPS_CARD.set(true);
|
||||||
ApplicationMode.onApplicationStart(app);
|
|
||||||
initSettings = true;
|
initSettings = true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getNumberOfStarts() {
|
public int getNumberOfStarts() {
|
||||||
|
|
|
@ -151,7 +151,6 @@ public class OsmandSettings {
|
||||||
/// Settings variables
|
/// Settings variables
|
||||||
private final OsmandApplication ctx;
|
private final OsmandApplication ctx;
|
||||||
private SettingsAPI settingsAPI;
|
private SettingsAPI settingsAPI;
|
||||||
private Object defaultProfilePreferences;
|
|
||||||
private Object globalPreferences;
|
private Object globalPreferences;
|
||||||
private Object profilePreferences;
|
private Object profilePreferences;
|
||||||
private ApplicationMode currentMode;
|
private ApplicationMode currentMode;
|
||||||
|
@ -179,7 +178,6 @@ public class OsmandSettings {
|
||||||
|
|
||||||
private void initPrefs() {
|
private void initPrefs() {
|
||||||
globalPreferences = settingsAPI.getPreferenceObject(getSharedPreferencesName(null));
|
globalPreferences = settingsAPI.getPreferenceObject(getSharedPreferencesName(null));
|
||||||
defaultProfilePreferences = getProfilePreferences(ApplicationMode.DEFAULT);
|
|
||||||
currentMode = readApplicationMode();
|
currentMode = readApplicationMode();
|
||||||
profilePreferences = getProfilePreferences(currentMode);
|
profilePreferences = getProfilePreferences(currentMode);
|
||||||
registeredPreferences.put(APPLICATION_MODE.getId(), APPLICATION_MODE);
|
registeredPreferences.put(APPLICATION_MODE.getId(), APPLICATION_MODE);
|
||||||
|
@ -237,8 +235,7 @@ public class OsmandSettings {
|
||||||
if (pref instanceof CommonPreference) {
|
if (pref instanceof CommonPreference) {
|
||||||
CommonPreference commonPreference = (CommonPreference) pref;
|
CommonPreference commonPreference = (CommonPreference) pref;
|
||||||
if (!commonPreference.global) {
|
if (!commonPreference.global) {
|
||||||
List<ApplicationMode> modes = commonPreference.general ? Collections.singletonList(ApplicationMode.DEFAULT) : ApplicationMode.allPossibleValues();
|
for (ApplicationMode mode : ApplicationMode.allPossibleValues()) {
|
||||||
for (ApplicationMode mode : modes) {
|
|
||||||
if (!commonPreference.isSetForMode(mode)) {
|
if (!commonPreference.isSetForMode(mode)) {
|
||||||
setPreference(key, globalPrefsMap.get(key), mode);
|
setPreference(key, globalPrefsMap.get(key), mode);
|
||||||
}
|
}
|
||||||
|
@ -246,7 +243,7 @@ public class OsmandSettings {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SharedPreferences defaultProfilePreferences = (SharedPreferences) this.defaultProfilePreferences;
|
SharedPreferences defaultProfilePreferences = (SharedPreferences) getProfilePreferences(ApplicationMode.DEFAULT);
|
||||||
Map<String, ?> defaultPrefsMap = defaultProfilePreferences.getAll();
|
Map<String, ?> defaultPrefsMap = defaultProfilePreferences.getAll();
|
||||||
for (String key : defaultPrefsMap.keySet()) {
|
for (String key : defaultPrefsMap.keySet()) {
|
||||||
OsmandPreference pref = getPreference(key);
|
OsmandPreference pref = getPreference(key);
|
||||||
|
@ -257,6 +254,14 @@ public class OsmandSettings {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (OsmandPreference pref : generalPrefs) {
|
||||||
|
Object defaultVal = pref.getModeValue(ApplicationMode.DEFAULT);
|
||||||
|
for (ApplicationMode mode : ApplicationMode.allPossibleValues()) {
|
||||||
|
if (!pref.isSetForMode(mode)) {
|
||||||
|
pref.setModeValue(mode, defaultVal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void migrateHomeWorkParkingToFavorites() {
|
void migrateHomeWorkParkingToFavorites() {
|
||||||
|
@ -290,25 +295,10 @@ public class OsmandSettings {
|
||||||
return registeredPreferences.get(key);
|
return registeredPreferences.get(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean setSharedGeneralPreference(String key, Object value) {
|
public void setPreferenceForAllModes(String key, Object value) {
|
||||||
OsmandPreference<?> preference = registeredPreferences.get(key);
|
for (ApplicationMode mode : ApplicationMode.allPossibleValues()) {
|
||||||
if (preference instanceof CommonPreference) {
|
setPreference(key, value, mode);
|
||||||
CommonPreference commonPref = (CommonPreference) preference;
|
|
||||||
if (commonPref.general) {
|
|
||||||
for (ApplicationMode mode : ApplicationMode.values(ctx)) {
|
|
||||||
if (commonPref.isSetForMode(mode)) {
|
|
||||||
settingsAPI.edit(getProfilePreferences(mode)).remove(key).commit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
boolean valueSaved = setPreference(key, value, ApplicationMode.DEFAULT);
|
|
||||||
if (valueSaved) {
|
|
||||||
commonPref.cachedValue = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return valueSaved;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean setPreference(String key, Object value) {
|
public boolean setPreference(String key, Object value) {
|
||||||
|
@ -415,6 +405,36 @@ public class OsmandSettings {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean copyPreferencesFromProfile(ApplicationMode modeFrom, ApplicationMode modeTo) {
|
||||||
|
SettingsEditor settingsEditor = settingsAPI.edit(getProfilePreferences(modeTo));
|
||||||
|
for (OsmandPreference pref : registeredPreferences.values()) {
|
||||||
|
if (pref instanceof CommonPreference && !((CommonPreference) pref).global) {
|
||||||
|
CommonPreference profilePref = (CommonPreference) pref;
|
||||||
|
if (profilePref.isSetForMode(modeFrom)) {
|
||||||
|
Object copiedValue = profilePref.getModeValue(modeFrom);
|
||||||
|
if (copiedValue instanceof String) {
|
||||||
|
settingsEditor.putString(pref.getId(), (String) copiedValue);
|
||||||
|
} else if (copiedValue instanceof Boolean) {
|
||||||
|
settingsEditor.putBoolean(pref.getId(), (Boolean) copiedValue);
|
||||||
|
} else if (copiedValue instanceof Float) {
|
||||||
|
settingsEditor.putFloat(pref.getId(), (Float) copiedValue);
|
||||||
|
} else if (copiedValue instanceof Integer) {
|
||||||
|
settingsEditor.putInt(pref.getId(), (Integer) copiedValue);
|
||||||
|
} else if (copiedValue instanceof Long) {
|
||||||
|
settingsEditor.putLong(pref.getId(), (Long) copiedValue);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
settingsEditor.remove(pref.getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return settingsEditor.commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean resetPreferencesForProfile(ApplicationMode mode) {
|
||||||
|
return settingsAPI.edit(getProfilePreferences(mode)).clear().commit();
|
||||||
|
}
|
||||||
|
|
||||||
public ApplicationMode LAST_ROUTING_APPLICATION_MODE = null;
|
public ApplicationMode LAST_ROUTING_APPLICATION_MODE = null;
|
||||||
|
|
||||||
// this value string is synchronized with settings_pref.xml preference name
|
// this value string is synchronized with settings_pref.xml preference name
|
||||||
|
@ -592,7 +612,6 @@ public class OsmandSettings {
|
||||||
public abstract class CommonPreference<T> extends PreferenceWithListener<T> {
|
public abstract class CommonPreference<T> extends PreferenceWithListener<T> {
|
||||||
private final String id;
|
private final String id;
|
||||||
private boolean global;
|
private boolean global;
|
||||||
private boolean general;
|
|
||||||
private T cachedValue;
|
private T cachedValue;
|
||||||
private Object cachedPreference;
|
private Object cachedPreference;
|
||||||
private boolean cache;
|
private boolean cache;
|
||||||
|
@ -621,11 +640,6 @@ public class OsmandSettings {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CommonPreference<T> makeGeneral() {
|
|
||||||
general = true;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Object getPreferences() {
|
protected Object getPreferences() {
|
||||||
return global ? globalPreferences : profilePreferences;
|
return global ? globalPreferences : profilePreferences;
|
||||||
}
|
}
|
||||||
|
@ -664,11 +678,7 @@ public class OsmandSettings {
|
||||||
if (pt != null) {
|
if (pt != null) {
|
||||||
return getProfileDefaultValue(pt);
|
return getProfileDefaultValue(pt);
|
||||||
}
|
}
|
||||||
if (general && settingsAPI.contains(defaultProfilePreferences, getId())) {
|
return defaultValue;
|
||||||
return getValue(defaultProfilePreferences, defaultValue);
|
|
||||||
} else {
|
|
||||||
return defaultValue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasDefaultValues() {
|
public boolean hasDefaultValues() {
|
||||||
|
@ -1277,7 +1287,7 @@ public class OsmandSettings {
|
||||||
public final OsmandPreference<Boolean> FIRST_MAP_IS_DOWNLOADED = new BooleanPreference(
|
public final OsmandPreference<Boolean> FIRST_MAP_IS_DOWNLOADED = new BooleanPreference(
|
||||||
"first_map_is_downloaded", false);
|
"first_map_is_downloaded", false);
|
||||||
|
|
||||||
public final CommonPreference<Boolean> DRIVING_REGION_AUTOMATIC = new BooleanPreference("driving_region_automatic", true).makeProfile().makeGeneral().cache();
|
public final CommonPreference<Boolean> DRIVING_REGION_AUTOMATIC = new BooleanPreference("driving_region_automatic", true).makeProfile().cache();
|
||||||
public final OsmandPreference<DrivingRegion> DRIVING_REGION = new EnumIntPreference<DrivingRegion>(
|
public final OsmandPreference<DrivingRegion> DRIVING_REGION = new EnumIntPreference<DrivingRegion>(
|
||||||
"default_driving_region", DrivingRegion.EUROPE_ASIA, DrivingRegion.values()) {
|
"default_driving_region", DrivingRegion.EUROPE_ASIA, DrivingRegion.values()) {
|
||||||
protected boolean setValue(Object prefs, DrivingRegion val) {
|
protected boolean setValue(Object prefs, DrivingRegion val) {
|
||||||
|
@ -1309,7 +1319,7 @@ public class OsmandSettings {
|
||||||
return DrivingRegion.EUROPE_ASIA;
|
return DrivingRegion.EUROPE_ASIA;
|
||||||
}
|
}
|
||||||
|
|
||||||
}.makeProfile().makeGeneral().cache();
|
}.makeProfile().cache();
|
||||||
|
|
||||||
// this value string is synchronized with settings_pref.xml preference name
|
// this value string is synchronized with settings_pref.xml preference name
|
||||||
// cache of metrics constants as they are used very often
|
// cache of metrics constants as they are used very often
|
||||||
|
@ -1319,12 +1329,12 @@ public class OsmandSettings {
|
||||||
return DRIVING_REGION.get().defMetrics;
|
return DRIVING_REGION.get().defMetrics;
|
||||||
}
|
}
|
||||||
|
|
||||||
}.makeProfile().makeGeneral();
|
}.makeProfile();
|
||||||
|
|
||||||
//public final OsmandPreference<Integer> COORDINATES_FORMAT = new IntPreference("coordinates_format", PointDescription.FORMAT_DEGREES).makeGlobal();
|
//public final OsmandPreference<Integer> COORDINATES_FORMAT = new IntPreference("coordinates_format", PointDescription.FORMAT_DEGREES).makeGlobal();
|
||||||
|
|
||||||
public final OsmandPreference<AngularConstants> ANGULAR_UNITS = new EnumIntPreference<AngularConstants>(
|
public final OsmandPreference<AngularConstants> ANGULAR_UNITS = new EnumIntPreference<AngularConstants>(
|
||||||
"angular_measurement", AngularConstants.DEGREES, AngularConstants.values()).makeProfile().makeGeneral();
|
"angular_measurement", AngularConstants.DEGREES, AngularConstants.values()).makeProfile();
|
||||||
|
|
||||||
|
|
||||||
public final OsmandPreference<SpeedConstants> SPEED_SYSTEM = new EnumIntPreference<SpeedConstants>(
|
public final OsmandPreference<SpeedConstants> SPEED_SYSTEM = new EnumIntPreference<SpeedConstants>(
|
||||||
|
@ -1354,7 +1364,7 @@ public class OsmandSettings {
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|
||||||
}.makeProfile().makeGeneral();
|
}.makeProfile();
|
||||||
|
|
||||||
|
|
||||||
// this value string is synchronized with settings_pref.xml preference name
|
// this value string is synchronized with settings_pref.xml preference name
|
||||||
|
@ -1391,7 +1401,7 @@ public class OsmandSettings {
|
||||||
|
|
||||||
// this value string is synchronized with settings_pref.xml preference name
|
// this value string is synchronized with settings_pref.xml preference name
|
||||||
public final OsmandPreference<Boolean> USE_TRACKBALL_FOR_MOVEMENTS =
|
public final OsmandPreference<Boolean> USE_TRACKBALL_FOR_MOVEMENTS =
|
||||||
new BooleanPreference("use_trackball_for_movements", true).makeProfile().makeGeneral();
|
new BooleanPreference("use_trackball_for_movements", true).makeProfile();
|
||||||
|
|
||||||
// this value string is synchronized with settings_pref.xml preference name
|
// this value string is synchronized with settings_pref.xml preference name
|
||||||
public final OsmandPreference<Boolean> ACCESSIBILITY_SMART_AUTOANNOUNCE =
|
public final OsmandPreference<Boolean> ACCESSIBILITY_SMART_AUTOANNOUNCE =
|
||||||
|
@ -1418,12 +1428,12 @@ public class OsmandSettings {
|
||||||
new BooleanAccessibilityPreference("direction_haptic_feedback", false).makeGlobal();
|
new BooleanAccessibilityPreference("direction_haptic_feedback", false).makeGlobal();
|
||||||
|
|
||||||
// magnetic field doesn'torkmost of the time on some phones
|
// 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().makeGeneral().cache();
|
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().makeGeneral().cache();
|
public final OsmandPreference<Boolean> USE_KALMAN_FILTER_FOR_COMPASS = new BooleanPreference("use_kalman_filter_compass", true).makeProfile().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_SHOW_STARTUP_MESSAGES = new BooleanPreference("do_not_show_startup_messages", false).makeGlobal().cache();
|
||||||
public final OsmandPreference<Boolean> SHOW_DOWNLOAD_MAP_DIALOG = new BooleanPreference("show_download_map_dialog", true).makeGlobal().cache();
|
public final OsmandPreference<Boolean> SHOW_DOWNLOAD_MAP_DIALOG = new BooleanPreference("show_download_map_dialog", true).makeGlobal().cache();
|
||||||
public final OsmandPreference<Boolean> DO_NOT_USE_ANIMATIONS = new BooleanPreference("do_not_use_animations", false).makeProfile().makeGeneral().cache();
|
public final OsmandPreference<Boolean> DO_NOT_USE_ANIMATIONS = new BooleanPreference("do_not_use_animations", false).makeProfile().cache();
|
||||||
|
|
||||||
public final OsmandPreference<Boolean> SEND_ANONYMOUS_MAP_DOWNLOADS_DATA = new BooleanPreference("send_anonymous_map_downloads_data", false).makeGlobal().cache();
|
public final OsmandPreference<Boolean> SEND_ANONYMOUS_MAP_DOWNLOADS_DATA = new BooleanPreference("send_anonymous_map_downloads_data", false).makeGlobal().cache();
|
||||||
public final OsmandPreference<Boolean> SEND_ANONYMOUS_APP_USAGE_DATA = new BooleanPreference("send_anonymous_app_usage_data", false).makeGlobal().cache();
|
public final OsmandPreference<Boolean> SEND_ANONYMOUS_APP_USAGE_DATA = new BooleanPreference("send_anonymous_app_usage_data", false).makeGlobal().cache();
|
||||||
|
@ -1431,7 +1441,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_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<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", false).makeProfile().makeGeneral().cache();
|
public final OsmandPreference<Boolean> MAP_EMPTY_STATE_ALLOWED = new BooleanPreference("map_empty_state_allowed", false).makeProfile().cache();
|
||||||
|
|
||||||
|
|
||||||
public final CommonPreference<Float> TEXT_SCALE = new FloatPreference("text_scale", 1f).makeProfile().cache();
|
public final CommonPreference<Float> TEXT_SCALE = new FloatPreference("text_scale", 1f).makeProfile().cache();
|
||||||
|
@ -1575,10 +1585,10 @@ public class OsmandSettings {
|
||||||
public static final String SAVE_CURRENT_TRACK = "save_current_track"; //$NON-NLS-1$
|
public static final String SAVE_CURRENT_TRACK = "save_current_track"; //$NON-NLS-1$
|
||||||
|
|
||||||
public final CommonPreference<Boolean> SAVE_GLOBAL_TRACK_TO_GPX = new BooleanPreference("save_global_track_to_gpx", false).makeGlobal().cache();
|
public final CommonPreference<Boolean> SAVE_GLOBAL_TRACK_TO_GPX = new BooleanPreference("save_global_track_to_gpx", false).makeGlobal().cache();
|
||||||
public final CommonPreference<Integer> SAVE_GLOBAL_TRACK_INTERVAL = new IntPreference("save_global_track_interval", 5000).makeProfile().makeGeneral().cache();
|
public final CommonPreference<Integer> SAVE_GLOBAL_TRACK_INTERVAL = new IntPreference("save_global_track_interval", 5000).makeProfile().cache();
|
||||||
public final CommonPreference<Boolean> SAVE_GLOBAL_TRACK_REMEMBER = new BooleanPreference("save_global_track_remember", false).makeProfile().makeGeneral().cache();
|
public final CommonPreference<Boolean> SAVE_GLOBAL_TRACK_REMEMBER = new BooleanPreference("save_global_track_remember", false).makeProfile().cache();
|
||||||
// this value string is synchronized with settings_pref.xml preference name
|
// this value string is synchronized with settings_pref.xml preference name
|
||||||
public final CommonPreference<Boolean> SAVE_TRACK_TO_GPX = new BooleanPreference("save_track_to_gpx", false).makeProfile().makeGeneral().cache();
|
public final CommonPreference<Boolean> SAVE_TRACK_TO_GPX = new BooleanPreference("save_track_to_gpx", false).makeProfile().cache();
|
||||||
|
|
||||||
{
|
{
|
||||||
SAVE_TRACK_TO_GPX.setModeDefaultValue(ApplicationMode.CAR, false);
|
SAVE_TRACK_TO_GPX.setModeDefaultValue(ApplicationMode.CAR, false);
|
||||||
|
@ -1590,11 +1600,11 @@ public class OsmandSettings {
|
||||||
public static final Integer MONTHLY_DIRECTORY = 1;
|
public static final Integer MONTHLY_DIRECTORY = 1;
|
||||||
public static final Integer DAILY_DIRECTORY = 2;
|
public static final Integer DAILY_DIRECTORY = 2;
|
||||||
|
|
||||||
public final CommonPreference<Boolean> DISABLE_RECORDING_ONCE_APP_KILLED = new BooleanPreference("disable_recording_once_app_killed", false).makeProfile().makeGeneral();
|
public final CommonPreference<Boolean> DISABLE_RECORDING_ONCE_APP_KILLED = new BooleanPreference("disable_recording_once_app_killed", false).makeProfile();
|
||||||
|
|
||||||
public final CommonPreference<Boolean> SAVE_HEADING_TO_GPX = new BooleanPreference("save_heading_to_gpx", false).makeProfile().makeGeneral();
|
public final CommonPreference<Boolean> SAVE_HEADING_TO_GPX = new BooleanPreference("save_heading_to_gpx", false).makeProfile();
|
||||||
|
|
||||||
public final CommonPreference<Integer> TRACK_STORAGE_DIRECTORY = new IntPreference("track_storage_directory", 0).makeProfile().makeGeneral();
|
public final CommonPreference<Integer> TRACK_STORAGE_DIRECTORY = new IntPreference("track_storage_directory", 0).makeProfile();
|
||||||
|
|
||||||
// this value string is synchronized with settings_pref.xml preference name
|
// this value string is synchronized with settings_pref.xml preference name
|
||||||
public final OsmandPreference<Boolean> FAST_ROUTE_MODE = new BooleanPreference("fast_route_mode", true).makeProfile();
|
public final OsmandPreference<Boolean> FAST_ROUTE_MODE = new BooleanPreference("fast_route_mode", true).makeProfile();
|
||||||
|
@ -1701,7 +1711,7 @@ public class OsmandSettings {
|
||||||
public final CommonPreference<Integer> CURRENT_TRACK_COLOR = new IntPreference("current_track_color", 0).makeGlobal().cache();
|
public final CommonPreference<Integer> CURRENT_TRACK_COLOR = new IntPreference("current_track_color", 0).makeGlobal().cache();
|
||||||
|
|
||||||
// this value string is synchronized with settings_pref.xml preference name
|
// this value string is synchronized with settings_pref.xml preference name
|
||||||
public final CommonPreference<Integer> SAVE_TRACK_INTERVAL = new IntPreference("save_track_interval", 5000).makeProfile().makeGeneral();
|
public final CommonPreference<Integer> SAVE_TRACK_INTERVAL = new IntPreference("save_track_interval", 5000).makeProfile();
|
||||||
|
|
||||||
{
|
{
|
||||||
SAVE_TRACK_INTERVAL.setModeDefaultValue(ApplicationMode.CAR, 3000);
|
SAVE_TRACK_INTERVAL.setModeDefaultValue(ApplicationMode.CAR, 3000);
|
||||||
|
@ -1710,40 +1720,40 @@ public class OsmandSettings {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Please note that SAVE_TRACK_MIN_DISTANCE, SAVE_TRACK_PRECISION, SAVE_TRACK_MIN_SPEED should all be "0" for the default profile, as we have no interface to change them
|
// Please note that SAVE_TRACK_MIN_DISTANCE, SAVE_TRACK_PRECISION, SAVE_TRACK_MIN_SPEED should all be "0" for the default profile, as we have no interface to change them
|
||||||
public final CommonPreference<Float> SAVE_TRACK_MIN_DISTANCE = new FloatPreference("save_track_min_distance", 0).makeProfile().makeGeneral();
|
public final CommonPreference<Float> SAVE_TRACK_MIN_DISTANCE = new FloatPreference("save_track_min_distance", 0).makeProfile();
|
||||||
//{
|
//{
|
||||||
// SAVE_TRACK_MIN_DISTANCE.setModeDefaultValue(ApplicationMode.CAR, 5.f);
|
// SAVE_TRACK_MIN_DISTANCE.setModeDefaultValue(ApplicationMode.CAR, 5.f);
|
||||||
// SAVE_TRACK_MIN_DISTANCE.setModeDefaultValue(ApplicationMode.BICYCLE, 5.f);
|
// SAVE_TRACK_MIN_DISTANCE.setModeDefaultValue(ApplicationMode.BICYCLE, 5.f);
|
||||||
// SAVE_TRACK_MIN_DISTANCE.setModeDefaultValue(ApplicationMode.PEDESTRIAN, 5.f);
|
// SAVE_TRACK_MIN_DISTANCE.setModeDefaultValue(ApplicationMode.PEDESTRIAN, 5.f);
|
||||||
//}
|
//}
|
||||||
public final CommonPreference<Float> SAVE_TRACK_PRECISION = new FloatPreference("save_track_precision", 50.0f).makeProfile().makeGeneral();
|
public final CommonPreference<Float> SAVE_TRACK_PRECISION = new FloatPreference("save_track_precision", 50.0f).makeProfile();
|
||||||
//{
|
//{
|
||||||
// SAVE_TRACK_PRECISION.setModeDefaultValue(ApplicationMode.CAR, 50.f);
|
// SAVE_TRACK_PRECISION.setModeDefaultValue(ApplicationMode.CAR, 50.f);
|
||||||
// SAVE_TRACK_PRECISION.setModeDefaultValue(ApplicationMode.BICYCLE, 50.f);
|
// SAVE_TRACK_PRECISION.setModeDefaultValue(ApplicationMode.BICYCLE, 50.f);
|
||||||
// SAVE_TRACK_PRECISION.setModeDefaultValue(ApplicationMode.PEDESTRIAN, 50.f);
|
// SAVE_TRACK_PRECISION.setModeDefaultValue(ApplicationMode.PEDESTRIAN, 50.f);
|
||||||
//}
|
//}
|
||||||
public final CommonPreference<Float> SAVE_TRACK_MIN_SPEED = new FloatPreference("save_track_min_speed", 0.f).makeProfile().makeGeneral();
|
public final CommonPreference<Float> SAVE_TRACK_MIN_SPEED = new FloatPreference("save_track_min_speed", 0.f).makeProfile();
|
||||||
//{
|
//{
|
||||||
// SAVE_TRACK_MIN_SPEED.setModeDefaultValue(ApplicationMode.CAR, 2.f);
|
// SAVE_TRACK_MIN_SPEED.setModeDefaultValue(ApplicationMode.CAR, 2.f);
|
||||||
// SAVE_TRACK_MIN_SPEED.setModeDefaultValue(ApplicationMode.BICYCLE, 1.f);
|
// SAVE_TRACK_MIN_SPEED.setModeDefaultValue(ApplicationMode.BICYCLE, 1.f);
|
||||||
// SAVE_TRACK_MIN_SPEED.setModeDefaultValue(ApplicationMode.PEDESTRIAN, 0.f);
|
// SAVE_TRACK_MIN_SPEED.setModeDefaultValue(ApplicationMode.PEDESTRIAN, 0.f);
|
||||||
//}
|
//}
|
||||||
public final CommonPreference<Boolean> AUTO_SPLIT_RECORDING = new BooleanPreference("auto_split_recording", true).makeProfile().makeGeneral();
|
public final CommonPreference<Boolean> AUTO_SPLIT_RECORDING = new BooleanPreference("auto_split_recording", true).makeProfile();
|
||||||
|
|
||||||
public final CommonPreference<Boolean> SHOW_TRIP_REC_NOTIFICATION = new BooleanPreference("show_trip_recording_notification", true).makeProfile().makeGeneral();
|
public final CommonPreference<Boolean> SHOW_TRIP_REC_NOTIFICATION = new BooleanPreference("show_trip_recording_notification", true).makeProfile();
|
||||||
|
|
||||||
// this value string is synchronized with settings_pref.xml preference name
|
// this value string is synchronized with settings_pref.xml preference name
|
||||||
public final CommonPreference<Boolean> LIVE_MONITORING = new BooleanPreference("live_monitoring", false).makeProfile().makeGeneral();
|
public final CommonPreference<Boolean> LIVE_MONITORING = new BooleanPreference("live_monitoring", false).makeProfile();
|
||||||
|
|
||||||
// this value string is synchronized with settings_pref.xml preference name
|
// this value string is synchronized with settings_pref.xml preference name
|
||||||
public final CommonPreference<Integer> LIVE_MONITORING_INTERVAL = new IntPreference("live_monitoring_interval", 5000).makeProfile().makeGeneral();
|
public final CommonPreference<Integer> LIVE_MONITORING_INTERVAL = new IntPreference("live_monitoring_interval", 5000).makeProfile();
|
||||||
|
|
||||||
// this value string is synchronized with settings_pref.xml preference name
|
// this value string is synchronized with settings_pref.xml preference name
|
||||||
public final CommonPreference<Integer> LIVE_MONITORING_MAX_INTERVAL_TO_SEND = new IntPreference("live_monitoring_maximum_interval_to_send", 900000).makeProfile().makeGeneral();
|
public final CommonPreference<Integer> LIVE_MONITORING_MAX_INTERVAL_TO_SEND = new IntPreference("live_monitoring_maximum_interval_to_send", 900000).makeProfile();
|
||||||
|
|
||||||
// this value string is synchronized with settings_pref.xml preference name
|
// this value string is synchronized with settings_pref.xml preference name
|
||||||
public final CommonPreference<String> LIVE_MONITORING_URL = new StringPreference("live_monitoring_url",
|
public final CommonPreference<String> LIVE_MONITORING_URL = new StringPreference("live_monitoring_url",
|
||||||
"https://example.com?lat={0}&lon={1}×tamp={2}&hdop={3}&altitude={4}&speed={5}").makeProfile().makeGeneral();
|
"https://example.com?lat={0}&lon={1}×tamp={2}&hdop={3}&altitude={4}&speed={5}").makeProfile();
|
||||||
|
|
||||||
public final CommonPreference<String> GPS_STATUS_APP = new StringPreference("gps_status_app", "").makeGlobal();
|
public final CommonPreference<String> GPS_STATUS_APP = new StringPreference("gps_status_app", "").makeGlobal();
|
||||||
|
|
||||||
|
@ -1780,7 +1790,7 @@ public class OsmandSettings {
|
||||||
|
|
||||||
// this value string is synchronized with settings_pref.xml preference name
|
// this value string is synchronized with settings_pref.xml preference name
|
||||||
public final OsmandPreference<Integer> MAP_SCREEN_ORIENTATION =
|
public final OsmandPreference<Integer> MAP_SCREEN_ORIENTATION =
|
||||||
new IntPreference("map_screen_orientation", -1/*ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED*/).makeProfile().makeGeneral();
|
new IntPreference("map_screen_orientation", -1/*ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED*/).makeProfile();
|
||||||
|
|
||||||
// this value string is synchronized with settings_pref.xml preference name
|
// 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();
|
// public final CommonPreference<Boolean> SHOW_VIEW_ANGLE = new BooleanPreference("show_view_angle", false).makeProfile().cache();
|
||||||
|
@ -1837,7 +1847,7 @@ public class OsmandSettings {
|
||||||
public static final int ROTATE_MAP_BEARING = 1;
|
public static final int ROTATE_MAP_BEARING = 1;
|
||||||
public static final int ROTATE_MAP_COMPASS = 2;
|
public static final int ROTATE_MAP_COMPASS = 2;
|
||||||
public final CommonPreference<Integer> ROTATE_MAP =
|
public final CommonPreference<Integer> ROTATE_MAP =
|
||||||
new IntPreference("rotate_map", ROTATE_MAP_NONE).makeProfile().makeGeneral().cache();
|
new IntPreference("rotate_map", ROTATE_MAP_NONE).makeProfile().cache();
|
||||||
|
|
||||||
{
|
{
|
||||||
ROTATE_MAP.setModeDefaultValue(ApplicationMode.CAR, ROTATE_MAP_BEARING);
|
ROTATE_MAP.setModeDefaultValue(ApplicationMode.CAR, ROTATE_MAP_BEARING);
|
||||||
|
@ -1851,7 +1861,7 @@ public class OsmandSettings {
|
||||||
public static final int MIDDLE_BOTTOM_CONSTANT = 2;
|
public static final int MIDDLE_BOTTOM_CONSTANT = 2;
|
||||||
public static final int MIDDLE_TOP_CONSTANT = 3;
|
public static final int MIDDLE_TOP_CONSTANT = 3;
|
||||||
public static final int LANDSCAPE_MIDDLE_RIGHT_CONSTANT = 4;
|
public static final int LANDSCAPE_MIDDLE_RIGHT_CONSTANT = 4;
|
||||||
public final CommonPreference<Boolean> CENTER_POSITION_ON_MAP = new BooleanPreference("center_position_on_map", false).makeProfile().makeGeneral();
|
public final CommonPreference<Boolean> CENTER_POSITION_ON_MAP = new BooleanPreference("center_position_on_map", false).makeProfile();
|
||||||
|
|
||||||
// this value string is synchronized with settings_pref.xml preference name
|
// this value string is synchronized with settings_pref.xml preference name
|
||||||
public final OsmandPreference<Integer> MAX_LEVEL_TO_DOWNLOAD_TILE = new IntPreference("max_level_download_tile", 20).makeProfile().cache();
|
public final OsmandPreference<Integer> MAX_LEVEL_TO_DOWNLOAD_TILE = new IntPreference("max_level_download_tile", 20).makeProfile().cache();
|
||||||
|
@ -1949,7 +1959,7 @@ public class OsmandSettings {
|
||||||
|
|
||||||
public final OsmandPreference<Boolean> ANIMATE_MY_LOCATION = new BooleanPreference("animate_my_location", true).makeProfile().cache();
|
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().makeGeneral();
|
public final OsmandPreference<Integer> EXTERNAL_INPUT_DEVICE = new IntPreference("external_input_device", 0).makeProfile();
|
||||||
|
|
||||||
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_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();
|
public final OsmandPreference<Boolean> ROUTE_MAP_MARKERS_ROUND_TRIP = new BooleanPreference("route_map_markers_round_trip", false).makeGlobal().cache();
|
||||||
|
@ -3097,7 +3107,7 @@ public class OsmandSettings {
|
||||||
// this value string is synchronized with settings_pref.xml preference name
|
// 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<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().makeGeneral();
|
public final OsmandPreference<Integer> COORDINATES_FORMAT = new IntPreference("coordinates_format", PointDescription.FORMAT_DEGREES).makeProfile();
|
||||||
|
|
||||||
public final OsmandPreference<Boolean> FOLLOW_THE_ROUTE = new BooleanPreference("follow_to_route", false).makeGlobal();
|
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();
|
public final OsmandPreference<String> FOLLOW_THE_GPX_ROUTE = new StringPreference("follow_gpx", null).makeGlobal();
|
||||||
|
@ -3163,7 +3173,7 @@ public class OsmandSettings {
|
||||||
new IntPreference("FAVORITES_TAB", 0).makeGlobal().cache();
|
new IntPreference("FAVORITES_TAB", 0).makeGlobal().cache();
|
||||||
|
|
||||||
public final CommonPreference<Integer> OSMAND_THEME =
|
public final CommonPreference<Integer> OSMAND_THEME =
|
||||||
new IntPreference("osmand_theme", OSMAND_LIGHT_THEME).makeProfile().makeGeneral().cache();
|
new IntPreference("osmand_theme", OSMAND_LIGHT_THEME).makeProfile().cache();
|
||||||
|
|
||||||
public boolean isLightActionBar() {
|
public boolean isLightActionBar() {
|
||||||
return isLightContent();
|
return isLightContent();
|
||||||
|
@ -3468,6 +3478,39 @@ public class OsmandSettings {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private OsmandPreference[] generalPrefs = new OsmandPreference[]{
|
||||||
|
EXTERNAL_INPUT_DEVICE,
|
||||||
|
CENTER_POSITION_ON_MAP,
|
||||||
|
ROTATE_MAP,
|
||||||
|
MAP_SCREEN_ORIENTATION,
|
||||||
|
LIVE_MONITORING_URL,
|
||||||
|
LIVE_MONITORING_MAX_INTERVAL_TO_SEND,
|
||||||
|
LIVE_MONITORING_INTERVAL,
|
||||||
|
LIVE_MONITORING,
|
||||||
|
SHOW_TRIP_REC_NOTIFICATION,
|
||||||
|
AUTO_SPLIT_RECORDING,
|
||||||
|
SAVE_TRACK_MIN_SPEED,
|
||||||
|
SAVE_TRACK_PRECISION,
|
||||||
|
SAVE_TRACK_MIN_DISTANCE,
|
||||||
|
SAVE_TRACK_INTERVAL,
|
||||||
|
TRACK_STORAGE_DIRECTORY,
|
||||||
|
SAVE_HEADING_TO_GPX,
|
||||||
|
DISABLE_RECORDING_ONCE_APP_KILLED,
|
||||||
|
SAVE_TRACK_TO_GPX,
|
||||||
|
SAVE_GLOBAL_TRACK_REMEMBER,
|
||||||
|
SAVE_GLOBAL_TRACK_INTERVAL,
|
||||||
|
MAP_EMPTY_STATE_ALLOWED,
|
||||||
|
DO_NOT_USE_ANIMATIONS,
|
||||||
|
USE_KALMAN_FILTER_FOR_COMPASS,
|
||||||
|
USE_MAGNETIC_FIELD_SENSOR_COMPASS,
|
||||||
|
USE_TRACKBALL_FOR_MOVEMENTS,
|
||||||
|
SPEED_SYSTEM,
|
||||||
|
ANGULAR_UNITS,
|
||||||
|
METRIC_SYSTEM,
|
||||||
|
DRIVING_REGION,
|
||||||
|
DRIVING_REGION_AUTOMATIC
|
||||||
|
};
|
||||||
|
|
||||||
public class PreferencesDataStore extends PreferenceDataStore {
|
public class PreferencesDataStore extends PreferenceDataStore {
|
||||||
|
|
||||||
private ApplicationMode appMode;
|
private ApplicationMode appMode;
|
||||||
|
|
|
@ -51,6 +51,12 @@ public class FileSettingsAPIImpl implements SettingsAPI {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SettingsEditor clear() {
|
||||||
|
modified.clear();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SettingsEditor putString(String key, String value) {
|
public SettingsEditor putString(String key, String value) {
|
||||||
modified.put(wrap(pref,key), value);
|
modified.put(wrap(pref,key), value);
|
||||||
|
|
|
@ -13,6 +13,7 @@ public interface SettingsAPI {
|
||||||
public SettingsEditor putInt(String key, int value);
|
public SettingsEditor putInt(String key, int value);
|
||||||
public SettingsEditor putLong(String key, long value);
|
public SettingsEditor putLong(String key, long value);
|
||||||
public SettingsEditor remove(String key);
|
public SettingsEditor remove(String key);
|
||||||
|
public SettingsEditor clear();
|
||||||
public boolean commit();
|
public boolean commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,12 @@ public class SettingsAPIImpl implements SettingsAPI {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SettingsEditor clear() {
|
||||||
|
edit.clear();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SettingsEditor putString(String key, String value) {
|
public SettingsEditor putString(String key, String value) {
|
||||||
edit.putString(key, value);
|
edit.putString(key, value);
|
||||||
|
|
|
@ -83,7 +83,7 @@ public abstract class MenuBottomSheetDialogFragment extends BottomSheetDialogFra
|
||||||
inflateMenuItems();
|
inflateMenuItems();
|
||||||
|
|
||||||
dismissButton = mainView.findViewById(R.id.dismiss_button);
|
dismissButton = mainView.findViewById(R.id.dismiss_button);
|
||||||
UiUtilities.setupDialogButton(nightMode, dismissButton, getDismissByttonType(), getDismissButtonTextId());
|
UiUtilities.setupDialogButton(nightMode, dismissButton, getDismissButtonType(), getDismissButtonTextId());
|
||||||
dismissButton.setOnClickListener(new View.OnClickListener() {
|
dismissButton.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
|
@ -98,7 +98,7 @@ public abstract class MenuBottomSheetDialogFragment extends BottomSheetDialogFra
|
||||||
if (rightBottomButtonTextId != DEFAULT_VALUE) {
|
if (rightBottomButtonTextId != DEFAULT_VALUE) {
|
||||||
mainView.findViewById(R.id.buttons_divider).setVisibility(View.VISIBLE);
|
mainView.findViewById(R.id.buttons_divider).setVisibility(View.VISIBLE);
|
||||||
rightButton = mainView.findViewById(R.id.right_bottom_button);
|
rightButton = mainView.findViewById(R.id.right_bottom_button);
|
||||||
UiUtilities.setupDialogButton(nightMode, rightButton, getRightBottomByttonType(), rightBottomButtonTextId);
|
UiUtilities.setupDialogButton(nightMode, rightButton, getRightBottomButtonType(), rightBottomButtonTextId);
|
||||||
rightButton.setVisibility(View.VISIBLE);
|
rightButton.setVisibility(View.VISIBLE);
|
||||||
rightButton.setOnClickListener(new View.OnClickListener() {
|
rightButton.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -249,7 +249,7 @@ public abstract class MenuBottomSheetDialogFragment extends BottomSheetDialogFra
|
||||||
dismissButtonStringRes = stringRes;
|
dismissButtonStringRes = stringRes;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected DialogButtonType getDismissByttonType() {
|
protected DialogButtonType getDismissButtonType() {
|
||||||
return DialogButtonType.SECONDARY;
|
return DialogButtonType.SECONDARY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -262,7 +262,7 @@ public abstract class MenuBottomSheetDialogFragment extends BottomSheetDialogFra
|
||||||
return DEFAULT_VALUE;
|
return DEFAULT_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected DialogButtonType getRightBottomByttonType() {
|
protected DialogButtonType getRightBottomButtonType() {
|
||||||
return DialogButtonType.PRIMARY;
|
return DialogButtonType.PRIMARY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,7 @@ public class BottomSheetItemTitleWithDescrAndButton extends BottomSheetItemWithD
|
||||||
View.OnClickListener onClickListener,
|
View.OnClickListener onClickListener,
|
||||||
int position,
|
int position,
|
||||||
Drawable icon,
|
Drawable icon,
|
||||||
|
Drawable background,
|
||||||
String title,
|
String title,
|
||||||
@ColorRes int titleColorId,
|
@ColorRes int titleColorId,
|
||||||
CharSequence description,
|
CharSequence description,
|
||||||
|
@ -49,6 +50,7 @@ public class BottomSheetItemTitleWithDescrAndButton extends BottomSheetItemWithD
|
||||||
onClickListener,
|
onClickListener,
|
||||||
position,
|
position,
|
||||||
icon,
|
icon,
|
||||||
|
background,
|
||||||
title,
|
title,
|
||||||
titleColorId,
|
titleColorId,
|
||||||
description,
|
description,
|
||||||
|
@ -123,6 +125,7 @@ public class BottomSheetItemTitleWithDescrAndButton extends BottomSheetItemWithD
|
||||||
onClickListener,
|
onClickListener,
|
||||||
position,
|
position,
|
||||||
icon,
|
icon,
|
||||||
|
background,
|
||||||
title,
|
title,
|
||||||
titleColorId,
|
titleColorId,
|
||||||
description,
|
description,
|
||||||
|
|
|
@ -36,6 +36,7 @@ public class BottomSheetItemWithCompoundButton extends BottomSheetItemWithDescri
|
||||||
View.OnClickListener onClickListener,
|
View.OnClickListener onClickListener,
|
||||||
int position,
|
int position,
|
||||||
Drawable icon,
|
Drawable icon,
|
||||||
|
Drawable background,
|
||||||
String title,
|
String title,
|
||||||
@ColorRes int titleColorId,
|
@ColorRes int titleColorId,
|
||||||
CharSequence description,
|
CharSequence description,
|
||||||
|
@ -53,6 +54,7 @@ public class BottomSheetItemWithCompoundButton extends BottomSheetItemWithDescri
|
||||||
onClickListener,
|
onClickListener,
|
||||||
position,
|
position,
|
||||||
icon,
|
icon,
|
||||||
|
background,
|
||||||
title,
|
title,
|
||||||
titleColorId,
|
titleColorId,
|
||||||
description,
|
description,
|
||||||
|
@ -126,6 +128,7 @@ public class BottomSheetItemWithCompoundButton extends BottomSheetItemWithDescri
|
||||||
onClickListener,
|
onClickListener,
|
||||||
position,
|
position,
|
||||||
icon,
|
icon,
|
||||||
|
background,
|
||||||
title,
|
title,
|
||||||
titleColorId,
|
titleColorId,
|
||||||
description,
|
description,
|
||||||
|
|
|
@ -10,7 +10,6 @@ import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import net.osmand.plus.OsmandApplication;
|
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
|
|
||||||
public class BottomSheetItemWithDescription extends SimpleBottomSheetItem {
|
public class BottomSheetItemWithDescription extends SimpleBottomSheetItem {
|
||||||
|
@ -30,13 +29,14 @@ public class BottomSheetItemWithDescription extends SimpleBottomSheetItem {
|
||||||
View.OnClickListener onClickListener,
|
View.OnClickListener onClickListener,
|
||||||
int position,
|
int position,
|
||||||
Drawable icon,
|
Drawable icon,
|
||||||
|
Drawable background,
|
||||||
String title,
|
String title,
|
||||||
@ColorRes int titleColorId,
|
@ColorRes int titleColorId,
|
||||||
CharSequence description,
|
CharSequence description,
|
||||||
@ColorRes int descriptionColorId,
|
@ColorRes int descriptionColorId,
|
||||||
int descriptionMaxLines,
|
int descriptionMaxLines,
|
||||||
boolean descriptionLinksClickable) {
|
boolean descriptionLinksClickable) {
|
||||||
super(customView, layoutId, tag, disabled, onClickListener, position, icon, title, titleColorId);
|
super(customView, layoutId, tag, disabled, onClickListener, position, icon, background, title, titleColorId);
|
||||||
this.description = description;
|
this.description = description;
|
||||||
this.descriptionColorId = descriptionColorId;
|
this.descriptionColorId = descriptionColorId;
|
||||||
this.descriptionMaxLines = descriptionMaxLines;
|
this.descriptionMaxLines = descriptionMaxLines;
|
||||||
|
@ -121,6 +121,7 @@ public class BottomSheetItemWithDescription extends SimpleBottomSheetItem {
|
||||||
onClickListener,
|
onClickListener,
|
||||||
position,
|
position,
|
||||||
icon,
|
icon,
|
||||||
|
background,
|
||||||
title,
|
title,
|
||||||
titleColorId,
|
titleColorId,
|
||||||
description,
|
description,
|
||||||
|
|
|
@ -10,11 +10,12 @@ import android.view.ViewGroup;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.AndroidUtils;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
|
|
||||||
public class SimpleBottomSheetItem extends BaseBottomSheetItem {
|
public class SimpleBottomSheetItem extends BaseBottomSheetItem {
|
||||||
|
|
||||||
|
private Drawable background;
|
||||||
private Drawable icon;
|
private Drawable icon;
|
||||||
protected String title;
|
protected String title;
|
||||||
@ColorRes
|
@ColorRes
|
||||||
|
@ -30,10 +31,12 @@ public class SimpleBottomSheetItem extends BaseBottomSheetItem {
|
||||||
View.OnClickListener onClickListener,
|
View.OnClickListener onClickListener,
|
||||||
int position,
|
int position,
|
||||||
Drawable icon,
|
Drawable icon,
|
||||||
|
Drawable background,
|
||||||
String title,
|
String title,
|
||||||
@ColorRes int titleColorId) {
|
@ColorRes int titleColorId) {
|
||||||
super(customView, layoutId, tag, disabled, onClickListener, position);
|
super(customView, layoutId, tag, disabled, onClickListener, position);
|
||||||
this.icon = icon;
|
this.icon = icon;
|
||||||
|
this.background = background;
|
||||||
this.title = title;
|
this.title = title;
|
||||||
this.titleColorId = titleColorId;
|
this.titleColorId = titleColorId;
|
||||||
}
|
}
|
||||||
|
@ -66,11 +69,15 @@ public class SimpleBottomSheetItem extends BaseBottomSheetItem {
|
||||||
titleTv.setTextColor(ContextCompat.getColor(context, titleColorId));
|
titleTv.setTextColor(ContextCompat.getColor(context, titleColorId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (background != null) {
|
||||||
|
AndroidUtils.setBackground(view, background);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Builder extends BaseBottomSheetItem.Builder {
|
public static class Builder extends BaseBottomSheetItem.Builder {
|
||||||
|
|
||||||
protected Drawable icon;
|
protected Drawable icon;
|
||||||
|
protected Drawable background;
|
||||||
protected String title;
|
protected String title;
|
||||||
@ColorRes
|
@ColorRes
|
||||||
protected int titleColorId = INVALID_ID;
|
protected int titleColorId = INVALID_ID;
|
||||||
|
@ -80,6 +87,11 @@ public class SimpleBottomSheetItem extends BaseBottomSheetItem {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Builder setBackground(Drawable icon) {
|
||||||
|
this.background = icon;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public Builder setTitle(String title) {
|
public Builder setTitle(String title) {
|
||||||
this.title = title;
|
this.title = title;
|
||||||
return this;
|
return this;
|
||||||
|
@ -98,6 +110,7 @@ public class SimpleBottomSheetItem extends BaseBottomSheetItem {
|
||||||
onClickListener,
|
onClickListener,
|
||||||
position,
|
position,
|
||||||
icon,
|
icon,
|
||||||
|
background,
|
||||||
title,
|
title,
|
||||||
titleColorId);
|
titleColorId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -293,7 +293,7 @@ public class SettingsMonitoringActivity extends SettingsBaseActivity {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
if (which == 0) {
|
if (which == 0) {
|
||||||
settings.setSharedGeneralPreference(prefId, newValue);
|
settings.setPreferenceForAllModes(prefId, newValue);
|
||||||
} else {
|
} else {
|
||||||
settings.setPreference(prefId, newValue);
|
settings.setPreference(prefId, newValue);
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,14 +100,14 @@ public class ConfigureProfileMenuAdapter extends AbstractProfileMenuAdapter<Conf
|
||||||
holder.dividerBottom.setVisibility(View.VISIBLE);
|
holder.dividerBottom.setVisibility(View.VISIBLE);
|
||||||
holder.icon.setVisibility(View.VISIBLE);
|
holder.icon.setVisibility(View.VISIBLE);
|
||||||
holder.descr.setVisibility(View.VISIBLE);
|
holder.descr.setVisibility(View.VISIBLE);
|
||||||
holder.switcher.setVisibility(View.VISIBLE);
|
holder.compoundButton.setVisibility(View.VISIBLE);
|
||||||
holder.menuIcon.setVisibility(View.VISIBLE);
|
holder.menuIcon.setVisibility(View.VISIBLE);
|
||||||
final ApplicationMode item = (ApplicationMode) obj;
|
final ApplicationMode item = (ApplicationMode) obj;
|
||||||
holder.title.setText(item.toHumanString(app));
|
holder.title.setText(item.toHumanString(app));
|
||||||
holder.descr.setText(BaseSettingsFragment.getAppModeDescription(app, item));
|
holder.descr.setText(BaseSettingsFragment.getAppModeDescription(app, item));
|
||||||
|
|
||||||
holder.initSwitcher = true;
|
holder.initSwitcher = true;
|
||||||
holder.switcher.setChecked(selectedItems.contains(item));
|
holder.compoundButton.setChecked(selectedItems.contains(item));
|
||||||
holder.initSwitcher = false;
|
holder.initSwitcher = false;
|
||||||
updateViewHolder(holder, item);
|
updateViewHolder(holder, item);
|
||||||
} else {
|
} else {
|
||||||
|
@ -117,7 +117,7 @@ public class ConfigureProfileMenuAdapter extends AbstractProfileMenuAdapter<Conf
|
||||||
}
|
}
|
||||||
holder.icon.setVisibility(View.INVISIBLE);
|
holder.icon.setVisibility(View.INVISIBLE);
|
||||||
holder.descr.setVisibility(View.GONE);
|
holder.descr.setVisibility(View.GONE);
|
||||||
holder.switcher.setVisibility(View.GONE);
|
holder.compoundButton.setVisibility(View.GONE);
|
||||||
holder.menuIcon.setVisibility(View.GONE);
|
holder.menuIcon.setVisibility(View.GONE);
|
||||||
holder.title.setTextColor(app.getResources().getColor(
|
holder.title.setTextColor(app.getResources().getColor(
|
||||||
nightMode
|
nightMode
|
||||||
|
@ -166,7 +166,7 @@ public class ConfigureProfileMenuAdapter extends AbstractProfileMenuAdapter<Conf
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
switcher.setOnCheckedChangeListener(new OnCheckedChangeListener() {
|
compoundButton.setOnCheckedChangeListener(new OnCheckedChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||||
int pos = getAdapterPosition();
|
int pos = getAdapterPosition();
|
||||||
|
|
|
@ -65,7 +65,7 @@ public class EditProfilesFragment extends BaseOsmAndFragment {
|
||||||
}
|
}
|
||||||
nightMode = !app.getSettings().isLightContent();
|
nightMode = !app.getSettings().isLightContent();
|
||||||
|
|
||||||
View mainView =UiUtilities.getInflater(getContext(), nightMode).inflate(R.layout.edit_profiles_list_fragment, container, false);
|
View mainView = UiUtilities.getInflater(getContext(), nightMode).inflate(R.layout.edit_profiles_list_fragment, container, false);
|
||||||
ImageButton closeButton = mainView.findViewById(R.id.close_button);
|
ImageButton closeButton = mainView.findViewById(R.id.close_button);
|
||||||
closeButton.setImageResource(R.drawable.ic_action_remove_dark);
|
closeButton.setImageResource(R.drawable.ic_action_remove_dark);
|
||||||
closeButton.setOnClickListener(new View.OnClickListener() {
|
closeButton.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@ -355,7 +355,7 @@ public class EditProfilesFragment extends BaseOsmAndFragment {
|
||||||
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, int pos) {
|
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, int pos) {
|
||||||
if (holder instanceof ProfileViewHolder) {
|
if (holder instanceof ProfileViewHolder) {
|
||||||
ProfileViewHolder profileViewHolder = (ProfileViewHolder) holder;
|
ProfileViewHolder profileViewHolder = (ProfileViewHolder) holder;
|
||||||
EditProfileDataObject mode = (EditProfileDataObject) items.get(pos);
|
final EditProfileDataObject mode = (EditProfileDataObject) items.get(pos);
|
||||||
|
|
||||||
profileViewHolder.title.setText(mode.getName());
|
profileViewHolder.title.setText(mode.getName());
|
||||||
profileViewHolder.description.setText(mode.getDescription());
|
profileViewHolder.description.setText(mode.getDescription());
|
||||||
|
@ -373,17 +373,15 @@ public class EditProfilesFragment extends BaseOsmAndFragment {
|
||||||
Drawable drawable = UiUtilities.getColoredSelectableDrawable(app, colorNoAlpha, 0.3f);
|
Drawable drawable = UiUtilities.getColoredSelectableDrawable(app, colorNoAlpha, 0.3f);
|
||||||
AndroidUtils.setBackground(profileViewHolder.itemsContainer, drawable);
|
AndroidUtils.setBackground(profileViewHolder.itemsContainer, drawable);
|
||||||
|
|
||||||
if (mode.isCustomProfile()) {
|
profileViewHolder.actionIcon.setOnClickListener(new View.OnClickListener() {
|
||||||
profileViewHolder.actionIcon.setOnClickListener(new View.OnClickListener() {
|
@Override
|
||||||
@Override
|
public void onClick(View v) {
|
||||||
public void onClick(View v) {
|
int pos = holder.getAdapterPosition();
|
||||||
int pos = holder.getAdapterPosition();
|
if (mode.isCustomProfile() && pos != RecyclerView.NO_POSITION) {
|
||||||
if (pos != RecyclerView.NO_POSITION) {
|
listener.onButtonClicked(pos);
|
||||||
listener.onButtonClicked(pos);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
}
|
});
|
||||||
profileViewHolder.moveIcon.setVisibility(mode.isDeleted() ? View.GONE : View.VISIBLE);
|
profileViewHolder.moveIcon.setVisibility(mode.isDeleted() ? View.GONE : View.VISIBLE);
|
||||||
if (!mode.isDeleted()) {
|
if (!mode.isDeleted()) {
|
||||||
int removeIconColor = mode.isCustomProfile() ? R.color.color_osm_edit_delete : R.color.icon_color_default_light;
|
int removeIconColor = mode.isCustomProfile() ? R.color.color_osm_edit_delete : R.color.icon_color_default_light;
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package net.osmand.plus.profiles;
|
package net.osmand.plus.profiles;
|
||||||
|
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
import android.support.v7.widget.SwitchCompat;
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.widget.CompoundButton;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
@ -11,7 +11,7 @@ import net.osmand.plus.R;
|
||||||
|
|
||||||
public abstract class ProfileAbstractViewHolder extends RecyclerView.ViewHolder {
|
public abstract class ProfileAbstractViewHolder extends RecyclerView.ViewHolder {
|
||||||
TextView title, descr;
|
TextView title, descr;
|
||||||
SwitchCompat switcher;
|
CompoundButton compoundButton;
|
||||||
ImageView icon, menuIcon;
|
ImageView icon, menuIcon;
|
||||||
LinearLayout profileOptions;
|
LinearLayout profileOptions;
|
||||||
View dividerBottom;
|
View dividerBottom;
|
||||||
|
@ -21,7 +21,7 @@ public abstract class ProfileAbstractViewHolder extends RecyclerView.ViewHolder
|
||||||
super(itemView);
|
super(itemView);
|
||||||
title = itemView.findViewById(R.id.title);
|
title = itemView.findViewById(R.id.title);
|
||||||
descr = itemView.findViewById(R.id.description);
|
descr = itemView.findViewById(R.id.description);
|
||||||
switcher = itemView.findViewById(R.id.compound_button);
|
compoundButton = itemView.findViewById(R.id.compound_button);
|
||||||
icon = itemView.findViewById(R.id.icon);
|
icon = itemView.findViewById(R.id.icon);
|
||||||
profileOptions = itemView.findViewById(R.id.profile_settings);
|
profileOptions = itemView.findViewById(R.id.profile_settings);
|
||||||
dividerBottom = itemView.findViewById(R.id.divider_bottom);
|
dividerBottom = itemView.findViewById(R.id.divider_bottom);
|
||||||
|
|
|
@ -0,0 +1,130 @@
|
||||||
|
package net.osmand.plus.profiles;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
|
import android.support.v4.app.Fragment;
|
||||||
|
import android.support.v4.app.FragmentManager;
|
||||||
|
|
||||||
|
import net.osmand.PlatformUtil;
|
||||||
|
import net.osmand.plus.ApplicationMode;
|
||||||
|
import net.osmand.plus.OsmandApplication;
|
||||||
|
import net.osmand.plus.R;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SelectCopyAppModeBottomSheet extends AppModesBottomSheetDialogFragment<SelectCopyProfilesMenuAdapter> {
|
||||||
|
|
||||||
|
public static final String TAG = "SelectCopyAppModeBottomSheet";
|
||||||
|
|
||||||
|
private static final String SELECTED_APP_MODE_KEY = "selected_app_mode_key";
|
||||||
|
private static final String CURRENT_APP_MODE_KEY = "current_app_mode_key";
|
||||||
|
|
||||||
|
private static final Log LOG = PlatformUtil.getLog(SelectCopyAppModeBottomSheet.class);
|
||||||
|
|
||||||
|
private List<ApplicationMode> appModes = new ArrayList<>();
|
||||||
|
|
||||||
|
private ApplicationMode selectedAppMode;
|
||||||
|
private ApplicationMode currentAppMode;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
Bundle args = getArguments();
|
||||||
|
if (args != null && args.containsKey(CURRENT_APP_MODE_KEY)) {
|
||||||
|
currentAppMode = ApplicationMode.valueOfStringKey(args.getString(CURRENT_APP_MODE_KEY), null);
|
||||||
|
}
|
||||||
|
if (currentAppMode == null) {
|
||||||
|
currentAppMode = requiredMyApplication().getSettings().getApplicationMode();
|
||||||
|
}
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
if (savedInstanceState != null) {
|
||||||
|
selectedAppMode = ApplicationMode.valueOfStringKey(savedInstanceState.getString(SELECTED_APP_MODE_KEY), null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ApplicationMode getSelectedAppMode() {
|
||||||
|
return selectedAppMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void getData() {
|
||||||
|
appModes = new ArrayList<>();
|
||||||
|
for (ApplicationMode mode : ApplicationMode.allPossibleValues()) {
|
||||||
|
if (mode != currentAppMode) {
|
||||||
|
appModes.add(mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected SelectCopyProfilesMenuAdapter getMenuAdapter() {
|
||||||
|
return new SelectCopyProfilesMenuAdapter(appModes, requiredMyApplication(), nightMode, selectedAppMode);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getTitle() {
|
||||||
|
return getString(R.string.copy_from_other_profile);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSaveInstanceState(Bundle outState) {
|
||||||
|
super.onSaveInstanceState(outState);
|
||||||
|
outState.putString(CURRENT_APP_MODE_KEY, currentAppMode.getStringKey());
|
||||||
|
if (selectedAppMode != null) {
|
||||||
|
outState.putString(SELECTED_APP_MODE_KEY, selectedAppMode.getStringKey());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean isNightMode(@NonNull OsmandApplication app) {
|
||||||
|
if (usedOnMap) {
|
||||||
|
return app.getDaynightHelper().isNightModeForMapControlsForProfile(currentAppMode);
|
||||||
|
} else {
|
||||||
|
return !app.getSettings().isLightContentForMode(currentAppMode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onProfilePressed(ApplicationMode item) {
|
||||||
|
selectedAppMode = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getDismissButtonTextId() {
|
||||||
|
return R.string.shared_string_cancel;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getRightBottomButtonTextId() {
|
||||||
|
return R.string.shared_string_copy;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onRightBottomButtonClick() {
|
||||||
|
OsmandApplication app = getMyApplication();
|
||||||
|
if (app != null && selectedAppMode != null) {
|
||||||
|
app.getSettings().copyPreferencesFromProfile(selectedAppMode, currentAppMode);
|
||||||
|
}
|
||||||
|
dismiss();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void showInstance(@NonNull FragmentManager fm, Fragment target, boolean usedOnMap,
|
||||||
|
@NonNull ApplicationMode currentMode) {
|
||||||
|
try {
|
||||||
|
if (fm.findFragmentByTag(SelectCopyAppModeBottomSheet.TAG) == null) {
|
||||||
|
Bundle args = new Bundle();
|
||||||
|
args.putString(CURRENT_APP_MODE_KEY, currentMode.getStringKey());
|
||||||
|
|
||||||
|
SelectCopyAppModeBottomSheet fragment = new SelectCopyAppModeBottomSheet();
|
||||||
|
fragment.setTargetFragment(target, 0);
|
||||||
|
fragment.setUsedOnMap(usedOnMap);
|
||||||
|
fragment.setArguments(args);
|
||||||
|
fragment.show(fm, SelectCopyAppModeBottomSheet.TAG);
|
||||||
|
}
|
||||||
|
} catch (RuntimeException e) {
|
||||||
|
LOG.error("showInstance", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,101 @@
|
||||||
|
package net.osmand.plus.profiles;
|
||||||
|
|
||||||
|
import android.graphics.drawable.ColorDrawable;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.graphics.drawable.LayerDrawable;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
|
import android.support.annotation.Nullable;
|
||||||
|
import android.support.v4.content.ContextCompat;
|
||||||
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
import net.osmand.AndroidUtils;
|
||||||
|
import net.osmand.plus.ApplicationMode;
|
||||||
|
import net.osmand.plus.OsmandApplication;
|
||||||
|
import net.osmand.plus.R;
|
||||||
|
import net.osmand.plus.UiUtilities;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SelectCopyProfilesMenuAdapter extends AbstractProfileMenuAdapter<SelectCopyProfilesMenuAdapter.SelectProfileViewHolder> {
|
||||||
|
|
||||||
|
private OsmandApplication app;
|
||||||
|
|
||||||
|
private ApplicationMode selectedAppMode;
|
||||||
|
private List<ApplicationMode> items = new ArrayList<>();
|
||||||
|
|
||||||
|
private boolean nightMode;
|
||||||
|
|
||||||
|
public SelectCopyProfilesMenuAdapter(List<ApplicationMode> items, @NonNull OsmandApplication app,
|
||||||
|
boolean nightMode, @Nullable ApplicationMode selectedAppMode) {
|
||||||
|
this.items.addAll(items);
|
||||||
|
this.app = app;
|
||||||
|
this.selectedAppMode = selectedAppMode;
|
||||||
|
this.nightMode = nightMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public SelectProfileViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
|
LayoutInflater inflater = UiUtilities.getInflater(parent.getContext(), nightMode);
|
||||||
|
View itemView = inflater.inflate(R.layout.bottom_sheet_item_with_radio_btn, parent, false);
|
||||||
|
return new SelectProfileViewHolder(itemView);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBindViewHolder(@NonNull final SelectProfileViewHolder holder, int position) {
|
||||||
|
ApplicationMode appMode = items.get(position);
|
||||||
|
boolean selected = appMode == selectedAppMode;
|
||||||
|
|
||||||
|
holder.title.setText(appMode.toHumanString(app));
|
||||||
|
holder.compoundButton.setChecked(selected);
|
||||||
|
|
||||||
|
updateViewHolder(holder, appMode, selected);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemCount() {
|
||||||
|
return items.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateViewHolder(SelectProfileViewHolder holder, ApplicationMode appMode, boolean selected) {
|
||||||
|
int iconRes = appMode.getIconRes();
|
||||||
|
if (iconRes == 0 || iconRes == -1) {
|
||||||
|
iconRes = R.drawable.ic_action_world_globe;
|
||||||
|
}
|
||||||
|
int iconColor = appMode.getIconColorInfo().getColor(nightMode);
|
||||||
|
holder.icon.setImageDrawable(app.getUIUtilities().getIcon(iconRes, iconColor));
|
||||||
|
|
||||||
|
int colorNoAlpha = ContextCompat.getColor(app, iconColor);
|
||||||
|
Drawable drawable = UiUtilities.getColoredSelectableDrawable(app, colorNoAlpha, 0.3f);
|
||||||
|
|
||||||
|
if (selected) {
|
||||||
|
Drawable[] layers = {new ColorDrawable(UiUtilities.getColorWithAlpha(colorNoAlpha, 0.15f)), drawable};
|
||||||
|
drawable = new LayerDrawable(layers);
|
||||||
|
}
|
||||||
|
AndroidUtils.setBackground(holder.itemView, drawable);
|
||||||
|
}
|
||||||
|
|
||||||
|
class SelectProfileViewHolder extends ProfileAbstractViewHolder {
|
||||||
|
|
||||||
|
SelectProfileViewHolder(View itemView) {
|
||||||
|
super(itemView);
|
||||||
|
itemView.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
int pos = getAdapterPosition();
|
||||||
|
if (pos != RecyclerView.NO_POSITION) {
|
||||||
|
selectedAppMode = items.get(pos);
|
||||||
|
if (profilePressedListener != null) {
|
||||||
|
profilePressedListener.onProfilePressed(selectedAppMode);
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -94,7 +94,7 @@ public class SelectProfileMenuAdapter extends AbstractProfileMenuAdapter<SelectP
|
||||||
holder.dividerUp.setVisibility(View.INVISIBLE);
|
holder.dividerUp.setVisibility(View.INVISIBLE);
|
||||||
holder.icon.setVisibility(View.VISIBLE);
|
holder.icon.setVisibility(View.VISIBLE);
|
||||||
holder.descr.setVisibility(View.VISIBLE);
|
holder.descr.setVisibility(View.VISIBLE);
|
||||||
holder.switcher.setVisibility(View.GONE);
|
holder.compoundButton.setVisibility(View.GONE);
|
||||||
holder.menuIcon.setVisibility(View.GONE);
|
holder.menuIcon.setVisibility(View.GONE);
|
||||||
final ApplicationMode item = (ApplicationMode) obj;
|
final ApplicationMode item = (ApplicationMode) obj;
|
||||||
holder.title.setText(item.toHumanString(app));
|
holder.title.setText(item.toHumanString(app));
|
||||||
|
@ -123,7 +123,7 @@ public class SelectProfileMenuAdapter extends AbstractProfileMenuAdapter<SelectP
|
||||||
}
|
}
|
||||||
holder.icon.setVisibility(View.INVISIBLE);
|
holder.icon.setVisibility(View.INVISIBLE);
|
||||||
holder.descr.setVisibility(View.GONE);
|
holder.descr.setVisibility(View.GONE);
|
||||||
holder.switcher.setVisibility(View.GONE);
|
holder.compoundButton.setVisibility(View.GONE);
|
||||||
holder.menuIcon.setVisibility(View.GONE);
|
holder.menuIcon.setVisibility(View.GONE);
|
||||||
int color = ContextCompat.getColor(app, nightMode
|
int color = ContextCompat.getColor(app, nightMode
|
||||||
? R.color.active_color_primary_dark
|
? R.color.active_color_primary_dark
|
||||||
|
|
|
@ -32,8 +32,8 @@ import android.widget.Toast;
|
||||||
import net.osmand.AndroidUtils;
|
import net.osmand.AndroidUtils;
|
||||||
import net.osmand.IndexConstants;
|
import net.osmand.IndexConstants;
|
||||||
import net.osmand.PlatformUtil;
|
import net.osmand.PlatformUtil;
|
||||||
import net.osmand.aidl.OsmandAidlApi;
|
|
||||||
import net.osmand.aidl.ConnectedApp;
|
import net.osmand.aidl.ConnectedApp;
|
||||||
|
import net.osmand.aidl.OsmandAidlApi;
|
||||||
import net.osmand.plus.ApplicationMode;
|
import net.osmand.plus.ApplicationMode;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.OsmandPlugin;
|
import net.osmand.plus.OsmandPlugin;
|
||||||
|
@ -45,6 +45,8 @@ import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.activities.PluginActivity;
|
import net.osmand.plus.activities.PluginActivity;
|
||||||
import net.osmand.plus.helpers.FontCache;
|
import net.osmand.plus.helpers.FontCache;
|
||||||
import net.osmand.plus.openseamapsplugin.NauticalMapsPlugin;
|
import net.osmand.plus.openseamapsplugin.NauticalMapsPlugin;
|
||||||
|
import net.osmand.plus.profiles.SelectCopyAppModeBottomSheet;
|
||||||
|
import net.osmand.plus.settings.bottomsheets.ResetProfilePrefsBottomSheet;
|
||||||
import net.osmand.plus.settings.preferences.SwitchPreferenceEx;
|
import net.osmand.plus.settings.preferences.SwitchPreferenceEx;
|
||||||
import net.osmand.plus.skimapsplugin.SkiMapsPlugin;
|
import net.osmand.plus.skimapsplugin.SkiMapsPlugin;
|
||||||
|
|
||||||
|
@ -69,6 +71,8 @@ public class ConfigureProfileFragment extends BaseSettingsFragment {
|
||||||
private static final String SETTINGS_ACTIONS = "settings_actions";
|
private static final String SETTINGS_ACTIONS = "settings_actions";
|
||||||
private static final String CONFIGURE_MAP = "configure_map";
|
private static final String CONFIGURE_MAP = "configure_map";
|
||||||
private static final String CONFIGURE_SCREEN = "configure_screen";
|
private static final String CONFIGURE_SCREEN = "configure_screen";
|
||||||
|
private static final String COPY_PROFILE_SETTINGS = "copy_profile_settings";
|
||||||
|
private static final String RESET_TO_DEFAULT = "reset_to_default";
|
||||||
private static final String EXPORT_PROFILE = "export_profile";
|
private static final String EXPORT_PROFILE = "export_profile";
|
||||||
private static final String DELETE_PROFILE = "delete_profile";
|
private static final String DELETE_PROFILE = "delete_profile";
|
||||||
private static final String PROFILE_APPEARANCE = "profile_appearance";
|
private static final String PROFILE_APPEARANCE = "profile_appearance";
|
||||||
|
@ -215,6 +219,8 @@ public class ConfigureProfileFragment extends BaseSettingsFragment {
|
||||||
PreferenceCategory settingsActions = (PreferenceCategory) findPreference(SETTINGS_ACTIONS);
|
PreferenceCategory settingsActions = (PreferenceCategory) findPreference(SETTINGS_ACTIONS);
|
||||||
settingsActions.setIconSpaceReserved(false);
|
settingsActions.setIconSpaceReserved(false);
|
||||||
|
|
||||||
|
setupCopyProfileSettingsPref();
|
||||||
|
setupResetToDefaultPref();
|
||||||
setupExportProfilePref();
|
setupExportProfilePref();
|
||||||
setupDeleteProfilePref();
|
setupDeleteProfilePref();
|
||||||
}
|
}
|
||||||
|
@ -268,6 +274,22 @@ public class ConfigureProfileFragment extends BaseSettingsFragment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setupCopyProfileSettingsPref() {
|
||||||
|
Preference copyProfilePrefs = findPreference(COPY_PROFILE_SETTINGS);
|
||||||
|
copyProfilePrefs.setIcon(app.getUIUtilities().getIcon(R.drawable.ic_action_copy,
|
||||||
|
isNightMode() ? R.color.active_color_primary_dark : R.color.active_color_primary_light));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setupResetToDefaultPref() {
|
||||||
|
Preference resetToDefault = findPreference(RESET_TO_DEFAULT);
|
||||||
|
if (getSelectedAppMode().isCustomProfile()) {
|
||||||
|
resetToDefault.setVisible(false);
|
||||||
|
} else {
|
||||||
|
resetToDefault.setIcon(app.getUIUtilities().getIcon(R.drawable.ic_action_reset_to_default_dark,
|
||||||
|
isNightMode() ? R.color.active_color_primary_dark : R.color.active_color_primary_light));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void setupExportProfilePref() {
|
private void setupExportProfilePref() {
|
||||||
Preference exportProfile = findPreference(EXPORT_PROFILE);
|
Preference exportProfile = findPreference(EXPORT_PROFILE);
|
||||||
exportProfile.setIcon(app.getUIUtilities().getIcon(R.drawable.ic_action_app_configuration,
|
exportProfile.setIcon(app.getUIUtilities().getIcon(R.drawable.ic_action_app_configuration,
|
||||||
|
@ -380,6 +402,16 @@ public class ConfigureProfileFragment extends BaseSettingsFragment {
|
||||||
LOG.error(e);
|
LOG.error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (COPY_PROFILE_SETTINGS.equals(prefId)) {
|
||||||
|
FragmentManager fragmentManager = getFragmentManager();
|
||||||
|
if (fragmentManager != null) {
|
||||||
|
SelectCopyAppModeBottomSheet.showInstance(fragmentManager, this, false, getSelectedAppMode());
|
||||||
|
}
|
||||||
|
} else if (RESET_TO_DEFAULT.equals(prefId)) {
|
||||||
|
FragmentManager fragmentManager = getFragmentManager();
|
||||||
|
if (fragmentManager != null) {
|
||||||
|
ResetProfilePrefsBottomSheet.showInstance(fragmentManager, prefId, this, false, getSelectedAppMode());
|
||||||
|
}
|
||||||
} else if (EXPORT_PROFILE.equals(prefId)) {
|
} else if (EXPORT_PROFILE.equals(prefId)) {
|
||||||
Context ctx = requireContext();
|
Context ctx = requireContext();
|
||||||
final ApplicationMode profile = getSelectedAppMode();
|
final ApplicationMode profile = getSelectedAppMode();
|
||||||
|
|
|
@ -521,10 +521,16 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment {
|
||||||
.setRouteService(changedProfile.routeService)
|
.setRouteService(changedProfile.routeService)
|
||||||
.setRoutingProfile(changedProfile.routingProfile)
|
.setRoutingProfile(changedProfile.routingProfile)
|
||||||
.setColor(changedProfile.color);
|
.setColor(changedProfile.color);
|
||||||
|
|
||||||
|
boolean newProfile = ApplicationMode.valueOfStringKey(changedProfile.stringKey, null) == null;
|
||||||
|
|
||||||
ApplicationMode mode = ApplicationMode.saveProfile(builder, getMyApplication());
|
ApplicationMode mode = ApplicationMode.saveProfile(builder, getMyApplication());
|
||||||
if (!ApplicationMode.values(app).contains(mode)) {
|
if (!ApplicationMode.values(app).contains(mode)) {
|
||||||
ApplicationMode.changeProfileAvailability(mode, true, getMyApplication());
|
ApplicationMode.changeProfileAvailability(mode, true, getMyApplication());
|
||||||
}
|
}
|
||||||
|
if (newProfile) {
|
||||||
|
app.getSettings().copyPreferencesFromProfile(changedProfile.parent, mode);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,7 @@ public class ChangeGeneralProfilesPrefBottomSheet extends BasePreferenceBottomSh
|
||||||
.setOnClickListener(new View.OnClickListener() {
|
.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
app.getSettings().setSharedGeneralPreference(prefId, newValue);
|
app.getSettings().setPreferenceForAllModes(prefId, newValue);
|
||||||
updateTargetSettings(false);
|
updateTargetSettings(false);
|
||||||
dismiss();
|
dismiss();
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,103 @@
|
||||||
|
package net.osmand.plus.settings.bottomsheets;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.res.ColorStateList;
|
||||||
|
import android.graphics.drawable.ColorDrawable;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.graphics.drawable.LayerDrawable;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
|
import android.support.v4.app.Fragment;
|
||||||
|
import android.support.v4.app.FragmentManager;
|
||||||
|
import android.support.v4.content.ContextCompat;
|
||||||
|
|
||||||
|
import net.osmand.plus.ApplicationMode;
|
||||||
|
import net.osmand.plus.OsmandApplication;
|
||||||
|
import net.osmand.plus.R;
|
||||||
|
import net.osmand.plus.UiUtilities;
|
||||||
|
import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem;
|
||||||
|
import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemWithCompoundButton;
|
||||||
|
import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemWithDescription;
|
||||||
|
import net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem;
|
||||||
|
import net.osmand.plus.settings.BaseSettingsFragment;
|
||||||
|
|
||||||
|
public class ResetProfilePrefsBottomSheet extends BasePreferenceBottomSheet {
|
||||||
|
|
||||||
|
public static final String TAG = ResetProfilePrefsBottomSheet.class.getSimpleName();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void createMenuItems(Bundle savedInstanceState) {
|
||||||
|
Context ctx = getContext();
|
||||||
|
if (ctx == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
items.add(new TitleItem(getString(R.string.reset_all_profile_settings)));
|
||||||
|
|
||||||
|
ApplicationMode mode = getAppMode();
|
||||||
|
int profileColor = mode.getIconColorInfo().getColor(nightMode);
|
||||||
|
int colorNoAlpha = ContextCompat.getColor(ctx, profileColor);
|
||||||
|
|
||||||
|
Drawable backgroundIcon = UiUtilities.getColoredSelectableDrawable(ctx, colorNoAlpha, 0.3f);
|
||||||
|
Drawable[] layers = {new ColorDrawable(UiUtilities.getColorWithAlpha(colorNoAlpha, 0.10f)), backgroundIcon};
|
||||||
|
|
||||||
|
BaseBottomSheetItem profileItem = new BottomSheetItemWithCompoundButton.Builder()
|
||||||
|
.setChecked(true)
|
||||||
|
.setCompoundButtonColorId(profileColor)
|
||||||
|
.setButtonTintList(ColorStateList.valueOf(getResolvedColor(profileColor)))
|
||||||
|
.setDescription(BaseSettingsFragment.getAppModeDescription(ctx, mode))
|
||||||
|
.setIcon(getIcon(mode.getIconRes(), profileColor))
|
||||||
|
.setTitle(mode.toHumanString(ctx))
|
||||||
|
.setBackground(new LayerDrawable(layers))
|
||||||
|
.setLayoutId(R.layout.preference_profile_item_with_radio_btn)
|
||||||
|
.create();
|
||||||
|
items.add(profileItem);
|
||||||
|
|
||||||
|
StringBuilder description = new StringBuilder(getString(R.string.reset_confirmation_descr, getString(R.string.shared_string_reset)));
|
||||||
|
description.append("\n\n");
|
||||||
|
description.append(getString(R.string.reset_all_profile_settings_descr));
|
||||||
|
|
||||||
|
BaseBottomSheetItem resetAllSettings = new BottomSheetItemWithDescription.Builder()
|
||||||
|
.setDescription(description)
|
||||||
|
.setLayoutId(R.layout.bottom_sheet_item_pref_info)
|
||||||
|
.create();
|
||||||
|
items.add(resetAllSettings);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getRightBottomButtonTextId() {
|
||||||
|
return R.string.shared_string_reset;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onRightBottomButtonClick() {
|
||||||
|
OsmandApplication app = getMyApplication();
|
||||||
|
if (app != null) {
|
||||||
|
app.getSettings().resetPreferencesForProfile(getAppMode());
|
||||||
|
}
|
||||||
|
dismiss();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected UiUtilities.DialogButtonType getRightBottomButtonType() {
|
||||||
|
return UiUtilities.DialogButtonType.SECONDARY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean showInstance(@NonNull FragmentManager fragmentManager, String key, Fragment target,
|
||||||
|
boolean usedOnMap, @NonNull ApplicationMode appMode) {
|
||||||
|
try {
|
||||||
|
Bundle args = new Bundle();
|
||||||
|
args.putString(PREFERENCE_ID, key);
|
||||||
|
|
||||||
|
ResetProfilePrefsBottomSheet fragment = new ResetProfilePrefsBottomSheet();
|
||||||
|
fragment.setArguments(args);
|
||||||
|
fragment.setUsedOnMap(usedOnMap);
|
||||||
|
fragment.setAppMode(appMode);
|
||||||
|
fragment.setTargetFragment(target, 0);
|
||||||
|
fragment.show(fragmentManager, TAG);
|
||||||
|
return true;
|
||||||
|
} catch (RuntimeException e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue