[go: nahoru, domu]

blob: 0284dd8b6325d26a01be2145c772584a03955c39 [file] [log] [blame]
qinmin@chromium.orgf12d1e12013-11-20 07:04:551// 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
5#include "base/android/content_uri_utils.h"
6
7#include "base/android/jni_android.h"
8#include "base/android/jni_string.h"
Eric Stevensonc0926cb2019-06-19 15:03:169#include "base/base_jni_headers/ContentUriUtils_jni.h"
qinmin@chromium.orgf12d1e12013-11-20 07:04:5510
11using base::android::ConvertUTF8ToJavaString;
torne86560112016-08-04 15:59:0412using base::android::ScopedJavaLocalRef;
qinmin@chromium.orgf12d1e12013-11-20 07:04:5513
14namespace base {
15
qinmin@chromium.orgf12d1e12013-11-20 07:04:5516bool ContentUriExists(const FilePath& content_uri) {
17 JNIEnv* env = base::android::AttachCurrentThread();
18 ScopedJavaLocalRef<jstring> j_uri =
19 ConvertUTF8ToJavaString(env, content_uri.value());
wnwen321152d2017-03-29 18:09:2320 return Java_ContentUriUtils_contentUriExists(env, j_uri);
qinmin@chromium.orgf12d1e12013-11-20 07:04:5521}
22
rvargas@chromium.orga08305912014-03-21 00:41:1523File OpenContentUriForRead(const FilePath& content_uri) {
qinmin@chromium.orgf12d1e12013-11-20 07:04:5524 JNIEnv* env = base::android::AttachCurrentThread();
25 ScopedJavaLocalRef<jstring> j_uri =
26 ConvertUTF8ToJavaString(env, content_uri.value());
wnwen321152d2017-03-29 18:09:2327 jint fd = Java_ContentUriUtils_openContentUriForRead(env, j_uri);
qinmin@chromium.orgf12d1e12013-11-20 07:04:5528 if (fd < 0)
rvargas@chromium.orga08305912014-03-21 00:41:1529 return File();
30 return File(fd);
qinmin@chromium.orgf12d1e12013-11-20 07:04:5531}
32
qinmin120a1552014-11-26 03:02:1633std::string GetContentUriMimeType(const FilePath& content_uri) {
34 JNIEnv* env = base::android::AttachCurrentThread();
35 ScopedJavaLocalRef<jstring> j_uri =
36 ConvertUTF8ToJavaString(env, content_uri.value());
wnwen321152d2017-03-29 18:09:2337 ScopedJavaLocalRef<jstring> j_mime =
38 Java_ContentUriUtils_getMimeType(env, j_uri);
bauerbf6d27322016-03-30 17:02:4839 if (j_mime.is_null())
40 return std::string();
41
qinmin120a1552014-11-26 03:02:1642 return base::android::ConvertJavaStringToUTF8(env, j_mime.obj());
43}
44
Tommy Steimel22f1e082018-08-13 19:33:2445bool MaybeGetFileDisplayName(const FilePath& content_uri,
Jan Wilken Dörrie85285b02021-03-11 23:38:4746 std::u16string* file_display_name) {
Tomasz Wiszkowski9702f0132019-03-05 23:38:5347 if (!content_uri.IsContentUri())
48 return false;
49
Tommy Steimel22f1e082018-08-13 19:33:2450 DCHECK(file_display_name);
51
52 JNIEnv* env = base::android::AttachCurrentThread();
53 ScopedJavaLocalRef<jstring> j_uri =
54 ConvertUTF8ToJavaString(env, content_uri.value());
55 ScopedJavaLocalRef<jstring> j_display_name =
56 Java_ContentUriUtils_maybeGetDisplayName(env, j_uri);
57
58 if (j_display_name.is_null())
59 return false;
60
61 *file_display_name = base::android::ConvertJavaStringToUTF16(j_display_name);
62 return true;
63}
64
Ian Wells1ba213c2019-06-26 02:19:3065bool DeleteContentUri(const FilePath& content_uri) {
Min Qin39e27c8d2019-02-28 05:01:5266 DCHECK(content_uri.IsContentUri());
67 JNIEnv* env = base::android::AttachCurrentThread();
68 ScopedJavaLocalRef<jstring> j_uri =
69 ConvertUTF8ToJavaString(env, content_uri.value());
70
Ian Wells1ba213c2019-06-26 02:19:3071 return Java_ContentUriUtils_delete(env, j_uri);
Min Qin39e27c8d2019-02-28 05:01:5272}
73
Tsuyoshi Horo791a3212019-09-10 01:08:1374FilePath GetContentUriFromFilePath(const FilePath& file_path) {
75 JNIEnv* env = base::android::AttachCurrentThread();
76 ScopedJavaLocalRef<jstring> j_file_path =
77 ConvertUTF8ToJavaString(env, file_path.value());
78 ScopedJavaLocalRef<jstring> j_content_uri =
79 Java_ContentUriUtils_getContentUriFromFilePath(env, j_file_path);
80 if (j_content_uri.is_null())
81 return FilePath();
82
83 return FilePath(base::android::ConvertJavaStringToUTF8(env, j_content_uri));
84}
85
qinmin@chromium.orgf12d1e12013-11-20 07:04:5586} // namespace base