MCPcopy Create free account
hub / github.com/defold/defold / GetSystemInfo

Function GetSystemInfo

engine/dlib/src/dlib/sys_android.cpp:243–308  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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);

Callers

nothing calls this directly

Calls 6

dmStrlCpyFunction · 0.85
dmStrlCatFunction · 0.85
FillLanguageTerritoryFunction · 0.85
dmSnPrintfFunction · 0.85
GetEnvMethod · 0.80
FillTimeZoneFunction · 0.70

Tested by

no test coverage detected