diff --git a/OsmAnd/res/layout/bottom_sheet_select_type_fragment.xml b/OsmAnd/res/layout/bottom_sheet_select_type_fragment.xml index 2120171cf2..05e259deee 100644 --- a/OsmAnd/res/layout/bottom_sheet_select_type_fragment.xml +++ b/OsmAnd/res/layout/bottom_sheet_select_type_fragment.xml @@ -7,6 +7,7 @@ android:orientation="vertical"> + > widgetsVisibilityMap = new LinkedHashMap<>(); private static Map> widgetsAvailabilityMap = new LinkedHashMap<>(); + private static List defaultValues = new ArrayList<>(); private static List values = new ArrayList<>(); private static List cachedFilteredValues = new ArrayList<>(); /* @@ -42,19 +43,19 @@ public class ApplicationMode { public static final ApplicationMode AIRCRAFT = create(R.string.app_mode_aircraft, "aircraft").speed(40f, 100).carLocation(). icon(R.drawable.map_action_aircraft, R.drawable.ic_action_aircraft).reg(); //--------------------------------------------------------------------------------------------------------------- - public static final ApplicationMode HIKING = create(R.string.app_mode_hiking, "hiking").speed(1.5f, 5).parent(PEDESTRIAN). - icon(R.drawable.map_action_trekking_dark, R.drawable.ic_action_trekking_dark).reg(); - - public static final ApplicationMode MOTORCYCLE = create(R.string.app_mode_motorcycle, "motorcycle").speed(15.3f, 40). - carLocation().parent(CAR). - icon(R.drawable.map_action_motorcycle_dark, R.drawable.ic_action_motorcycle_dark).reg(); - - public static final ApplicationMode TRUCK = create(R.string.app_mode_truck, "truck").speed(15.3f, 40). - carLocation().parent(CAR). - icon(R.drawable.map_action_truck_dark, R.drawable.ic_action_truck_dark).reg(); - - public static final ApplicationMode TRAIN = create(R.string.app_mode_train, "train").speed(25f, 40). - carLocation().icon(R.drawable.map_action_train, R.drawable.ic_action_train).reg(); +// public static final ApplicationMode HIKING = create(R.string.app_mode_hiking, "hiking").speed(1.5f, 5).parent(PEDESTRIAN). +// icon(R.drawable.map_action_trekking_dark, R.drawable.ic_action_trekking_dark).reg(); +// +// public static final ApplicationMode MOTORCYCLE = create(R.string.app_mode_motorcycle, "motorcycle").speed(15.3f, 40). +// carLocation().parent(CAR). +// icon(R.drawable.map_action_motorcycle_dark, R.drawable.ic_action_motorcycle_dark).reg(); +// +// public static final ApplicationMode TRUCK = create(R.string.app_mode_truck, "truck").speed(15.3f, 40). +// carLocation().parent(CAR). +// icon(R.drawable.map_action_truck_dark, R.drawable.ic_action_truck_dark).reg(); +// +// public static final ApplicationMode TRAIN = create(R.string.app_mode_train, "train").speed(25f, 40). +// carLocation().icon(R.drawable.map_action_train, R.drawable.ic_action_train).reg(); static { ApplicationMode[] exceptDefault = new ApplicationMode[]{CAR, PEDESTRIAN, BICYCLE, BOAT, PUBLIC_TRANSPORT}; @@ -108,6 +109,12 @@ public class ApplicationMode { private ApplicationMode applicationMode; public ApplicationMode reg() { + values.add(applicationMode); + defaultValues.add(applicationMode); + return applicationMode; + } + + public ApplicationMode customReg() { values.add(applicationMode); return applicationMode; } @@ -234,9 +241,12 @@ public class ApplicationMode { } public static List allPossibleValues() { - return new ArrayList(values); + return new ArrayList<>(values); } + public static List getDefaultValues() { + return new ArrayList<>(defaultValues); + } // returns modifiable ! Set to exclude non-wanted derived public static Set regWidgetVisibility(String widgetId, ApplicationMode... am) { diff --git a/OsmAnd/src/net/osmand/plus/profiles/BaseProfile.java b/OsmAnd/src/net/osmand/plus/profiles/BaseProfile.java index 7b1c071d86..8a05badafa 100644 --- a/OsmAnd/src/net/osmand/plus/profiles/BaseProfile.java +++ b/OsmAnd/src/net/osmand/plus/profiles/BaseProfile.java @@ -1,31 +1,23 @@ package net.osmand.plus.profiles; import android.os.Parcel; -import android.os.Parcelable; -public class BaseProfile implements Parcelable { +public class BaseProfile extends ProfileDataObject { - private String name; - private String description; - private int iconRes; + private String stringKey; - public BaseProfile(String name, int iconRes) { - this.name = name; - this.name = description; - this.iconRes = iconRes; + public BaseProfile(String stringKey, String name, String description, int iconRes) { + super(name, description, iconRes); + this.stringKey = stringKey; } - public BaseProfile(String name, String description, int iconRes) { - this.name = name; - this.name = description; - this.iconRes = iconRes; + public String getStringKey() { + return stringKey; } protected BaseProfile(Parcel in) { - name = in.readString(); - description = in.readString(); - iconRes = in.readInt(); - + super(in); + stringKey = in.readString(); } public static final Creator CREATOR = new Creator() { @@ -40,19 +32,6 @@ public class BaseProfile implements Parcelable { } }; - public String getName() { - return name; - } - - public int getIconRes() { - return iconRes; - } - - public String getDescription() { - return description; - } - - @Override public int describeContents() { return 0; @@ -60,8 +39,7 @@ public class BaseProfile implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { - dest.writeString(name); - dest.writeString(description); - dest.writeInt(iconRes); + super.writeToParcel(dest, flags); + dest.writeString(stringKey); } } diff --git a/OsmAnd/src/net/osmand/plus/profiles/BaseProfileBottomSheetDialog.java b/OsmAnd/src/net/osmand/plus/profiles/BaseProfileBottomSheetDialog.java deleted file mode 100644 index 6824e5d405..0000000000 --- a/OsmAnd/src/net/osmand/plus/profiles/BaseProfileBottomSheetDialog.java +++ /dev/null @@ -1,7 +0,0 @@ -package net.osmand.plus.profiles; - -public class BaseProfileBottomSheetDialog { - - - -} diff --git a/OsmAnd/src/net/osmand/plus/profiles/NavProfileBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/profiles/ProfileBottomSheetDialogFragment.java similarity index 70% rename from OsmAnd/src/net/osmand/plus/profiles/NavProfileBottomSheetDialogFragment.java rename to OsmAnd/src/net/osmand/plus/profiles/ProfileBottomSheetDialogFragment.java index d103b18f53..619b24584c 100644 --- a/OsmAnd/src/net/osmand/plus/profiles/NavProfileBottomSheetDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/profiles/ProfileBottomSheetDialogFragment.java @@ -13,6 +13,7 @@ import android.widget.Button; import android.widget.ImageView; import android.widget.RadioButton; import android.widget.TextView; +import java.util.ArrayList; import java.util.List; import net.osmand.PlatformUtil; import net.osmand.plus.OsmandApplication; @@ -21,17 +22,22 @@ import net.osmand.plus.base.BottomSheetDialogFragment; import net.osmand.util.Algorithms; import org.apache.commons.logging.Log; -public class NavTypeBottomSheetDialogFragment extends BottomSheetDialogFragment { +public class ProfileBottomSheetDialogFragment extends BottomSheetDialogFragment { - private static final Log LOG = PlatformUtil.getLog(NavTypeBottomSheetDialogFragment.class); + private static final Log LOG = PlatformUtil.getLog(ProfileBottomSheetDialogFragment.class); - private List routingProfiles; - private NavTypeDialogListener listener; - private NavTypeDialogListener listListener; + private List profiles; + private ProfileTypeDialogListener listener; + private ProfileTypeDialogListener listListener; private RecyclerView recyclerView; private ProfileTypeAdapter adapter; - public void setNavTypeListener(NavTypeDialogListener listener) { + + public final static String TYPE_APP_PROFILE = "base_profiles"; + public final static String TYPE_NAV_PROFILE = "routing_profiles"; + private String type; + + public void setProfileTypeListener(ProfileTypeDialogListener listener) { this.listener = listener; } @@ -42,7 +48,17 @@ public class NavTypeBottomSheetDialogFragment extends BottomSheetDialogFragment Bundle args = getArguments(); if (args != null) { - routingProfiles = args.getParcelableArrayList("routing_profiles"); + if (args.get(TYPE_NAV_PROFILE) != null) { + profiles = args.getParcelableArrayList(TYPE_NAV_PROFILE); + type = TYPE_NAV_PROFILE; + } else if (args.get(TYPE_APP_PROFILE) != null) { + profiles = args.getParcelableArrayList(TYPE_APP_PROFILE); + type = TYPE_APP_PROFILE; + } else { + //todo notify on empty list; + dismiss(); + } + } final int themeRes = getMyApplication().getSettings().isLightContent() @@ -50,13 +66,19 @@ public class NavTypeBottomSheetDialogFragment extends BottomSheetDialogFragment : R.style.OsmandDarkTheme; View view = View.inflate(new ContextThemeWrapper(getContext(), themeRes), R.layout.bottom_sheet_select_type_fragment, null); + if (type.equals(TYPE_APP_PROFILE)) { + TextView fragmentDescription = view.findViewById(R.id.dialog_description_text); + fragmentDescription.setVisibility(View.VISIBLE); + fragmentDescription.setText( + "The new Application Profile should be based on one of the default App Profiles. Selected Profile defines basic settings: setup of Widgets, units of speed and distance. In string below Profile's name, you could learn which Navigation Profiles are suitable for each Application Profile."); + } view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dismiss(); } }); - listListener = new NavTypeDialogListener() { + listListener = new ProfileTypeDialogListener() { @Override public void onSelectedType(int pos) { listener.onSelectedType(pos); @@ -64,7 +86,7 @@ public class NavTypeBottomSheetDialogFragment extends BottomSheetDialogFragment } }; recyclerView = view.findViewById(R.id.menu_list_view); - adapter = new ProfileTypeAdapter(routingProfiles, isNightMode(getMyApplication()), + adapter = new ProfileTypeAdapter(profiles, isNightMode(getMyApplication()), listListener); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); recyclerView.setAdapter(adapter); @@ -85,14 +107,15 @@ public class NavTypeBottomSheetDialogFragment extends BottomSheetDialogFragment class ProfileTypeAdapter extends RecyclerView.Adapter { - private final List items; + private final List items; private final boolean isNightMode; - private NavTypeDialogListener listener; + private ProfileTypeDialogListener listener; private int previousSelection; - public NavTypeAdapter(@NonNull List objects, - @NonNull boolean isNightMode, NavTypeDialogListener listener) { - this.items = objects; + + public ProfileTypeAdapter(List items, boolean isNightMode, + ProfileTypeDialogListener listener) { + this.items = items; this.isNightMode = isNightMode; this.listener = listener; } @@ -113,7 +136,7 @@ public class NavTypeBottomSheetDialogFragment extends BottomSheetDialogFragment @Override public void onBindViewHolder(@NonNull final ItemViewHolder holder, int position) { final int pos = position; - final BaseProfile item = items.get(position); + final ProfileDataObject item = items.get(position); holder.title.setText(item.getName()); holder.icon.setImageDrawable(getIcon(item.getIconRes(), isNightMode @@ -136,7 +159,7 @@ public class NavTypeBottomSheetDialogFragment extends BottomSheetDialogFragment }); if (item instanceof RoutingProfile) { holder.descr.setText(Algorithms - .capitalizeFirstLetterAndLowercase(((RoutingProfile) item).getParent().getName())); + .capitalizeFirstLetterAndLowercase(((RoutingProfile) item).getParent())); if (((RoutingProfile) item).isSelected()) { holder.radioButton.setChecked(true); previousSelection = position; @@ -168,8 +191,7 @@ public class NavTypeBottomSheetDialogFragment extends BottomSheetDialogFragment } } - interface NavTypeDialogListener { - + interface ProfileTypeDialogListener { void onSelectedType(int pos); } diff --git a/OsmAnd/src/net/osmand/plus/profiles/ProfileDataObject.java b/OsmAnd/src/net/osmand/plus/profiles/ProfileDataObject.java new file mode 100644 index 0000000000..16017500cd --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/profiles/ProfileDataObject.java @@ -0,0 +1,59 @@ +package net.osmand.plus.profiles; + +import android.os.Parcel; +import android.os.Parcelable; + +public class ProfileDataObject implements Parcelable { + + private String name; + private String description; + private int iconRes; + + public ProfileDataObject(String name, String description, int iconRes) { + this.name = name; + this.iconRes = iconRes; + this.description = description; + } + + protected ProfileDataObject(Parcel in) { + name = in.readString(); + description = in.readString(); + iconRes = in.readInt(); + } + + public static final Creator CREATOR = new Creator() { + @Override + public ProfileDataObject createFromParcel(Parcel in) { + return new ProfileDataObject(in); + } + + @Override + public ProfileDataObject[] newArray(int size) { + return new ProfileDataObject[size]; + } + }; + + public String getName() { + return name; + } + + public int getIconRes() { + return iconRes; + } + + public String getDescription() { + return description; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(name); + dest.writeString(description); + dest.writeInt(iconRes); + } +} diff --git a/OsmAnd/src/net/osmand/plus/profiles/ProfileMenuAdapter.java b/OsmAnd/src/net/osmand/plus/profiles/ProfileMenuAdapter.java index 1bf7c2ce5f..145eb5f0a4 100644 --- a/OsmAnd/src/net/osmand/plus/profiles/ProfileMenuAdapter.java +++ b/OsmAnd/src/net/osmand/plus/profiles/ProfileMenuAdapter.java @@ -14,9 +14,11 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; import net.osmand.plus.ApplicationMode; +import net.osmand.plus.OsmAndFormatter; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.profiles.ProfileMenuAdapter.ProfileViewHolder; +import net.osmand.util.Algorithms; import net.sf.junidecode.App; @@ -64,11 +66,15 @@ public class ProfileMenuAdapter extends RecyclerView.Adapter holder.descr.setText(String.format("Type: %s", item.getParent().getStringKey())); } else { holder.title.setText(app.getResources().getString(item.getStringResource())); - holder.descr.setText(String.format("Type: %s", item.getStringKey())); + holder.descr.setText(String.format("Type: %s", Algorithms.capitalizeFirstLetterAndLowercase(item.getStringKey().replace("_", " ")))); } - holder.title.setTextColor(app.getResources().getColor(isNightMode(app) ? R.color.main_font_dark : R.color.main_font_light)); - holder.icon.setImageDrawable(app.getUIUtilities().getIcon(item.getSmallIconDark(), isNightMode(app) ? R.color.active_buttons_and_links_dark : R.color.active_buttons_and_links_light)); + holder.title.setTextColor(app.getResources().getColor(isNightMode(app) + ? R.color.main_font_dark + : R.color.main_font_light)); + holder.icon.setImageDrawable(app.getUIUtilities().getIcon(item.getSmallIconDark(), isNightMode(app) + ? R.color.active_buttons_and_links_dark + : R.color.active_buttons_and_links_light)); holder.aSwitch.setChecked(selectedItems.contains(item)); holder.aSwitch.setOnClickListener(new OnClickListener() { @Override diff --git a/OsmAnd/src/net/osmand/plus/profiles/RoutingProfile.java b/OsmAnd/src/net/osmand/plus/profiles/RoutingProfile.java index d0601bb1c5..704a2ade59 100644 --- a/OsmAnd/src/net/osmand/plus/profiles/RoutingProfile.java +++ b/OsmAnd/src/net/osmand/plus/profiles/RoutingProfile.java @@ -1,21 +1,19 @@ package net.osmand.plus.profiles; import android.os.Parcel; -import android.os.Parcelable; -import net.osmand.plus.routing.RoutingHelper; -public class RoutingProfile extends BaseProfile { +public class RoutingProfile extends ProfileDataObject { - private BaseProfile parent; + private String parent; private boolean isSelected; - public RoutingProfile(String name, BaseProfile parent, int iconRes, boolean isSelected) { - super(name, iconRes); + public RoutingProfile(String name, String parent, int iconRes, boolean isSelected) { + super(name, parent, iconRes); this.parent = parent; this.isSelected = isSelected; } - public BaseProfile getParent() { + public String getParent() { return parent; } @@ -29,7 +27,7 @@ public class RoutingProfile extends BaseProfile { protected RoutingProfile(Parcel in) { super(in); - parent = in.readParcelable(BaseProfile.class.getClassLoader()); + parent = in.readString(); isSelected = in.readByte() != 0; } @@ -53,7 +51,7 @@ public class RoutingProfile extends BaseProfile { @Override public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); - dest.writeParcelable(parent, flags); + dest.writeString(parent); dest.writeByte((byte) (isSelected ? 1 : 0)); } } diff --git a/OsmAnd/src/net/osmand/plus/profiles/SelectedProfileActivity.java b/OsmAnd/src/net/osmand/plus/profiles/SelectedProfileActivity.java index 2dbcd46435..49f583e8fe 100644 --- a/OsmAnd/src/net/osmand/plus/profiles/SelectedProfileActivity.java +++ b/OsmAnd/src/net/osmand/plus/profiles/SelectedProfileActivity.java @@ -8,6 +8,7 @@ import android.view.MenuItem; import net.osmand.plus.R; import net.osmand.plus.activities.OsmandActionBarActivity; +import net.osmand.util.Algorithms; public class SelectedProfileActivity extends OsmandActionBarActivity { @@ -18,8 +19,11 @@ public class SelectedProfileActivity extends OsmandActionBarActivity { setContentView(R.layout.single_fragment_layout); Intent intent = getIntent(); if (intent.getExtras() != null) { - String stringKey = intent.getStringExtra("stringKey"); - String title = stringKey == null ? "New Profile" : stringKey.toUpperCase(); //todo need normal title + String title = Algorithms.capitalizeFirstLetterAndLowercase( + intent.getStringExtra("stringKey").replace("_", " ")); + if (intent.getBooleanExtra("isNew", false)) { + title = String.format("%s (new)", title); + } if (getSupportActionBar() != null) { getSupportActionBar().setTitle(title); getSupportActionBar().setElevation(5.0f); diff --git a/OsmAnd/src/net/osmand/plus/profiles/SelectedProfileFragment.java b/OsmAnd/src/net/osmand/plus/profiles/SelectedProfileFragment.java index b7340af789..2ba11b238b 100644 --- a/OsmAnd/src/net/osmand/plus/profiles/SelectedProfileFragment.java +++ b/OsmAnd/src/net/osmand/plus/profiles/SelectedProfileFragment.java @@ -27,7 +27,7 @@ import net.osmand.plus.activities.MapActivity; import net.osmand.plus.activities.OsmandActionBarActivity; import net.osmand.plus.activities.SettingsNavigationActivity; import net.osmand.plus.base.BaseOsmAndFragment; -import net.osmand.plus.profiles.NavTypeBottomSheetDialogFragment.NavTypeDialogListener; +import net.osmand.plus.profiles.ProfileBottomSheetDialogFragment.ProfileTypeDialogListener; import net.osmand.plus.profiles.SelectIconBottomSheetDialogFragment.IconIdListener; import net.osmand.plus.widgets.OsmandTextFieldBoxes; import net.osmand.router.GeneralRouter.GeneralRouterProfile; @@ -44,6 +44,8 @@ public class SelectedProfileFragment extends BaseOsmAndFragment { public static final String SCREEN_CONFIG = "openScreenConfigMenu"; public static final String SELECTED_PROFILE = "editedProfile"; + + ApplicationMode profile = null; ApplicationMode parent = null; ArrayList routingProfiles; @@ -51,9 +53,10 @@ public class SelectedProfileFragment extends BaseOsmAndFragment { RoutingProfile selectedRoutingProfile = null; float defSpeed = 0f; - boolean isDataChanged = false; + private boolean isNew = false; + private boolean isDataChanged = false; - private NavTypeDialogListener navTypeDialogListener = null; + private ProfileTypeDialogListener profileTypeDialogListener = null; private IconIdListener iconIdListener = null; @Override @@ -61,9 +64,13 @@ public class SelectedProfileFragment extends BaseOsmAndFragment { super.onCreate(savedInstanceState); app = getMyApplication(); if (getArguments() != null) { - String modeName = getArguments().getString("stringKey"); - profile = ApplicationMode.valueOfStringKey(modeName, ApplicationMode.CAR); - //todo select parent + String modeName = getArguments().getString("stringKey", "car"); + if (!getArguments().getBoolean("isNew", true)) { + profile = ApplicationMode.valueOfStringKey(modeName, ApplicationMode.CAR); + } else { + isNew = true; + parent = ApplicationMode.valueOfStringKey(modeName, ApplicationMode.CAR); + } } routingProfiles = getRoutingProfiles(); } @@ -92,10 +99,15 @@ public class SelectedProfileFragment extends BaseOsmAndFragment { profileIconBtn.setBackgroundResource(R.drawable.rounded_background_3dp); GradientDrawable selectIconBtnBackground = (GradientDrawable) profileIconBtn .getBackground(); - - profileIcon.setImageDrawable(app.getUIUtilities().getIcon(profile.getSmallIconDark(), - isNightMode ? R.color.active_buttons_and_links_dark - : R.color.active_buttons_and_links_light)); + if(isNew) { + profileIcon.setImageDrawable(app.getUIUtilities().getIcon(parent.getSmallIconDark(), + isNightMode ? R.color.active_buttons_and_links_dark + : R.color.active_buttons_and_links_light)); + } else { + profileIcon.setImageDrawable(app.getUIUtilities().getIcon(profile.getSmallIconDark(), + isNightMode ? R.color.active_buttons_and_links_dark + : R.color.active_buttons_and_links_light)); + } if (isNightMode) { profileNameTextBox @@ -109,7 +121,7 @@ public class SelectedProfileFragment extends BaseOsmAndFragment { .setColor(app.getResources().getColor(R.color.text_field_box_light)); } - navTypeDialogListener = new NavTypeDialogListener() { + profileTypeDialogListener = new ProfileTypeDialogListener() { @Override public void onSelectedType(int pos) { selectedRoutingProfile = routingProfiles.get(pos); @@ -153,9 +165,8 @@ public class SelectedProfileFragment extends BaseOsmAndFragment { selectNavTypeBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - LOG.debug("select icon"); - final NavTypeBottomSheetDialogFragment fragment = new NavTypeBottomSheetDialogFragment(); - fragment.setNavTypeListener(navTypeDialogListener); + final ProfileBottomSheetDialogFragment fragment = new ProfileBottomSheetDialogFragment(); + fragment.setProfileTypeListener(profileTypeDialogListener); Bundle bundle = new Bundle(); bundle.putParcelableArrayList("routing_profiles", routingProfiles); fragment.setArguments(bundle); @@ -179,7 +190,6 @@ public class SelectedProfileFragment extends BaseOsmAndFragment { profileIconBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { - LOG.debug("select icon"); final SelectIconBottomSheetDialogFragment iconSelectDialog = new SelectIconBottomSheetDialogFragment(); iconSelectDialog.setIconIdListener(iconIdListener); Bundle bundle = new Bundle(); @@ -319,7 +329,7 @@ public class SelectedProfileFragment extends BaseOsmAndFragment { break; } routingProfiles - .add(new RoutingProfile(name, getString(R.string.osmand_default_routing), iconRes, false)); + .add(new RoutingProfile(name, getResources().getString(R.string.osmand_default_routing), iconRes, false)); } return routingProfiles; } diff --git a/OsmAnd/src/net/osmand/plus/profiles/SettingsProfileFragment.java b/OsmAnd/src/net/osmand/plus/profiles/SettingsProfileFragment.java index cfc2253658..7ae5a5071a 100644 --- a/OsmAnd/src/net/osmand/plus/profiles/SettingsProfileFragment.java +++ b/OsmAnd/src/net/osmand/plus/profiles/SettingsProfileFragment.java @@ -1,5 +1,7 @@ package net.osmand.plus.profiles; +import static net.osmand.plus.profiles.ProfileBottomSheetDialogFragment.TYPE_APP_PROFILE; + import android.content.Context; import android.content.Intent; import android.os.Bundle; @@ -12,6 +14,7 @@ import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.LinearLayout; +import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; @@ -19,6 +22,7 @@ import net.osmand.PlatformUtil; import net.osmand.plus.ApplicationMode; import net.osmand.plus.R; import net.osmand.plus.base.BaseOsmAndFragment; +import net.osmand.plus.profiles.ProfileBottomSheetDialogFragment.ProfileTypeDialogListener; import net.osmand.plus.profiles.ProfileMenuAdapter.ProfileListener; import org.apache.commons.logging.Log; @@ -31,59 +35,27 @@ public class SettingsProfileFragment extends BaseOsmAndFragment { private LinearLayout addProfileBtn; ProfileListener listener = null; + ProfileTypeDialogListener typeListener = null; private List allAppModes; private Set availableAppModes; + private ArrayList baseProfiles; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - Context ctx = getMyApplication().getApplicationContext(); allAppModes = ApplicationMode.allPossibleValues(); allAppModes.remove(ApplicationMode.DEFAULT); - allAppModes.remove(ApplicationMode.AIRCRAFT); - allAppModes.remove(ApplicationMode.HIKING); - allAppModes.remove(ApplicationMode.TRAIN); availableAppModes = new LinkedHashSet<>(ApplicationMode.values(getMyApplication())); availableAppModes.remove(ApplicationMode.DEFAULT); + baseProfiles = getBaseProfiles(); } -// private String getNavType(ApplicationMode am, Context ctx) { -// if (am.getParent() != null) { -// return getNavType(am.getParent(), ctx); -// } else { -// switch(am.getStringKey()) { -// case "car": -// return ctx.getResources().getString(R.string.rendering_value_car_name); -// case "bicycle": -// return ctx.getResources().getString(R.string.rendering_value_bicycle_name); -// case "pedestrian": -// return ctx.getResources().getString(R.string.rendering_value_pedestrian_name); -// case "public_transport": -// return ctx.getResources().getString(R.string.app_mode_public_transport); -// case "boat": -// return ctx.getResources().getString(R.string.app_mode_boat); -// } -// } -// return ""; -// } - @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.profiles_list_fragment, container, false); - recyclerView = view.findViewById(R.id.profiles_list); - addProfileBtn = view.findViewById(R.id.add_profile_btn); - - addProfileBtn.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - - - } - }); listener = new ProfileListener() { @Override @@ -106,26 +78,91 @@ public class SettingsProfileFragment extends BaseOsmAndFragment { for (ApplicationMode sam : availableAppModes) { vls.append(sam.getStringKey()).append(","); } - getSettings().AVAILABLE_APP_MODES.set(vls.toString()); - + if (getSettings() != null) { + getSettings().AVAILABLE_APP_MODES.set(vls.toString()); + } } @Override public void editProfile(ApplicationMode item) { Intent intent = new Intent(getActivity(), SelectedProfileActivity.class); intent.putExtra("stringKey", item.getStringKey()); + intent.putExtra("isNew", false); startActivity(intent); } }; + + typeListener = new ProfileTypeDialogListener() { + @Override + public void onSelectedType(int pos) { + LOG.debug("Base profile: " + baseProfiles.get(pos).getName()); + Intent intent = new Intent(getActivity(), SelectedProfileActivity.class); + intent.putExtra("isNew", true); + intent.putExtra("stringKey", baseProfiles.get(pos).getStringKey()); + startActivity(intent); + } + }; + + View view = inflater.inflate(R.layout.profiles_list_fragment, container, false); + recyclerView = view.findViewById(R.id.profiles_list); + addProfileBtn = view.findViewById(R.id.add_profile_btn); + + addProfileBtn.setOnClickListener(new OnClickListener() { + + + @Override + public void onClick(View v) { + final ProfileBottomSheetDialogFragment dialog = new ProfileBottomSheetDialogFragment(); + dialog.setProfileTypeListener(typeListener); + Bundle bundle = new Bundle(); + bundle.putParcelableArrayList(TYPE_APP_PROFILE, baseProfiles); + dialog.setArguments(bundle); + + if (getActivity() != null) { + getActivity().getSupportFragmentManager().beginTransaction() + .add(dialog, "select_base_type").commitAllowingStateLoss(); + } + } + }); + adapter = new ProfileMenuAdapter(allAppModes, availableAppModes, getMyApplication(), listener); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); recyclerView.setAdapter(adapter); - - - return view; } + private ArrayList getBaseProfiles() { + ArrayList profiles = new ArrayList<>(); + for (ApplicationMode mode : ApplicationMode.getDefaultValues()) { + switch (mode.getStringKey()) { + case "car": + profiles.add(new BaseProfile(mode.getStringKey(), getString(R.string.rendering_value_car_name), + "Car, Truck, Motorcycle", R.drawable.ic_action_car_dark)); + break; + case "bicycle": + profiles.add(new BaseProfile(mode.getStringKey(), getString(R.string.rendering_value_bicycle_name), + "MBT, Moped, Skiing, Horse", R.drawable.map_action_bicycle_dark)); + break; + case "pedestrian": + profiles.add(new BaseProfile(mode.getStringKey(), getString(R.string.rendering_value_pedestrian_name), + "Walking, Hiking, Running", R.drawable.map_action_pedestrian_dark)); + break; + case "public_transport": + profiles.add(new BaseProfile(mode.getStringKey(), getString(R.string.app_mode_public_transport), + "All PT types", R.drawable.map_action_bus_dark)); + break; + case "boat": + profiles.add(new BaseProfile(mode.getStringKey(), getString(R.string.nautical_renderer), + "Ship, Rowing, Sailing", R.drawable.map_action_sail_boat_dark)); + break; + case "aircraft": + profiles.add(new BaseProfile(mode.getStringKey(), getString(R.string.app_mode_aircraft), + "Airplane, Gliding", R.drawable.map_action_aircraft)); + break; + } + } + return profiles; + } } diff --git a/OsmAnd/src/net/osmand/plus/routepreparationmenu/RoutingOptionsHelper.java b/OsmAnd/src/net/osmand/plus/routepreparationmenu/RoutingOptionsHelper.java index 552702bfeb..13bf1f03a9 100644 --- a/OsmAnd/src/net/osmand/plus/routepreparationmenu/RoutingOptionsHelper.java +++ b/OsmAnd/src/net/osmand/plus/routepreparationmenu/RoutingOptionsHelper.java @@ -73,10 +73,10 @@ public class RoutingOptionsHelper { addRouteMenuAppModes(ApplicationMode.PUBLIC_TRANSPORT, PermanentAppModeOptions.PUBLIC_TRANSPORT.routingParameters); addRouteMenuAppModes(ApplicationMode.BOAT, PermanentAppModeOptions.BOAT.routingParameters); addRouteMenuAppModes(ApplicationMode.AIRCRAFT, PermanentAppModeOptions.AIRCAFT.routingParameters); - addRouteMenuAppModes(ApplicationMode.HIKING, PermanentAppModeOptions.HIKING.routingParameters); - addRouteMenuAppModes(ApplicationMode.MOTORCYCLE, PermanentAppModeOptions.MOTORCYCLE.routingParameters); - addRouteMenuAppModes(ApplicationMode.TRUCK, PermanentAppModeOptions.TRUCK.routingParameters); - addRouteMenuAppModes(ApplicationMode.TRAIN, PermanentAppModeOptions.TRAIN.routingParameters); +// addRouteMenuAppModes(ApplicationMode.HIKING, PermanentAppModeOptions.HIKING.routingParameters); +// addRouteMenuAppModes(ApplicationMode.MOTORCYCLE, PermanentAppModeOptions.MOTORCYCLE.routingParameters); +// addRouteMenuAppModes(ApplicationMode.TRUCK, PermanentAppModeOptions.TRUCK.routingParameters); +// addRouteMenuAppModes(ApplicationMode.TRAIN, PermanentAppModeOptions.TRAIN.routingParameters); } private void addRouteMenuAppModes(ApplicationMode am, List routingParameters) {