package fi.bitrite.android.ws.util;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.location.Location;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.preference.PreferenceManager;
import android.text.Html;
import android.text.Spanned;
import android.text.format.DateUtils;
import android.util.Log;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import com.google.android.gms.analytics.HitBuilders;
import com.google.android.gms.analytics.Tracker;
import com.google.android.gms.maps.model.LatLng;
import java.util.Calendar;
import fi.bitrite.android.ws.BuildConfig;
import fi.bitrite.android.ws.R;
import fi.bitrite.android.ws.WSAndroidApplication;
import fi.bitrite.android.ws.activity.FeedbackActivity;
/**
* General simple tools, mostly public methods.
*/
public class Tools {
// Convert text ("About me" == Comments from user data) to form to add to TextView
public static Spanned siteHtmlToHtml(String text) {
return Html.fromHtml(text.replace("\n", "<br/>"));
}
/**
* Return distance between two points in km/miles
*
* @param l1
* @param l2
* @param units (mi or km)
* @return
*/
static public int calculateDistanceBetween(Location l1, Location l2, String units) {
double factor = units.equals("mi") ? 1609.34 : 1000;
float meters = l1.distanceTo(l2);
return (int) (meters / factor);
}
static public int calculateDistanceBetween(LatLng l1, Location l2, String units) {
Location location = new Location("fromlatlng");
location.setLatitude(l1.latitude);
location.setLongitude(l1.longitude);
return calculateDistanceBetween(location, l2, units);
}
static public boolean isNetworkConnected(Context context) {
ConnectivityManager cm =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
activeNetwork.isConnectedOrConnecting();
if (BuildConfig.DEBUG) {
boolean simulateDisconnected = PreferenceManager.getDefaultSharedPreferences(context)
.getBoolean("developer_no_network", false);
;
if (simulateDisconnected) {
return false;
}
}
return isConnected;
}
/**
* Send a report to Google Analytics about category/action
*
* @param context
* @param category
* @param action
*/
static public void gaReportException(Context context, String category, String action) {
Tracker exceptionTracker = ((WSAndroidApplication) context.getApplicationContext())
.getTracker(WSAndroidApplication.TrackerName.APP_TRACKER);
exceptionTracker.send(new HitBuilders.EventBuilder()
.setCategory(category)
.setAction(action)
.build()
);
}
/**
* Scale an image to its view
* From https://argillander.wordpress.com/2011/11/24/scale-image-into-imageview-then-resize-imageview-to-match-the-image/
*
* @param view
* @param boundBoxInDp
*/
static public void scaleImage(ImageView view, int boundBoxInDp)
{
// Get the ImageView and its bitmap
Drawable drawing = view.getDrawable();
Bitmap bitmap = ((BitmapDrawable)drawing).getBitmap();
// Get current dimensions
int width = bitmap.getWidth();
int height = bitmap.getHeight();
// Determine how much to scale: the dimension requiring less scaling is
// closer to the its side. This way the image always stays inside your
// bounding box AND either x/y axis touches it.
float xScale = ((float) boundBoxInDp) / width;
float yScale = ((float) boundBoxInDp) / height;
float scale = (xScale <= yScale) ? xScale : yScale;
// Create a matrix for the scaling and add the scaling data
Matrix matrix = new Matrix();
matrix.postScale(scale, scale);
// Create a new bitmap and convert it to a format understood by the ImageView
Bitmap scaledBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
BitmapDrawable result = new BitmapDrawable(scaledBitmap);
width = scaledBitmap.getWidth();
height = scaledBitmap.getHeight();
// Apply the scaled bitmap
view.setImageDrawable(result);
// Now change ImageView's dimensions to match the scaled image
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) view.getLayoutParams();
params.width = width;
params.height = height;
view.setLayoutParams(params);
}
/**
* Get locale-sensitive date string in format Month Year
*
* @param context
* @param timeInMillis
* @return
*/
public static String getDateAsMY(Context context, long timeInMillis) {
int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR | DateUtils.FORMAT_NO_MONTH_DAY;
String result = DateUtils.formatDateTime(context, timeInMillis, flags);
return result;
}
}