content_uri_utils.cc 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // Copyright 2013 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "base/android/content_uri_utils.h"
  5. #include "base/android/jni_android.h"
  6. #include "base/android/jni_string.h"
  7. #include "base/base_jni_headers/ContentUriUtils_jni.h"
  8. using base::android::ConvertUTF8ToJavaString;
  9. using base::android::ScopedJavaLocalRef;
  10. namespace base {
  11. bool ContentUriExists(const FilePath& content_uri) {
  12. JNIEnv* env = base::android::AttachCurrentThread();
  13. ScopedJavaLocalRef<jstring> j_uri =
  14. ConvertUTF8ToJavaString(env, content_uri.value());
  15. return Java_ContentUriUtils_contentUriExists(env, j_uri);
  16. }
  17. File OpenContentUriForRead(const FilePath& content_uri) {
  18. JNIEnv* env = base::android::AttachCurrentThread();
  19. ScopedJavaLocalRef<jstring> j_uri =
  20. ConvertUTF8ToJavaString(env, content_uri.value());
  21. jint fd = Java_ContentUriUtils_openContentUriForRead(env, j_uri);
  22. if (fd < 0)
  23. return File();
  24. return File(fd);
  25. }
  26. std::string GetContentUriMimeType(const FilePath& content_uri) {
  27. JNIEnv* env = base::android::AttachCurrentThread();
  28. ScopedJavaLocalRef<jstring> j_uri =
  29. ConvertUTF8ToJavaString(env, content_uri.value());
  30. ScopedJavaLocalRef<jstring> j_mime =
  31. Java_ContentUriUtils_getMimeType(env, j_uri);
  32. if (j_mime.is_null())
  33. return std::string();
  34. return base::android::ConvertJavaStringToUTF8(env, j_mime.obj());
  35. }
  36. bool MaybeGetFileDisplayName(const FilePath& content_uri,
  37. std::u16string* file_display_name) {
  38. if (!content_uri.IsContentUri())
  39. return false;
  40. DCHECK(file_display_name);
  41. JNIEnv* env = base::android::AttachCurrentThread();
  42. ScopedJavaLocalRef<jstring> j_uri =
  43. ConvertUTF8ToJavaString(env, content_uri.value());
  44. ScopedJavaLocalRef<jstring> j_display_name =
  45. Java_ContentUriUtils_maybeGetDisplayName(env, j_uri);
  46. if (j_display_name.is_null())
  47. return false;
  48. *file_display_name = base::android::ConvertJavaStringToUTF16(j_display_name);
  49. return true;
  50. }
  51. bool DeleteContentUri(const FilePath& content_uri) {
  52. DCHECK(content_uri.IsContentUri());
  53. JNIEnv* env = base::android::AttachCurrentThread();
  54. ScopedJavaLocalRef<jstring> j_uri =
  55. ConvertUTF8ToJavaString(env, content_uri.value());
  56. return Java_ContentUriUtils_delete(env, j_uri);
  57. }
  58. FilePath GetContentUriFromFilePath(const FilePath& file_path) {
  59. JNIEnv* env = base::android::AttachCurrentThread();
  60. ScopedJavaLocalRef<jstring> j_file_path =
  61. ConvertUTF8ToJavaString(env, file_path.value());
  62. ScopedJavaLocalRef<jstring> j_content_uri =
  63. Java_ContentUriUtils_getContentUriFromFilePath(env, j_file_path);
  64. if (j_content_uri.is_null())
  65. return FilePath();
  66. return FilePath(base::android::ConvertJavaStringToUTF8(env, j_content_uri));
  67. }
  68. } // namespace base