diff --git a/OsmAnd/res/layout/fragment_selected_profile.xml b/OsmAnd/res/layout/fragment_selected_profile.xml
index 3cfd869bf6..b492062b8f 100644
--- a/OsmAnd/res/layout/fragment_selected_profile.xml
+++ b/OsmAnd/res/layout/fragment_selected_profile.xml
@@ -1,9 +1,65 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -379,7 +435,7 @@
android:textColor="@color/description_font_and_bottom_sheet_icons"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:textColor="@color/description_font_and_bottom_sheet_icons"
+ android:visibility="gone"
+ tools:text="@string/configure_profile_info"
+ tools:visibility="visible" />
@@ -612,4 +572,6 @@
-
\ No newline at end of file
+
+
+
\ No newline at end of file
diff --git a/OsmAnd/res/layout/profiles_list_fragment.xml b/OsmAnd/res/layout/profiles_list_fragment.xml
index 77cf6b705e..2cc767fa13 100644
--- a/OsmAnd/res/layout/profiles_list_fragment.xml
+++ b/OsmAnd/res/layout/profiles_list_fragment.xml
@@ -1,6 +1,20 @@
+
+
+
+
+
+
+
+
-
\ No newline at end of file
+
+
+
\ No newline at end of file
diff --git a/OsmAnd/res/xml/configure_profile.xml b/OsmAnd/res/xml/configure_profile.xml
index 7abb3a1e87..d6519647c3 100644
--- a/OsmAnd/res/xml/configure_profile.xml
+++ b/OsmAnd/res/xml/configure_profile.xml
@@ -36,6 +36,14 @@
android:title="@string/configure_map"
tools:icon="@drawable/ic_action_layers_dark" />
+
+
diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java
index 02a72074a8..68541e616f 100644
--- a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java
+++ b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java
@@ -128,6 +128,7 @@ import net.osmand.plus.search.QuickSearchDialogFragment;
import net.osmand.plus.search.QuickSearchDialogFragment.QuickSearchTab;
import net.osmand.plus.search.QuickSearchDialogFragment.QuickSearchType;
import net.osmand.plus.settings.BaseSettingsFragment;
+import net.osmand.plus.settings.ConfigureProfileFragment;
import net.osmand.plus.settings.MainSettingsFragment;
import net.osmand.plus.views.AddGpxPointBottomSheetHelper.NewGpxPoint;
import net.osmand.plus.views.AnimateDraggingMapThread;
@@ -161,6 +162,8 @@ import java.util.concurrent.Executors;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import static net.osmand.plus.OsmAndCustomizationConstants.DRAWER_SETTINGS_ID;
+
public class MapActivity extends OsmandActionBarActivity implements DownloadEvents,
OnRequestPermissionsResultCallback, IRouteInformationListener, AMapPointUpdateListener,
MapMarkerChangedListener, OnDismissDialogFragmentListener, OnDrawMapListener,
@@ -639,6 +642,13 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
chooseRouteFragment.dismiss(true);
return;
}
+ EditProfileFragment editProfileFragment = getEditProfileFragment();
+ if (editProfileFragment != null) {
+ if (!editProfileFragment.onBackPressedAllowed()) {
+ editProfileFragment.confirmCancelDialog(this);
+ return;
+ }
+ }
if (mapContextMenu.isVisible() && mapContextMenu.isClosable()) {
if (mapContextMenu.getCurrentMenuState() != MenuState.HEADER_ONLY) {
mapContextMenu.openMenuHeaderOnly();
@@ -804,6 +814,13 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
}
setIntent(null);
}
+ if (intent.hasExtra(EditProfileFragment.OPEN_SETTINGS)) {
+ String settingsType = intent.getStringExtra(EditProfileFragment.OPEN_SETTINGS);
+ if (EditProfileFragment.OPEN_CONFIG_PROFILE.equals(settingsType)) {
+ ConfigureProfileFragment.showInstance(getSupportFragmentManager());
+ }
+ setIntent(null);
+ }
if (intent.hasExtra(EditProfileFragment.OPEN_CONFIG_ON_MAP)) {
switch (intent.getStringExtra(EditProfileFragment.OPEN_CONFIG_ON_MAP)) {
case EditProfileFragment.MAP_CONFIG:
@@ -995,7 +1012,7 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
private BaseSettingsFragment getVisibleBaseSettingsFragment(int... ids) {
for (int id : ids) {
Fragment fragment = getSupportFragmentManager().findFragmentById(id);
- if (fragment != null && !fragment.isRemoving() && fragment instanceof BaseSettingsFragment
+ if (fragment != null && !fragment.isRemoving() && fragment.isVisible() && fragment instanceof BaseSettingsFragment
&& ((BaseSettingsFragment) fragment).getStatusBarColorId() != -1) {
return (BaseSettingsFragment) fragment;
}
@@ -1957,25 +1974,31 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
@Override
public boolean onPreferenceStartFragment(PreferenceFragmentCompat caller, Preference pref) {
- if (caller instanceof BaseSettingsFragment) {
- BaseSettingsFragment baseFragment = (BaseSettingsFragment) caller;
+ try {
+ String fragmentName = pref.getFragment();
+ Fragment fragment = Fragment.instantiate(this, fragmentName);
- ApplicationMode mode = baseFragment.getSelectedAppMode();
- if (mode != null) {
- String fragmentName = pref.getFragment();
- Fragment fragment = Fragment.instantiate(this, fragmentName);
+ getSupportFragmentManager().beginTransaction()
+ .replace(R.id.fragmentContainer, fragment, fragment.getClass().getSimpleName())
+ .addToBackStack(DRAWER_SETTINGS_ID + ".new")
+ .commit();
- getSupportFragmentManager().beginTransaction()
- .replace(R.id.fragmentContainer, fragment, fragmentName)
- .addToBackStack(fragmentName)
- .commitAllowingStateLoss();
-
- return true;
- }
+ return true;
+ } catch (Exception e) {
+ LOG.error(e);
}
+
return false;
}
+ public void dismissSettingsScreens() {
+ try {
+ getSupportFragmentManager().popBackStack(DRAWER_SETTINGS_ID + ".new", FragmentManager.POP_BACK_STACK_INCLUSIVE);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
private class ScreenOffReceiver extends BroadcastReceiver {
@Override
@@ -2193,6 +2216,7 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
}
public void showSettings() {
+ dismissSettingsScreens();
MainSettingsFragment.showInstance(getSupportFragmentManager());
}
@@ -2232,6 +2256,11 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
return fragment != null && !fragment.isDetached() && !fragment.isRemoving() ? (ChooseRouteFragment) fragment : null;
}
+ public EditProfileFragment getEditProfileFragment() {
+ Fragment fragment = getSupportFragmentManager().findFragmentByTag(EditProfileFragment.TAG);
+ return fragment != null && !fragment.isDetached() && !fragment.isRemoving() ? (EditProfileFragment) fragment : null;
+ }
+
public boolean isTopToolbarActive() {
MapInfoLayer mapInfoLayer = getMapLayers().getMapInfoLayer();
return mapInfoLayer.hasTopToolbar();
diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java
index bd8c1d5233..8cfea74ffc 100644
--- a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java
+++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java
@@ -663,6 +663,7 @@ public class MapActivityActions implements DialogProvider {
.setListener(new ItemClickListener() {
@Override
public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int position, boolean isChecked, int[] viewCoordinates) {
+ mapActivity.dismissSettingsScreens();
ConfigureProfileFragment.showInstance(mapActivity.getSupportFragmentManager());
return true;
}
diff --git a/OsmAnd/src/net/osmand/plus/profiles/EditProfileActivity.java b/OsmAnd/src/net/osmand/plus/profiles/EditProfileActivity.java
index 109b184dce..0399b06932 100644
--- a/OsmAnd/src/net/osmand/plus/profiles/EditProfileActivity.java
+++ b/OsmAnd/src/net/osmand/plus/profiles/EditProfileActivity.java
@@ -8,14 +8,12 @@ import android.support.v4.view.MenuItemCompat;
import android.view.Menu;
import android.view.MenuItem;
-import net.osmand.PlatformUtil;
import net.osmand.plus.R;
import net.osmand.plus.activities.OsmandActionBarActivity;
public class EditProfileActivity extends OsmandActionBarActivity {
public static final int DELETE_ID = 1010;
- public static final String EDIT_PROFILE_FRAGMENT_TAG = "editProfileFragment";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -27,7 +25,7 @@ public class EditProfileActivity extends OsmandActionBarActivity {
EditProfileFragment editProfileFragment = new EditProfileFragment();
editProfileFragment.setArguments(getIntent().getExtras());
getSupportFragmentManager().beginTransaction().add(android.R.id.content,
- editProfileFragment, EDIT_PROFILE_FRAGMENT_TAG).commit();
+ editProfileFragment, EditProfileFragment.TAG).commit();
}
}
@@ -53,7 +51,7 @@ public class EditProfileActivity extends OsmandActionBarActivity {
return true;
case DELETE_ID:
((EditProfileFragment) getSupportFragmentManager().findFragmentByTag(
- EDIT_PROFILE_FRAGMENT_TAG)).onDeleteProfileClick();
+ EditProfileFragment.TAG)).onDeleteProfileClick();
return true;
}
@@ -63,7 +61,7 @@ public class EditProfileActivity extends OsmandActionBarActivity {
@Override
public void onBackPressed() {
final EditProfileFragment epf = (EditProfileFragment) getSupportFragmentManager()
- .findFragmentByTag(EDIT_PROFILE_FRAGMENT_TAG);
+ .findFragmentByTag(EditProfileFragment.TAG);
if (epf.onBackPressedAllowed()) {
super.onBackPressed();
} else {
diff --git a/OsmAnd/src/net/osmand/plus/profiles/EditProfileFragment.java b/OsmAnd/src/net/osmand/plus/profiles/EditProfileFragment.java
index 1ebb4b2acb..8fd8305dc2 100644
--- a/OsmAnd/src/net/osmand/plus/profiles/EditProfileFragment.java
+++ b/OsmAnd/src/net/osmand/plus/profiles/EditProfileFragment.java
@@ -1,15 +1,5 @@
package net.osmand.plus.profiles;
-import static net.osmand.plus.activities.SettingsNavigationActivity.INTENT_SKIP_DIALOG;
-import static net.osmand.plus.profiles.SelectProfileBottomSheetDialogFragment.DIALOG_TYPE;
-import static net.osmand.plus.profiles.SelectProfileBottomSheetDialogFragment.SELECTED_KEY;
-import static net.osmand.plus.profiles.SelectProfileBottomSheetDialogFragment.TYPE_BASE_APP_PROFILE;
-import static net.osmand.plus.profiles.SelectProfileBottomSheetDialogFragment.TYPE_ICON;
-import static net.osmand.plus.profiles.SelectProfileBottomSheetDialogFragment.TYPE_NAV_PROFILE;
-import static net.osmand.plus.profiles.SettingsProfileFragment.IS_NEW_PROFILE;
-import static net.osmand.plus.profiles.SettingsProfileFragment.IS_USER_PROFILE;
-import static net.osmand.plus.profiles.SettingsProfileFragment.PROFILE_STRING_KEY;
-
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
@@ -22,17 +12,20 @@ import android.os.Build.VERSION_CODES;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
-import android.support.v7.app.ActionBar;
+import android.support.design.widget.AppBarLayout;
+import android.support.v4.app.FragmentActivity;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.view.ViewCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AlertDialog.Builder;
import android.text.Editable;
import android.text.TextWatcher;
+import android.view.ContextThemeWrapper;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
-
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
@@ -46,10 +39,7 @@ import android.widget.ListPopupWindow;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
+
import net.osmand.AndroidUtils;
import net.osmand.PlatformUtil;
import net.osmand.plus.ApplicationMode;
@@ -57,21 +47,41 @@ import net.osmand.plus.ApplicationMode.ProfileIconColors;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
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.helpers.AndroidUiHelper;
import net.osmand.plus.profiles.SelectProfileBottomSheetDialogFragment.SelectProfileListener;
import net.osmand.plus.routing.RouteProvider.RouteService;
+import net.osmand.plus.settings.ConfigureProfileFragment;
import net.osmand.plus.widgets.OsmandTextFieldBoxes;
import net.osmand.router.GeneralRouter;
import net.osmand.util.Algorithms;
+
import org.apache.commons.logging.Log;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
import studio.carbonylgroup.textfieldboxes.ExtendedEditText;
+import static net.osmand.plus.profiles.SelectProfileBottomSheetDialogFragment.DIALOG_TYPE;
+import static net.osmand.plus.profiles.SelectProfileBottomSheetDialogFragment.SELECTED_KEY;
+import static net.osmand.plus.profiles.SelectProfileBottomSheetDialogFragment.TYPE_BASE_APP_PROFILE;
+import static net.osmand.plus.profiles.SelectProfileBottomSheetDialogFragment.TYPE_ICON;
+import static net.osmand.plus.profiles.SelectProfileBottomSheetDialogFragment.TYPE_NAV_PROFILE;
+import static net.osmand.plus.profiles.SettingsProfileFragment.IS_NEW_PROFILE;
+import static net.osmand.plus.profiles.SettingsProfileFragment.IS_USER_PROFILE;
+import static net.osmand.plus.profiles.SettingsProfileFragment.PROFILE_STRING_KEY;
+
public class EditProfileFragment extends BaseOsmAndFragment {
private static final Log LOG = PlatformUtil.getLog(EditProfileFragment.class);
+ public static final String TAG = EditProfileFragment.class.getSimpleName();
+
+ public static final String OPEN_CONFIG_PROFILE = "openConfigProfile";
+ public static final String OPEN_SETTINGS = "openSettings";
public static final String OPEN_CONFIG_ON_MAP = "openConfigOnMap";
public static final String MAP_CONFIG = "openMapConfigMenu";
public static final String NAV_CONFIG = "openNavConfigMenu";
@@ -96,6 +106,7 @@ public class EditProfileFragment extends BaseOsmAndFragment {
private SelectProfileListener iconIdListener = null;
private SelectProfileListener baseTypeListener = null;
+ private TextView toolbarTitle;
private ImageView profileIcon;
private LinearLayout profileIconBtn;
private ImageView colorSample;
@@ -107,9 +118,7 @@ public class EditProfileFragment extends BaseOsmAndFragment {
private FrameLayout selectNavTypeBtn;
private Button cancelBtn;
private Button saveButton;
- private View mapConfigBtn;
- private View screenConfigBtn;
- private View navConfigBtn;
+ private View profileConfigBtn;
private LinearLayout buttonsLayout;
private FrameLayout clickBlockLayout;
private LinearLayout typeSelectionBtn;
@@ -138,10 +147,16 @@ public class EditProfileFragment extends BaseOsmAndFragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
- @Nullable Bundle savedInstanceState) {
- final EditProfileActivity activity = (EditProfileActivity) getActivity();
- final View view = inflater.inflate(R.layout.fragment_selected_profile, container, false);
+ @Nullable Bundle savedInstanceState) {
+ final FragmentActivity activity = getActivity();
+ int themeRes = nightMode ? R.style.OsmandDarkTheme : R.style.OsmandLightTheme;
+ Context themedContext = new ContextThemeWrapper(getContext(), themeRes);
+ final View view = inflater.cloneInContext(themedContext).inflate(R.layout.fragment_selected_profile, container, false);
+
+ setupToolbar(view);
+
+ toolbarTitle = view.findViewById(R.id.toolbar_title);
profileIcon = view.findViewById(R.id.profile_icon_img);
profileIconBtn = view.findViewById(R.id.select_icon_button);
colorSample = view.findViewById(R.id.color_sample_img);
@@ -153,9 +168,7 @@ public class EditProfileFragment extends BaseOsmAndFragment {
selectNavTypeBtn = view.findViewById(R.id.select_nav_type_btn);
cancelBtn = view.findViewById(R.id.cancel_button);
saveButton = view.findViewById(R.id.save_profile_btn);
- mapConfigBtn = view.findViewById(R.id.map_config_btn);
- screenConfigBtn = view.findViewById(R.id.screen_config_btn);
- navConfigBtn = view.findViewById(R.id.nav_settings_btn);
+ profileConfigBtn = view.findViewById(R.id.profile_config_btn);
buttonsLayout = view.findViewById(R.id.buttons_layout);
clickBlockLayout = view.findViewById(R.id.click_block_layout);
typeSelectionBtn = view.findViewById(R.id.type_selection_button);
@@ -242,11 +255,7 @@ public class EditProfileFragment extends BaseOsmAndFragment {
}
profileNameEt.clearFocus();
- if (getActivity() != null
- && ((EditProfileActivity) getActivity()).getSupportActionBar() != null) {
- ((EditProfileActivity) getActivity()).getSupportActionBar().setTitle(title);
- ((EditProfileActivity) getActivity()).getSupportActionBar().setElevation(5.0f);
- }
+ updateToolbar(title);
int iconColor = profile.iconColor.getColor(nightMode);
@@ -264,15 +273,10 @@ public class EditProfileFragment extends BaseOsmAndFragment {
@Override
public void afterTextChanged(Editable s) {
- if (getActivity() instanceof OsmandActionBarActivity) {
- ActionBar actionBar = ((OsmandActionBarActivity) getActivity())
- .getSupportActionBar();
- if (actionBar != null) {
- actionBar.setTitle(s.toString());
- profile.userProfileTitle = s.toString();
- isCancelAllowed = false;
- }
- }
+ profile.userProfileTitle = s.toString();
+ isCancelAllowed = false;
+
+ updateToolbar(s.toString());
}
});
@@ -358,7 +362,7 @@ public class EditProfileFragment extends BaseOsmAndFragment {
}
- mapConfigBtn.setOnClickListener(new OnClickListener() {
+ profileConfigBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (isDataChanged) {
@@ -366,43 +370,18 @@ public class EditProfileFragment extends BaseOsmAndFragment {
} else if (getSettings() != null) {
activateMode(mode);
getSettings().APPLICATION_MODE.set(mode);
- Intent i = new Intent(getActivity(), MapActivity.class);
- i.putExtra(OPEN_CONFIG_ON_MAP, MAP_CONFIG);
- i.putExtra(SELECTED_ITEM, profile.stringKey);
- startActivity(i);
- }
- }
- });
- screenConfigBtn.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- if (isDataChanged) {
- needSaveDialog();
- } else if (getSettings() != null) {
- activateMode(mode);
- getSettings().APPLICATION_MODE.set(mode);
- Intent i = new Intent(getActivity(), MapActivity.class);
- i.putExtra(OPEN_CONFIG_ON_MAP, SCREEN_CONFIG);
- i.putExtra(SELECTED_ITEM, profile.stringKey);
- startActivity(i);
- }
- }
- });
-
- navConfigBtn.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- if (isDataChanged) {
- needSaveDialog();
- } else if (getSettings() != null) {
- activateMode(mode);
- getSettings().APPLICATION_MODE.set(mode);
- Intent i = new Intent(getActivity(), SettingsNavigationActivity.class);
- i.putExtra(INTENT_SKIP_DIALOG, true);
- i.putExtra(OPEN_CONFIG_ON_MAP, NAV_CONFIG);
- i.putExtra(SELECTED_ITEM, profile.stringKey);
- startActivity(i);
+ if (activity instanceof EditProfileActivity) {
+ Intent i = new Intent(getActivity(), MapActivity.class);
+ i.putExtra(OPEN_SETTINGS, OPEN_CONFIG_PROFILE);
+ i.putExtra(SELECTED_ITEM, profile.stringKey);
+ startActivity(i);
+ } else {
+ FragmentManager fragmentManager = getFragmentManager();
+ if (fragmentManager != null) {
+ ConfigureProfileFragment.showInstance(fragmentManager);
+ }
+ }
}
}
});
@@ -450,13 +429,13 @@ public class EditProfileFragment extends BaseOsmAndFragment {
});
}
+ final float d = getResources().getDisplayMetrics().density;
view.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int marginShow = 66;
int marginHide = 0;
- float d = getResources().getDisplayMetrics().density;
Rect r = new Rect();
view.getWindowVisibleDisplayFrame(r);
int screenHeight = view.getRootView().getHeight();
@@ -483,7 +462,12 @@ public class EditProfileFragment extends BaseOsmAndFragment {
super.onResume();
}
- boolean onBackPressedAllowed() {
+ @Override
+ public int getStatusBarColorId() {
+ return nightMode ? R.color.status_bar_color_dark : R.color.status_bar_color_light;
+ }
+
+ public boolean onBackPressedAllowed() {
return isCancelAllowed;
}
@@ -567,6 +551,54 @@ public class EditProfileFragment extends BaseOsmAndFragment {
}
}
+ private void setupToolbar(View view) {
+ FragmentActivity activity = getActivity();
+ AppBarLayout appBar = (AppBarLayout) view.findViewById(R.id.appbar);
+
+ if ((activity instanceof EditProfileActivity)) {
+ EditProfileActivity editProfileActivity = (EditProfileActivity) activity;
+ if (editProfileActivity.getSupportActionBar() != null) {
+ editProfileActivity.getSupportActionBar().setElevation(5.0f);
+ }
+ AndroidUiHelper.updateVisibility(appBar, false);
+ } else {
+ setHasOptionsMenu(true);
+ AndroidUtils.addStatusBarPadding21v(activity, view);
+ ViewCompat.setElevation(appBar, 5.0f);
+
+ View closeButton = view.findViewById(R.id.close_button);
+ closeButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ FragmentActivity fragmentActivity = getActivity();
+ if (fragmentActivity != null) {
+ fragmentActivity.onBackPressed();
+ }
+ }
+ });
+
+ View deleteBtn = view.findViewById(R.id.delete_button);
+ deleteBtn.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ onDeleteProfileClick();
+ }
+ });
+ }
+ }
+
+ private void updateToolbar(String title) {
+ FragmentActivity activity = getActivity();
+ if (activity instanceof EditProfileActivity) {
+ EditProfileActivity editProfileActivity = (EditProfileActivity) activity;
+ if (editProfileActivity.getSupportActionBar() != null) {
+ editProfileActivity.getSupportActionBar().setTitle(title);
+ }
+ } else {
+ toolbarTitle.setText(title);
+ }
+ }
+
private void setupBaseProfileView(String stringKey) {
for (ApplicationMode am : ApplicationMode.getDefaultValues()) {
if (am.getStringKey().equals(stringKey)) {
@@ -671,7 +703,7 @@ public class EditProfileFragment extends BaseOsmAndFragment {
bld.show();
}
- void confirmCancelDialog(final Activity activity) {
+ public void confirmCancelDialog(final Activity activity) {
AlertDialog.Builder bld = new Builder(activity);
bld.setTitle(R.string.shared_string_dismiss);
bld.setMessage(R.string.exit_without_saving);
@@ -699,12 +731,15 @@ public class EditProfileFragment extends BaseOsmAndFragment {
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
- ApplicationMode
- .deleteCustomMode(mode, getMyApplication());
+ OsmandApplication app = getMyApplication();
+ if (app != null) {
+ ApplicationMode.deleteCustomMode(mode, app);
+ app.getSettings().APPLICATION_MODE.set(ApplicationMode.DEFAULT);
+ }
+
if (getActivity() != null) {
getActivity().onBackPressed();
}
- getSettings().APPLICATION_MODE.set(ApplicationMode.DEFAULT);
}
});
bld.setNegativeButton(R.string.shared_string_dismiss, null);
@@ -726,6 +761,26 @@ public class EditProfileFragment extends BaseOsmAndFragment {
}
}
+ public static boolean showInstance(FragmentManager fragmentManager, boolean newProfile, boolean userProfile, String profileKey) {
+ try {
+ Bundle args = new Bundle();
+ args.putBoolean(IS_NEW_PROFILE, newProfile);
+ args.putBoolean(IS_USER_PROFILE, userProfile);
+ args.putString(PROFILE_STRING_KEY, profileKey);
+
+ EditProfileFragment editProfileFragment = new EditProfileFragment();
+ editProfileFragment.setArguments(args);
+
+ fragmentManager.beginTransaction()
+ .replace(R.id.fragmentContainer, editProfileFragment, TAG)
+ .addToBackStack(TAG)
+ .commit();
+ return true;
+ } catch (Exception e) {
+ return false;
+ }
+ }
+
static List getRoutingProfiles(OsmandApplication context) {
List profilesObjects = new ArrayList<>();
profilesObjects.add(new RoutingProfileDataObject(
diff --git a/OsmAnd/src/net/osmand/plus/profiles/SelectProfileBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/profiles/SelectProfileBottomSheetDialogFragment.java
index 61f78e5243..06e3752109 100644
--- a/OsmAnd/src/net/osmand/plus/profiles/SelectProfileBottomSheetDialogFragment.java
+++ b/OsmAnd/src/net/osmand/plus/profiles/SelectProfileBottomSheetDialogFragment.java
@@ -7,16 +7,13 @@ import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
-import android.support.v7.widget.SwitchCompat;
+import android.support.v4.app.FragmentActivity;
+import android.support.v4.app.FragmentManager;
import android.view.View;
import android.view.View.OnClickListener;
-import android.widget.Button;
import java.util.ArrayList;
-import java.util.HashSet;
import java.util.List;
-import java.util.Set;
import net.osmand.PlatformUtil;
-import net.osmand.plus.ApplicationMode;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
@@ -217,20 +214,29 @@ public class SelectProfileBottomSheetDialogFragment extends MenuBottomSheetDialo
private void getListener() {
- if (getActivity() != null && getActivity() instanceof EditProfileActivity) {
- EditProfileFragment f = (EditProfileFragment) getActivity().getSupportFragmentManager()
- .findFragmentByTag(EditProfileActivity.EDIT_PROFILE_FRAGMENT_TAG);
- if (type.equals(TYPE_BASE_APP_PROFILE)) {
- listener = f.getBaseProfileListener();
- } else if (type.equals(TYPE_NAV_PROFILE)) {
- listener = f.getNavProfileListener();
- } else if (type.equals(TYPE_ICON)) {
- listener = f.getIconListener();
+ FragmentActivity activity = getActivity();
+ if (activity != null) {
+ FragmentManager fragmentManager = activity.getSupportFragmentManager();
+ if (fragmentManager != null) {
+ EditProfileFragment editProfileFragment = (EditProfileFragment) fragmentManager.findFragmentByTag(EditProfileFragment.TAG);
+ SettingsProfileFragment settingsProfileFragment = (SettingsProfileFragment) fragmentManager.findFragmentByTag(SettingsProfileFragment.TAG);
+
+ if (editProfileFragment != null) {
+ switch (type) {
+ case TYPE_BASE_APP_PROFILE:
+ listener = editProfileFragment.getBaseProfileListener();
+ break;
+ case TYPE_NAV_PROFILE:
+ listener = editProfileFragment.getNavProfileListener();
+ break;
+ case TYPE_ICON:
+ listener = editProfileFragment.getIconListener();
+ break;
+ }
+ } else if (settingsProfileFragment != null) {
+ listener = settingsProfileFragment.getBaseProfileListener();
+ }
}
- } else if (getActivity() != null && getActivity() instanceof SettingsProfileActivity) {
- SettingsProfileFragment f = (SettingsProfileFragment) getActivity().getSupportFragmentManager()
- .findFragmentByTag(SettingsProfileActivity.SETTINGS_PROFILE_FRAGMENT_TAG);
- listener = f.getBaseProfileListener();
}
}
diff --git a/OsmAnd/src/net/osmand/plus/profiles/SettingsProfileActivity.java b/OsmAnd/src/net/osmand/plus/profiles/SettingsProfileActivity.java
index 7e79a23597..eef44601b4 100644
--- a/OsmAnd/src/net/osmand/plus/profiles/SettingsProfileActivity.java
+++ b/OsmAnd/src/net/osmand/plus/profiles/SettingsProfileActivity.java
@@ -2,13 +2,12 @@ package net.osmand.plus.profiles;
import android.os.Bundle;
import android.view.MenuItem;
+
import net.osmand.plus.R;
import net.osmand.plus.activities.OsmandActionBarActivity;
public class SettingsProfileActivity extends OsmandActionBarActivity {
- public static final String SETTINGS_PROFILE_FRAGMENT_TAG = "settingsProfileFragment";
-
@Override
public void onCreate(Bundle savedInstanceState) {
getMyApplication().applyTheme(this);
@@ -20,7 +19,7 @@ public class SettingsProfileActivity extends OsmandActionBarActivity {
SettingsProfileFragment profileFragment = new SettingsProfileFragment();
profileFragment.setArguments(getIntent().getExtras());
getSupportFragmentManager().beginTransaction()
- .add(android.R.id.content, profileFragment, SETTINGS_PROFILE_FRAGMENT_TAG).commit();
+ .add(android.R.id.content, profileFragment, SettingsProfileFragment.TAG).commit();
}
}
diff --git a/OsmAnd/src/net/osmand/plus/profiles/SettingsProfileFragment.java b/OsmAnd/src/net/osmand/plus/profiles/SettingsProfileFragment.java
index c4f39a1ec7..1f2f909982 100644
--- a/OsmAnd/src/net/osmand/plus/profiles/SettingsProfileFragment.java
+++ b/OsmAnd/src/net/osmand/plus/profiles/SettingsProfileFragment.java
@@ -10,21 +10,32 @@ import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import android.support.design.widget.AppBarLayout;
+import android.support.v4.app.FragmentActivity;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.view.ViewCompat;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
+import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.LinearLayout;
+import android.widget.TextView;
+
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
+
+import net.osmand.AndroidUtils;
import net.osmand.PlatformUtil;
import net.osmand.plus.ApplicationMode;
import net.osmand.plus.R;
+import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.base.BaseOsmAndFragment;
+import net.osmand.plus.helpers.AndroidUiHelper;
import net.osmand.plus.profiles.SelectProfileBottomSheetDialogFragment.SelectProfileListener;
import org.apache.commons.logging.Log;
@@ -34,21 +45,22 @@ public class SettingsProfileFragment extends BaseOsmAndFragment
private static final Log LOG = PlatformUtil.getLog(SettingsProfileFragment.class);
+ public static final String TAG = "SettingsProfileFragment";
+
public static final String PROFILE_STRING_KEY = "string_key";
public static final String IS_NEW_PROFILE = "new_profile";
public static final String IS_USER_PROFILE = "user_profile";
private ConfigureProfileMenuAdapter adapter;
- private RecyclerView recyclerView;
- private LinearLayout addNewProfileBtn;
-
- SelectProfileListener typeListener = null;
+ private SelectProfileListener typeListener = null;
private List allAppModes;
private Set availableAppModes;
private List baseProfiles;
+ private boolean nightMode;
+
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -63,10 +75,36 @@ public class SettingsProfileFragment extends BaseOsmAndFragment
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
+ nightMode = !requireSettings().isLightContent();
- View view = inflater.inflate(R.layout.profiles_list_fragment, container, false);
- recyclerView = view.findViewById(R.id.profiles_list);
- addNewProfileBtn = view.findViewById(R.id.add_profile_btn);
+ int themeRes = nightMode ? R.style.OsmandDarkTheme : R.style.OsmandLightTheme;
+ Context themedContext = new ContextThemeWrapper(getContext(), themeRes);
+ View view = inflater.cloneInContext(themedContext).inflate(R.layout.profiles_list_fragment, container, false);
+
+ AppBarLayout appBar = (AppBarLayout) view.findViewById(R.id.appbar);
+ if (!(getActivity() instanceof SettingsProfileActivity)) {
+ AndroidUtils.addStatusBarPadding21v(getContext(), view);
+ ViewCompat.setElevation(appBar, 5.0f);
+
+ TextView toolbarTitle = (TextView) view.findViewById(R.id.toolbar_title);
+ toolbarTitle.setText(R.string.application_profiles);
+
+ View closeButton = view.findViewById(R.id.close_button);
+ closeButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ MapActivity mapActivity = (MapActivity) getActivity();
+ if (mapActivity != null) {
+ mapActivity.onBackPressed();
+ }
+ }
+ });
+ } else {
+ AndroidUiHelper.updateVisibility(appBar, false);
+ }
+
+ RecyclerView recyclerView = view.findViewById(R.id.profiles_list);
+ LinearLayout addNewProfileBtn = view.findViewById(R.id.add_profile_btn);
addNewProfileBtn.setOnClickListener(new OnClickListener() {
@@ -102,16 +140,32 @@ public class SettingsProfileFragment extends BaseOsmAndFragment
adapter.updateItemsList(allAppModes, new LinkedHashSet<>(ApplicationMode.values(getMyApplication())));
}
+ @Override
+ public int getStatusBarColorId() {
+ return nightMode ? R.color.status_bar_color_dark : R.color.status_bar_color_light;
+ }
+
SelectProfileListener getBaseProfileListener() {
if (typeListener == null) {
typeListener = new SelectProfileListener() {
@Override
public void onSelectedType(int pos, String stringRes) {
- Intent intent = new Intent(getActivity(), EditProfileActivity.class);
- intent.putExtra(IS_NEW_PROFILE, true);
- intent.putExtra(IS_USER_PROFILE, true);
- intent.putExtra(PROFILE_STRING_KEY, baseProfiles.get(pos).getStringKey());
- startActivity(intent);
+ FragmentActivity activity = getActivity();
+ if (activity != null) {
+ if (activity instanceof SettingsProfileActivity) {
+ Intent intent = new Intent(getActivity(), EditProfileActivity.class);
+ intent.putExtra(IS_NEW_PROFILE, true);
+ intent.putExtra(IS_USER_PROFILE, true);
+ intent.putExtra(PROFILE_STRING_KEY, baseProfiles.get(pos).getStringKey());
+ activity.startActivity(intent);
+ } else {
+ FragmentManager fragmentManager = activity.getSupportFragmentManager();
+ if (fragmentManager != null) {
+ String profileKey = baseProfiles.get(pos).getStringKey();
+ EditProfileFragment.showInstance(fragmentManager, true, true, profileKey);
+ }
+ }
+ }
}
};
}
@@ -131,17 +185,28 @@ public class SettingsProfileFragment extends BaseOsmAndFragment
@Override
public void onProfilePressed(ApplicationMode item) {
- Intent intent = new Intent(getActivity(), EditProfileActivity.class);
- intent.putExtra(PROFILE_STRING_KEY, item.getStringKey());
- if (item.isCustomProfile()) {
- intent.putExtra(IS_USER_PROFILE, true);
+ FragmentActivity activity = getActivity();
+ if (activity != null) {
+ if (activity instanceof SettingsProfileActivity) {
+ Intent intent = new Intent(getActivity(), EditProfileActivity.class);
+ intent.putExtra(PROFILE_STRING_KEY, item.getStringKey());
+ if (item.isCustomProfile()) {
+ intent.putExtra(IS_USER_PROFILE, true);
+ }
+ activity.startActivity(intent);
+ } else {
+ FragmentManager fragmentManager = activity.getSupportFragmentManager();
+ if (fragmentManager != null) {
+ String profileKey = item.getStringKey();
+ EditProfileFragment.showInstance(fragmentManager, false, item.isCustomProfile(), profileKey);
+ }
+ }
}
- startActivity(intent);
}
@Override
public void onProfileSelected(ApplicationMode item, boolean isChecked) {
- if(isChecked) {
+ if (isChecked) {
availableAppModes.add(item);
} else {
availableAppModes.remove(item);
diff --git a/OsmAnd/src/net/osmand/plus/settings/ConfigureProfileFragment.java b/OsmAnd/src/net/osmand/plus/settings/ConfigureProfileFragment.java
index 7548cba381..41f9bdd7f7 100644
--- a/OsmAnd/src/net/osmand/plus/settings/ConfigureProfileFragment.java
+++ b/OsmAnd/src/net/osmand/plus/settings/ConfigureProfileFragment.java
@@ -43,6 +43,7 @@ import java.util.List;
import static net.osmand.plus.profiles.EditProfileFragment.MAP_CONFIG;
import static net.osmand.plus.profiles.EditProfileFragment.OPEN_CONFIG_ON_MAP;
+import static net.osmand.plus.profiles.EditProfileFragment.SCREEN_CONFIG;
import static net.osmand.plus.profiles.EditProfileFragment.SELECTED_ITEM;
public class ConfigureProfileFragment extends BaseSettingsFragment {
@@ -53,6 +54,7 @@ public class ConfigureProfileFragment extends BaseSettingsFragment {
private static final String PLUGIN_SETTINGS = "plugin_settings";
private static final String CONFIGURE_MAP = "configure_map";
+ private static final String CONFIGURE_SCREEN = "configure_screen";
@Override
protected String getFragmentTag() {
@@ -181,6 +183,7 @@ public class ConfigureProfileFragment extends BaseSettingsFragment {
setupNavigationSettingsPref();
setupConfigureMapPref();
+ setupConfigureScreenPref();
PreferenceCategory pluginSettings = (PreferenceCategory) findPreference(PLUGIN_SETTINGS);
pluginSettings.setIconSpaceReserved(false);
@@ -209,6 +212,20 @@ public class ConfigureProfileFragment extends BaseSettingsFragment {
configureMap.setIntent(intent);
}
+ private void setupConfigureScreenPref() {
+ Context ctx = getContext();
+ if (ctx == null) {
+ return;
+ }
+ Preference configureMap = findPreference(CONFIGURE_SCREEN);
+ configureMap.setIcon(getContentIcon(R.drawable.ic_configure_screen_dark));
+
+ Intent intent = new Intent(ctx, MapActivity.class);
+ intent.putExtra(OPEN_CONFIG_ON_MAP, SCREEN_CONFIG);
+ intent.putExtra(SELECTED_ITEM, getSelectedAppMode().getStringKey());
+ configureMap.setIntent(intent);
+ }
+
private void setupConnectedAppsPref(PreferenceCategory preferenceCategory) {
OsmandApplication app = getMyApplication();
if (app == null) {
@@ -267,7 +284,9 @@ public class ConfigureProfileFragment extends BaseSettingsFragment {
@Override
public boolean onPreferenceClick(Preference preference) {
- if (CONFIGURE_MAP.equals(preference.getKey())) {
+ String prefId = preference.getKey();
+
+ if (CONFIGURE_MAP.equals(prefId) || CONFIGURE_SCREEN.equals(prefId)) {
FragmentActivity activity = getActivity();
if (activity != null) {
try {
@@ -297,7 +316,6 @@ public class ConfigureProfileFragment extends BaseSettingsFragment {
if ((plugin.isActive() || !plugin.needsInstallation())) {
if (OsmandPlugin.enablePlugin(getActivity(), app, plugin, (Boolean) newValue)) {
preference.setIcon(getPluginIcon(plugin));
- updatePreference(preference);
return true;
}
} else if (plugin.needsInstallation() && preference.getIntent() != null) {
diff --git a/OsmAnd/src/net/osmand/plus/settings/MainSettingsFragment.java b/OsmAnd/src/net/osmand/plus/settings/MainSettingsFragment.java
index d5fa61c920..f9ae23d45d 100644
--- a/OsmAnd/src/net/osmand/plus/settings/MainSettingsFragment.java
+++ b/OsmAnd/src/net/osmand/plus/settings/MainSettingsFragment.java
@@ -1,6 +1,5 @@
package net.osmand.plus.settings;
-import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.os.Build;
@@ -14,7 +13,7 @@ import net.osmand.AndroidUtils;
import net.osmand.plus.ApplicationMode;
import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;
-import net.osmand.plus.profiles.SettingsProfileActivity;
+import net.osmand.plus.profiles.SettingsProfileFragment;
public class MainSettingsFragment extends BaseSettingsFragment {
@@ -89,7 +88,7 @@ public class MainSettingsFragment extends BaseSettingsFragment {
private void setupManageProfilesPref() {
Preference manageProfiles = findPreference("manage_profiles");
manageProfiles.setIcon(getIcon(R.drawable.ic_action_manage_profiles));
- manageProfiles.setIntent(new Intent(getActivity(), SettingsProfileActivity.class));
+ manageProfiles.setFragment(SettingsProfileFragment.class.getName());
}
private void setupConfigureProfilePref() {
@@ -111,7 +110,8 @@ public class MainSettingsFragment extends BaseSettingsFragment {
fragmentManager.beginTransaction()
.replace(R.id.fragmentContainer, MainSettingsFragment, TAG)
.addToBackStack(TAG)
- .commitAllowingStateLoss();
+ .commit();
+
return true;
} catch (Exception e) {
return false;