PP fixes.

This commit is contained in:
Dmitry Yunitsky 2015-03-10 12:01:45 +03:00 committed by Alex Zolotarev
parent 688d87cc3f
commit c679e28130
6 changed files with 194 additions and 8 deletions

View file

@ -98,6 +98,10 @@ public class MWMActivity extends MWMFragmentActivity
private final static String EXTRA_COUNTRY_INDEX = "country_index";
// Need it for search
private static final String EXTRA_SEARCH_RES_SINGLE = "search_res_index";
// Instance state
private static final String STATE_ROUTE_FOLLOWED = "RouteFollowed";
private static final String STATE_PP_OPENED = "PpOpened";
private static final String STATE_MAP_OBJECT = "MapObject";
// Map tasks that we run AFTER rendering initialized
private final Stack<MapTask> mTasks = new Stack<>();
private BroadcastReceiver mExternalStorageReceiver;
@ -606,6 +610,7 @@ public class MWMActivity extends MWMFragmentActivity
getSupportFragmentManager().beginTransaction().
replace(R.id.map_fragment_container, mMapFragment, MapFragment.FRAGMENT_TAG).commit();
}
findViewById(R.id.map_fragment_container).setOnTouchListener(this);
}
private void setupToolbars()
@ -708,6 +713,40 @@ public class MWMActivity extends MWMFragmentActivity
super.onDestroy();
}
@Override
protected void onSaveInstanceState(Bundle outState)
{
if (mRlTurnByTurnBox.getVisibility() == View.VISIBLE)
outState.putBoolean(STATE_ROUTE_FOLLOWED, true);
else if (mPlacePage.getState() != State.HIDDEN)
{
outState.putBoolean(STATE_PP_OPENED, true);
outState.putParcelable(STATE_MAP_OBJECT, mPlacePage.getMapObject());
}
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState)
{
if (savedInstanceState.getBoolean(STATE_ROUTE_FOLLOWED))
{
if (Framework.nativeIsRoutingActive())
{
mRlTurnByTurnBox.setVisibility(View.VISIBLE);
mRlRoutingBox.setVisibility(View.GONE);
}
}
else if (savedInstanceState.getBoolean(STATE_PP_OPENED))
{
mPlacePage.setState(State.PREVIEW);
mPlacePage.setMapObject((MapObject) savedInstanceState.getParcelable(STATE_MAP_OBJECT));
}
super.onRestoreInstanceState(savedInstanceState);
}
@Override
protected void onNewIntent(Intent intent)
{
@ -1448,13 +1487,12 @@ public class MWMActivity extends MWMFragmentActivity
setVerticalToolbarVisible(false);
result = true;
}
if (mPlacePage.getState() == State.BOOKMARK)
if (mPlacePage.getState() == State.DETAILS || mPlacePage.getState() == State.BOOKMARK)
{
Framework.deactivatePopup();
hideInfoView();
result = true;
}
// TODO pass fragment touch
result |= mMapFragment.onTouch(view, event);
return result;
}

View file

@ -1,6 +1,7 @@
package com.mapswithme.maps.bookmarks.data;
import android.content.Context;
import android.os.Parcel;
import com.mapswithme.maps.Framework;
import com.mapswithme.maps.R;
@ -25,6 +26,19 @@ public class Bookmark extends MapObject
getXY();
}
@Override
public void writeToParcel(Parcel dest, int flags)
{
dest.writeInt(mCategoryId);
dest.writeInt(mBookmark);
dest.writeString(mName);
}
protected Bookmark(Parcel source)
{
this(source.readInt(), source.readInt(), source.readString());
}
private native ParcelablePointD getXY(int c, long b);
private native String getIcon(int c, long b);

View file

@ -1,14 +1,14 @@
package com.mapswithme.maps.bookmarks.data;
import android.content.res.Resources;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
import com.mapswithme.maps.Framework;
import com.mapswithme.maps.R;
import java.io.Serializable;
public abstract class MapObject
public abstract class MapObject implements Parcelable
{
protected String mName;
protected double mLat;
@ -97,7 +97,67 @@ public abstract class MapObject
public abstract MapObjectType getType();
public static enum MapObjectType implements Serializable
@Override
public int describeContents()
{
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags)
{
dest.writeString(getType().toString());
dest.writeString(mName);
dest.writeDouble(mLat);
dest.writeDouble(mLon);
dest.writeString(mTypeName);
dest.writeParcelable(mMetadata, 0);
}
public static final Creator<MapObject> CREATOR = new Creator<MapObject>()
{
@Override
public MapObject createFromParcel(Parcel source)
{
return readFromParcel(source);
}
@Override
public MapObject[] newArray(int size)
{
return new MapObject[size];
}
};
protected static MapObject readFromParcel(Parcel source)
{
final MapObjectType type = MapObjectType.valueOf(source.readString());
switch (type)
{
case POI:
return new Poi(source);
case ADDITIONAL_LAYER:
return new SearchResult(source);
case MY_POSITION:
return new MyPosition(source);
case API_POINT:
return new ApiPoint(source);
case BOOKMARK:
return new Bookmark(source);
}
return null;
}
protected MapObject(Parcel source)
{
mName = source.readString();
mLat = source.readDouble();
mLon = source.readDouble();
mTypeName = source.readString();
mMetadata = source.readParcelable(Metadata.class.getClassLoader());
}
public static enum MapObjectType
{
POI,
API_POINT,
@ -113,6 +173,11 @@ public abstract class MapObject
super(name, lat, lon, typeName);
}
protected Poi(Parcel source)
{
super(source);
}
@Override
public MapObjectType getType()
{
@ -133,6 +198,11 @@ public abstract class MapObject
super(name, lat, lon, type);
}
protected SearchResult(Parcel source)
{
super(source);
}
@Override
public MapObjectType getType()
{
@ -150,6 +220,19 @@ public abstract class MapObject
mId = id;
}
@Override
public void writeToParcel(Parcel dest, int flags)
{
super.writeToParcel(dest, flags);
dest.writeString(mId);
}
protected ApiPoint(Parcel source)
{
super(source);
mId = source.readString();
}
@Override
public MapObjectType getType()
{
@ -169,6 +252,11 @@ public abstract class MapObject
super(name, lat, lon, "");
}
protected MyPosition(Parcel source)
{
super(source);
}
@Override
public MapObjectType getType()
{

View file

@ -1,9 +1,12 @@
package com.mapswithme.maps.bookmarks.data;
import android.os.Parcel;
import android.os.Parcelable;
import java.util.HashMap;
import java.util.Map;
public class Metadata
public class Metadata implements Parcelable
{
// values MUST correspond to definitions from feature_meta.hpp
public enum MetadataType
@ -79,4 +82,46 @@ public class Metadata
{
return mMetadataMap.get(type);
}
@Override
public int describeContents()
{
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags)
{
dest.writeInt(mMetadataMap.size());
for (Map.Entry<MetadataType, String> metaEntry : mMetadataMap.entrySet())
{
dest.writeInt(metaEntry.getKey().mMetaType);
dest.writeString(metaEntry.getValue());
}
}
public static Metadata readFromParcel(Parcel source)
{
final Metadata metadata = new Metadata();
final int size = source.readInt();
for (int i = 0; i < size; i++)
metadata.addMetadata(source.readInt(), source.readString());
return metadata;
}
public static final Creator<Metadata> CREATOR = new Creator<Metadata>()
{
@Override
public Metadata createFromParcel(Parcel source)
{
return readFromParcel(source);
}
@Override
public Metadata[] newArray(int size)
{
return new Metadata[size];
}
};
}

View file

@ -13,6 +13,7 @@ import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
@ -230,6 +231,7 @@ public class PlacePageView extends RelativeLayout implements View.OnClickListene
{
if (!hasMapObject(mo))
{
Log.d("TEST", "Set map object : " + mo);
mMapObject = mo;
refreshViews();
}

View file

@ -94,7 +94,6 @@ public abstract class NvEventQueueFragment extends MWMFragment implements View.O
super.onViewCreated(view, savedInstanceState);
final SurfaceView surfaceView = (SurfaceView) view.findViewById(R.id.map_surfaceview);
surfaceView.setOnFocusChangeListener(this);
surfaceView.setOnTouchListener(this);
final SurfaceHolder holder = surfaceView.getHolder();
holder.addCallback(new Callback()