/* Copyright 2016 Esri
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */

package com.esri.arcgisruntime.samples.showcallout;

import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.TextView;

import com.esri.arcgisruntime.geometry.Point;
import com.esri.arcgisruntime.mapping.ArcGISMap;
import com.esri.arcgisruntime.mapping.Basemap;
import com.esri.arcgisruntime.mapping.view.Callout;
import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener;
import com.esri.arcgisruntime.mapping.view.MapView;

public class MainActivity extends AppCompatActivity {

    private static final String sTag = "Gesture";
    private MapView mMapView;
    private Callout mCallout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // inflate MapView from layout
        mMapView = (MapView) findViewById(R.id.mapView);
        // create a map with the Basemap Type topographic
        final ArcGISMap mMap = new ArcGISMap(Basemap.Type.TOPOGRAPHIC, 34.056295, -117.195800, 10);
        // set the map to be displayed in this view
        mMapView.setMap(mMap);

        mMapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mMapView) {

            @Override
            public boolean onSingleTapConfirmed(MotionEvent motionEvent) {
                Log.d(sTag, "onSingleTapConfirmed: " + motionEvent.toString());

                // get the point that was clicked and convert it to a point in map coordinates
                android.graphics.Point screenPoint = new android.graphics.Point(Math.round(motionEvent.getX()),
                        Math.round(motionEvent.getY()));

                Point singleTapPoint = mMapView.screenToLocation(screenPoint);

                // create a textview for the callout
                TextView calloutContent = new TextView(getApplicationContext());
                calloutContent.setTextColor(Color.BLACK);
                calloutContent.setSingleLine();
                calloutContent.setText("X:" +  (String.format("%.2f", singleTapPoint.getX()))
                        + ", y:" + (String.format("%.2f", singleTapPoint.getY())));

                // get callout, set content and show
                mCallout = mMapView.getCallout();
                mCallout.setLocation(singleTapPoint);
                mCallout.setContent(calloutContent);
                mCallout.show();

                return true;
            }
        });
    }


    @Override
    protected void onPause(){
        super.onPause();
        mMapView.pause();
    }

    @Override
    protected void onResume(){
        super.onResume();
        mMapView.resume();
    }
}

@@ -870,21 +870,134 @@
 eometry.
-Point
+GeometryEngine;%0Aimport com.esri.arcgisruntime.geometry.Point;%0Aimport com.esri.arcgisruntime.geometry.SpatialReferences
 ;%0Aimport
@@ -2460,25 +2460,24 @@
 t.getY()));%0A
-%0A
             
@@ -2484,71 +2484,282 @@
     
-Point singleTapPoint = mMapView.screenToLocation(screenPoint);%0A
+// create a map point from screen point%0A                Point mapPoint = mMapView.screenToLocation(screenPoint);%0A                // convert to WGS84 for lat/lon format%0A                Point wgs84Point = (Point) GeometryEngine.project(mapPoint, SpatialReferences.getWgs84());
 %0A   
@@ -2991,24 +2991,82 @@
 ngleLine();%0A
+                // format coordinates to 4 decimal places%0A
             
@@ -3097,16 +3097,18 @@
 xt(%22
-X:
+Lat: 
 %22 +  
-(
 Stri
@@ -3116,38 +3116,34 @@
 g.format(%22%25.
-2
+4
 f%22, 
-singleTap
+wgs84
 Point.getX()
@@ -3143,13 +3143,14 @@
 .get
-X()))
+Y()) +
 %0A   
@@ -3173,21 +3173,21 @@
     
- +
  %22, 
-y:
+Lon: 
 %22 + 
-(
 Stri
@@ -3203,22 +3203,18 @@
 (%22%25.
-2
+4
 f%22, 
-singleTap
+wgs84
 Poin
@@ -3218,19 +3218,18 @@
 oint.get
-Y()
+X(
 )));%0A%0A  
@@ -3370,15 +3370,9 @@
 ion(
-singleT
+m
 apPo
@@ -3460,24 +3460,127 @@
 ut.show();%0A%0A
+                // center on tapped point%0A                mMapView.setViewpointCenterAsync(mapPoint);%0A%0A
             

format location to display, center on tapped location