Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 33bba18b authored by Marco Nelissen's avatar Marco Nelissen Committed by Gerrit Code Review
Browse files

Merge "Respect system locale in ID3 tag encoding detection"

parents 4ae8b0c3 6dd481fe
Loading
Loading
Loading
Loading
+27 −1
Original line number Original line Diff line number Diff line
@@ -28,6 +28,8 @@
#include <unicode/ucsdet.h>
#include <unicode/ucsdet.h>
#include <unicode/ustring.h>
#include <unicode/ustring.h>


#include <cutils/properties.h>

namespace android {
namespace android {


CharacterEncodingDetector::CharacterEncodingDetector() {
CharacterEncodingDetector::CharacterEncodingDetector() {
@@ -38,6 +40,26 @@ CharacterEncodingDetector::CharacterEncodingDetector() {
        ALOGE("could not create UConverter for UTF-8");
        ALOGE("could not create UConverter for UTF-8");
        mUtf8Conv = NULL;
        mUtf8Conv = NULL;
    }
    }

    // Read system locale setting from system property and map to ICU encoding names.
    mLocaleEnc = NULL;
    char locale_value[PROPERTY_VALUE_MAX] = "";
    if (property_get("persist.sys.locale", locale_value, NULL) > 0) {
        const size_t len = strnlen(locale_value, sizeof(locale_value));

        if (len == 3 && !strncmp(locale_value, "und", 3)) {
            // Undetermined
        } else if (!strncmp(locale_value, "th", 2)) { // Thai
            mLocaleEnc = "windows-874-2000";
        }
        if (mLocaleEnc != NULL) {
            ALOGV("System locale encoding = %s", mLocaleEnc);
        } else {
            ALOGV("Didn't recognize system locale setting, defaulting to en_US");
        }
    } else {
        ALOGV("Couldn't read system locale setting, assuming en_US");
    }
}
}


CharacterEncodingDetector::~CharacterEncodingDetector() {
CharacterEncodingDetector::~CharacterEncodingDetector() {
@@ -157,7 +179,11 @@ void CharacterEncodingDetector::detectAndConvert() {
                }
                }
            }
            }


            if (bestCombinedMatch != NULL) {
            if (mLocaleEnc != NULL && !goodmatch && highest < 50) {
                combinedenc = mLocaleEnc;
                ALOGV("confidence is low but we have recognized predefined encoding, "
                        "so try this (%s) instead", mLocaleEnc);
            } else if (bestCombinedMatch != NULL) {
                combinedenc = ucsdet_getName(bestCombinedMatch, &status);
                combinedenc = ucsdet_getName(bestCombinedMatch, &status);
            } else {
            } else {
                combinedenc = "ISO-8859-1";
                combinedenc = "ISO-8859-1";
+1 −0
Original line number Original line Diff line number Diff line
@@ -54,6 +54,7 @@ class CharacterEncodingDetector {
        StringArray     mValues;
        StringArray     mValues;


        UConverter*     mUtf8Conv;
        UConverter*     mUtf8Conv;
        const char*     mLocaleEnc;
};
};