package com.munengan7camp.kiblatbymap;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import
android.support.v4.app.FragmentActivity;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import
com.google.android.gms.ads.InterstitialAd;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import
com.google.android.gms.maps.OnMapReadyCallback;
import
com.google.android.gms.maps.SupportMapFragment;
import
com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Polyline;
import
com.google.android.gms.maps.model.PolylineOptions;
public class MapsActivity extends
FragmentActivity implements OnMapReadyCallback ,
GoogleMap.OnMapLongClickListener {
private GoogleMap mMap;
private AdView adView;
private Polyline garis;
private TextView txtView;
private ImageButton btnKaabah;
private InterstitialAd interstitial;
public LocationManager locationManager;
private static final LatLng mecca = new LatLng(21.422487 , 39.826206);
double jarak;
String provider;
private double hitungJarak(double lat1, double lon1, double lat2, double
lon2){
return (
(
(
Math.acos(Math.sin(lat1 * Math.PI / 180) *
Math.sin(lat2 *
Math.PI / 180) +
Math.cos(lat1 *
Math.PI / 180) *
Math.cos(lat2 * Math.PI / 180) *
Math.cos((lon1 - lon2) * Math.PI / 180)) *
180 / Math.PI
) * 60 * 1.1515
) * 1.609344
);
}
private void getLokasi() {
Criteria kriteria = new Criteria();
String prov = locationManager.getBestProvider (kriteria,true);
if (prov != provider) {
provider = prov; //locationManager.getBestProvider (kriteria,true);
Toast.makeText(this, "Provider : " + provider,
Toast.LENGTH_SHORT).show();
}
Location location = locationManager.getLastKnownLocation(provider);
if (location != null) {
double lat_pos=location.getLatitude();
double lng_pos=location.getLongitude();
LatLng lokasi = new LatLng(lat_pos, lng_pos);
float zoomVal = mMap.getCameraPosition().zoom;
if (zoomVal < 9) zoomVal=16;
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(lokasi,zoomVal));
garis = mMap.addPolyline(new PolylineOptions().add(mecca,lokasi).width(3).color(Color.BLUE).geodesic(true));
jarak = hitungJarak(mecca.latitude,mecca.longitude,lat_pos,lng_pos);
txtView.setText("
"+String.format("%.2f",jarak)+" Km ");
} else {
txtView.setText(" Location fail ");
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
// TextView init
txtView = (TextView) findViewById(R.id.textView);
btnKaabah = (ImageButton) findViewById(R.id.buttonKabah);
// Map init
SupportMapFragment mapFragment = (SupportMapFragment)
getSupportFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
// Mecca button act
btnKaabah.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
float zoomVal =
mMap.getCameraPosition().zoom;
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(mecca,
zoomVal));
}
});
// Ads [banner] init
adView = (AdView) findViewById(R.id.adView);
// Ads [interstitial] init
interstitial = new InterstitialAd(this);
interstitial.setAdUnitId(getString(R.string.interstitial_ad_unit_id));
// Ads proceed
AdRequest adRequest = new AdRequest.Builder().build();
adView.loadAd(adRequest);
interstitial.loadAd(adRequest);
interstitial.setAdListener(new AdListener() {
public void onAdLoaded() {
displayInterstitial();
}
});
locationManager = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);
}
public void displayInterstitial() {
if (interstitial.isLoaded()) {
interstitial.show();
}
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
mMap.setPadding(0,0,0,62);
mMap.setMyLocationEnabled(true);
mMap.getUiSettings().setZoomControlsEnabled(true);
mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
getLokasi();
mMap.setOnMyLocationButtonClickListener(new
GoogleMap.OnMyLocationButtonClickListener(){
@Override
public boolean onMyLocationButtonClick() {
if (garis != null) {
garis.remove();
}
getLokasi();
return false;
}
});
mMap.setOnMapLongClickListener(this);
}
@Override
public void onMapLongClick(LatLng point) {
if (garis != null) {
garis.remove();
}
garis = this.mMap.addPolyline(new PolylineOptions().add(mecca,point).width(2).color(Color.RED).geodesic(true));
// tampilkan jarak
jarak =
hitungJarak(mecca.latitude,mecca.longitude,point.latitude,point.longitude);
txtView.setText("
"+String.format("%.2f",jarak)+" Km ");
}
@Override
protected void onPause() {
if (adView != null){
adView.pause();
}
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
if (adView != null){
adView.resume();
}
}
@Override
protected void onDestroy() {
if (adView != null){
adView.destroy();
}
super.onDestroy();
}
}