xref: /aosp_15_r20/development/samples/AconfigDemo/src/lib.rs (revision 90c8c64db3049935a07c6143d7fd006e26f8ecca)
1*90c8c64dSAndroid Build Coastguard Worker //! example rust crate to be used in AconfigDemoActivity app
2*90c8c64dSAndroid Build Coastguard Worker 
3*90c8c64dSAndroid Build Coastguard Worker use jni::objects::JClass;
4*90c8c64dSAndroid Build Coastguard Worker use jni::sys::jstring;
5*90c8c64dSAndroid Build Coastguard Worker use jni::JNIEnv;
6*90c8c64dSAndroid Build Coastguard Worker 
7*90c8c64dSAndroid Build Coastguard Worker /// get flag value via static interface
get_flag_via_static_interface() -> String8*90c8c64dSAndroid Build Coastguard Worker pub fn get_flag_via_static_interface() -> String {
9*90c8c64dSAndroid Build Coastguard Worker     format!(
10*90c8c64dSAndroid Build Coastguard Worker         "flag value: {}",
11*90c8c64dSAndroid Build Coastguard Worker         if aconfig_demo_flags_rust::append_static_content() { "true" } else { "false" }
12*90c8c64dSAndroid Build Coastguard Worker     )
13*90c8c64dSAndroid Build Coastguard Worker }
14*90c8c64dSAndroid Build Coastguard Worker 
15*90c8c64dSAndroid Build Coastguard Worker /// get flag value via injection
get_flag_via_injection_interface( provider: &aconfig_demo_flags_rust::FlagProvider, ) -> String16*90c8c64dSAndroid Build Coastguard Worker pub fn get_flag_via_injection_interface(
17*90c8c64dSAndroid Build Coastguard Worker     provider: &aconfig_demo_flags_rust::FlagProvider,
18*90c8c64dSAndroid Build Coastguard Worker ) -> String {
19*90c8c64dSAndroid Build Coastguard Worker     format!("flag value: {}", if provider.append_injected_content() { "true" } else { "false" })
20*90c8c64dSAndroid Build Coastguard Worker }
21*90c8c64dSAndroid Build Coastguard Worker 
22*90c8c64dSAndroid Build Coastguard Worker /// printRustFlag function
23*90c8c64dSAndroid Build Coastguard Worker #[no_mangle]
24*90c8c64dSAndroid Build Coastguard Worker #[allow(unused)]
Java_com_example_android_aconfig_demo_AconfigDemoActivity_printRustFlag< 'local, >( mut env: JNIEnv<'local>, class: JClass<'local>, ) -> jstring25*90c8c64dSAndroid Build Coastguard Worker pub extern "system" fn Java_com_example_android_aconfig_demo_AconfigDemoActivity_printRustFlag<
26*90c8c64dSAndroid Build Coastguard Worker     'local,
27*90c8c64dSAndroid Build Coastguard Worker >(
28*90c8c64dSAndroid Build Coastguard Worker     mut env: JNIEnv<'local>,
29*90c8c64dSAndroid Build Coastguard Worker     class: JClass<'local>,
30*90c8c64dSAndroid Build Coastguard Worker ) -> jstring {
31*90c8c64dSAndroid Build Coastguard Worker     let mut result = String::new();
32*90c8c64dSAndroid Build Coastguard Worker 
33*90c8c64dSAndroid Build Coastguard Worker     result.push_str("flag name : append_static_content\n");
34*90c8c64dSAndroid Build Coastguard Worker     result.push_str("use pattern : static method\n");
35*90c8c64dSAndroid Build Coastguard Worker     result.push_str(&get_flag_via_static_interface());
36*90c8c64dSAndroid Build Coastguard Worker 
37*90c8c64dSAndroid Build Coastguard Worker     result.push_str("\n\n");
38*90c8c64dSAndroid Build Coastguard Worker 
39*90c8c64dSAndroid Build Coastguard Worker     result.push_str("flag name : append_injected_content\n");
40*90c8c64dSAndroid Build Coastguard Worker     result.push_str("use pattern : injection\n");
41*90c8c64dSAndroid Build Coastguard Worker     result.push_str(&get_flag_via_injection_interface(&aconfig_demo_flags_rust::PROVIDER));
42*90c8c64dSAndroid Build Coastguard Worker 
43*90c8c64dSAndroid Build Coastguard Worker     let output = env.new_string(result).expect("Couldn't create java string!");
44*90c8c64dSAndroid Build Coastguard Worker 
45*90c8c64dSAndroid Build Coastguard Worker     output.into_raw()
46*90c8c64dSAndroid Build Coastguard Worker }
47