package cgeo.geocaching; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; import org.apache.commons.lang3.StringUtils; import butterknife.BindView; import butterknife.ButterKnife; import cgeo.geocaching.apps.navi.NavigationAppFactory; import cgeo.geocaching.compatibility.Compatibility; import cgeo.geocaching.location.Geopoint; import cgeo.geocaching.location.Units; import cgeo.geocaching.models.Geocache; import cgeo.geocaching.models.Waypoint; import cgeo.geocaching.sensors.GeoData; import cgeo.geocaching.storage.DataStore; import cgeo.geocaching.ui.CacheDetailsCreator; import cgeo.geocaching.utils.Log; public class WaypointPopupFragment extends AbstractDialogFragment { @BindView(R.id.actionbar_title) protected TextView actionBarTitle; @BindView(R.id.waypoint_details_list) protected LinearLayout waypointDetailsLayout; @BindView(R.id.edit) protected Button buttonEdit; @BindView(R.id.details_list) protected LinearLayout cacheDetailsLayout; private int waypointId = 0; private Waypoint waypoint = null; private TextView waypointDistance = null; @Override public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { final View v = inflater.inflate(R.layout.waypoint_popup, container, false); initCustomActionBar(v); ButterKnife.bind(this, v); return v; } @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); waypointId = getArguments().getInt(WAYPOINT_ARG); } @Override protected void onUpdateGeoData(final GeoData geo) { if (waypoint != null) { final Geopoint coordinates = waypoint.getCoords(); if (coordinates != null) { waypointDistance.setText(Units.getDistanceFromKilometers(geo.getCoords().distanceTo(coordinates))); waypointDistance.bringToFront(); } } } @Override protected void init() { super.init(); waypoint = DataStore.loadWaypoint(waypointId); if (waypoint == null) { Log.e("WaypointPopupFragment.init: unable to get waypoint " + waypointId); getActivity().finish(); return; } try { if (StringUtils.isNotBlank(waypoint.getName())) { setTitle(waypoint.getName()); } else { setTitle(waypoint.getGeocode()); } actionBarTitle.setCompoundDrawablesWithIntrinsicBounds(Compatibility.getDrawable(getResources(), waypoint.getWaypointType().markerId), null, null, null); //getSupportActionBar().setIcon(getResources().getDrawable(waypoint.getWaypointType().markerId)); details = new CacheDetailsCreator(getActivity(), waypointDetailsLayout); //Waypoint geocode details.add(R.string.cache_geocode, waypoint.getPrefix() + waypoint.getGeocode().substring(2)); waypointDistance = details.addDistance(waypoint, waypointDistance); details.add(R.string.waypoint_note, waypoint.getNote()); buttonEdit.setOnClickListener(new OnClickListener() { @Override public void onClick(final View arg0) { EditWaypointActivity.startActivityEditWaypoint(getActivity(), cache, waypoint.getId()); getActivity().finish(); } }); details = new CacheDetailsCreator(getActivity(), cacheDetailsLayout); details.add(R.string.cache_name, cache.getName()); addCacheDetails(); } catch (final Exception e) { Log.e("WaypointPopup.init", e); } } @Override public void navigateTo() { NavigationAppFactory.startDefaultNavigationApplication(1, getActivity(), waypoint); } /** * Tries to navigate to the {@link Geocache} of this activity. */ @Override public void startDefaultNavigation2() { if (waypoint == null || waypoint.getCoords() == null) { showToast(res.getString(R.string.cache_coordinates_no)); return; } NavigationAppFactory.startDefaultNavigationApplication(2, getActivity(), waypoint); getActivity().finish(); } @Override public void showNavigationMenu() { NavigationAppFactory.showNavigationMenu(getActivity(), null, waypoint, null); } @Override protected TargetInfo getTargetInfo() { if (waypoint == null) { return null; } return new TargetInfo(waypoint.getCoords(), cache.getGeocode()); } public static DialogFragment newInstance(final String geocode, final int waypointId) { final Bundle args = new Bundle(); args.putInt(WAYPOINT_ARG, waypointId); args.putString(GEOCODE_ARG, geocode); final DialogFragment f = new WaypointPopupFragment(); f.setArguments(args); f.setStyle(DialogFragment.STYLE_NO_TITLE, 0); return f; } }