diff --git a/src/detection/host/host_android.c b/src/detection/host/host_android.c index 53e18d1ea..4b7c095a9 100644 --- a/src/detection/host/host_android.c +++ b/src/detection/host/host_android.c @@ -4,19 +4,34 @@ const char* ffDetectHost(FFHostResult* host) { + // http://newandroidbook.com/ddb/ ffSettingsGetAndroidProperty("ro.product.device", &host->productFamily); - ffSettingsGetAndroidProperty("ro.product.brand", &host->productName); - if(host->productName.length > 0) - { - host->productName.chars[0] = (char) toupper(host->productName.chars[0]); - ffStrbufAppendC(&host->productName, ' '); - } + ffSettingsGetAndroidProperty("ro.product.marketname", &host->productName) + || ffSettingsGetAndroidProperty("ro.vendor.product.display", &host->productName) + || ffSettingsGetAndroidProperty("ro.config.devicename", &host->productName) + || ffSettingsGetAndroidProperty("ro.config.marketing_name", &host->productName) + || ffSettingsGetAndroidProperty("ro.product.vendor.model", &host->productName) + || ffSettingsGetAndroidProperty("ro.product.oppo_model", &host->productName) + || ffSettingsGetAndroidProperty("ro.oppo.market.name", &host->productName) + || ffSettingsGetAndroidProperty("ro.product.brand", &host->productName); - ffSettingsGetAndroidProperty("ro.product.model", &host->productName); - ffStrbufTrimRight(&host->productName, ' '); + if (ffSettingsGetAndroidProperty("ro.product.model", &host->productVersion)) + { + if (ffStrbufStartsWithIgnCase(&host->productVersion, &host->productName)) + { + ffStrbufSubstrAfter(&host->productVersion, host->productName.length); + ffStrbufTrimLeft(&host->productVersion, ' '); + } + } ffSettingsGetAndroidProperty("ro.product.manufacturer", &host->sysVendor); + if(host->sysVendor.length && !ffStrbufStartsWithIgnCase(&host->productName, &host->sysVendor)) + { + ffStrbufPrependS(&host->productName, " "); + ffStrbufPrepend(&host->productName, &host->sysVendor); + } + return NULL; } diff --git a/src/util/FFstrbuf.h b/src/util/FFstrbuf.h index d87cad305..fa8e66234 100644 --- a/src/util/FFstrbuf.h +++ b/src/util/FFstrbuf.h @@ -272,6 +272,13 @@ static inline void ffStrbufAppend(FFstrbuf* __restrict strbuf, const FFstrbuf* _ ffStrbufAppendNS(strbuf, value->length, value->chars); } +static inline void ffStrbufPrepend(FFstrbuf* strbuf, FFstrbuf* value) +{ + if(value == NULL) + return; + ffStrbufPrependNS(strbuf, value->length, value->chars); +} + static inline void ffStrbufPrependS(FFstrbuf* strbuf, const char* value) { if(value == NULL)