content: /*
   * Copyright (C) 2014 AChep@xda <artemchep@gmail.com>
   *
   * This program is free software; you can redistribute it and/or
   * modify it under the terms of the GNU General Public License
   * as published by the Free Software Foundation; either version 2
   * of the License, or (at your option) any later version.
   *
   * This program is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU General Public License for more details.
   *
   * You should have received a copy of the GNU General Public License
   * along with this program; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
   * MA  02110-1301, USA.
   */
  package com.achep.base;
  
  import android.os.Build;
  
  /**
   * Contains params of current device. This is nice because we can override
   * some here to test compatibility with old API.
   *
   * @author Artem Chepurnoy
   */
  public class Device {
  
      /**
       * The user-visible SDK version of the framework;
       * its possible values are defined in Build.VERSION_CODES.
       */
      public static final int API_VERSION = Build.VERSION.SDK_INT;
  
      /**
       * The name of the Android version represented by two or three
       * letters. Example: KK -> KitKat, KKW -> KitKat Watches etc.
       */
      public static final String API_VERSION_NAME_SHORT;
  
      static {
          switch (API_VERSION) {
              case Build.VERSION_CODES.JELLY_BEAN:
                  API_VERSION_NAME_SHORT = "JB";
                  break;
              case Build.VERSION_CODES.JELLY_BEAN_MR1:
                  API_VERSION_NAME_SHORT = "JB1";
                  break;
              case Build.VERSION_CODES.JELLY_BEAN_MR2:
                  API_VERSION_NAME_SHORT = "JB2";
                  break;
              case Build.VERSION_CODES.KITKAT:
                  API_VERSION_NAME_SHORT = "KK";
                  break;
              case Build.VERSION_CODES.KITKAT_WATCH:
                  API_VERSION_NAME_SHORT = "KKW";
                  break;
              case Build.VERSION_CODES.LOLLIPOP:
                  API_VERSION_NAME_SHORT = "LP";
                  break;
              case Build.VERSION_CODES.LOLLIPOP_MR1:
                  API_VERSION_NAME_SHORT = "LP1";
                  break;
              case Build.VERSION_CODES.M:
                  API_VERSION_NAME_SHORT = "M";
                  break;
              default:
                  API_VERSION_NAME_SHORT = hasMarshmallowApi() ? "X" : "WTF";
          }
      }
  
      /**
       * @return {@code true} if device is device supports given API version,
       * {@code false} otherwise.
       */
      public static boolean hasTargetApi(int api) {
          return API_VERSION >= api;
      }
  
      /**
       * @return {@code true} if device is running
       * {@link Build.VERSION_CODES#M Marshmallow 6} or higher, {@code false} otherwise.
       */
      public static boolean hasMarshmallowApi() {
          return hasTargetApi(Build.VERSION_CODES.M);
      }
  
      /**
       * @return {@code true} if device is running
       * {@link Build.VERSION_CODES#LOLLIPOP_MR1 Lollipop 5.1} or higher, {@code false} otherwise.
       */
      public static boolean hasLollipopMR1Api() {
          return hasTargetApi(Build.VERSION_CODES.LOLLIPOP_MR1);
      }
  
      /**
       * @return {@code true} if device is running
       * {@link Build.VERSION_CODES#LOLLIPOP Lollipop} or higher, {@code false} otherwise.
       */
      public static boolean hasLollipopApi() {
          return hasTargetApi(Build.VERSION_CODES.LOLLIPOP);
      }
  
      /**
       * @return {@code true} if device is running
       * {@link Build.VERSION_CODES#KITKAT_WATCH KitKat watch} or higher, {@code false} otherwise.
       */
      public static boolean hasKitKatWatchApi() {
          return hasTargetApi(Build.VERSION_CODES.KITKAT_WATCH);
      }
  
      /**
       * @return {@code true} if device is running
       * {@link Build.VERSION_CODES#KITKAT KitKat} or higher, {@code false} otherwise.
       */
      public static boolean hasKitKatApi() {
          return hasTargetApi(Build.VERSION_CODES.KITKAT);
      }
  
      /**
       * @return {@code true} if device is running
       * {@link Build.VERSION_CODES#JELLY_BEAN_MR2 Jelly Bean 4.3} or higher, {@code false} otherwise.
       */
      public static boolean hasJellyBeanMR2Api() {
          return hasTargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2);
      }
  
      /**
       * @return {@code true} if device is running
       * {@link Build.VERSION_CODES#JELLY_BEAN_MR1 Jelly Bean 4.2} or higher, {@code false} otherwise.
       */
      public static boolean hasJellyBeanMR1Api() {
          return hasTargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1);
      }
  
      /**
       * @return {@code true} if device is produced by LGE and probably has
       * buggy software.
       */
      public static boolean isLge() {
          return Build.BRAND.equalsIgnoreCase("lge");
      }
  
  }
  