@@ -74,63 +74,61 @@ fn check_android_notification_permission() -> Result<bool, String> {
7474}
7575
7676/// Opens the system notification settings for the application.
77+ #[ cfg( target_os = "android" ) ]
7778pub fn open_notification_settings ( ) {
78- #[ cfg( target_os = "android" ) ]
79- {
80- use jni:: { objects:: JObject , JavaVM } ;
81- use ndk_context:: android_context;
82-
83- let result = ( || -> Result < ( ) , String > {
84- let ctx = android_context ( ) ;
85- let vm = unsafe { JavaVM :: from_raw ( ctx. vm ( ) . cast ( ) ) }
86- . map_err ( |e| format ! ( "JavaVM::from_raw: {e}" ) ) ?;
87- let mut env = vm
88- . attach_current_thread ( )
89- . map_err ( |e| format ! ( "attach_current_thread: {e}" ) ) ?;
90- let activity = unsafe { JObject :: from_raw ( ctx. context ( ) as jni:: sys:: jobject ) } ;
91-
92- let intent_cls = env
93- . find_class ( "android/content/Intent" )
94- . map_err ( |e| format ! ( "find Intent class: {e}" ) ) ?;
95- let action = env
96- . new_string ( "android.settings.APP_NOTIFICATION_SETTINGS" )
97- . map_err ( |e| format ! ( "new_string action: {e}" ) ) ?;
98- let intent = env
99- . new_object ( & intent_cls, "(Ljava/lang/String;)V" , & [ ( & action) . into ( ) ] )
100- . map_err ( |e| format ! ( "new Intent: {e}" ) ) ?;
101-
102- let pkg_name = env
103- . call_method ( & activity, "getPackageName" , "()Ljava/lang/String;" , & [ ] )
104- . map_err ( |e| format ! ( "getPackageName: {e}" ) ) ?
105- . l ( )
106- . map_err ( |e| format ! ( "getPackageName as object: {e}" ) ) ?;
107-
108- let extra_pkg = env
109- . new_string ( "android.provider.extra.APP_PACKAGE" )
110- . map_err ( |e| format ! ( "new_string extra_pkg: {e}" ) ) ?;
79+ use jni:: { objects:: JObject , JavaVM } ;
80+ use ndk_context:: android_context;
11181
112- env. call_method (
113- & intent,
114- "putExtra" ,
115- "(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;" ,
116- & [ ( & extra_pkg) . into ( ) , ( & pkg_name) . into ( ) ] ,
117- )
118- . map_err ( |e| format ! ( "putExtra: {e}" ) ) ?;
82+ let result = ( || -> Result < ( ) , String > {
83+ let ctx = android_context ( ) ;
84+ let vm = unsafe { JavaVM :: from_raw ( ctx. vm ( ) . cast ( ) ) }
85+ . map_err ( |e| format ! ( "JavaVM::from_raw: {e}" ) ) ?;
86+ let mut env = vm
87+ . attach_current_thread ( )
88+ . map_err ( |e| format ! ( "attach_current_thread: {e}" ) ) ?;
89+ let activity = unsafe { JObject :: from_raw ( ctx. context ( ) as jni:: sys:: jobject ) } ;
90+
91+ let intent_cls = env
92+ . find_class ( "android/content/Intent" )
93+ . map_err ( |e| format ! ( "find Intent class: {e}" ) ) ?;
94+ let action = env
95+ . new_string ( "android.settings.APP_NOTIFICATION_SETTINGS" )
96+ . map_err ( |e| format ! ( "new_string action: {e}" ) ) ?;
97+ let intent = env
98+ . new_object ( & intent_cls, "(Ljava/lang/String;)V" , & [ ( & action) . into ( ) ] )
99+ . map_err ( |e| format ! ( "new Intent: {e}" ) ) ?;
100+
101+ let pkg_name = env
102+ . call_method ( & activity, "getPackageName" , "()Ljava/lang/String;" , & [ ] )
103+ . map_err ( |e| format ! ( "getPackageName: {e}" ) ) ?
104+ . l ( )
105+ . map_err ( |e| format ! ( "getPackageName as object: {e}" ) ) ?;
106+
107+ let extra_pkg = env
108+ . new_string ( "android.provider.extra.APP_PACKAGE" )
109+ . map_err ( |e| format ! ( "new_string extra_pkg: {e}" ) ) ?;
110+
111+ env. call_method (
112+ & intent,
113+ "putExtra" ,
114+ "(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;" ,
115+ & [ ( & extra_pkg) . into ( ) , ( & pkg_name) . into ( ) ] ,
116+ )
117+ . map_err ( |e| format ! ( "putExtra: {e}" ) ) ?;
119118
120- env. call_method (
121- & activity,
122- "startActivity" ,
123- "(Landroid/content/Intent;)V" ,
124- & [ ( & intent) . into ( ) ] ,
125- )
126- . map_err ( |e| format ! ( "startActivity: {e}" ) ) ?;
119+ env. call_method (
120+ & activity,
121+ "startActivity" ,
122+ "(Landroid/content/Intent;)V" ,
123+ & [ ( & intent) . into ( ) ] ,
124+ )
125+ . map_err ( |e| format ! ( "startActivity: {e}" ) ) ?;
127126
128- Ok ( ( ) )
129- } ) ( ) ;
127+ Ok ( ( ) )
128+ } ) ( ) ;
130129
131- if let Err ( e) = result {
132- log:: error!( "Failed to open Android notification settings: {e}" ) ;
133- }
130+ if let Err ( e) = result {
131+ log:: error!( "Failed to open Android notification settings: {e}" ) ;
134132 }
135133}
136134
0 commit comments