[android] Added TabletUI support for discovery

This commit is contained in:
Александр Зацепин 2017-12-07 20:28:26 +03:00 committed by Ilya Grechuhin
parent 4d36f59ed6
commit c3a5eaacbc
5 changed files with 167 additions and 75 deletions

View file

@ -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"

View file

@ -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

View file

@ -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();
}
}

View file

@ -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);
}
}

View file

@ -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);
}
}