forked from organicmaps/organicmaps
[android] Added TabletUI support for discovery
This commit is contained in:
parent
4d36f59ed6
commit
c3a5eaacbc
5 changed files with 167 additions and 75 deletions
android
res/layout
src/com/mapswithme/maps
|
@ -15,7 +15,7 @@
|
|||
android:id="@+id/tv__title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/margin_half_plus"
|
||||
android:layout_marginTop="@dimen/margin_double_plus"
|
||||
android:layout_marginLeft="@dimen/margin_half_plus"
|
||||
android:layout_marginRight="@dimen/margin_half_plus"
|
||||
android:textAppearance="@style/MwmTextAppearance.Body3.Primary"
|
||||
|
|
|
@ -45,6 +45,7 @@ import com.mapswithme.maps.bookmarks.data.BookmarkManager;
|
|||
import com.mapswithme.maps.bookmarks.data.FeatureId;
|
||||
import com.mapswithme.maps.bookmarks.data.MapObject;
|
||||
import com.mapswithme.maps.discovery.DiscoveryActivity;
|
||||
import com.mapswithme.maps.discovery.DiscoveryFragment;
|
||||
import com.mapswithme.maps.downloader.DownloaderActivity;
|
||||
import com.mapswithme.maps.downloader.DownloaderFragment;
|
||||
import com.mapswithme.maps.downloader.MapManager;
|
||||
|
@ -125,7 +126,8 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
|||
NavigationButtonsAnimationController.OnTranslationChangedListener,
|
||||
RoutingPlanInplaceController.RoutingPlanListener,
|
||||
RoutingBottomMenuListener,
|
||||
BookmarkManager.BookmarksLoadingListener
|
||||
BookmarkManager.BookmarksLoadingListener,
|
||||
DiscoveryFragment.DiscoveryListener
|
||||
{
|
||||
public static final String EXTRA_TASK = "map_task";
|
||||
public static final String EXTRA_LAUNCH_BY_DEEP_LINK = "launch_by_deep_link";
|
||||
|
@ -137,7 +139,8 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
|||
MigrationFragment.class.getName(),
|
||||
RoutingPlanFragment.class.getName(),
|
||||
EditorHostFragment.class.getName(),
|
||||
ReportFragment.class.getName() };
|
||||
ReportFragment.class.getName(),
|
||||
DiscoveryFragment.class.getName() };
|
||||
// Instance state
|
||||
private static final String STATE_PP = "PpState";
|
||||
private static final String STATE_MAP_OBJECT = "MapObject";
|
||||
|
@ -848,8 +851,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
|||
break;
|
||||
|
||||
case DISCOVERY:
|
||||
Intent i = new Intent(MwmActivity.this, DiscoveryActivity.class);
|
||||
startActivityForResult(i, REQ_CODE_DISCOVERY);
|
||||
showDiscovery();
|
||||
break;
|
||||
|
||||
case BOOKMARKS:
|
||||
|
@ -911,6 +913,19 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
|||
mPlacePage.setLeftAnimationTrackListener(mMainMenu.getLeftAnimationTrackListener());
|
||||
}
|
||||
|
||||
private void showDiscovery()
|
||||
{
|
||||
if (mIsFragmentContainer)
|
||||
{
|
||||
replaceFragment(DiscoveryFragment.class, null, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
Intent i = new Intent(MwmActivity.this, DiscoveryActivity.class);
|
||||
startActivityForResult(i, REQ_CODE_DISCOVERY);
|
||||
}
|
||||
}
|
||||
|
||||
private void initOnmapDownloader()
|
||||
{
|
||||
mOnmapDownloader = new OnmapDownloader(this);
|
||||
|
@ -1057,33 +1072,39 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
|||
if (TextUtils.isEmpty(action))
|
||||
return;
|
||||
|
||||
MapTask task;
|
||||
if (action.equals(DiscoveryActivity.ACTION_ROUTE_TO))
|
||||
{
|
||||
task = new MapTask()
|
||||
{
|
||||
@Override
|
||||
public boolean run(MwmActivity target)
|
||||
{
|
||||
RoutingController.get().setRouterType(Framework.ROUTER_TYPE_PEDESTRIAN);
|
||||
RoutingController.get().prepare(true, destination);
|
||||
return false;
|
||||
}
|
||||
};
|
||||
}
|
||||
onRouteToDiscoveredObject(destination);
|
||||
else
|
||||
onShowDiscoveredObject(destination);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRouteToDiscoveredObject(@NonNull final MapObject object)
|
||||
{
|
||||
addTask(new MapTask()
|
||||
{
|
||||
task = new MapTask()
|
||||
@Override
|
||||
public boolean run(MwmActivity target)
|
||||
{
|
||||
@Override
|
||||
public boolean run(MwmActivity target)
|
||||
{
|
||||
Framework.nativeShowFeatureByLatLon(destination.getLat(), destination.getLon());
|
||||
return false;
|
||||
}
|
||||
};
|
||||
}
|
||||
addTask(task);
|
||||
RoutingController.get().setRouterType(Framework.ROUTER_TYPE_PEDESTRIAN);
|
||||
RoutingController.get().prepare(true, object);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onShowDiscoveredObject(@NonNull final MapObject object)
|
||||
{
|
||||
addTask(new MapTask()
|
||||
{
|
||||
@Override
|
||||
public boolean run(MwmActivity target)
|
||||
{
|
||||
Framework.nativeShowFeatureByLatLon(object.getLat(), object.getLon());
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,10 +1,16 @@
|
|||
package com.mapswithme.maps.discovery;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.Fragment;
|
||||
|
||||
import com.mapswithme.maps.activity.CustomNavigateUpListener;
|
||||
import com.mapswithme.maps.base.BaseMwmFragmentActivity;
|
||||
import com.mapswithme.maps.bookmarks.data.MapObject;
|
||||
|
||||
public class DiscoveryActivity extends BaseMwmFragmentActivity
|
||||
implements CustomNavigateUpListener, DiscoveryFragment.DiscoveryListener
|
||||
{
|
||||
public static final String EXTRA_DISCOVERY_OBJECT = "extra_discovery_object";
|
||||
public static final String ACTION_ROUTE_TO = "action_route_to";
|
||||
|
@ -15,4 +21,31 @@ public class DiscoveryActivity extends BaseMwmFragmentActivity
|
|||
{
|
||||
return DiscoveryFragment.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void customOnNavigateUp()
|
||||
{
|
||||
finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRouteToDiscoveredObject(@NonNull MapObject object)
|
||||
{
|
||||
Intent intent = new Intent(ACTION_ROUTE_TO);
|
||||
setResult(object, intent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onShowDiscoveredObject(@NonNull MapObject object)
|
||||
{
|
||||
Intent intent = new Intent(ACTION_SHOW_ON_MAP);
|
||||
setResult(object, intent);
|
||||
}
|
||||
|
||||
private void setResult(@NonNull MapObject object, @NonNull Intent intent)
|
||||
{
|
||||
intent.putExtra(DiscoveryActivity.EXTRA_DISCOVERY_OBJECT, object);
|
||||
setResult(Activity.RESULT_OK, intent);
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,6 @@ package com.mapswithme.maps.discovery;
|
|||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.IdRes;
|
||||
import android.support.annotation.MainThread;
|
||||
|
@ -16,6 +15,7 @@ import android.view.View;
|
|||
import android.view.ViewGroup;
|
||||
|
||||
import com.mapswithme.maps.R;
|
||||
import com.mapswithme.maps.activity.CustomNavigateUpListener;
|
||||
import com.mapswithme.maps.base.BaseMwmToolbarFragment;
|
||||
import com.mapswithme.maps.bookmarks.data.FeatureId;
|
||||
import com.mapswithme.maps.bookmarks.data.MapObject;
|
||||
|
@ -26,6 +26,7 @@ import com.mapswithme.maps.gallery.impl.Factory;
|
|||
import com.mapswithme.maps.search.SearchResult;
|
||||
import com.mapswithme.maps.viator.ViatorProduct;
|
||||
import com.mapswithme.maps.widget.PlaceholderView;
|
||||
import com.mapswithme.maps.widget.ToolbarController;
|
||||
import com.mapswithme.maps.widget.recycler.ItemDecoratorFactory;
|
||||
import com.mapswithme.util.ConnectionState;
|
||||
import com.mapswithme.util.Language;
|
||||
|
@ -43,6 +44,30 @@ public class DiscoveryFragment extends BaseMwmToolbarFragment implements UICallb
|
|||
@Nullable
|
||||
private BaseItemSelectedListener<Items.Item> mDefaultListener;
|
||||
private boolean mOnlineMode;
|
||||
@Nullable
|
||||
private CustomNavigateUpListener mNavigateUpListener;
|
||||
@Nullable
|
||||
private DiscoveryListener mDiscoveryListener;
|
||||
|
||||
@Override
|
||||
public void onAttach(Context context)
|
||||
{
|
||||
super.onAttach(context);
|
||||
|
||||
if (context instanceof CustomNavigateUpListener)
|
||||
mNavigateUpListener = (CustomNavigateUpListener) context;
|
||||
|
||||
if (context instanceof DiscoveryListener)
|
||||
mDiscoveryListener = (DiscoveryListener) context;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDetach()
|
||||
{
|
||||
super.onDetach();
|
||||
mNavigateUpListener = null;
|
||||
mDiscoveryListener = null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
|
@ -204,7 +229,7 @@ public class DiscoveryFragment extends BaseMwmToolbarFragment implements UICallb
|
|||
public void onAttractionsReceived(@NonNull SearchResult[] results)
|
||||
{
|
||||
updateViewsVisibility(results, R.id.attractionsTitle, R.id.attractions);
|
||||
ItemSelectedListener<Items.SearchItem> listener = new SearchBasedListener(getActivity());
|
||||
ItemSelectedListener<Items.SearchItem> listener = new SearchBasedListener(this);
|
||||
getGallery(R.id.attractions).setAdapter(Factory.createSearchBasedAdapter(results, listener));
|
||||
}
|
||||
|
||||
|
@ -213,7 +238,7 @@ public class DiscoveryFragment extends BaseMwmToolbarFragment implements UICallb
|
|||
public void onCafesReceived(@NonNull SearchResult[] results)
|
||||
{
|
||||
updateViewsVisibility(results, R.id.eatAndDrinkTitle, R.id.food);
|
||||
ItemSelectedListener<Items.SearchItem> listener = new SearchBasedListener(getActivity());
|
||||
ItemSelectedListener<Items.SearchItem> listener = new SearchBasedListener(this);
|
||||
getGallery(R.id.food).setAdapter(Factory.createSearchBasedAdapter(results, listener));
|
||||
}
|
||||
|
||||
|
@ -288,6 +313,45 @@ public class DiscoveryFragment extends BaseMwmToolbarFragment implements UICallb
|
|||
return view;
|
||||
}
|
||||
|
||||
private void routeTo(@NonNull Items.SearchItem item)
|
||||
{
|
||||
if (mDiscoveryListener == null)
|
||||
return;
|
||||
|
||||
mDiscoveryListener.onRouteToDiscoveredObject(createMapObject(item));
|
||||
}
|
||||
|
||||
private void showOnMap(@NonNull Items.SearchItem item)
|
||||
{
|
||||
if (mDiscoveryListener != null)
|
||||
mDiscoveryListener.onShowDiscoveredObject(createMapObject(item));
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private static MapObject createMapObject(@NonNull Items.SearchItem item)
|
||||
{
|
||||
String title = TextUtils.isEmpty(item.getTitle()) ? "" : item.getTitle();
|
||||
String subtitle = TextUtils.isEmpty(item.getSubtitle()) ? "" : item.getSubtitle();
|
||||
return MapObject.createMapObject(FeatureId.EMPTY, MapObject.SEARCH, title, subtitle,
|
||||
item.getLat(), item.getLon());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ToolbarController onCreateToolbarController(@NonNull View root)
|
||||
{
|
||||
return new ToolbarController(getRootView(), getActivity())
|
||||
{
|
||||
@Override
|
||||
public void onUpClick()
|
||||
{
|
||||
if (mNavigateUpListener == null)
|
||||
return;
|
||||
|
||||
mNavigateUpListener.customOnNavigateUp();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private static class ViatorOfflineSelectedListener extends BaseItemSelectedListener<Items.Item>
|
||||
{
|
||||
private ViatorOfflineSelectedListener(@NonNull Activity context)
|
||||
|
@ -304,41 +368,30 @@ public class DiscoveryFragment extends BaseMwmToolbarFragment implements UICallb
|
|||
|
||||
private static class SearchBasedListener extends BaseItemSelectedListener<Items.SearchItem>
|
||||
{
|
||||
private SearchBasedListener(@NonNull Activity context)
|
||||
{
|
||||
super(context);
|
||||
@NonNull
|
||||
private final DiscoveryFragment mFragment;
|
||||
|
||||
private SearchBasedListener(@NonNull DiscoveryFragment fragment)
|
||||
{
|
||||
super(fragment.getActivity());
|
||||
mFragment = fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemSelected(@NonNull Items.SearchItem item)
|
||||
{
|
||||
Intent intent = new Intent(DiscoveryActivity.ACTION_SHOW_ON_MAP);
|
||||
setResult(item, intent);
|
||||
mFragment.showOnMap(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActionButtonSelected(@NonNull Items.SearchItem item)
|
||||
{
|
||||
Intent intent = new Intent(DiscoveryActivity.ACTION_ROUTE_TO);
|
||||
setResult(item, intent);
|
||||
}
|
||||
|
||||
private void setResult(@NonNull Items.SearchItem item, @NonNull Intent intent)
|
||||
{
|
||||
MapObject poi = createMapObject(item);
|
||||
intent.putExtra(DiscoveryActivity.EXTRA_DISCOVERY_OBJECT, poi);
|
||||
getContext().setResult(Activity.RESULT_OK, intent);
|
||||
getContext().finish();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private static MapObject createMapObject(@NonNull Items.SearchItem item)
|
||||
{
|
||||
String title = TextUtils.isEmpty(item.getTitle()) ? "" : item.getTitle();
|
||||
String subtitle = TextUtils.isEmpty(item.getSubtitle()) ? "" : item.getSubtitle();
|
||||
return MapObject.createMapObject(FeatureId.EMPTY, MapObject.SEARCH, title, subtitle,
|
||||
item.getLat(), item.getLon());
|
||||
mFragment.routeTo(item);
|
||||
}
|
||||
}
|
||||
|
||||
public interface DiscoveryListener {
|
||||
void onRouteToDiscoveredObject(@NonNull MapObject object);
|
||||
void onShowDiscoveredObject(@NonNull MapObject object);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -75,16 +75,6 @@ public class Holders
|
|||
Impress impress = Impress.values()[UGC.nativeToImpress(rating)];
|
||||
mRating.setRating(impress, String.valueOf(rating));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onItemSelected(@NonNull ViatorItem item)
|
||||
{
|
||||
ItemSelectedListener<ViatorItem> listener = mAdapter.getListener();
|
||||
if (listener == null || TextUtils.isEmpty(item.getUrl()))
|
||||
return;
|
||||
|
||||
listener.onItemSelected(item);
|
||||
}
|
||||
}
|
||||
|
||||
public static final class ViatorMoreItemViewHolder extends BaseViewHolder<Items.ViatorItem>
|
||||
|
@ -210,16 +200,6 @@ public class Holders
|
|||
Impress impress = Impress.values()[UGC.nativeToImpress(rating)];
|
||||
mRating.setRating(impress, UGC.nativeFormatRating(rating));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onItemSelected(@NonNull Items.LocalExpertItem item)
|
||||
{
|
||||
ItemSelectedListener<Items.LocalExpertItem> listener = mAdapter.getListener();
|
||||
if (listener == null || TextUtils.isEmpty(item.getUrl()))
|
||||
return;
|
||||
|
||||
listener.onItemSelected(item);
|
||||
}
|
||||
}
|
||||
|
||||
public static class LocalExpertMoreItemViewHolder extends BaseViewHolder<Items.LocalExpertItem>
|
||||
|
@ -335,6 +315,11 @@ public class Holders
|
|||
|
||||
protected void onItemSelected(@NonNull I item)
|
||||
{
|
||||
ItemSelectedListener<I> listener = mAdapter.getListener();
|
||||
if (listener == null || TextUtils.isEmpty(item.getUrl()))
|
||||
return;
|
||||
|
||||
listener.onItemSelected(item);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue