package fr.prcaen.externalresources; import android.annotation.TargetApi; import android.content.ContentResolver; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.provider.Settings; import android.support.annotation.AnyRes; import android.support.annotation.ColorInt; import android.support.annotation.ColorRes; import android.support.annotation.IdRes; import android.support.annotation.Nullable; import static android.Manifest.permission.ACCESS_NETWORK_STATE; import static android.Manifest.permission.INTERNET; import static android.content.Context.CONNECTIVITY_SERVICE; import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static android.os.Build.VERSION.SDK_INT; import static android.os.Build.VERSION_CODES.JELLY_BEAN_MR1; import static android.os.Build.VERSION_CODES.M; public final class Utils { @Nullable public static NetworkInfo getActiveNetworkInfo(Context context) { if (!hasNetworkStatePermission(context)) { Logger.w(ExternalResources.TAG, "To work perfectly, ACCESS_NETWORK_STATE permission is required."); return null; } ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE); return connectivityManager.getActiveNetworkInfo(); } @TargetApi(JELLY_BEAN_MR1) @SuppressWarnings("deprecation") public static boolean isAirplaneModeOn(Context context) { ContentResolver contentResolver = context.getContentResolver(); try { if (SDK_INT < JELLY_BEAN_MR1) { return Settings.System.getInt(contentResolver, Settings.System.AIRPLANE_MODE_ON, 0) != 0; } else { return Settings.Global.getInt(contentResolver, Settings.Global.AIRPLANE_MODE_ON, 0) != 0; } } catch (NullPointerException | SecurityException e) { return false; } } public static boolean hasInternetPermission(Context context) { return hasPermission(context, INTERNET); } public static boolean hasNetworkStatePermission(Context context) { return hasPermission(context, ACCESS_NETWORK_STATE); } @SuppressWarnings("deprecation") @ColorInt public static int getColor(Context context, @ColorRes int resId) { if (SDK_INT >= M) { return context.getColor(resId); } else { return context.getResources().getColor(resId); } } @Nullable public static String getAndroidResourceEntryName(Context context, @AnyRes int resId) { try { return context.getResources().getResourceEntryName(resId); } catch (android.content.res.Resources.NotFoundException e) { return null; } } @IdRes public static int getAndroidResourceIdentifier(Context context, String key, String defType) { return context.getResources().getIdentifier(key, defType, context.getPackageName()); } private static boolean hasPermission(Context context, String permission) { return context.checkCallingOrSelfPermission(permission) == PERMISSION_GRANTED; } }