From 60f8f72cd49cdcb27e018eee5cd60ad37dd7e92c Mon Sep 17 00:00:00 2001 From: Felipe Leme Date: Thu, 9 Jun 2016 15:25:00 -0700 Subject: [PATCH] Fixed check for volume name. There are scenarios - like when an SD Card is adopted as internal storage - where the getBestVolumeDescription() returns null, in which case we should use the StorageVolume description instead (or a default value if such description is also null)> Change-Id: Ia11c3f4069dfbe252c568210ee60b5d8c384d863 Fixes: 29198046 --- .../documentsui/OpenExternalDirectoryActivity.java | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/packages/DocumentsUI/src/com/android/documentsui/OpenExternalDirectoryActivity.java b/packages/DocumentsUI/src/com/android/documentsui/OpenExternalDirectoryActivity.java index b0e5e4e531e1..ddf87bbe6333 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/OpenExternalDirectoryActivity.java +++ b/packages/DocumentsUI/src/com/android/documentsui/OpenExternalDirectoryActivity.java @@ -20,6 +20,7 @@ import static android.os.Environment.isStandardDirectory; import static android.os.Environment.STANDARD_DIRECTORIES; import static android.os.storage.StorageVolume.EXTRA_DIRECTORY_NAME; import static android.os.storage.StorageVolume.EXTRA_STORAGE_VOLUME; + import static com.android.documentsui.LocalPreferences.getScopedAccessPermissionStatus; import static com.android.documentsui.LocalPreferences.PERMISSION_ASK; import static com.android.documentsui.LocalPreferences.PERMISSION_ASK_AGAIN; @@ -201,14 +202,23 @@ public class OpenExternalDirectoryActivity extends Activity { final List volumes = sm.getVolumes(); if (DEBUG) Log.d(TAG, "Number of volumes: " + volumes.size()); File internalRoot = null; + boolean found = true; for (VolumeInfo volume : volumes) { if (isRightVolume(volume, root, userId)) { + found = true; internalRoot = volume.getInternalPathForUser(userId); // Must convert path before calling getDocIdForFileCreateNewDir() if (DEBUG) Log.d(TAG, "Converting " + root + " to " + internalRoot); file = isRoot ? internalRoot : new File(internalRoot, directory); + volumeUuid = storageVolume.getUuid(); volumeLabel = sm.getBestVolumeDescription(volume); - volumeUuid = volume.getFsUuid(); + if (TextUtils.isEmpty(volumeLabel)) { + volumeLabel = storageVolume.getDescription(activity); + } + if (TextUtils.isEmpty(volumeLabel)) { + volumeLabel = activity.getString(android.R.string.unknownName); + Log.w(TAG, "No volume description for " + volume + "; using " + volumeLabel); + } break; } } @@ -229,7 +239,7 @@ public class OpenExternalDirectoryActivity extends Activity { return true; } - if (volumeLabel == null) { + if (!found) { Log.e(TAG, "Could not get volume for " + file); logInvalidScopedAccessRequest(activity, SCOPED_DIRECTORY_ACCESS_ERROR); return false; @@ -280,12 +290,12 @@ public class OpenExternalDirectoryActivity extends Activity { final boolean isVisible = volume.isVisibleForWrite(userId); if (DEBUG) Log.d(TAG, "Volume: " + volume + " userId: " + userId + " root: " + root - + " volumePath: " + volume.getPath().getPath() + + " volumePath: " + volume.getPath() + " pathForUser: " + path + " internalPathForUser: " + volume.getInternalPath() + " isVisible: " + isVisible); - return volume.isVisibleForWrite(userId) && root.equals(path); + return isVisible && root.equals(path); } private static Uri getGrantedUriPermission(Context context, ContentProviderClient provider, @@ -455,7 +465,7 @@ public class OpenExternalDirectoryActivity extends Activity { message = TextUtils.expandTemplate( getText(mIsPrimary ? R.string.open_external_dialog_request_primary_volume : R.string.open_external_dialog_request), - mAppLabel, directory, mVolumeLabel); + mAppLabel, directory, mVolumeLabel); } final TextView messageField = (TextView) view.findViewById(R.id.message); messageField.setText(message); -- 2.11.0