| 241 | } |
| 242 | |
| 243 | void GetSystemInfo(SystemInfo* info) |
| 244 | { |
| 245 | memset(info, 0, sizeof(*info)); |
| 246 | dmStrlCpy(info->m_SystemName, "Android", sizeof(info->m_SystemName)); |
| 247 | |
| 248 | dmAndroid::ThreadAttacher thread; |
| 249 | JNIEnv* env = thread.GetEnv(); |
| 250 | if (!env) |
| 251 | { |
| 252 | return; |
| 253 | } |
| 254 | |
| 255 | jclass locale_class = env->FindClass("java/util/Locale"); |
| 256 | jmethodID get_default_method = env->GetStaticMethodID(locale_class, "getDefault", "()Ljava/util/Locale;"); |
| 257 | jmethodID get_country_method = env->GetMethodID(locale_class, "getCountry", "()Ljava/lang/String;"); |
| 258 | jmethodID get_language_method = env->GetMethodID(locale_class, "getLanguage", "()Ljava/lang/String;"); |
| 259 | jobject locale = (jobject)env->CallStaticObjectMethod(locale_class, get_default_method); |
| 260 | jstring countryObj = (jstring)env->CallObjectMethod(locale, get_country_method); |
| 261 | jstring languageObj = (jstring)env->CallObjectMethod(locale, get_language_method); |
| 262 | |
| 263 | char lang[32] = { 0 }; |
| 264 | if (languageObj) |
| 265 | { |
| 266 | const char* language = env->GetStringUTFChars(languageObj, NULL); |
| 267 | dmStrlCpy(lang, language, sizeof(lang)); |
| 268 | env->ReleaseStringUTFChars(languageObj, language); |
| 269 | } |
| 270 | if (countryObj) |
| 271 | { |
| 272 | dmStrlCat(lang, "_", sizeof(lang)); |
| 273 | const char* country = env->GetStringUTFChars(countryObj, NULL); |
| 274 | dmStrlCat(lang, country, sizeof(lang)); |
| 275 | env->ReleaseStringUTFChars(countryObj, country); |
| 276 | } |
| 277 | FillLanguageTerritory(lang, info); |
| 278 | FillTimeZone(info); |
| 279 | |
| 280 | jclass build_class = env->FindClass("android/os/Build"); |
| 281 | jstring manufacturerObj = (jstring)env->GetStaticObjectField(build_class, env->GetStaticFieldID(build_class, "MANUFACTURER", "Ljava/lang/String;")); |
| 282 | jstring modelObj = (jstring)env->GetStaticObjectField(build_class, env->GetStaticFieldID(build_class, "MODEL", "Ljava/lang/String;")); |
| 283 | |
| 284 | jclass build_version_class = env->FindClass("android/os/Build$VERSION"); |
| 285 | jstring releaseObj = (jstring)env->GetStaticObjectField(build_version_class, env->GetStaticFieldID(build_version_class, "RELEASE", "Ljava/lang/String;")); |
| 286 | jint sdkint = (jint)env->GetStaticIntField(build_version_class, env->GetStaticFieldID(build_version_class, "SDK_INT", "I")); // supported from api level 4 |
| 287 | |
| 288 | dmSnPrintf(info->m_ApiVersion, sizeof(info->m_ApiVersion), "%d", sdkint); |
| 289 | |
| 290 | if (manufacturerObj) |
| 291 | { |
| 292 | const char* manufacturer = env->GetStringUTFChars(manufacturerObj, NULL); |
| 293 | dmStrlCpy(info->m_Manufacturer, manufacturer, sizeof(info->m_Manufacturer)); |
| 294 | env->ReleaseStringUTFChars(manufacturerObj, manufacturer); |
| 295 | } |
| 296 | if (modelObj) |
| 297 | { |
| 298 | const char* model = env->GetStringUTFChars(modelObj, NULL); |
| 299 | dmStrlCpy(info->m_DeviceModel, model, sizeof(info->m_DeviceModel)); |
| 300 | env->ReleaseStringUTFChars(modelObj, model); |
nothing calls this directly
no test coverage detected