package org.azavea.otm.ui; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.Intent; import android.graphics.BitmapFactory; import android.net.Uri; import android.widget.ImageView; import android.widget.Toast; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GoogleApiAvailability; import com.google.android.gms.maps.GoogleMap; import com.joelapenna.foursquared.widget.SegmentedButton; import com.loopj.android.http.BinaryHttpResponseHandler; import org.azavea.helpers.Logger; import org.azavea.otm.App; import org.azavea.otm.R; import org.azavea.otm.data.Plot; import org.json.JSONException; import cz.msebera.android.httpclient.Header; public class MapHelper { public static void setUpBasemapControls(SegmentedButton buttons, GoogleMap mMap) { final String[] mapLabels = {"map", "satellite", "hybrid"}; final int[] mapTypes = {GoogleMap.MAP_TYPE_NORMAL, GoogleMap.MAP_TYPE_SATELLITE, GoogleMap.MAP_TYPE_HYBRID}; // match the clicked index of mapLabels to the element of mapTypes buttons.clearButtons(); buttons.addButtons(mapLabels); buttons.setOnClickListener((int index) -> mMap.setMapType(mapTypes[index])); } public static void checkGooglePlay(Activity activity) { GoogleApiAvailability google = GoogleApiAvailability.getInstance(); int googlePlayStatus = google.isGooglePlayServicesAvailable(activity); if (googlePlayStatus != ConnectionResult.SUCCESS) { Dialog dialog = google.getErrorDialog(activity, googlePlayStatus, 1); dialog.show(); } } protected static BinaryHttpResponseHandler getPhotoDetailHandler(final Activity activity, final Plot plot) { return new BinaryHttpResponseHandler(Plot.IMAGE_TYPES) { @Override public void onSuccess(int statusCode, Header[] headers, byte[] imageData) { ImageView imageView = new ImageView(activity); imageView.setScaleType(ImageView.ScaleType.FIT_CENTER); imageView.setImageBitmap(BitmapFactory.decodeByteArray(imageData, 0, imageData.length)); new AlertDialog.Builder(activity) .setNeutralButton(R.string.photo_report_close, ((dialog, which) -> { dialog.dismiss(); })) .setNegativeButton(R.string.photo_report_action, ((dialog, which) -> { String body = ""; try { body = String.format(activity.getString(R.string.photo_report_body), App.getCurrentInstance().getInstanceId(), plot.getId(), plot.getMostRecentPhoto().optInt("id")); } catch (JSONException e) { Logger.error("Could not get plot id in photo report", e); } Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setData(Uri.parse("mailto:")); // only email apps should handle this intent.putExtra(Intent.EXTRA_EMAIL, new String[] {activity.getString(R.string.photo_report_email)}); intent.putExtra(Intent.EXTRA_SUBJECT, activity.getString(R.string.report_photo_subject)); intent.putExtra(Intent.EXTRA_TEXT, body); if (intent.resolveActivity(activity.getPackageManager()) != null) { activity.startActivity(intent); } else { Toast.makeText(activity, R.string.photo_report_failure, Toast.LENGTH_LONG).show(); } })) .setView(imageView) .show(); } @Override public void onFailure(int statusCode, Header[] headers, byte[] imageData, Throwable e) { Logger.error("Could not retreive tree image", e); Toast.makeText(activity.getApplicationContext(), "Could not retrieve full image", Toast.LENGTH_SHORT).show(); } }; } }