Android: Restore the default QSettings path to the .config directory
After 140ca89a3c2b8d78889d27217f977cd4de10041b commit, the path of the QSettings default file location changed. That caused the problem with updating the app (old settings file is not used anymore). That is why we should still use old (.config) directory for QSettings file if the file exists. Fixes: QTBUG-109405 Fixes: QTBUG-109369 Change-Id: I8ce53e0a80e4c2d16802b27b000ab3fbed198628 Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io> (cherry picked from commit beaaa0bf02fee696b03f2839bea8e0e6bc685a62) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
03b23f66d5
commit
b49593c0c8
@ -943,26 +943,43 @@ static inline int pathHashKey(QSettings::Format format, QSettings::Scope scope)
|
||||
}
|
||||
|
||||
#ifndef Q_OS_WIN
|
||||
static QString make_user_path()
|
||||
static constexpr QChar sep = u'/';
|
||||
|
||||
#if !defined(QSETTINGS_USE_QSTANDARDPATHS) || defined(Q_OS_ANDROID)
|
||||
static QString make_user_path_without_qstandard_paths()
|
||||
{
|
||||
static constexpr QChar sep = u'/';
|
||||
#ifndef QSETTINGS_USE_QSTANDARDPATHS
|
||||
// Non XDG platforms (OS X, iOS, Android...) have used this code path erroneously
|
||||
// for some time now. Moving away from that would require migrating existing settings.
|
||||
QByteArray env = qgetenv("XDG_CONFIG_HOME");
|
||||
if (env.isEmpty()) {
|
||||
return QDir::homePath() + "/.config/"_L1;
|
||||
} else if (env.startsWith('/')) {
|
||||
return QFile::decodeName(env) + sep;
|
||||
} else {
|
||||
return QDir::homePath() + sep + QFile::decodeName(env) + sep;
|
||||
}
|
||||
|
||||
return QDir::homePath() + sep + QFile::decodeName(env) + sep;
|
||||
}
|
||||
#endif // !QSETTINGS_USE_QSTANDARDPATHS || Q_OS_ANDROID
|
||||
|
||||
static QString make_user_path()
|
||||
{
|
||||
#ifndef QSETTINGS_USE_QSTANDARDPATHS
|
||||
// Non XDG platforms (OS X, iOS, Android...) have used this code path erroneously
|
||||
// for some time now. Moving away from that would require migrating existing settings.
|
||||
// The migration has already been done for Android.
|
||||
return make_user_path_without_qstandard_paths();
|
||||
#else
|
||||
// When using a proper XDG platform, use QStandardPaths rather than the above hand-written code;
|
||||
// it makes the use of test mode from unit tests possible.
|
||||
|
||||
#ifdef Q_OS_ANDROID
|
||||
// If an old settings path exists, use it instead of creating a new one
|
||||
QString ret = make_user_path_without_qstandard_paths();
|
||||
if (QFile(ret).exists())
|
||||
return ret;
|
||||
#endif // Q_OS_ANDROID
|
||||
|
||||
// When using a proper XDG platform or Android platform, use QStandardPaths rather than the
|
||||
// above hand-written code. It makes the use of test mode from unit tests possible.
|
||||
// Ideally all platforms should use this, but see above for the migration issue.
|
||||
return QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + sep;
|
||||
#endif
|
||||
#endif // !QSETTINGS_USE_QSTANDARDPATHS
|
||||
}
|
||||
#endif // !Q_OS_WIN
|
||||
|
||||
@ -1327,8 +1344,7 @@ void QConfFileSettingsPrivate::syncConfFile(QConfFile *confFile)
|
||||
// On android and if it is a content URL put the lock file in a
|
||||
// writable location to prevent permissions issues and invalid paths.
|
||||
if (confFile->name.startsWith("content:"_L1))
|
||||
lockFileName = QStandardPaths::writableLocation(QStandardPaths::CacheLocation)
|
||||
+ QFileInfo(lockFileName).fileName();
|
||||
lockFileName = make_user_path() + QFileInfo(lockFileName).fileName();
|
||||
# endif
|
||||
/*
|
||||
Use a lockfile in order to protect us against other QSettings instances
|
||||
|
Loading…
x
Reference in New Issue
Block a user