[android] Layout improvements for SimNavFragment.

This commit is contained in:
Dmitry Kunin 2013-06-21 19:13:51 +03:00 committed by Alex Zolotarev
parent f11de6990c
commit 485ba97303
7 changed files with 171 additions and 134 deletions

View file

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false"
android:gravity="center"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/staticData"
android:layout_width="match_parent"
android:layout_height="0dp"
android:padding="@dimen/margin_small"
android:layout_weight="1"
android:background="@drawable/abs__item_background_holo_light"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:id="@+id/dms"
style="@style/Holo.TextAppearance.Medium.Light"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center|left"/>
<TextView
android:id="@+id/degrees"
style="@style/Holo.TextAppearance.Small.Light"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center|left"
android:textColor="@android:color/darker_gray"/>
</LinearLayout>
<LinearLayout
android:id="@+id/dynamicData"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_margin="@dimen/margin_small"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:id="@+id/distance"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center" />
<com.mapswithme.maps.ArrowImage
android:id="@+id/arrow"
android:layout_width="@dimen/arrow_nav_size"
android:layout_height="@dimen/arrow_nav_size" />
</LinearLayout>
</LinearLayout>

View file

@ -9,6 +9,7 @@
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MapObjectActivity" >
<fragment
android:id="@+id/simpleNavigationFragment"
android:name="com.mapswithme.maps.SimpleNavigationFragment"

View file

@ -17,17 +17,6 @@
<include layout="@layout/horizontal_separator" />
<TextView
android:id="@+id/latLon"
style="@style/Holo.TextAppearance.Medium.Light"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_margin="@dimen/margin_small"
android:layout_marginTop="@dimen/margin_medium" />
<include layout="@layout/horizontal_separator" />
<TextView
android:id="@+id/groupType"
style="@style/Holo.TextAppearance.Medium.Light"

View file

@ -11,35 +11,27 @@
android:id="@+id/staticData"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="@dimen/margin_small"
android:padding="@dimen/margin_small"
android:layout_weight="1"
android:background="@drawable/abs__item_background_holo_light"
android:gravity="center"
android:orientation="vertical"
android:background="@drawable/abs__item_background_holo_light">
<TextView
android:id="@+id/degrees"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"/>
<include
android:layout_margin="@dimen/margin_small"
layout="@layout/horizontal_separator" />
android:orientation="vertical" >
<TextView
android:id="@+id/dms"
style="@style/Holo.TextAppearance.Medium.Light"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="40°2647″N\n079°5836″W" />
</LinearLayout>
android:gravity="center|left"/>
<include
android:layout_width="1dp"
android:layout_height="match_parent"
android:layout_margin="@dimen/margin_small"
layout="@layout/horizontal_separator" />
<TextView
android:id="@+id/degrees"
style="@style/Holo.TextAppearance.Small.Light"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center|left"
android:textColor="@android:color/darker_gray"/>
</LinearLayout>
<LinearLayout
android:id="@+id/dynamicData"
@ -54,12 +46,12 @@
android:id="@+id/distance"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"/>
android:gravity="center" />
<com.mapswithme.maps.ArrowImage
android:id="@+id/arrow"
android:layout_width="@dimen/arrow_nav_size"
android:layout_height="@dimen/arrow_nav_size"/>
android:layout_height="@dimen/arrow_nav_size" />
</LinearLayout>
</LinearLayout>

View file

@ -142,11 +142,11 @@ public class MapObjectActivity extends FragmentActivity
{
mMapObjectFragment.setForMyPosition(lat, lon);
mNavigationFragment.setPoint(new ParcelablePointD(lon, lat));
mNavigationFragment.showArrow(false);
mNavigationFragment.showDynamicData(false);
return;
}
mNavigationFragment.showArrow(true);
mNavigationFragment.showDynamicData(true);
mNavigationFragment.setPoint(new ParcelablePointD(lon, lat));
}

View file

@ -37,69 +37,68 @@ import java.io.Serializable;
public class MapObjectFragment extends Fragment
implements OnClickListener
{
public static enum MapObjectType implements Serializable
public static enum MapObjectType implements Serializable
{
POI,
API_POINT,
BOOKMARK,
MY_POSITION
}
private static final int MENU_SHARE = 0x100;
private TextView mNameTV;
private TextView mGroupTypeTV;
private TextView mLatLonTV;
private TextView mDescrTV;
private Button mAddToBookmarks;
private Button mEditBmk;
private Button mShare;
private Button mOpenWith;
//POI, API
//POI, API
private double mLat;
private double mLon;
private String mName;
//Bookmark
private int mCategory;
private int mBmkIndex;
private double mScale = MapObject.DEF_SCALE;
// General
MapObjectType mType;
public void setForBookmark(Bookmark bookmark)
{
UiUtils.hide(mAddToBookmarks);
UiUtils.show(mEditBmk);
UiUtils.hide(mOpenWith);
setTexts(bookmark.getName(), bookmark.getCategoryName(), bookmark.getBookmarkDescription(), bookmark.getLat(), bookmark.getLon());
@SuppressWarnings("deprecation")
Drawable icon = new BitmapDrawable(bookmark.getIcon().getIcon());
mNameTV.setCompoundDrawables(UiUtils
.setCompoundDrawableBounds(icon, R.dimen.icon_size, getResources()), null, null, null);
mEditBmk.setCompoundDrawables(UiUtils
.setCompoundDrawableBounds(R.drawable.edit_bookmark, R.dimen.icon_size, getResources()), null, null, null);
mCategory = bookmark.getCategoryId();
mBmkIndex = bookmark.getBookmarkId();
mScale = bookmark.getScale();
mType = MapObjectType.BOOKMARK;
}
public void setForApiPoint(String name, double lat, double lon)
{
UiUtils.show(mAddToBookmarks);
UiUtils.hide(mEditBmk);
final MWMRequest request = MWMRequest.getCurrentRequest();
if (request != null && request.hasPendingIntent())
{
@ -107,67 +106,66 @@ public class MapObjectFragment extends Fragment
mOpenWith.setCompoundDrawables(UiUtils
.setCompoundDrawableBounds(request.getIcon(getActivity()), R.dimen.icon_size, getResources()), null, null, null);
}
else
else
UiUtils.hide(mOpenWith);
setTexts(name, null, null, lat, lon);
mType = MapObjectType.API_POINT;
}
public void setForPoi(String name, String type, String address, double lat, double lon)
{
UiUtils.show(mAddToBookmarks);
UiUtils.hide(mEditBmk);
UiUtils.hide(mOpenWith);
setTexts(name, type, null, lat, lon);
mType = MapObjectType.POI;
}
public void setForMyPosition(double lat, double lon)
{
UiUtils.show(mAddToBookmarks);
UiUtils.hide(mEditBmk);
UiUtils.hide(mOpenWith);
final String name = getString(R.string.my_position);
setTexts(name, "", null, lat, lon);
mType = MapObjectType.MY_POSITION;
}
private void setTexts(String name, String type, String descr, double lat, double lon)
{
if (!TextUtils.isEmpty(name))
mName = name;
else
else
mName = getString(R.string.dropped_pin);
mNameTV.setText(mName);
if (TextUtils.isEmpty(type))
UiUtils.hide(mGroupTypeTV);
else
else
{
mGroupTypeTV.setText(type);
UiUtils.show(mGroupTypeTV);
}
if (TextUtils.isEmpty(descr))
UiUtils.hide(mDescrTV);
else
else
{
mDescrTV.setText(descr);
UiUtils.show(mDescrTV);
}
mLatLonTV.setText(UiUtils.formatLatLon(lat, lon));
mLat = lat;
mLon = lon;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
@ -175,48 +173,47 @@ public class MapObjectFragment extends Fragment
// find views
mNameTV = (TextView) view.findViewById(R.id.name);
mGroupTypeTV = (TextView) view.findViewById(R.id.groupType);
mLatLonTV = (TextView) view.findViewById(R.id.latLon);
mDescrTV = (TextView) view.findViewById(R.id.descr);
mAddToBookmarks = (Button) view.findViewById(R.id.addToBookmarks);
mEditBmk = (Button) view.findViewById(R.id.editBookmark);
mOpenWith = (Button) view.findViewById(R.id.openWith);
mShare = (Button) view.findViewById(R.id.share);
// set up listeners, drawables, visibility
mAddToBookmarks.setOnClickListener(this);
mShare.setOnClickListener(this);
mOpenWith.setOnClickListener(this);
mEditBmk.setOnClickListener(this);
mAddToBookmarks.setCompoundDrawables(UiUtils
.setCompoundDrawableBounds(R.drawable.placemark_red, R.dimen.icon_size, getResources()), null, null, null);
if (Utils.apiEqualOrGreaterThan(11))
UiUtils.hide(mShare);
else
else
{
mShare.setCompoundDrawables(UiUtils
.setCompoundDrawableBounds(R.drawable.share, R.dimen.icon_size, getResources()), null, null, null);
UiUtils.show(mShare);
}
return view;
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onClick(View v)
{
final int id = v.getId();
if (id == R.id.addToBookmarks)
onAddBookmarkClicked();
if (id == R.id.editBookmark)
@ -226,7 +223,7 @@ public class MapObjectFragment extends Fragment
if (id == R.id.share)
showShareContextMenu();
}
private void onAddBookmarkClicked()
{
//TODO add normal PRO check
@ -240,48 +237,48 @@ public class MapObjectFragment extends Fragment
{
final Pair<Integer, Integer> bmkAndCat = BookmarkManager.getBookmarkManager(getActivity()).addNewBookmark(mName, mLat, mLon);
BookmarkActivity.startWithBookmark(getActivity(), bmkAndCat.first, bmkAndCat.second);
// for now finish
// for now finish
getActivity().finish();
}
}
private void onEditBookmarkClicked()
{
BookmarkActivity.startWithBookmark(getActivity(), mCategory, mBmkIndex);
getActivity().finish();
}
private void onOpenWithClicked()
{
MWMRequest.getCurrentRequest().sendResponse(getActivity(), true);
((MWMApplication)getActivity().getApplication()).getAppStateManager().transitionTo(SuppotedState.DEFAULT_MAP);
getActivity().finish();
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
super.onCreateOptionsMenu(menu, inflater);
final MenuItem shareMenu = menu.add(Menu.NONE, MENU_SHARE, 0, R.string.share);
shareMenu.setIcon(R.drawable.share);
if (Utils.apiEqualOrGreaterThan(11))
shareMenu.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
final int itemId = item.getItemId();
if (itemId == MENU_SHARE)
{
if (Utils.apiEqualOrGreaterThan(11))
onShareActionClicked(getActivity().findViewById(MENU_SHARE));
else
else
showShareContextMenu();
return true;
}
else if (ShareAction.ACTIONS.containsKey(itemId))
@ -289,15 +286,15 @@ public class MapObjectFragment extends Fragment
ShareAction.ACTIONS.get(itemId).shareMapObject(getActivity(), createMapObject());
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onContextItemSelected(MenuItem item)
{
final int itemId = item.getItemId();
final int itemId = item.getItemId();
if (ShareAction.ACTIONS.containsKey(itemId))
{
ShareAction.ACTIONS.get(itemId).shareMapObject(getActivity(), createMapObject());
@ -305,60 +302,60 @@ public class MapObjectFragment extends Fragment
}
return super.onContextItemSelected(item);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
{
super.onCreateContextMenu(menu, v, menuInfo);
ShareAction.getSmsShare().addToMenuIfSupported(getActivity(), menu, false);
ShareAction.getEmailShare().addToMenuIfSupported(getActivity(), menu, false);
ShareAction.getAnyShare().addToMenuIfSupported(getActivity(), menu, false);
}
private void onShareActionClicked(View anchor)
{
final PopupMenu popUpMenu = new PopupMenu(getActivity(), anchor);
final Menu menu = popUpMenu.getMenu();
ShareAction.getSmsShare().addToMenuIfSupported(getActivity(), menu, false);
ShareAction.getEmailShare().addToMenuIfSupported(getActivity(), menu, false);
ShareAction.getAnyShare().addToMenuIfSupported(getActivity(), menu, false);
popUpMenu.setOnMenuItemClickListener(new OnMenuItemClickListener()
{
@Override
public boolean onMenuItemClick(MenuItem item)
{
return onOptionsItemSelected(item);
}
});
popUpMenu.show();
}
private void showShareContextMenu()
{
registerForContextMenu(mShare);
mShare.showContextMenu();
unregisterForContextMenu(mShare);
}
private MapObject createMapObject()
{
return new MapObject()
{
@Override
public String getName() { return mName; }
@Override
public double getLon() { return mLon; }
@Override
public double getLat() { return mLat; }
@Override
public double getScale() { return mScale; }
@ -366,5 +363,5 @@ public class MapObjectFragment extends Fragment
public MapObjectType getType() { return mType; }
};
}
}

View file

@ -1,6 +1,5 @@
package com.mapswithme.maps;
import android.app.Activity;
import android.location.Location;
import android.os.Bundle;
import android.support.v4.app.Fragment;
@ -30,9 +29,11 @@ public class SimpleNavigationFragment extends Fragment implements LocationServic
//Views
// Right
private boolean mShowDynamic = true;
private ArrowImage mArrow;
private TextView mDistance;
// Left
private boolean mShowStatic = true;
private TextView mDegrees;
private TextView mDMS;
// Containers
@ -40,8 +41,6 @@ public class SimpleNavigationFragment extends Fragment implements LocationServic
private View mStaticData;
private View mDynamicData;
public void setPoint(ParcelablePointD point) { mPoint = point; }
public ParcelablePointD getPoint() { return mPoint; }
@ -56,7 +55,6 @@ public class SimpleNavigationFragment extends Fragment implements LocationServic
mDistance = (TextView) mRoot.findViewById(R.id.distance);
mDegrees = (TextView) mRoot.findViewById(R.id.degrees);
mDMS = (TextView) mRoot.findViewById(R.id.dms);
updateViews();
setClickers();
@ -66,8 +64,9 @@ public class SimpleNavigationFragment extends Fragment implements LocationServic
private void updateViews()
{
final Location lastKnown = mLocationService.getLastKnown();
if (lastKnown != null && mArrow != null)
if (lastKnown != null && mShowDynamic)
{
UiUtils.show(mDynamicData);
final DistanceAndAzimut da = Framework.getDistanceAndAzimutFromLatLon
(mPoint.y, mPoint.x, lastKnown.getLatitude(), lastKnown.getLongitude(), mNorth);
@ -80,19 +79,16 @@ public class SimpleNavigationFragment extends Fragment implements LocationServic
mDistance.setText(da.getDistance());
}
else
{
//TODO set view for no location
}
UiUtils.hide(mDynamicData);
if (mPoint != null && mDegrees != null)
if (mPoint != null && mShowStatic)
{
UiUtils.show(mStaticData);
mDegrees.setText(UiUtils.formatLatLon(mPoint.y, mPoint.x));
mDMS.setText(UiUtils.formatLatLonToDMS(mPoint.y, mPoint.x));
}
else
{
// TODO hide?
}
UiUtils.hide(mStaticData);
}
@Override
@ -125,19 +121,20 @@ public class SimpleNavigationFragment extends Fragment implements LocationServic
}
@Override
public void onAttach(Activity activity)
public void onPause()
{
super.onAttach(activity);
mLocationService = ((MWMApplication)activity.getApplication()).getLocationService();
mLocationService.startUpdate(this);
mLocationService.stopUpdate(this);
mLocationService = null;
super.onPause();
}
@Override
public void onDetach()
public void onResume()
{
super.onDetach();
mLocationService.stopUpdate(this);
mLocationService = null;
super.onResume();
mLocationService = ((MWMApplication)getActivity().getApplication()).getLocationService();
mLocationService.startUpdate(this);
updateViews();
}
public void show()
@ -150,22 +147,26 @@ public class SimpleNavigationFragment extends Fragment implements LocationServic
UiUtils.hide(mRoot);
}
public void showCoordinats(boolean show)
public void showStaticData(boolean show)
{
mShowStatic = show;
if (show)
UiUtils.show(mStaticData);
else
UiUtils.hide(mStaticData);
}
public void showArrow(boolean show)
public void showDynamicData(boolean show)
{
mShowDynamic = show;
if (show)
UiUtils.show(mDynamicData);
else
UiUtils.hide(mDynamicData);
}
private static final int MENU_COPY_DEGR = 1;
private static final int MENU_COPY_DMS = 2;
private static final int MENU_CANCEL = 999;