Android: Don't rely on QDir::homePath() to get the application directory
If the QLoggingRegistry gets called as part of the static initialization phase, it would call into Android's QStandarPaths implementation, which assumed that the HOME env. variable was already set. Since the variable isn't set before main is called, QDir::homePath() returns the root path, which would be cached and always returned. With this fix we now call Android's getFilesDir() directly, which will always return the right path. Since the font locations are also relying on an environment variable being set, we no longer cache that either. Task-number: QTBUG-65820 Change-Id: If45f3d5f0e87b808a62118ae95c31b492885646a Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
This commit is contained in:
parent
538b1b5076
commit
eadf9e542f
@ -217,7 +217,16 @@ static QString getFilesDir()
|
||||
if (!path.isEmpty())
|
||||
return path;
|
||||
|
||||
return (path = QDir::homePath());
|
||||
QJNIObjectPrivate appCtx = applicationContext();
|
||||
if (!appCtx.isValid())
|
||||
return QString();
|
||||
|
||||
QJNIObjectPrivate file = appCtx.callObjectMethod("getFilesDir",
|
||||
"()Ljava/io/File;");
|
||||
if (!file.isValid())
|
||||
return QString();
|
||||
|
||||
return (path = getAbsolutePath(file));
|
||||
}
|
||||
|
||||
QString QStandardPaths::writableLocation(StandardLocation type)
|
||||
@ -319,7 +328,9 @@ QStringList QStandardPaths::standardLocations(StandardLocation type)
|
||||
if (!ba.isEmpty())
|
||||
return QStringList((fontLocation = QDir::cleanPath(QString::fromLocal8Bit(ba))));
|
||||
|
||||
return QStringList((fontLocation = QLatin1String("/system/fonts")));
|
||||
// Don't cache the fallback, as we might just have been called before
|
||||
// QT_ANDROID_FONT_LOCATION has been set.
|
||||
return QStringList(QLatin1String("/system/fonts"));
|
||||
}
|
||||
|
||||
return QStringList(writableLocation(type));
|
||||
|
Loading…
x
Reference in New Issue
Block a user