1
0
Fork 0
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Pharmacies/src/org/r3pek/pharmacies/PharmacyInfo.java

169 lines
6.7 KiB

package org.r3pek.pharmacies;
import org.r3pek.pharmacies.utils.GeoUtils;
import org.r3pek.pharmacies.utils.GlobalVars;
import org.r3pek.pharmacies.widgets.Arrow;
import org.r3pek.pharmacies.widgets.ImageRotater;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.location.Location;
import android.net.Uri;
import android.os.Bundle;
import android.text.ClipboardManager;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;
public class PharmacyInfo extends Activity {
private final static int MENU_DIAL = 0;
private final static int MENU_SHARE = 1;
private final static int MENU_NAVIGATE = 2;
private final static int MENU_COPY = 3;
private final static int MENU_SHOWONMAP = 4;
private SensorManager sm;
private Pharmacy p;
private ImageRotater arrowChangerSensor;
private int pharmacyIndex;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pharmacyinfo);
p = (Pharmacy)getIntent().getSerializableExtra("org.r3pek.pharmacies.Pharmacy");
pharmacyIndex = getIntent().getIntExtra("org.r3pek.pharmacies.PharmacyIndex", -1);
TextView tvName = (TextView)findViewById(R.id.tvName);
TextView tvAddress = (TextView)findViewById(R.id.tvAddress);
TextView tvParish = (TextView)findViewById(R.id.tvParish);
TextView tvPhoneNumber = (TextView)findViewById(R.id.tvPhoneNumber);
TextView tvLatitude = (TextView)findViewById(R.id.tvLatitude);
TextView tvLongitude = (TextView)findViewById(R.id.tvLongitude);
TextView tvDist = (TextView)findViewById(R.id.tvDistance);
Arrow arrow = (Arrow)findViewById(R.id.ivInfoDirection);
TextView tvService = (TextView)findViewById(R.id.tvOnDuty);
sm = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
arrowChangerSensor = new ImageRotater();
arrow.setBearing(GeoUtils.bearing(GlobalVars.positioner.getLastGeoPoint(), p.getGeoPoint()));
arrow.setOrientation(arrowChangerSensor.getLastOrientation());
tvName.setText(p.getName());
tvAddress.setText(p.getAddress());
tvParish.setText(p.getParish());
tvPhoneNumber.setText(p.getPhoneNumber().equals("") ? getString(R.string.na) : p.getPhoneNumber());
tvLatitude.setText(p.getLatitude());
tvLongitude.setText(p.getLongitude());
tvDist.setText(p.getDistance().substring(0, p.getDistance().indexOf(".")) + "m");
tvService.setText(p.isAtService() ? getString(R.string.yes) : getString(R.string.no));
}
@Override
public void onResume() {
sm.registerListener(arrowChangerSensor, sm.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_NORMAL);
arrowChangerSensor.addImage((Arrow)findViewById(R.id.ivInfoDirection));
super.onResume();
}
@Override
public void onPause() {
arrowChangerSensor.delImage((Arrow)findViewById(R.id.ivInfoDirection));
sm.unregisterListener(arrowChangerSensor);
super.onPause();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, MENU_DIAL, 0, getString(R.string.dial)).setIcon(android.R.drawable.ic_menu_call);
menu.add(0, MENU_SHARE, 1, getString(R.string.share)).setIcon(android.R.drawable.ic_menu_share);
menu.add(0, MENU_NAVIGATE, 2, getString(R.string.navigate)).setIcon(android.R.drawable.ic_menu_directions);
menu.add(0, MENU_COPY, 3, getString(R.string.copy_to_clipboard)).setIcon(R.drawable.copy);
menu.add(0, MENU_SHOWONMAP, 4, getString(R.string.show_on_map)).setIcon(android.R.drawable.ic_menu_mapmode);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(MENU_DIAL).setEnabled(!p.getPhoneNumber().equals(""));
menu.findItem(MENU_SHOWONMAP).setEnabled(pharmacyIndex != -1);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_DIAL:
makeCall();
break;
case MENU_SHARE:
share();
break;
case MENU_NAVIGATE:
openNavigation();
break;
case MENU_COPY:
copyAddrToClipboard();
break;
case MENU_SHOWONMAP:
showOnMap();
break;
}
return true;
}
private void showOnMap() {
GlobalVars.pharmaciesOverlay.onTap(pharmacyIndex);
Toast.makeText(getApplicationContext(), R.string.go_back, Toast.LENGTH_SHORT).show();
}
private void share() {
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("text/plain");
i.putExtra(Intent.EXTRA_TEXT, p.getName() + '\n' +
getString(R.string.address) + " " + p.getAddress() + '\n' +
getString(R.string.distance) + " " + p.getDistance().substring(0, p.getDistance().indexOf(".")) + "m" + '\n' +
getString(R.string.phone_number) + " " + (p.getPhoneNumber().equals("") ? getString(R.string.na) : p.getPhoneNumber()) + '\n' +
getString(R.string.at_service) + " " + (p.isAtService() ? getString(R.string.yes) : getString(R.string.no)));
startActivity(i);
}
private void copyAddrToClipboard() {
ClipboardManager cm = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
cm.setText(p.getAddress());
Toast.makeText(getApplicationContext(), R.string.copied_to_clipboard, Toast.LENGTH_SHORT).show();
}
private void makeCall() {
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + p.getPhoneNumber()));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
private void openNavigation() {
double lat = Double.parseDouble(p.getLatitude());
double lng = Double.parseDouble(p.getLongitude());
Location loc = GlobalVars.positioner.getLastLocation();
StringBuilder url = new StringBuilder();
url.append("http://maps.google.com/maps?f=d&hl=en");
url.append("&saddr=");
url.append( Double.toString(loc.getLatitude()));
url.append(",");
url.append( Double.toString(loc.getLongitude()));
url.append("&daddr=");
url.append( Double.toString(lat));
url.append(",");
url.append( Double.toString(lng));
url.append("&ie=UTF8&0&om=0");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse(url.toString()));
startActivity(intent);
}
}