diff --git a/OsmAnd/res/values-ca/phrases.xml b/OsmAnd/res/values-ca/phrases.xml index 4709ede905..a4e4194f56 100644 --- a/OsmAnd/res/values-ca/phrases.xml +++ b/OsmAnd/res/values-ca/phrases.xml @@ -1720,4 +1720,17 @@ Només dieta per celíacs Dieta per celíacs Dieta per celíacs:no + S\'accepten targes IC Stored Fare + No s\'accepten targes IC Stored Fare + Només dieta kosher + Dieta kosher + Dieta kosher: no + Només dieta halal + Dieta halal + Dieta halal: no + Només dieta sense lactosa + Dieta sense lactosa + Dieta sense lactosa: no + + diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index 4e1fe7fff6..372f1582a1 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -559,7 +559,7 @@ Обновить часть карты Укажите имя пользователя (требуется для работы с OSM) Имя пользователя - Точка + Цель Использовать английские названия вместо местных Использовать английские названия Настройки приложения diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java index 3b30f06ee4..c86e8c2ebc 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java @@ -88,6 +88,7 @@ import net.osmand.util.Algorithms; import org.apache.commons.logging.Log; import java.io.File; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; @@ -1043,9 +1044,9 @@ public class MapActivity extends AccessibleActivity implements DownloadEvents { // DownloadEvents @Override public void newDownloadIndexes() { - MapContextMenuFragment contextMenuFragment = getContextMenu().findMenuFragment(); - if (contextMenuFragment != null) { - contextMenuFragment.newDownloadIndexes(); + WeakReference fragmentRef = getContextMenu().findMenuFragment(); + if (fragmentRef != null) { + fragmentRef.get().newDownloadIndexes(); } if (getMapLayers().getDownloadedRegionsLayer().updateObjects()) { refreshMap(); @@ -1054,9 +1055,9 @@ public class MapActivity extends AccessibleActivity implements DownloadEvents { @Override public void downloadInProgress() { - MapContextMenuFragment contextMenuFragment = getContextMenu().findMenuFragment(); - if (contextMenuFragment != null) { - contextMenuFragment.downloadInProgress(); + WeakReference fragmentRef = getContextMenu().findMenuFragment(); + if (fragmentRef != null) { + fragmentRef.get().downloadInProgress(); } if (getMapLayers().getDownloadedRegionsLayer().updateObjects()) { refreshMap(); @@ -1065,9 +1066,9 @@ public class MapActivity extends AccessibleActivity implements DownloadEvents { @Override public void downloadHasFinished() { - MapContextMenuFragment contextMenuFragment = getContextMenu().findMenuFragment(); - if (contextMenuFragment != null) { - contextMenuFragment.downloadHasFinished(); + WeakReference fragmentRef = getContextMenu().findMenuFragment(); + if (fragmentRef != null) { + fragmentRef.get().downloadHasFinished(); } if (getMapLayers().getDownloadedRegionsLayer().updateObjects()) { refreshMap(); diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java index 7114b0f400..c3970f488e 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java @@ -17,6 +17,8 @@ import net.osmand.plus.views.ContextMenuLayer; import net.osmand.plus.views.OsmandMapLayer; import net.osmand.util.MapUtils; +import java.lang.ref.WeakReference; + public class MapContextMenu extends MenuTitleController { private MapActivity mapActivity; @@ -74,6 +76,13 @@ public class MapContextMenu extends MenuTitleController { this.mapCenter = mapCenter; } + public void updateMapCenter(LatLon mapCenter) { + WeakReference fragmentRef = findMenuFragment(); + if (fragmentRef != null) { + fragmentRef.get().updateMapCenter(mapCenter); + } + } + public void setMapPosition(int mapPosition) { this.mapPosition = mapPosition; } @@ -131,10 +140,13 @@ public class MapContextMenu extends MenuTitleController { active = true; - acquireMenuController(); + if (menuController == null || !update) { + acquireMenuController(); + } initTitle(); if (menuController != null) { + menuController.clearPlainMenuItems(); menuController.addPlainMenuItems(typeStr, this.pointDescription, this.latLon); } @@ -160,10 +172,10 @@ public class MapContextMenu extends MenuTitleController { } public void update(LatLon latLon, PointDescription pointDescription, Object object) { - MapContextMenuFragment fragment = findMenuFragment(); - if (fragment != null) { - init(latLon, pointDescription, object, true); - fragment.rebuildMenu(); + WeakReference fragmentRef = findMenuFragment(); + init(latLon, pointDescription, object, true); + if (fragmentRef != null) { + fragmentRef.get().rebuildMenu(); } } @@ -189,9 +201,16 @@ public class MapContextMenu extends MenuTitleController { mapActivity.getMapView().setMapPosition(mapPosition); mapPosition = 0; } - MapContextMenuFragment fragment = findMenuFragment(); - if (fragment != null) { - fragment.dismissMenu(); + WeakReference fragmentRef = findMenuFragment(); + if (fragmentRef != null) { + fragmentRef.get().dismissMenu(); + } + } + + public void updateMenuUI() { + WeakReference fragmentRef = findMenuFragment(); + if (fragmentRef != null) { + fragmentRef.get().updateMenu(); } } @@ -237,15 +256,15 @@ public class MapContextMenu extends MenuTitleController { @Override public void refreshMenuTitle() { - MapContextMenuFragment fragment = findMenuFragment(); - if (fragment != null) - fragment.refreshTitle(); + WeakReference fragmentRef = findMenuFragment(); + if (fragmentRef != null) + fragmentRef.get().refreshTitle(); } - public MapContextMenuFragment findMenuFragment() { + public WeakReference findMenuFragment() { Fragment fragment = mapActivity.getSupportFragmentManager().findFragmentByTag(MapContextMenuFragment.TAG); - if (fragment != null) { - return (MapContextMenuFragment) fragment; + if (fragment != null && !fragment.isDetached()) { + return new WeakReference<>((MapContextMenuFragment) fragment); } else { return null; } @@ -308,9 +327,9 @@ public class MapContextMenu extends MenuTitleController { } public void setBaseFragmentVisibility(boolean visible) { - MapContextMenuFragment menuFragment = findMenuFragment(); - if (menuFragment != null) { - menuFragment.setFragmentVisibility(visible); + WeakReference fragmentRef = findMenuFragment(); + if (fragmentRef != null) { + fragmentRef.get().setFragmentVisibility(visible); } } @@ -459,9 +478,9 @@ public class MapContextMenu extends MenuTitleController { @Override public void run() { inLocationUpdate = false; - MapContextMenuFragment menuFragment = findMenuFragment(); - if (menuFragment != null) { - menuFragment.updateLocation(centerChanged, locationChanged, compassChanged); + WeakReference fragmentRef = findMenuFragment(); + if (fragmentRef != null) { + fragmentRef.get().updateLocation(centerChanged, locationChanged, compassChanged); } } }); diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java index 8913882a0c..18bb4ab1c1 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java @@ -204,6 +204,7 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents { }); } + menu.updateData(); updateButtonsAndProgress(); if (menu.isLandscapeLayout()) { @@ -440,6 +441,15 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents { return view; } + public void updateMapCenter(LatLon mapCenter) { + customMapCenter = true; + menu.setMapCenter(mapCenter); + this.mapCenter = mapCenter; + RotatedTileBox box = map.getCurrentRotatedTileBox().copy(); + origMarkerX = box.getCenterPixelX(); + origMarkerY = box.getCenterPixelY(); + } + private void updateButtonsAndProgress() { // Title buttons boolean showButtonsContainer = (leftTitleButtonController != null || rightTitleButtonController != null) @@ -592,6 +602,17 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents { @Override public void onGlobalLayout() { + ViewTreeObserver obs = view.getViewTreeObserver(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { + obs.removeOnGlobalLayoutListener(this); + } else { + obs.removeGlobalOnLayoutListener(this); + } + + if (getActivity() == null) { + return; + } + int newMenuTopViewHeight = view.findViewById(R.id.context_menu_top_view).getHeight(); menuTopShadowHeight = view.findViewById(R.id.context_menu_top_shadow).getHeight(); menuTopShadowAllHeight = view.findViewById(R.id.context_menu_top_shadow_all).getHeight(); @@ -607,14 +628,6 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents { menuFullHeightMax = menuTitleHeight + (menuBottomViewHeight > 0 ? menuBottomViewHeight : -dpToPx(SHADOW_HEIGHT_BOTTOM_DP)); - ViewTreeObserver obs = view.getViewTreeObserver(); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { - obs.removeOnGlobalLayoutListener(this); - } else { - obs.removeGlobalOnLayoutListener(this); - } - if (origMarkerX == 0 && origMarkerY == 0) { origMarkerX = view.getWidth() / 2; origMarkerY = view.getHeight() / 2; @@ -887,6 +900,12 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents { } } + public void updateMenu() { + menu.updateData(); + updateButtonsAndProgress(); + runLayoutListener(); + } + private MapActivity getMapActivity() { return (MapActivity)getActivity(); } diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java index f163456f99..7b45f6688d 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java @@ -203,6 +203,10 @@ public class MenuBuilder { plainMenuItems.add(new PlainMenuItem(iconId, text, needLinks)); } + public void clearPlainMenuItems() { + plainMenuItems.clear(); + } + public Drawable getRowIcon(int iconId) { IconsCache iconsCache = app.getIconsCache(); boolean light = app.getSettings().isLightContent(); diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuController.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuController.java index ce3e77a304..7b047a5e7d 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuController.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuController.java @@ -113,6 +113,10 @@ public abstract class MenuController extends BaseMenuController { builder.addPlainMenuItem(iconId, text, needLinks); } + public void clearPlainMenuItems() { + builder.clearPlainMenuItems(); + } + public void addPlainMenuItems(String typeStr, PointDescription pointDescription, LatLon latLon) { addMyLocationToPlainItems(pointDescription, latLon); } diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/AudioVideoNoteMenuController.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/AudioVideoNoteMenuController.java index 0d6a5666d4..e07ec20ed5 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/AudioVideoNoteMenuController.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/AudioVideoNoteMenuController.java @@ -14,9 +14,12 @@ import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.audionotes.AudioVideoNotesPlugin; import net.osmand.plus.audionotes.AudioVideoNotesPlugin.Recording; +import net.osmand.plus.mapcontextmenu.MapContextMenuFragment; import net.osmand.plus.mapcontextmenu.MenuController; import net.osmand.plus.mapcontextmenu.builders.AudioVideoNoteMenuBuilder; +import java.lang.ref.WeakReference; + public class AudioVideoNoteMenuController extends MenuController { private Recording recording; @@ -111,7 +114,9 @@ public class AudioVideoNoteMenuController extends MenuController { sharingIntent.setType("video/*"); sharingIntent.putExtra(Intent.EXTRA_STREAM, videoUri); } - getMapActivity().getContextMenu().findMenuFragment() - .startActivity(Intent.createChooser(sharingIntent, getMapActivity().getString(R.string.share_note))); + WeakReference fragmentRef = getMapActivity().getContextMenu().findMenuFragment(); + if (fragmentRef != null) { + fragmentRef.get().startActivity(Intent.createChooser(sharingIntent, getMapActivity().getString(R.string.share_note))); + } } } diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/MapDataMenuController.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/MapDataMenuController.java index 8e50451a6d..5c55a18a07 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/MapDataMenuController.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/MapDataMenuController.java @@ -45,7 +45,6 @@ public class MapDataMenuController extends MenuController { this.region = osmandRegions.getRegionData(fullName); downloadThread = app.getDownloadThread(); - mapActivity.getSupportFragmentManager(); leftTitleButtonController = new TitleButtonController() { @Override public void buttonPressed() { diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/OsMoMenuController.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/OsMoMenuController.java index 84fd3cc5c6..4e7acd6532 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/OsMoMenuController.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/OsMoMenuController.java @@ -3,14 +3,20 @@ package net.osmand.plus.mapcontextmenu.controllers; import android.graphics.drawable.Drawable; import net.osmand.Location; +import net.osmand.data.LatLon; import net.osmand.data.PointDescription; import net.osmand.plus.OsmAndFormatter; import net.osmand.plus.OsmandApplication; +import net.osmand.plus.OsmandPlugin; import net.osmand.plus.R; +import net.osmand.plus.TargetPointsHelper; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.mapcontextmenu.MenuBuilder; import net.osmand.plus.mapcontextmenu.MenuController; +import net.osmand.plus.osmo.OsMoGroupsActivity; import net.osmand.plus.osmo.OsMoGroupsStorage.OsMoDevice; +import net.osmand.plus.osmo.OsMoPlugin; +import net.osmand.plus.osmo.OsMoPositionLayer; public class OsMoMenuController extends MenuController { @@ -19,6 +25,47 @@ public class OsMoMenuController extends MenuController { public OsMoMenuController(OsmandApplication app, MapActivity mapActivity, PointDescription pointDescription, final OsMoDevice device) { super(new MenuBuilder(app), pointDescription, mapActivity); this.device = device; + + leftTitleButtonController = new TitleButtonController() { + @Override + public void buttonPressed() { + if (OsMoPositionLayer.getFollowDestinationId() != null) { + OsMoPositionLayer.setFollowDestination(null); + } else { + if(device.getLastLocation() != null) { + TargetPointsHelper targets = getMapActivity().getMyApplication().getTargetPointsHelper(); + targets.navigateToPoint(new LatLon(device.getLastLocation().getLatitude(), device.getLastLocation().getLongitude()), true, -1); + } + OsMoPositionLayer.setFollowDestination(device); + } + getMapActivity().getContextMenu().updateMenuUI(); + } + }; + + rightTitleButtonController = new TitleButtonController() { + @Override + public void buttonPressed() { + OsMoPlugin osMoPlugin = OsmandPlugin.getEnabledPlugin(OsMoPlugin.class); + if (osMoPlugin != null) { + OsMoGroupsActivity.showSettingsDialog(getMapActivity(), osMoPlugin, device); + } + } + }; + rightTitleButtonController.caption = getMapActivity().getString(R.string.shared_string_settings); + rightTitleButtonController.leftIconId = R.drawable.ic_action_settings; + + updateData(); + } + + @Override + public void updateData() { + if (OsMoPositionLayer.getFollowDestinationId() != null) { + leftTitleButtonController.caption = getMapActivity().getString(R.string.shared_string_cancel); + leftTitleButtonController.leftIconId = R.drawable.ic_action_remove_dark; + } else { + leftTitleButtonController.caption = getMapActivity().getString(R.string.mark_point); + leftTitleButtonController.leftIconId = R.drawable.ic_action_flag_dark; + } } @Override diff --git a/OsmAnd/src/net/osmand/plus/osmo/DashOsMoFragment.java b/OsmAnd/src/net/osmand/plus/osmo/DashOsMoFragment.java index acdbd6977b..e2a13d8046 100644 --- a/OsmAnd/src/net/osmand/plus/osmo/DashOsMoFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmo/DashOsMoFragment.java @@ -1,7 +1,6 @@ package net.osmand.plus.osmo; import android.content.Intent; -import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Handler; import android.view.LayoutInflater; @@ -12,7 +11,6 @@ import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; -import android.widget.Toast; import net.osmand.Location; import net.osmand.data.LatLon; @@ -274,32 +272,15 @@ public class DashOsMoFragment extends DashLocationFragment implements OsMoGroups } private void setupDeviceViews(LinearLayout contentList, List devices) { - Drawable markerIcon = getMyApplication().getIconsCache().getContentIcon(R.drawable.ic_action_marker_dark); LayoutInflater inflater = getActivity().getLayoutInflater(); List distances = new ArrayList(); for (final OsMoGroupsStorage.OsMoDevice device : devices) { View v = inflater.inflate(R.layout.dash_osmo_item, null, false); v.findViewById(R.id.people_icon).setVisibility(View.GONE); v.findViewById(R.id.people_count).setVisibility(View.GONE); - final ImageButton showOnMap = (ImageButton) v.findViewById(R.id.show_on_map); - showOnMap.setImageDrawable(markerIcon); + v.findViewById(R.id.show_on_map).setVisibility(View.GONE); final String name = device.getVisibleName(); final Location loc = device.getLastLocation(); - showOnMap.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - - if (loc == null) { - Toast.makeText(getActivity(), R.string.osmo_device_not_found, Toast.LENGTH_SHORT).show(); - return; - } - getMyApplication().getSettings().setMapLocationToShow(loc.getLatitude(), - loc.getLongitude(), 15, - new PointDescription(PointDescription.POINT_TYPE_MARKER, name), - false, device); //$NON-NLS-1$ - MapActivity.launchMapActivityMoveToTop(getActivity()); - } - }); ImageView direction = (ImageView) v.findViewById(R.id.direction_icon); direction.setVisibility(View.VISIBLE); @@ -315,7 +296,6 @@ public class DashOsMoFragment extends DashLocationFragment implements OsMoGroups icon.setImageDrawable(getMyApplication().getIconsCache(). getPaintedContentIcon(R.drawable.ic_person, device.getColor())); } else { - showOnMap.setVisibility(View.GONE); icon.setImageDrawable(getMyApplication().getIconsCache(). getContentIcon(R.drawable.ic_person)); } @@ -324,7 +304,16 @@ public class DashOsMoFragment extends DashLocationFragment implements OsMoGroups v.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - launchOsMoGroupsActivity(); + if (loc == null || !device.isEnabled()) { + launchOsMoGroupsActivity(); + } else { + MapActivity.getSingleMapViewTrackingUtilities().setMapLinkedToLocation(false); + getMyApplication().getSettings().setMapLocationToShow(loc.getLatitude(), loc.getLongitude(), getMyApplication().getSettings().getLastKnownMapZoom(), + new PointDescription(PointDescription.POINT_TYPE_MARKER, device.getVisibleName()), false, + device); + OsMoPositionLayer.setFollowTrackerId(device, loc); + MapActivity.launchMapActivityMoveToTop(getActivity()); + } } }); contentList.addView(v); diff --git a/OsmAnd/src/net/osmand/plus/osmo/OsMoGroupsActivity.java b/OsmAnd/src/net/osmand/plus/osmo/OsMoGroupsActivity.java index 6c5c4ff7da..1149434878 100644 --- a/OsmAnd/src/net/osmand/plus/osmo/OsMoGroupsActivity.java +++ b/OsmAnd/src/net/osmand/plus/osmo/OsMoGroupsActivity.java @@ -111,12 +111,9 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements public static final int CREATE_GROUP = 3; protected static final int ON_OFF_ACTION_ID = 4; protected static final int SHARE_ID = 5; - protected static final int SHOW_ON_MAP_ID = 6; public static final int SHARE_SESSION = 7; public static final int GROUP_INFO = 8; protected static final int SETTINGS_ID = 9; - protected static final int SETTINGS_DEV_ID = 10; - protected static final int TRACK_DEV_ID = 11; protected static final int LOGIN_ID = 12; public static final int LIST_REFRESH_MSG_ID = OsmAndConstants.UI_HANDLER_SEARCH + 30; public static final long RECENT_THRESHOLD = 60000; @@ -184,11 +181,14 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements setOnChildClickListener(new ExpandableListView.OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { - OsMoDevice model = adapter.getChild(groupPosition, childPosition); - if (model != selectedObject) { - enterSelectionMode(model); - } else { - quitSelectionMode(); + OsMoDevice device = adapter.getChild(groupPosition, childPosition); + if (device != null) { + Location location = device.getLastLocation(); + if (location != null) { + showDeviceOnMap(device); + } else { + showSettingsDialog(OsMoGroupsActivity.this, osMoPlugin, device); + } } return true; } @@ -431,13 +431,30 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements osMoPlugin.getGroups().removeUiListener(this); osMoPlugin.setGroupsActivity(null); } - + + private void showDeviceOnMap(final Object o) { + if(!checkOperationIsNotRunning()) { + return; + } + OsMoDevice device = (OsMoDevice) (o instanceof OsMoDevice ? o : null); + if (device != null) { + Location location = device.getLastLocation(); + MapActivity.getSingleMapViewTrackingUtilities().setMapLinkedToLocation(false); + if (location != null) { + app.getSettings().setMapLocationToShow(location.getLatitude(), location.getLongitude(), app.getSettings().getLastKnownMapZoom(), + new PointDescription(PointDescription.POINT_TYPE_MARKER, device.getVisibleName()), false, + device); + } + OsMoPositionLayer.setFollowTrackerId(device, location); + MapActivity.launchMapActivityMoveToTop(OsMoGroupsActivity.this); + } + } + private void enterSelectionMode(final Object o) { if(!checkOperationIsNotRunning()) { return; } actionMode = startSupportActionMode(new ActionMode.Callback() { - private OsMoDevice device; private OsMoGroup group; private Menu menu; @@ -464,30 +481,8 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements getClearToolbar(false); } this.menu = menu; - device = (OsMoDevice) (o instanceof OsMoDevice ? o : null); group = (OsMoGroup) (o instanceof OsMoGroup ? o : null); MenuItem mi = null; - if (device != null) { -// mi = createActionModeMenuItem(actionMode, menu, ON_OFF_ACTION_ID, R.string.shared_string_ok, 0, -// MenuItemCompat.SHOW_AS_ACTION_ALWAYS); - mode.setTitle(device.getVisibleName()); - if (device.getLastLocation() != null) { - createActionModeMenuItem(actionMode, menu, SHOW_ON_MAP_ID, R.string.shared_string_show_on_map, - R.drawable.ic_action_marker_dark, MenuItemCompat.SHOW_AS_ACTION_ALWAYS); - MenuItem menuItem = createActionModeMenuItem(actionMode, menu, TRACK_DEV_ID, - R.string.osmo_set_moving_target, R.drawable.ic_action_flage_dark, -// // there is a bug in Android 4.2 layout -// device.getLastLocation() != null ? MenuItemCompat.SHOW_AS_ACTION_NEVER : - MenuItemCompat.SHOW_AS_ACTION_ALWAYS); - menuItem.setTitleCondensed(getString(R.string.osmo_follow)); - } - createActionModeMenuItem(actionMode, menu, SETTINGS_DEV_ID, R.string.shared_string_settings, - R.drawable.ic_action_settings, -// // there is a bug in Android 4.2 layout -// device.getLastLocation() != null ? MenuItemCompat.SHOW_AS_ACTION_NEVER : - MenuItemCompat.SHOW_AS_ACTION_ALWAYS); - - } if (group != null) { createActionModeMenuItem(actionMode, menu, SHARE_ID, R.string.shared_string_share, R.drawable.ic_action_gshare_dark, MenuItemCompat.SHOW_AS_ACTION_ALWAYS); @@ -505,7 +500,7 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements FrameLayout l = new FrameLayout(OsMoGroupsActivity.this); View view = inflater.inflate(R.layout.check_item_rel, l); final CompoundButton check = (CompoundButton) view.findViewById(R.id.check_item); - check.setChecked((device != null && device.isActive() && device.isEnabled()) || (group != null && group.isActive() && group.isEnabled())); + check.setChecked(group != null && group.isActive() && group.isEnabled()); check.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override @@ -534,17 +529,7 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { - if (item.getItemId() == TRACK_DEV_ID) { - if (device != null && device.getLastLocation() != null) { - TargetPointsHelper targets = getMyApplication().getTargetPointsHelper(); - targets.navigateToPoint(new LatLon(device.getLastLocation().getLatitude(), device - .getLastLocation().getLongitude()), true, -1); - OsMoPositionLayer.setFollowDestination(device); - MapActivity.launchMapActivityMoveToTop(OsMoGroupsActivity.this); - } - } else if (item.getItemId() == SETTINGS_DEV_ID) { - showSettingsDialog(device); - } else if (item.getItemId() == DELETE_ACTION_ID) { + if (item.getItemId() == DELETE_ACTION_ID) { Builder bld = new AlertDialog.Builder(OsMoGroupsActivity.this); String name = ((OsMoGroup) selectedObject).getVisibleName(OsMoGroupsActivity.this); bld.setTitle(getString(R.string.osmo_leave_confirmation_msg, name)); @@ -563,18 +548,6 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements showGroupInfo(group); } else if (item.getItemId() == SHARE_ID) { shareOsMoGroup(group.getVisibleName(app), group.getGroupId()); - } else if (item.getItemId() == SHOW_ON_MAP_ID) { - if (device != null) { - Location location = device.getLastLocation(); - MapActivity.getSingleMapViewTrackingUtilities().setMapLinkedToLocation(false); - if (location != null) { - app.getSettings().setMapLocationToShow(location.getLatitude(), location.getLongitude(), app.getSettings().getLastKnownMapZoom(), - new PointDescription(PointDescription.POINT_TYPE_MARKER, device.getVisibleName()), false, - device); - } - OsMoPositionLayer.setFollowTrackerId(device, location); - MapActivity.launchMapActivityMoveToTop(OsMoGroupsActivity.this); - } } else if (item.getItemId() == ON_OFF_ACTION_ID) { CompoundButton bt = ((CompoundButton) MenuItemCompat.getActionView(item).findViewById(R.id.check_item)); onOffAction(bt); @@ -596,7 +569,7 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements }); refreshList(); } - + private StringBuilder setFields(StringBuilder bld, int field, String value) { bld.append(getString(field)).append(": ").append(value).append("\n"); return bld; @@ -1294,14 +1267,10 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements } final OsMoDevice model = getChild(groupPosition, childPosition); row.setTag(model); - if(selectedObject == model) { - row.setBackgroundColor(getResources().getColor(R.color.row_selection_color)); + if (app.getSettings().isLightContent()) { + row.setBackgroundResource(R.drawable.expandable_list_item_background_light); } else { - if (app.getSettings().isLightContent()){ - row.setBackgroundResource(R.drawable.expandable_list_item_background_light); - } else { - row.setBackgroundResource(R.drawable.expandable_list_item_background_dark); - } + row.setBackgroundResource(R.drawable.expandable_list_item_background_dark); } TextView label = (TextView) row.findViewById(R.id.osmo_label); TextView labelTime = (TextView) row.findViewById(R.id.osmo_label_time); @@ -1432,14 +1401,14 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements } - private void showSettingsDialog(final OsMoDevice device) { - Builder bld = new AlertDialog.Builder(OsMoGroupsActivity.this); + public static void showSettingsDialog(Context ctx, final OsMoPlugin plugin, final OsMoDevice device) { + Builder bld = new AlertDialog.Builder(ctx); bld.setTitle(R.string.osmo_edit_device); - final LayoutInflater inflater = LayoutInflater.from(this); + final LayoutInflater inflater = LayoutInflater.from(ctx); View view = inflater.inflate(R.layout.osmo_edit_device, null); final EditText name = (EditText) view.findViewById(R.id.Name); if(device.getColor() == 0) { - osMoPlugin.getGroups().setDeviceProperties(device, device.getVisibleName(), + plugin.getGroups().setDeviceProperties(device, device.getVisibleName(), ColorDialogs.getRandomColor()); } int devColor = device.getColor(); @@ -1448,13 +1417,13 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements final Spinner colorSpinner = (Spinner) view.findViewById(R.id.ColorSpinner); final TIntArrayList list = new TIntArrayList(); - ColorDialogs.setupColorSpinner(this, devColor, colorSpinner, list); + ColorDialogs.setupColorSpinner(ctx, devColor, colorSpinner, list); bld.setPositiveButton(R.string .shared_string_yes, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - osMoPlugin.getGroups().setDeviceProperties(device, + plugin.getGroups().setDeviceProperties(device, name.getText().toString(), list.get(colorSpinner.getSelectedItemPosition())); } }); diff --git a/OsmAnd/src/net/osmand/plus/osmo/OsMoPlugin.java b/OsmAnd/src/net/osmand/plus/osmo/OsMoPlugin.java index 43557b8fe7..3e74131e4f 100644 --- a/OsmAnd/src/net/osmand/plus/osmo/OsMoPlugin.java +++ b/OsmAnd/src/net/osmand/plus/osmo/OsMoPlugin.java @@ -128,52 +128,6 @@ public class OsMoPlugin extends OsmandPlugin implements OsMoReactor { return "feature_articles/osmo-plugin.html"; } - @Override - public void registerMapContextMenuActions(final MapActivity mapActivity, final double latitude, final double longitude, - ContextMenuAdapter adapter, final Object selectedObj) { - if(selectedObj instanceof OsMoDevice) { - adapter.item(R.string.osmo_center_location).iconColor(R.drawable.ic_action_gloc_dark).listen(new OnContextMenuClick() { - - @Override - public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { - OsMoDevice o = (OsMoDevice) selectedObj; - Location loc = o.getLastLocation(); - double lat = loc == null ? latitude : loc.getLatitude(); - double lon = loc == null ? longitude : loc.getLongitude(); - mapActivity.getMapView().setLatLon(lat, lon); - MapActivity.getSingleMapViewTrackingUtilities().setMapLinkedToLocation(false); - OsMoPositionLayer.setFollowTrackerId(o, loc); - return true; - } - }).position(0).reg(); - if(OsMoPositionLayer.getFollowDestinationId() != null) { - adapter.item(R.string.osmo_cancel_moving_target).iconColor(R.drawable.ic_action_remove_dark).listen(new OnContextMenuClick() { - - @Override - public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { - OsMoPositionLayer.setFollowDestination(null); - return true; - } - - }).position(0).reg(); - } - adapter.item(R.string.osmo_set_moving_target).iconColor(R.drawable.ic_action_flag_dark).listen(new OnContextMenuClick() { - - @Override - public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { - OsMoDevice o = (OsMoDevice) selectedObj; - if(o.getLastLocation() != null) { - TargetPointsHelper targets = mapActivity.getMyApplication().getTargetPointsHelper(); - targets.navigateToPoint(new LatLon(o.getLastLocation().getLatitude(), o.getLastLocation().getLongitude()), true, -1); - } - OsMoPositionLayer.setFollowDestination(o); - return true; - } - }).position(1).reg(); - } - super.registerMapContextMenuActions(mapActivity, latitude, longitude, adapter, selectedObj); - } - @Override public void updateLayers(OsmandMapTileView mapView, MapActivity activity) { if(isActive()) { diff --git a/OsmAnd/src/net/osmand/plus/osmo/OsMoPositionLayer.java b/OsmAnd/src/net/osmand/plus/osmo/OsMoPositionLayer.java index 2b0cf6f233..bc0fb5f22e 100644 --- a/OsmAnd/src/net/osmand/plus/osmo/OsMoPositionLayer.java +++ b/OsmAnd/src/net/osmand/plus/osmo/OsMoPositionLayer.java @@ -376,9 +376,9 @@ public class OsMoPositionLayer extends OsmandMapLayer implements ContextMenuLaye if (sameObject) { Location l = device.getLastLocation(); if (centered) { - map.getContextMenu().setMapCenter(loc); + map.getContextMenu().updateMapCenter(loc); } - map.getContextMenu().showOrUpdate(new LatLon(l.getLatitude(), l.getLongitude()), + map.getContextMenu().update(new LatLon(l.getLatitude(), l.getLongitude()), getObjectName(device), device); } if (centered) {