11use 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 ( ( ) )
0 commit comments