Skip to content

Commit 15d02c7

Browse files
committed
Upgrade jni to 0.21
1 parent 4767c26 commit 15d02c7

File tree

4 files changed

+42
-31
lines changed

4 files changed

+42
-31
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ license = "MIT"
77
description = "Android intent utilities"
88

99
[dependencies]
10-
jni = "0.20.0"
10+
jni = "0.21"
1111
ndk-context = "0.1.1"

example/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ crate_type=["lib", "cdylib"]
99
[dependencies]
1010
android-activity = { version = "0.4.0", features = ["native-activity"] }
1111
android-intent = { path = "../" }
12-
jni = { version = "0.20.0" }
12+
jni = "0.21"
1313
ndk-context = "0.1.1"
1414

1515
[package.metadata.android.sdk]

src/intent.rs

Lines changed: 38 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use jni::{
22
errors::Error,
3-
objects::{JObject, JString},
3+
objects::{JObject, JString, JValue},
44
JNIEnv,
55
};
66

@@ -27,14 +27,17 @@ impl<'env> Intent<'env> {
2727
Self { inner }
2828
}
2929

30-
pub fn new(env: JNIEnv<'env>, action: impl AsRef<str>) -> Self {
30+
pub fn new(mut env: JNIEnv<'env>, action: impl AsRef<str>) -> Self {
3131
Self::from_fn(|| {
3232
let intent_class = env.find_class("android/content/Intent")?;
3333
let action_view =
34-
env.get_static_field(intent_class, action.as_ref(), "Ljava/lang/String;")?;
34+
env.get_static_field(&intent_class, action.as_ref(), "Ljava/lang/String;")?;
3535

36-
let intent =
37-
env.new_object(intent_class, "(Ljava/lang/String;)V", &[action_view.into()])?;
36+
let intent = env.new_object(
37+
&intent_class,
38+
"(Ljava/lang/String;)V",
39+
&[action_view.borrow()],
40+
)?;
3841

3942
Ok(Inner {
4043
env,
@@ -43,25 +46,30 @@ impl<'env> Intent<'env> {
4346
})
4447
}
4548

46-
pub fn new_with_uri(env: JNIEnv<'env>, action: impl AsRef<str>, uri: impl AsRef<str>) -> Self {
49+
pub fn new_with_uri(
50+
mut env: JNIEnv<'env>,
51+
action: impl AsRef<str>,
52+
uri: impl AsRef<str>,
53+
) -> Self {
4754
Self::from_fn(|| {
4855
let url_string = env.new_string(uri)?;
4956
let uri_class = env.find_class("android/net/Uri")?;
5057
let uri = env.call_static_method(
5158
uri_class,
5259
"parse",
5360
"(Ljava/lang/String;)Landroid/net/Uri;",
54-
&[JString::from(url_string).into()],
61+
&[JValue::Object(&url_string)],
5562
)?;
5663

5764
let intent_class = env.find_class("android/content/Intent")?;
58-
let action_view =
59-
env.get_static_field(intent_class, action.as_ref(), "Ljava/lang/String;")?;
65+
let action_view = env
66+
.get_static_field(&intent_class, action.as_ref(), "Ljava/lang/String;")?
67+
.l()?;
6068

6169
let intent = env.new_object(
62-
intent_class,
70+
&intent_class,
6371
"(Ljava/lang/String;Landroid/net/Uri;)V",
64-
&[action_view.into(), uri.into()],
72+
&[JValue::Object(&action_view), uri.borrow()],
6573
)?;
6674

6775
Ok(Inner {
@@ -80,16 +88,20 @@ impl<'env> Intent<'env> {
8088
/// intent.set_class_name("com.excample", "IntentTarget")
8189
/// # })
8290
/// ```
83-
pub fn set_class_name(self, package_name: impl AsRef<str>, class_name: impl AsRef<str>) -> Self {
84-
self.and_then(|inner| {
91+
pub fn set_class_name(
92+
self,
93+
package_name: impl AsRef<str>,
94+
class_name: impl AsRef<str>,
95+
) -> Self {
96+
self.and_then(|mut inner| {
8597
let package_name = inner.env.new_string(package_name)?;
8698
let class_name = inner.env.new_string(class_name)?;
8799

88100
inner.env.call_method(
89-
inner.object,
101+
&inner.object,
90102
"setClassName",
91103
"(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;",
92-
&[package_name.into(), class_name.into()],
104+
&[JValue::Object(&package_name), JValue::Object(&class_name)],
93105
)?;
94106

95107
Ok(inner)
@@ -106,15 +118,15 @@ impl<'env> Intent<'env> {
106118
/// # })
107119
/// ```
108120
pub fn with_extra(self, key: impl AsRef<str>, value: impl AsRef<str>) -> Self {
109-
self.and_then(|inner| {
121+
self.and_then(|mut inner| {
110122
let key = inner.env.new_string(key)?;
111123
let value = inner.env.new_string(value)?;
112124

113125
inner.env.call_method(
114-
inner.object,
126+
&inner.object,
115127
"putExtra",
116128
"(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;",
117-
&[key.into(), value.into()],
129+
&[JValue::Object(&key), JValue::Object(&value)],
118130
)?;
119131

120132
Ok(inner)
@@ -136,18 +148,17 @@ impl<'env> Intent<'env> {
136148
pub fn into_chooser_with_title(self, title: Option<impl AsRef<str>>) -> Self {
137149
self.and_then(|mut inner| {
138150
let title_value = if let Some(title) = title {
139-
let s = inner.env.new_string(title)?;
140-
s.into()
151+
inner.env.new_string(title)?
141152
} else {
142-
JObject::null().into()
153+
JString::default()
143154
};
144155

145156
let intent_class = inner.env.find_class("android/content/Intent")?;
146157
let intent = inner.env.call_static_method(
147158
intent_class,
148159
"createChooser",
149160
"(Landroid/content/Intent;Ljava/lang/CharSequence;)Landroid/content/Intent;",
150-
&[inner.object.into(), title_value],
161+
&[JValue::Object(&inner.object), JValue::Object(&title_value)],
151162
)?;
152163

153164
inner.object = intent.try_into()?;
@@ -165,14 +176,14 @@ impl<'env> Intent<'env> {
165176
/// # })
166177
/// ```
167178
pub fn with_type(self, type_name: impl AsRef<str>) -> Self {
168-
self.and_then(|inner| {
179+
self.and_then(|mut inner| {
169180
let jstring = inner.env.new_string(type_name)?;
170181

171182
inner.env.call_method(
172-
inner.object,
183+
&inner.object,
173184
"setType",
174185
"(Ljava/lang/String;)Landroid/content/Intent;",
175-
&[jstring.into()],
186+
&[JValue::Object(&jstring)],
176187
)?;
177188

178189
Ok(inner)
@@ -183,12 +194,12 @@ impl<'env> Intent<'env> {
183194
let cx = ndk_context::android_context();
184195
let activity = unsafe { JObject::from_raw(cx.context() as jni::sys::jobject) };
185196

186-
self.inner.and_then(|inner| {
197+
self.inner.and_then(|mut inner| {
187198
inner.env.call_method(
188199
activity,
189200
"startActivity",
190201
"(Landroid/content/Intent;)V",
191-
&[inner.object.into()],
202+
&[JValue::Object(&inner.object)],
192203
)?;
193204

194205
Ok(())

src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ pub use intent::Intent;
99
use jni::{JNIEnv, JavaVM};
1010

1111
/// Run 'f' with the current [`JNIEnv`] from [`ndk_context`].
12-
pub fn with_current_env(f: impl FnOnce(JNIEnv)) {
12+
pub fn with_current_env(f: impl FnOnce(&JNIEnv<'_>)) {
1313
let cx = ndk_context::android_context();
1414
let vm = unsafe { JavaVM::from_raw(cx.vm().cast()) }.unwrap();
1515
let env = vm.attach_current_thread().unwrap();
1616

17-
f(env.clone());
17+
f(&env);
1818
}

0 commit comments

Comments
 (0)