1*635a8641SAndroid Build Coastguard Worker // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2*635a8641SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*635a8641SAndroid Build Coastguard Worker // found in the LICENSE file. 4*635a8641SAndroid Build Coastguard Worker 5*635a8641SAndroid Build Coastguard Worker #ifndef BASE_ANDROID_BUILD_INFO_H_ 6*635a8641SAndroid Build Coastguard Worker #define BASE_ANDROID_BUILD_INFO_H_ 7*635a8641SAndroid Build Coastguard Worker 8*635a8641SAndroid Build Coastguard Worker #include <jni.h> 9*635a8641SAndroid Build Coastguard Worker 10*635a8641SAndroid Build Coastguard Worker #include <string> 11*635a8641SAndroid Build Coastguard Worker #include <vector> 12*635a8641SAndroid Build Coastguard Worker 13*635a8641SAndroid Build Coastguard Worker #include "base/base_export.h" 14*635a8641SAndroid Build Coastguard Worker #include "base/macros.h" 15*635a8641SAndroid Build Coastguard Worker #include "base/memory/singleton.h" 16*635a8641SAndroid Build Coastguard Worker 17*635a8641SAndroid Build Coastguard Worker namespace base { 18*635a8641SAndroid Build Coastguard Worker namespace android { 19*635a8641SAndroid Build Coastguard Worker 20*635a8641SAndroid Build Coastguard Worker // This enumeration maps to the values returned by BuildInfo::sdk_int(), 21*635a8641SAndroid Build Coastguard Worker // indicating the Android release associated with a given SDK version. 22*635a8641SAndroid Build Coastguard Worker enum SdkVersion { 23*635a8641SAndroid Build Coastguard Worker SDK_VERSION_JELLY_BEAN = 16, 24*635a8641SAndroid Build Coastguard Worker SDK_VERSION_JELLY_BEAN_MR1 = 17, 25*635a8641SAndroid Build Coastguard Worker SDK_VERSION_JELLY_BEAN_MR2 = 18, 26*635a8641SAndroid Build Coastguard Worker SDK_VERSION_KITKAT = 19, 27*635a8641SAndroid Build Coastguard Worker SDK_VERSION_KITKAT_WEAR = 20, 28*635a8641SAndroid Build Coastguard Worker SDK_VERSION_LOLLIPOP = 21, 29*635a8641SAndroid Build Coastguard Worker SDK_VERSION_LOLLIPOP_MR1 = 22, 30*635a8641SAndroid Build Coastguard Worker SDK_VERSION_MARSHMALLOW = 23, 31*635a8641SAndroid Build Coastguard Worker SDK_VERSION_NOUGAT = 24, 32*635a8641SAndroid Build Coastguard Worker SDK_VERSION_NOUGAT_MR1 = 25, 33*635a8641SAndroid Build Coastguard Worker SDK_VERSION_OREO = 26, 34*635a8641SAndroid Build Coastguard Worker }; 35*635a8641SAndroid Build Coastguard Worker 36*635a8641SAndroid Build Coastguard Worker // BuildInfo is a singleton class that stores android build and device 37*635a8641SAndroid Build Coastguard Worker // information. It will be called from Android specific code and gets used 38*635a8641SAndroid Build Coastguard Worker // primarily in crash reporting. 39*635a8641SAndroid Build Coastguard Worker class BASE_EXPORT BuildInfo { 40*635a8641SAndroid Build Coastguard Worker public: 41*635a8641SAndroid Build Coastguard Worker ~BuildInfo()42*635a8641SAndroid Build Coastguard Worker ~BuildInfo() {} 43*635a8641SAndroid Build Coastguard Worker 44*635a8641SAndroid Build Coastguard Worker // Static factory method for getting the singleton BuildInfo instance. 45*635a8641SAndroid Build Coastguard Worker // Note that ownership is not conferred on the caller and the BuildInfo in 46*635a8641SAndroid Build Coastguard Worker // question isn't actually freed until shutdown. This is ok because there 47*635a8641SAndroid Build Coastguard Worker // should only be one instance of BuildInfo ever created. 48*635a8641SAndroid Build Coastguard Worker static BuildInfo* GetInstance(); 49*635a8641SAndroid Build Coastguard Worker 50*635a8641SAndroid Build Coastguard Worker // Const char* is used instead of std::strings because these values must be 51*635a8641SAndroid Build Coastguard Worker // available even if the process is in a crash state. Sadly 52*635a8641SAndroid Build Coastguard Worker // std::string.c_str() doesn't guarantee that memory won't be allocated when 53*635a8641SAndroid Build Coastguard Worker // it is called. device()54*635a8641SAndroid Build Coastguard Worker const char* device() const { 55*635a8641SAndroid Build Coastguard Worker return device_; 56*635a8641SAndroid Build Coastguard Worker } 57*635a8641SAndroid Build Coastguard Worker manufacturer()58*635a8641SAndroid Build Coastguard Worker const char* manufacturer() const { 59*635a8641SAndroid Build Coastguard Worker return manufacturer_; 60*635a8641SAndroid Build Coastguard Worker } 61*635a8641SAndroid Build Coastguard Worker model()62*635a8641SAndroid Build Coastguard Worker const char* model() const { 63*635a8641SAndroid Build Coastguard Worker return model_; 64*635a8641SAndroid Build Coastguard Worker } 65*635a8641SAndroid Build Coastguard Worker brand()66*635a8641SAndroid Build Coastguard Worker const char* brand() const { 67*635a8641SAndroid Build Coastguard Worker return brand_; 68*635a8641SAndroid Build Coastguard Worker } 69*635a8641SAndroid Build Coastguard Worker android_build_id()70*635a8641SAndroid Build Coastguard Worker const char* android_build_id() const { 71*635a8641SAndroid Build Coastguard Worker return android_build_id_; 72*635a8641SAndroid Build Coastguard Worker } 73*635a8641SAndroid Build Coastguard Worker android_build_fp()74*635a8641SAndroid Build Coastguard Worker const char* android_build_fp() const { 75*635a8641SAndroid Build Coastguard Worker return android_build_fp_; 76*635a8641SAndroid Build Coastguard Worker } 77*635a8641SAndroid Build Coastguard Worker gms_version_code()78*635a8641SAndroid Build Coastguard Worker const char* gms_version_code() const { 79*635a8641SAndroid Build Coastguard Worker return gms_version_code_; 80*635a8641SAndroid Build Coastguard Worker } 81*635a8641SAndroid Build Coastguard Worker host_package_name()82*635a8641SAndroid Build Coastguard Worker const char* host_package_name() const { return host_package_name_; } 83*635a8641SAndroid Build Coastguard Worker host_version_code()84*635a8641SAndroid Build Coastguard Worker const char* host_version_code() const { return host_version_code_; } 85*635a8641SAndroid Build Coastguard Worker host_package_label()86*635a8641SAndroid Build Coastguard Worker const char* host_package_label() const { return host_package_label_; } 87*635a8641SAndroid Build Coastguard Worker package_version_code()88*635a8641SAndroid Build Coastguard Worker const char* package_version_code() const { 89*635a8641SAndroid Build Coastguard Worker return package_version_code_; 90*635a8641SAndroid Build Coastguard Worker } 91*635a8641SAndroid Build Coastguard Worker package_version_name()92*635a8641SAndroid Build Coastguard Worker const char* package_version_name() const { 93*635a8641SAndroid Build Coastguard Worker return package_version_name_; 94*635a8641SAndroid Build Coastguard Worker } 95*635a8641SAndroid Build Coastguard Worker package_name()96*635a8641SAndroid Build Coastguard Worker const char* package_name() const { 97*635a8641SAndroid Build Coastguard Worker return package_name_; 98*635a8641SAndroid Build Coastguard Worker } 99*635a8641SAndroid Build Coastguard Worker 100*635a8641SAndroid Build Coastguard Worker // Will be empty string if no app id is assigned. firebase_app_id()101*635a8641SAndroid Build Coastguard Worker const char* firebase_app_id() const { return firebase_app_id_; } 102*635a8641SAndroid Build Coastguard Worker custom_themes()103*635a8641SAndroid Build Coastguard Worker const char* custom_themes() const { return custom_themes_; } 104*635a8641SAndroid Build Coastguard Worker resources_version()105*635a8641SAndroid Build Coastguard Worker const char* resources_version() const { return resources_version_; } 106*635a8641SAndroid Build Coastguard Worker build_type()107*635a8641SAndroid Build Coastguard Worker const char* build_type() const { 108*635a8641SAndroid Build Coastguard Worker return build_type_; 109*635a8641SAndroid Build Coastguard Worker } 110*635a8641SAndroid Build Coastguard Worker board()111*635a8641SAndroid Build Coastguard Worker const char* board() const { return board_; } 112*635a8641SAndroid Build Coastguard Worker installer_package_name()113*635a8641SAndroid Build Coastguard Worker const char* installer_package_name() const { return installer_package_name_; } 114*635a8641SAndroid Build Coastguard Worker abi_name()115*635a8641SAndroid Build Coastguard Worker const char* abi_name() const { return abi_name_; } 116*635a8641SAndroid Build Coastguard Worker extracted_file_suffix()117*635a8641SAndroid Build Coastguard Worker std::string extracted_file_suffix() const { return extracted_file_suffix_; } 118*635a8641SAndroid Build Coastguard Worker sdk_int()119*635a8641SAndroid Build Coastguard Worker int sdk_int() const { 120*635a8641SAndroid Build Coastguard Worker return sdk_int_; 121*635a8641SAndroid Build Coastguard Worker } 122*635a8641SAndroid Build Coastguard Worker is_at_least_p()123*635a8641SAndroid Build Coastguard Worker bool is_at_least_p() const { return is_at_least_p_; } 124*635a8641SAndroid Build Coastguard Worker 125*635a8641SAndroid Build Coastguard Worker private: 126*635a8641SAndroid Build Coastguard Worker friend struct BuildInfoSingletonTraits; 127*635a8641SAndroid Build Coastguard Worker 128*635a8641SAndroid Build Coastguard Worker explicit BuildInfo(const std::vector<std::string>& params); 129*635a8641SAndroid Build Coastguard Worker 130*635a8641SAndroid Build Coastguard Worker // Const char* is used instead of std::strings because these values must be 131*635a8641SAndroid Build Coastguard Worker // available even if the process is in a crash state. Sadly 132*635a8641SAndroid Build Coastguard Worker // std::string.c_str() doesn't guarantee that memory won't be allocated when 133*635a8641SAndroid Build Coastguard Worker // it is called. 134*635a8641SAndroid Build Coastguard Worker const char* const brand_; 135*635a8641SAndroid Build Coastguard Worker const char* const device_; 136*635a8641SAndroid Build Coastguard Worker const char* const android_build_id_; 137*635a8641SAndroid Build Coastguard Worker const char* const manufacturer_; 138*635a8641SAndroid Build Coastguard Worker const char* const model_; 139*635a8641SAndroid Build Coastguard Worker const int sdk_int_; 140*635a8641SAndroid Build Coastguard Worker const char* const build_type_; 141*635a8641SAndroid Build Coastguard Worker const char* const board_; 142*635a8641SAndroid Build Coastguard Worker const char* const host_package_name_; 143*635a8641SAndroid Build Coastguard Worker const char* const host_version_code_; 144*635a8641SAndroid Build Coastguard Worker const char* const host_package_label_; 145*635a8641SAndroid Build Coastguard Worker const char* const package_name_; 146*635a8641SAndroid Build Coastguard Worker const char* const package_version_code_; 147*635a8641SAndroid Build Coastguard Worker const char* const package_version_name_; 148*635a8641SAndroid Build Coastguard Worker const char* const android_build_fp_; 149*635a8641SAndroid Build Coastguard Worker const char* const gms_version_code_; 150*635a8641SAndroid Build Coastguard Worker const char* const installer_package_name_; 151*635a8641SAndroid Build Coastguard Worker const char* const abi_name_; 152*635a8641SAndroid Build Coastguard Worker const char* const firebase_app_id_; 153*635a8641SAndroid Build Coastguard Worker const char* const custom_themes_; 154*635a8641SAndroid Build Coastguard Worker const char* const resources_version_; 155*635a8641SAndroid Build Coastguard Worker // Not needed by breakpad. 156*635a8641SAndroid Build Coastguard Worker const std::string extracted_file_suffix_; 157*635a8641SAndroid Build Coastguard Worker const int is_at_least_p_; 158*635a8641SAndroid Build Coastguard Worker 159*635a8641SAndroid Build Coastguard Worker DISALLOW_COPY_AND_ASSIGN(BuildInfo); 160*635a8641SAndroid Build Coastguard Worker }; 161*635a8641SAndroid Build Coastguard Worker 162*635a8641SAndroid Build Coastguard Worker } // namespace android 163*635a8641SAndroid Build Coastguard Worker } // namespace base 164*635a8641SAndroid Build Coastguard Worker 165*635a8641SAndroid Build Coastguard Worker #endif // BASE_ANDROID_BUILD_INFO_H_ 166