From 7b2ebe5fa61854e55c9eed9bccb049809ac12847 Mon Sep 17 00:00:00 2001 From: Piotr Mikolajczyk Date: Mon, 30 Nov 2020 12:27:26 +0100 Subject: Android: Kill calls to deprecated func in API 29 Since API 29 functions: - getExternalStoragePublicDirectory - getExternalStorageDirectory are deprecated and no longer return directly accessible path. This patch replaces calls to those with suggested call to Context.getExternalFilesDir(String) Task-number: QTBUG-87803 Change-Id: I36bc5d5b72a80017996445af0d577aacf5e112d3 Reviewed-by: Rami Potinkara Reviewed-by: Andy Shaw (cherry picked from commit e1440dd7bc1a5da9a536f88b9733d04ec8fa6e61) Reviewed-by: Assam Boudjelthia --- src/corelib/io/qstandardpaths_android.cpp | 64 ++++--------------------------- 1 file changed, 8 insertions(+), 56 deletions(-) diff --git a/src/corelib/io/qstandardpaths_android.cpp b/src/corelib/io/qstandardpaths_android.cpp index 0667d170c7..9fe98d34cd 100644 --- a/src/corelib/io/qstandardpaths_android.cpp +++ b/src/corelib/io/qstandardpaths_android.cpp @@ -85,51 +85,6 @@ static inline QString getAbsolutePath(const QJNIObjectPrivate &file) return path.toString(); } -/* - * The root of the external storage - * - */ -static QString getExternalStorageDirectory() -{ - QString &path = (*androidDirCache)[QStringLiteral("EXT_ROOT")]; - if (!path.isEmpty()) - return path; - - QJNIObjectPrivate file = QJNIObjectPrivate::callStaticObjectMethod("android/os/Environment", - "getExternalStorageDirectory", - "()Ljava/io/File;"); - if (!file.isValid()) - return QString(); - - return (path = getAbsolutePath(file)); -} - -/* - * Locations where applications can place user files (public). - * E.g., /storage/Music - */ -static QString getExternalStoragePublicDirectory(const char *directoryField) -{ - QString &path = (*androidDirCache)[QLatin1String(directoryField)]; - if (!path.isEmpty()) - return path; - - QJNIObjectPrivate dirField = QJNIObjectPrivate::getStaticObjectField("android/os/Environment", - directoryField, - "Ljava/lang/String;"); - if (!dirField.isValid()) - return QString(); - - QJNIObjectPrivate file = QJNIObjectPrivate::callStaticObjectMethod("android/os/Environment", - "getExternalStoragePublicDirectory", - "(Ljava/lang/String;)Ljava/io/File;", - dirField.object()); - if (!file.isValid()) - return QString(); - - return (path = getAbsolutePath(file)); -} - /* * Locations where applications can place persistent files it owns. * E.g., /storage/org.app/Music @@ -145,7 +100,7 @@ static QString getExternalFilesDir(const char *directoryField = 0) return QString(); QJNIObjectPrivate dirField = QJNIObjectPrivate::fromString(QLatin1String("")); - if (directoryField) { + if (directoryField && strlen(directoryField) > 0) { dirField = QJNIObjectPrivate::getStaticObjectField("android/os/Environment", directoryField, "Ljava/lang/String;"); @@ -233,24 +188,24 @@ QString QStandardPaths::writableLocation(StandardLocation type) { switch (type) { case QStandardPaths::MusicLocation: - return getExternalStoragePublicDirectory("DIRECTORY_MUSIC"); + return getExternalFilesDir("DIRECTORY_MUSIC"); case QStandardPaths::MoviesLocation: - return getExternalStoragePublicDirectory("DIRECTORY_MOVIES"); + return getExternalFilesDir("DIRECTORY_MOVIES"); case QStandardPaths::PicturesLocation: - return getExternalStoragePublicDirectory("DIRECTORY_PICTURES"); + return getExternalFilesDir("DIRECTORY_PICTURES"); case QStandardPaths::DocumentsLocation: if (QtAndroidPrivate::androidSdkVersion() > 18) - return getExternalStoragePublicDirectory("DIRECTORY_DOCUMENTS"); + return getExternalFilesDir("DIRECTORY_DOCUMENTS"); else - return getExternalStorageDirectory() + QLatin1String("/Documents"); + return getExternalFilesDir() + QLatin1String("/Documents"); case QStandardPaths::DownloadLocation: - return getExternalStoragePublicDirectory("DIRECTORY_DOWNLOADS"); + return getExternalFilesDir("DIRECTORY_DOWNLOADS"); case QStandardPaths::GenericConfigLocation: case QStandardPaths::ConfigLocation: case QStandardPaths::AppConfigLocation: return getFilesDir() + testDir() + QLatin1String("/settings"); case QStandardPaths::GenericDataLocation: - return getExternalStorageDirectory() + testDir(); + return getExternalFilesDir() + testDir(); case QStandardPaths::AppDataLocation: case QStandardPaths::AppLocalDataLocation: return getFilesDir() + testDir(); @@ -276,11 +231,8 @@ QStringList QStandardPaths::standardLocations(StandardLocation type) if (type == MusicLocation) { return QStringList() << writableLocation(type) << getExternalFilesDir("DIRECTORY_MUSIC") - << getExternalStoragePublicDirectory("DIRECTORY_PODCASTS") << getExternalFilesDir("DIRECTORY_PODCASTS") - << getExternalStoragePublicDirectory("DIRECTORY_NOTIFICATIONS") << getExternalFilesDir("DIRECTORY_NOTIFICATIONS") - << getExternalStoragePublicDirectory("DIRECTORY_ALARMS") << getExternalFilesDir("DIRECTORY_ALARMS"); } -- cgit v1.2.3