package org.wordpress.android.util; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import android.content.Context; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.content.res.Resources; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Build; import android.util.DisplayMetrics; import android.util.Log; import org.wordpress.android.WordPress; /** * As of January 20 2012: The BlackBerry Runtime for Android Apps supports * Android 2.3.3 applications. * * Unsupported App Types: - Widget apps : Apps that are only meant to be widgets * are not supported - Apps that include no launchable Activity - Apps that * include more than one launchable Activity - Apps whose minimum required * Android API level is more than 10, and whose maximum supported level is less * than 10 * * Unsupported Hardware Features: - Telephony (including SMS and MMS) - * Bluetooth - Camera: The intent to launch the camera is supported. However, * currently the Camera class in the Android SDK is not supported. As a result, * although you can launch the camera application, you cannot access the Camera * hardware. - NFC - Barometers - Ambient light sensor - Proximity sensor - VoIP * * Unsupported Software Features: - Vending (In App Payments): * com.android.vending - Cloud To Device Messaging (Push): * com.google.android.c2dm - Google Maps: com.google.android.maps - Text to * Speech: com.google.tts * * * Major Details here: https://bdsc.webapps.blackberry.com/android/apisupport * * * @author daniloercoli * */ public class DeviceUtils { private DeviceUtils() { /* * isPlayBook = android.os.Build.MANUFACTURER.equalsIgnoreCase( * "Research in Motion" ) && android.os.Build.MODEL.startsWith( * "BlackBerry Runtime for Android" ); */ }; public static boolean isBlackBerry() { return System.getProperty("os.name").equalsIgnoreCase("qnx"); } public boolean isKindleFire() { return android.os.Build.MODEL.equalsIgnoreCase("kindle fire"); } public static String getBlackBerryUserAgent() { return "wp-blackberry/" + WordPress.versionName; } /** * Checks camera availability recursively based on API level. * * TODO: change "android.hardware.camera.front" and * "android.hardware.camera.any" to * {@link PackageManager#FEATURE_CAMERA_FRONT} and * {@link PackageManager#FEATURE_CAMERA_ANY}, respectively, once they become * accessible or minSdk version is incremented. * * @param context * The context. * @return Whether camera is available. */ public static boolean hasCamera(Context context) { final PackageManager pm = context.getPackageManager(); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.GINGERBREAD) { return pm.hasSystemFeature(PackageManager.FEATURE_CAMERA); } if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) { return pm.hasSystemFeature(PackageManager.FEATURE_CAMERA) || pm.hasSystemFeature("android.hardware.camera.front"); } return pm.hasSystemFeature("android.hardware.camera.any"); } public static String getDeviceName(Context context) { String manufacturer = Build.MANUFACTURER; String undecodedModel = Build.MODEL; String model = null; try { Properties prop = new Properties(); InputStream fileStream; //Read the device name from a precomplied list: see http://making.meetup.com/post/29648976176/human-readble-android-device-names fileStream = context.getAssets().open("android_models.properties"); prop.load(fileStream); fileStream.close(); String decodedModel = prop.getProperty(undecodedModel.replaceAll( " ", "_")); if (decodedModel != null && !decodedModel.trim().equals("")) { model = decodedModel; } } catch (IOException e) { Log.e("WORDPRESS", e.getMessage()); } if (model == null) { //Device model not found in the list if (undecodedModel.startsWith(manufacturer)) { model = capitalize(undecodedModel); } else { model = capitalize(manufacturer) + " " + undecodedModel; } } return model; } private static String capitalize(String s) { if (s == null || s.length() == 0) { return ""; } char first = s.charAt(0); if (Character.isUpperCase(first)) { return s; } else { return Character.toUpperCase(first) + s.substring(1); } } public static boolean isConnected(Context context) { ConnectivityManager cm = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); if (cm == null) { return false; } NetworkInfo ni = cm.getActiveNetworkInfo(); if (ni != null) { return cm.getActiveNetworkInfo().isConnected(); } return false; } public static int getSmallestWidthPixcel(Resources r) { DisplayMetrics metrics = r.getDisplayMetrics(); if (r.getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { return metrics.heightPixels; } else { return metrics.widthPixels; } } public static boolean isOverEqualThanHoneycomb() { return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB; } public static boolean isLessThanJB() { return Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN; } }