Home | History | Annotate | Download | only in android
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef BASE_ANDROID_BUILD_INFO_H_
      6 #define BASE_ANDROID_BUILD_INFO_H_
      7 
      8 #include <jni.h>
      9 
     10 #include <string>
     11 
     12 #include "base/base_export.h"
     13 #include "base/memory/singleton.h"
     14 
     15 namespace base {
     16 namespace android {
     17 
     18 // BuildInfo is a singleton class that stores android build and device
     19 // information. It will be called from Android specific code and gets used
     20 // primarily in crash reporting.
     21 
     22 // It is also used to store the last java exception seen during JNI.
     23 // TODO(nileshagrawal): Find a better place to store this info.
     24 class BASE_EXPORT BuildInfo {
     25  public:
     26 
     27   ~BuildInfo() {}
     28 
     29   // Static factory method for getting the singleton BuildInfo instance.
     30   // Note that ownership is not conferred on the caller and the BuildInfo in
     31   // question isn't actually freed until shutdown. This is ok because there
     32   // should only be one instance of BuildInfo ever created.
     33   static BuildInfo* GetInstance();
     34 
     35   // Const char* is used instead of std::strings because these values must be
     36   // available even if the process is in a crash state. Sadly
     37   // std::string.c_str() doesn't guarantee that memory won't be allocated when
     38   // it is called.
     39   const char* device() const {
     40     return device_;
     41   }
     42 
     43   const char* manufacturer() const {
     44     return manufacturer_;
     45   }
     46 
     47   const char* model() const {
     48     return model_;
     49   }
     50 
     51   const char* brand() const {
     52     return brand_;
     53   }
     54 
     55   const char* android_build_id() const {
     56     return android_build_id_;
     57   }
     58 
     59   const char* android_build_fp() const {
     60     return android_build_fp_;
     61   }
     62 
     63   const char* package_version_code() const {
     64     return package_version_code_;
     65   }
     66 
     67   const char* package_version_name() const {
     68     return package_version_name_;
     69   }
     70 
     71   const char* package_label() const {
     72     return package_label_;
     73   }
     74 
     75   const char* package_name() const {
     76     return package_name_;
     77   }
     78 
     79   const char* build_type() const {
     80     return build_type_;
     81   }
     82 
     83   int sdk_int() const {
     84     return sdk_int_;
     85   }
     86 
     87   const char* java_exception_info() const {
     88     return java_exception_info_;
     89   }
     90 
     91   void set_java_exception_info(const std::string& info);
     92 
     93   static bool RegisterBindings(JNIEnv* env);
     94 
     95  private:
     96   friend struct BuildInfoSingletonTraits;
     97 
     98   explicit BuildInfo(JNIEnv* env);
     99 
    100   // Const char* is used instead of std::strings because these values must be
    101   // available even if the process is in a crash state. Sadly
    102   // std::string.c_str() doesn't guarantee that memory won't be allocated when
    103   // it is called.
    104   const char* const device_;
    105   const char* const manufacturer_;
    106   const char* const model_;
    107   const char* const brand_;
    108   const char* const android_build_id_;
    109   const char* const android_build_fp_;
    110   const char* const package_version_code_;
    111   const char* const package_version_name_;
    112   const char* const package_label_;
    113   const char* const package_name_;
    114   const char* const build_type_;
    115   const int sdk_int_;
    116   // This is set via set_java_exception_info, not at constructor time.
    117   const char* java_exception_info_;
    118 
    119   DISALLOW_COPY_AND_ASSIGN(BuildInfo);
    120 };
    121 
    122 }  // namespace android
    123 }  // namespace base
    124 
    125 #endif  // BASE_ANDROID_BUILD_INFO_H_
    126