lib/android: implement back_button support using the "hardware" back key
authorAlexis Laferrière <alexis.laf@xymus.net>
Fri, 18 Mar 2016 20:17:59 +0000 (16:17 -0400)
committerAlexis Laferrière <alexis.laf@xymus.net>
Tue, 17 May 2016 15:28:40 +0000 (11:28 -0400)
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

lib/android/NitActivity.java
lib/android/nit_activity.nit
lib/android/ui/ui.nit

index 8837617..cbe6ad4 100644 (file)
@@ -48,6 +48,7 @@ public class NitActivity extends Activity {
        protected native void nitOnDestroy(int activity);
        protected native void nitOnSaveInstanceState(int activity, Bundle savedInstanceState);
        protected native void nitOnRestoreInstanceState(int activity, Bundle savedInstanceState);
+       protected native boolean nitOnBackPressed(int activity);
        protected native boolean nitOnKeyDown(int activity, int keyCode, KeyEvent event);
        protected native boolean nitOnKeyLongPress(int activity, int keyCode, KeyEvent event);
        protected native boolean nitOnKeyMultiple(int activity, int keyCode, int count, KeyEvent event);
@@ -115,6 +116,12 @@ public class NitActivity extends Activity {
        }
 
        @Override
+       public void onBackPressed() {
+               if (!nitOnBackPressed(nitActivity))
+                       super.onBackPressed();
+       }
+
+       @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
                return nitOnKeyDown(nitActivity, keyCode, event)
                        || super.onKeyDown(keyCode, event);
index de849ea..1668147 100644 (file)
@@ -135,6 +135,12 @@ in "C body" `{
                Activity_on_restore_instance_state((Activity)nit_activity, saved_state);
        }
 
+       JNIEXPORT jboolean JNICALL Java_nit_app_NitActivity_nitOnBackPressed
+         (JNIEnv *env, jobject java_activity, jint nit_activity)
+       {
+               return (jboolean)Activity_on_back_pressed((Activity)nit_activity);
+       }
+
        JNIEXPORT jboolean JNICALL Java_nit_app_NitActivity_nitOnKeyDown
          (JNIEnv *env, jobject java_activity, jint nit_activity, jint keyCode, jobject event)
        {
@@ -184,6 +190,7 @@ redef class App
        Activity.on_start, Activity.on_restart, Activity.on_stop,
        Activity.on_pause, Activity.on_resume,
        Activity.on_save_instance_state, Activity.on_restore_instance_state,
+       Activity.on_back_pressed,
        Activity.on_key_down, Activity.on_key_long_press,
        Activity.on_key_multiple, Activity.on_key_up `{
                App_incr_ref(self);
@@ -279,6 +286,11 @@ class Activity
        # Notification from Android, the current device configuration has changed
        fun on_configuration_changed do end
 
+       # The back key has been pressed
+       #
+       # Return `true` if the event has been handled.
+       fun on_back_pressed: Bool do return false
+
        # A key has been pressed
        #
        # Return `true` if the event has been handled.
index 65535e8..dedad21 100644 (file)
@@ -78,6 +78,19 @@ redef class App
        end
 end
 
+redef class Activity
+       redef fun on_back_pressed
+       do
+               var window = app.window
+               if window.enable_back_button then
+                       window.on_back_button
+                       return true
+               end
+
+               return false
+       end
+end
+
 # On Android, a window is implemented with the fragment `native`
 redef class Window
        redef var native = (new Android_app_Fragment(self)).new_global_ref