diff options
author | Felipe Leme <felipeal@google.com> | 2016-06-09 15:25:00 -0700 |
---|---|---|
committer | Felipe Leme <felipeal@google.com> | 2016-06-10 11:07:35 -0700 |
commit | 60f8f72cd49cdcb27e018eee5cd60ad37dd7e92c (patch) | |
tree | a937e6fc3d14ac32c01dcac5a909533ea7329638 /packages/DocumentsUI | |
parent | 9b5a78072281ebf0182234d56b6ec174e911d24e (diff) |
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
Diffstat (limited to 'packages/DocumentsUI')
-rw-r--r-- | packages/DocumentsUI/src/com/android/documentsui/OpenExternalDirectoryActivity.java | 20 |
1 files 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<VolumeInfo> 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); |