package com.getsentry.raven.android;
import android.content.Context;
import android.content.pm.PackageManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
/**
* Raven Android utility methods.
*/
public final class Util {
private static final String TAG = Util.class.getName();
/**
* Hide constructor.
*/
private Util() {
}
/**
* Check whether the application has been granted a certain permission.
*
* @param ctx Android application context
* @param permission Permission as a string
* @return true if permissions is granted
*/
public static boolean checkPermission(Context ctx, String permission) {
int res = ctx.checkCallingOrSelfPermission(permission);
return (res == PackageManager.PERMISSION_GRANTED);
}
/**
* Check whether the application has internet access at a point in time.
*
* @param ctx Android application context
* @return true if the application has internet access
*/
public static boolean isConnected(Context ctx) {
ConnectivityManager connectivityManager =
(ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
/**
* Check whether Raven should attempt to send an event, or just immediately store it.
*
* @param ctx Android application context
* @return true if Raven should attempt to send an event
*/
public static boolean shouldAttemptToSend(Context ctx) {
if (!checkPermission(ctx, android.Manifest.permission.ACCESS_NETWORK_STATE)) {
// we can't check whether the connection is up, so the
// best we can do is try
return true;
}
return isConnected(ctx);
}
}