Updated view of DashboardOverMap. Updated recents and etc.

This commit is contained in:
Bars107 2015-03-03 16:14:00 +02:00
parent 34611f7a57
commit ba81c700bd
14 changed files with 352 additions and 95 deletions

View file

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
android:id="@+id/dashboard"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#70000000"
android:visibility="gone">
<LinearLayout android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="match_parent">
<net.osmand.plus.dashboard.NotifyingScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="360dp"
android:layout_height="match_parent"
android:id="@+id/main_scroll">
<LinearLayout
android:id="@+id/content"
android:paddingTop="@dimen/dashboard_map_top_padding"
android:paddingBottom="@dimen/dashboard_map_bottom_padding"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"/>
</net.osmand.plus.dashboard.NotifyingScrollView>
</LinearLayout>
</FrameLayout>

View file

@ -1,53 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clipChildren="false"
android:keepScreenOn="true"
android:orientation="vertical">
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clipChildren="false"
android:keepScreenOn="true"
android:orientation="vertical">
<ViewStub
android:id="@+id/atlasMapRendererViewStub"
android:inflatedId="@+id/atlasMapRendererView"
android:layout="@layout/atlas_map_renderer_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ViewStub
android:id="@+id/atlasMapRendererViewStub"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:inflatedId="@+id/atlasMapRendererView"
android:layout="@layout/atlas_map_renderer_view"/>
<net.osmand.plus.views.OsmAndMapSurfaceView
android:id="@+id/MapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:contentDescription="@string/map_view"
android:visibility="gone" />
<net.osmand.plus.views.OsmAndMapSurfaceView
android:id="@+id/MapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:contentDescription="@string/map_view"
android:visibility="gone"/>
<net.osmand.plus.views.OsmAndMapLayersView
android:id="@+id/MapLayersView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:contentDescription="@string/map_view"
android:visibility="gone" />
<net.osmand.plus.views.OsmAndMapLayersView
android:id="@+id/MapLayersView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:contentDescription="@string/map_view"
android:visibility="gone"/>
<LinearLayout
android:id="@+id/dialog_layout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:orientation="horizontal" />
</FrameLayout>
<LinearLayout
android:id="@+id/dialog_layout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:orientation="horizontal"/>
</FrameLayout>
<ListView
android:id="@+id/left_drawer"
android:layout_width="280dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
<ListView
android:id="@+id/left_drawer"
android:layout_width="280dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="?attr/expandable_list_background"
android:divider="@drawable/divider"
android:dividerHeight="1dp" />
android:choiceMode="singleChoice"
android:divider="@drawable/divider"
android:dividerHeight="1dp"/>
</android.support.v4.widget.DrawerLayout>

View file

@ -56,6 +56,22 @@
android:textSize="@dimen/showAllButtonTextSize"
tools:text="100500 km"/>
<ImageView
android:id="@+id/type_name_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_small_group"
android:layout_gravity="center_vertical"/>
<TextView
android:id="@+id/type_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="2dp"
android:textColor="?android:textColorSecondary"
android:textSize="@dimen/showAllButtonTextSize"
tools:text="100500 km"/>
</LinearLayout>
</LinearLayout>

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="dashboard_map_top_padding">0dp</dimen>
<dimen name="dashboard_map_bottom_padding">0dp</dimen>
</resources>

View file

@ -43,6 +43,9 @@
<dimen name="gpx_small_icon_margin">3dp</dimen>
<dimen name="gpx_small_text_margin">14dp</dimen>
<dimen name="gpx_text_top_margin">6dp</dimen>
<dimen name="dashboard_map_width">360dp</dimen>
<dimen name="dashboard_map_top_padding">200dp</dimen>
<dimen name="dashboard_map_bottom_padding">80dp</dimen>
<!-- TextSizes -->
<dimen name="list_header_text_size">14sp</dimen>

View file

@ -51,6 +51,10 @@ public class PointDescription {
}
}
public String getTypeName() {
return typeName;
}
@NonNull
public String getName() {
return name;

View file

@ -1,13 +1,32 @@
package net.osmand.plus.activities;
import java.io.File;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.app.Dialog;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.AudioManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.ViewStub;
import android.view.Window;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.ProgressBar;
import android.widget.Toast;
import net.osmand.Location;
import net.osmand.StateChangedListener;
@ -33,9 +52,9 @@ import net.osmand.plus.TargetPointsHelper;
import net.osmand.plus.TargetPointsHelper.TargetPoint;
import net.osmand.plus.Version;
import net.osmand.plus.activities.search.SearchActivity;
import net.osmand.plus.audionotes.MediaRemoteControlReceiver;
import net.osmand.plus.base.FailSafeFuntions;
import net.osmand.plus.base.MapViewTrackingUtilities;
import net.osmand.plus.dashboard.DashboardOnMap;
import net.osmand.plus.helpers.GpxImportHelper;
import net.osmand.plus.helpers.WakeLockHelper;
import net.osmand.plus.poi.PoiLegacyFilter;
@ -51,33 +70,14 @@ import net.osmand.plus.views.OsmandMapTileView;
import net.osmand.plus.views.corenative.NativeCoreContext;
import net.osmand.render.RenderingRulesStorage;
import net.osmand.util.Algorithms;
import android.app.Dialog;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.ProgressDialog;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.AudioManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.ViewStub;
import android.view.Window;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.ProgressBar;
import android.widget.Toast;
import java.io.File;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MapActivity extends AccessibleActivity {
@ -113,8 +113,9 @@ public class MapActivity extends AccessibleActivity {
private GpxImportHelper gpxImportHelper;
private WakeLockHelper wakeLockHelper ;
private boolean intentLocation = false;
private DashboardOnMap dashboardOnMap;
private Notification getNotification() {
Intent notificationIndent = new Intent(this, getMyApplication().getAppCustomization().getMapActivity());
notificationIndent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
@ -224,9 +225,11 @@ public class MapActivity extends AccessibleActivity {
mapActions.prepareStartOptionsMenu();
wakeLockHelper = new WakeLockHelper(getMyApplication());
dashboardOnMap = new DashboardOnMap(this);
dashboardOnMap.createDashboardView();
}
public void addLockView(FrameLayout lockView) {
this.lockView = lockView;
}

View file

@ -700,9 +700,10 @@ public class MapActivityActions implements DialogProvider {
.listen(new OnContextMenuClick() {
@Override
public boolean onContextMenuClick(ArrayAdapter<?> adapter, int itemId, int pos, boolean isChecked) {
Intent newIntent = new Intent(mapActivity, mapActivity.getMyApplication().getAppCustomization().getMainMenuActivity());
newIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
mapActivity.startActivity(newIntent);
// Intent newIntent = new Intent(mapActivity, mapActivity.getMyApplication().getAppCustomization().getMainMenuActivity());
// newIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// mapActivity.startActivity(newIntent);
mapActivity.setDashboardVisibility(true);
return true;
}
}).reg();

View file

@ -230,6 +230,14 @@ public class SearchHistoryFragment extends ListFragment implements SearchActivit
icon.setImageDrawable(addressIcon);
}
String typeName = historyEntry.getName().getTypeName();
if (typeName !=null && !typeName.isEmpty()){
row.findViewById(R.id.type_name_icon).setVisibility(View.VISIBLE);
((TextView) row.findViewById(R.id.type_name)).setText(typeName);
} else {
row.findViewById(R.id.type_name_icon).setVisibility(View.GONE);
((TextView) row.findViewById(R.id.type_name)).setText("");
}
options.setOnClickListener(new View.OnClickListener() {
@Override

View file

@ -14,6 +14,7 @@ import net.osmand.util.Algorithms;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;
import android.support.annotation.Nullable;
@ -30,6 +31,9 @@ import android.widget.TextView;
* on 15.12.2014.
*/
public class DashAudioVideoNotesFragment extends DashBaseFragment {
public static final String TAG = "DASH_NOTES_FRAGMENT";
AudioVideoNotesPlugin plugin;
@Override
@ -98,6 +102,7 @@ public class DashAudioVideoNotesFragment extends DashBaseFragment {
View view = inflater.inflate(R.layout.note, null, false);
getNoteView(recording, view, getActivity());
view.setBackgroundColor(Color.TRANSPARENT);
view.findViewById(R.id.play).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

View file

@ -25,9 +25,13 @@ import android.widget.LinearLayout;
import android.widget.TextView;
/**
* Created by Denis on 21.11.2014.
* Created by Denis
* on 21.11.2014.
*/
public class DashPluginsFragment extends DashBaseFragment {
public static final String TAG = "DASH_PLUGINS_FRAGMENT";
private final CompoundButton.OnCheckedChangeListener enableDisableListener =
new CompoundButton.OnCheckedChangeListener() {
@Override

View file

@ -115,7 +115,7 @@ public class DashRecentsFragment extends DashLocationFragment {
if (points.size() > 3){
points = points.subList(0, 3);
}
for (final HistoryEntry point : points) {
for (final HistoryEntry historyEntry : points) {
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.dash_favorites_item, null, false);
TextView name = (TextView) view.findViewById(R.id.name);
@ -133,33 +133,42 @@ public class DashRecentsFragment extends DashLocationFragment {
if(loc != null){
direction.setVisibility(View.VISIBLE);
updateArrow(getActivity(), loc, new LatLon(point.getLat(), point.getLon()), direction,
updateArrow(getActivity(), loc, new LatLon(historyEntry.getLat(), historyEntry.getLon()), direction,
10, R.drawable.ic_destination_arrow, heading);
}
arrows.add(direction);
name.setText(point.getName().getName());
name.setText(historyEntry.getName().getName());
//LatLon lastKnownMapLocation = getMyApplication().getSettings().getLastKnownMapLocation();
int dist = (int) (MapUtils.getDistance(point.getLat(), point.getLon(),
int dist = (int) (MapUtils.getDistance(historyEntry.getLat(), historyEntry.getLon(),
loc.getLatitude(), loc.getLongitude()));
String distance = OsmAndFormatter.getFormattedDistance(dist, getMyApplication()) + " ";
view.findViewById(R.id.navigate_to).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DirectionsDialogs.directionsToDialogAndLaunchMap(getActivity(), point.getLat(), point.getLon(),
point.getName());
DirectionsDialogs.directionsToDialogAndLaunchMap(getActivity(), historyEntry.getLat(), historyEntry.getLon(),
historyEntry.getName());
}
});
label.setText(distance, TextView.BufferType.SPANNABLE);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getMyApplication().getSettings().setMapLocationToShow(point.getLat(), point.getLon(), 15,
point.getName(), true,
point); //$NON-NLS-1$
getMyApplication().getSettings().setMapLocationToShow(historyEntry.getLat(), historyEntry.getLon(), 15,
historyEntry.getName(), true,
historyEntry); //$NON-NLS-1$
MapActivity.launchMapActivityMoveToTop(getActivity());
}
});
String typeName = historyEntry.getName().getTypeName();
if (typeName !=null && !typeName.isEmpty()){
view.findViewById(R.id.group_image).setVisibility(View.VISIBLE);
((TextView) view.findViewById(R.id.group_name)).setText(typeName);
} else {
view.findViewById(R.id.group_image).setVisibility(View.GONE);
((TextView) view.findViewById(R.id.group_name)).setText("");
}
favorites.addView(view);
}
updateLocation(location);

View file

@ -0,0 +1,162 @@
package net.osmand.plus.dashboard;
import android.content.res.Resources;
import android.graphics.Color;
import android.os.Build;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ScrollView;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.audionotes.DashAudioVideoNotesFragment;
import net.osmand.plus.helpers.ScreenOrientationHelper;
import net.osmand.plus.monitoring.DashTrackFragment;
import net.osmand.plus.views.controls.FloatingActionButton;
/**
* Created by dummy on 03.03.15.
*/
public class DashboardOnMap {
private MapActivity ma;
FloatingActionButton fabButton;
boolean floatingButtonVisible = false;
private FrameLayout dashboardView;
public DashboardOnMap(MapActivity ma) {
this.ma = ma;
}
public void createDashboardView() {
dashboardView = (FrameLayout) ma.getLayoutInflater().inflate(R.layout.dashboard_over_map, null, false);
dashboardView.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
setDashboardVisibility(false);
}
};
dashboardView.findViewById(R.id.content).setOnClickListener(listener);
dashboardView.setOnClickListener(listener);
((FrameLayout)ma.getMapView().getParent()).addView(dashboardView);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
fabButton = new FloatingActionButton.Builder(ma)
.withDrawable(ma.getResources().getDrawable(R.drawable.ic_action_map))
.withButtonColor(Color.parseColor("#ff8f00"))
.withGravity(Gravity.BOTTOM | Gravity.RIGHT)
.withMargins(0, 0, 16, 16)
.create();
fabButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
setDashboardVisibility(false);
fabButton.hideFloatingActionButton();
}
});
fabButton.hideFloatingActionButton();
}
if (ScreenOrientationHelper.isOrientationPortrait(ma)) {
((NotifyingScrollView)dashboardView.findViewById(R.id.main_scroll)).setOnScrollChangedListener(onScrollChangedListener);
}
}
public void setDashboardVisibility(boolean visible) {
if (visible) {
addDashboardFragments();
dashboardView.setVisibility(View.VISIBLE);
if (floatingButtonVisible) {
fabButton.showFloatingActionButton();
}
//View close = dashboardView.findViewById(R.id.close_dashboard);
if (ScreenOrientationHelper.isOrientationPortrait(ma)) {
//close.setVisibility(View.VISIBLE);
} else {
//close.setVisibility(View.GONE);
}
} else {
ma.findViewById(R.id.dashboard).setVisibility(View.GONE);
}
}
private void addDashboardFragments(){
FragmentManager manager =ma. getSupportFragmentManager();
FragmentTransaction fragmentTransaction = manager.beginTransaction();
if (manager.findFragmentByTag(DashSearchFragment.TAG) == null) {
fragmentTransaction.add(R.id.content, new DashSearchFragment(), DashSearchFragment.TAG);
}
if (manager.findFragmentByTag(DashRecentsFragment.TAG) == null) {
fragmentTransaction.add(R.id.content, new DashRecentsFragment(), DashRecentsFragment.TAG);
}
if (manager.findFragmentByTag(DashFavoritesFragment.TAG) == null) {
fragmentTransaction.add(R.id.content, new DashFavoritesFragment(), DashFavoritesFragment.TAG);
}
if (manager.findFragmentByTag(DashAudioVideoNotesFragment.TAG) == null) {
fragmentTransaction.add(R.id.content, new DashAudioVideoNotesFragment(), DashAudioVideoNotesFragment.TAG);
}
if (manager.findFragmentByTag(DashTrackFragment.TAG) == null) {
fragmentTransaction.add(R.id.content, new DashTrackFragment(), DashTrackFragment.TAG);
}
//fragmentTransaction.add(R.id.content, new DashUpdatesFragment(), DashUpdatesFragment.TAG);
if (manager.findFragmentByTag(DashPluginsFragment.TAG) == null) {
fragmentTransaction.add(R.id.content, new DashPluginsFragment(), DashPluginsFragment.TAG);
}
fragmentTransaction.commit();
}
private void addErrorFragment() {
FragmentManager manager = ma.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = manager.beginTransaction();
if (manager.findFragmentByTag(DashErrorFragment.TAG) == null) {
DashErrorFragment errorFragment = new DashErrorFragment();
fragmentTransaction.add(R.id.content, errorFragment, DashErrorFragment.TAG).commit();
}
}
private NotifyingScrollView.OnScrollChangedListener onScrollChangedListener = new NotifyingScrollView.OnScrollChangedListener() {
public void onScrollChanged(ScrollView who, int l, int t, int oldl, int oldt) {
//making background of actionbar transparent with scroll
final int imageHeight = 200;
final int headerHeight = 200;
final float ratio = (float) Math.min(Math.max(t, 0), headerHeight) / headerHeight;
int margintop = -(int)(ratio * 60);
Resources r = ma.getResources();
int px = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
margintop,
r.getDisplayMetrics());
int margin = px + (int)ma.getResources().getDimension(R.dimen.dashboard_map_bottom_padding);
if (headerHeight < t - margin){
//hiding action bar - showing floating button
//getSupportActionBar().hide();
if (fabButton != null) {
fabButton.showFloatingActionButton();
floatingButtonVisible = true;
}
} else {
//getSupportActionBar().show();
if (fabButton != null) {
fabButton.hideFloatingActionButton();
floatingButtonVisible = false;
}
}
}
};
}

View file

@ -25,6 +25,7 @@ import net.osmand.plus.helpers.FontCache;
import net.osmand.plus.helpers.GpxUiHelper;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
@ -45,6 +46,8 @@ import android.widget.Toast;
*/
public class DashTrackFragment extends DashBaseFragment {
public static final String TAG = "DASH_TRACK_FRAGMENT";
private Drawable gpxOnMap;
private Drawable gpxNormal;
private boolean updateEnable;
@ -158,6 +161,7 @@ public class DashTrackFragment extends DashBaseFragment {
showOnMap(GPXUtilities.loadGPXFile(app, f));
}
});
v.setBackgroundColor(Color.TRANSPARENT);
tracks.addView(v);
}
}