From 774d89ef641fcaa612ee83e49655ef2ea9e0bbc6 Mon Sep 17 00:00:00 2001 From: Hung-ying Tyan Date: Wed, 5 Feb 2020 16:55:01 +0800 Subject: Resolve media directories to the real paths as /product may be a symlink to /system/product. Bug: 147688127 Bug: 147701212 Test: pass android.telecom.cts.BackgroundCallAudioTest on GSI Change-Id: Ie3588edece1e19ad12bdbf5825b9ff7dfc31cecd --- core/java/android/os/Environment.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/core/java/android/os/Environment.java b/core/java/android/os/Environment.java index 44f12a6adf60..21a1e0f0a108 100644 --- a/core/java/android/os/Environment.java +++ b/core/java/android/os/Environment.java @@ -34,9 +34,11 @@ import android.text.TextUtils; import android.util.Log; import java.io.File; +import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedList; +import java.util.List; /** * Provides access to environment variables. @@ -539,12 +541,21 @@ public class Environment { @SystemApi public static @NonNull Collection getInternalMediaDirectories() { final ArrayList res = new ArrayList<>(); - res.add(new File(Environment.getRootDirectory(), "media")); - res.add(new File(Environment.getOemDirectory(), "media")); - res.add(new File(Environment.getProductDirectory(), "media")); + addCanonicalFile(res, new File(Environment.getRootDirectory(), "media")); + addCanonicalFile(res, new File(Environment.getOemDirectory(), "media")); + addCanonicalFile(res, new File(Environment.getProductDirectory(), "media")); return res; } + private static void addCanonicalFile(List list, File file) { + try { + list.add(file.getCanonicalFile()); + } catch (IOException e) { + Log.w(TAG, "Failed to resolve " + file + ": " + e); + list.add(file); + } + } + /** * Return the primary shared/external storage directory. This directory may * not currently be accessible if it has been mounted by the user on their -- cgit v1.2.3-59-g8ed1b