package com.ved.musicmapapp.utils;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.json.JSONArray;
import org.json.JSONObject;
import android.graphics.Bitmap;
import android.net.http.AndroidHttpClient;
import android.support.v4.util.LruCache;
import android.util.Log;
import com.ved.musicmapapp.Objects.LocalSong;
public class UtilTask {
public static LruCache<String, Bitmap> mMemoryCache;
public static double distFrom(double lat1, double lng1, double lat2,double lng2) {
double earthRadius = 3958.75;
double dLat = Math.toRadians(lat2 - lat1);
double dLng = Math.toRadians(lng2 - lng1);
double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)+ Math.cos(Math.toRadians(lat1))
* Math.cos(Math.toRadians(lat2)) * Math.sin(dLng / 2)
* Math.sin(dLng / 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
double dist = earthRadius * c;
return dist;
}
public static double distanceKm(double lat1, double lon1, double lat2, double lon2) {
int EARTH_RADIUS_KM = 6371;
double lat1Rad = Math.toRadians(lat1);
double lat2Rad = Math.toRadians(lat2);
double deltaLonRad = Math.toRadians(lon2 - lon1);
return Math.acos(Math.sin(lat1Rad) * Math.sin(lat2Rad) + Math.cos(lat1Rad) * Math.cos(lat2Rad) * Math.cos(deltaLonRad)) * EARTH_RADIUS_KM;
}
public static double distanceMeter(double lat1, double lon1, double lat2, double lon2) {
double theta = lon1 - lon2;
double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2))
+ Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2))
* Math.cos(deg2rad(theta));
dist = Math.acos(dist);
dist = rad2deg(dist);
dist = dist * 60 * 1.1515;
//Log.e("location", "...." + dist);
double meter = (Math.round(dist / 0.62137)) * 1000;
return (meter);
}
private static double deg2rad(double deg) {
return (deg * Math.PI / 180.0);
}
private static double rad2deg(double rad) {
return (rad * 180.0 / Math.PI);
}
public static List<LocalSong> getArtistList(List<LocalSong> songList) {
List<LocalSong> artistArray = new ArrayList<LocalSong>();
for (int i = 0; i < songList.size(); i++) {
int match = 1;
LocalSong song = new LocalSong();
song = songList.get(i);
String artist = song.getArtist();
if (i == 0) {
artistArray.add(song);
} else {
for (int k = 0; k < artistArray.size(); k++) {
match = 1;
LocalSong meta = new LocalSong();
meta = artistArray.get(k);
String artist1 = meta.getArtist();
if (artist.equals(artist1)) {
match = 0;
break;
}
}
if (match == 1) {
artistArray.add(song);
}
}
}
return artistArray;
}
/**
* Saving image bitmap into memory
* @param key
* @param bitmap
*/
public static void addBitmapToMemoryCache(String key, Bitmap bitmap) {
if (getBitmapFromMemCache(key) == null) {
mMemoryCache.put(key, bitmap);
}
}
/**
* Getting image from Memory
* @param key
* @return
*/
public static Bitmap getBitmapFromMemCache(String key) {
return mMemoryCache.get(key);
}
/**
* Checking for song already exist in Parse or Not
* @param songTitle
* @param deviceID
* @return
*/
public static boolean checkExist(String songTitle, List<LocalSong> currentUserArray) {
boolean ok = false;
for (int i = 0; i < currentUserArray.size(); i++) {
LocalSong s = currentUserArray.get(i);
if (s.getTitle().equals(songTitle)) {
return !ok;
}
}
return ok;
}
private static final AndroidHttpClient ANDROID_HTTP_CLIENT = AndroidHttpClient.newInstance(Statics.class.getName());
public static String fetchCityNameUsingGoogleMap(Double latitute, Double longitute) {
String googleMapUrl = "http://maps.googleapis.com/maps/api/geocode/json?latlng=" + latitute + "," + longitute + "&sensor=false";
try {
JSONObject googleMapResponse = new JSONObject(ANDROID_HTTP_CLIENT.execute(new HttpGet(googleMapUrl), new BasicResponseHandler()));
// many nested loops.. not great -> use expression instead
// loop among all results
JSONArray results = (JSONArray) googleMapResponse.get("results");
for (int i = 0; i < results.length(); i++) {
// loop among all addresses within this result
JSONObject result = results.getJSONObject(i);
if (result.has("address_components")) {
JSONArray addressComponents = result.getJSONArray("address_components");
// loop among all address component to find a 'locality' or
// 'sublocality'
for (int j = 0; j < addressComponents.length(); j++) {
JSONObject addressComponent = addressComponents.getJSONObject(j);
if (result.has("types")) {
JSONArray types = addressComponent.getJSONArray("types");
// search for locality and sublocality
String cityName = null;
for (int k = 0; k < types.length(); k++) {
if ("locality".equals(types.getString(k)) && cityName == null) {
if (addressComponent.has("long_name")) {
cityName = addressComponent.getString("long_name");
Log.e("city name long_name", "..."+ cityName);
} else if (addressComponent.has("short_name")) {
cityName = addressComponent.getString("short_name");
Log.e("city name short_name", "..." + cityName);
}
}
}
if (cityName != null) {
return cityName;
}
}
}
}
}
} catch (Exception ignored) {
ignored.printStackTrace();
}
return null;
}
}