android & benitlux: use NitObject in clients
[nit.git] / lib / android / ui / ui.nit
index e9ea641..767039b 100644 (file)
 # limitations under the License.
 
 # Views and services to use the Android native user interface
-module ui
+module ui is
+       # `adjustPan` allows to use EditText in a ListLayout
+       android_manifest_activity """android:windowSoftInputMode="adjustPan""""
+end
 
 # Implementation note:
 #
@@ -76,6 +79,29 @@ redef class App
                native_activity.show_fragment(root_layout_id, window.native)
                super
        end
+
+       redef fun on_start do window.on_start
+
+       redef fun on_destroy do window.on_destroy
+end
+
+redef class CompositeControl
+       redef fun on_start do for i in items do i.on_start
+
+       redef fun on_destroy do for i in items do i.on_destroy
+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`
@@ -181,7 +207,8 @@ end
 redef class Android_widget_ArrayAdapter
        private new (context: NativeContext, res: Int, sender: ListLayout)
        import ListLayout.create_view in "Java" `{
-               final int final_sender_object = sender;
+               final nit.app.NitObject final_sender_object = sender;
+               ListLayout_incr_ref(sender);
 
                return new android.widget.ArrayAdapter(context, (int)res) {
                                @Override
@@ -228,7 +255,7 @@ redef class TextView
                else // if (align > 0.5d)
                        g = android.view.Gravity.RIGHT;
 
-               view.setGravity(g);
+               view.setGravity(g | android.view.Gravity.CENTER_VERTICAL);
        `}
 end
 
@@ -249,7 +276,7 @@ redef class CheckBox
 
        private fun set_callback_on_toggle(view: NATIVE)
        import on_toggle in "Java" `{
-               final int final_sender_object = self;
+               final nit.app.NitObject final_sender_object = self;
                CheckBox_incr_ref(final_sender_object);
 
                view.setOnCheckedChangeListener(
@@ -301,15 +328,17 @@ end
 redef class NativeButton
        private new (context: NativeActivity, sender_object: Button)
        import Button.on_click in "Java" `{
-               final int final_sender_object = sender_object;
+               final nit.app.NitObject final_sender_object = sender_object;
                Button_incr_ref(final_sender_object);
 
-               return new android.widget.Button(context){
+               return new android.widget.Button(context) {
                        @Override
                        public boolean onTouchEvent(android.view.MotionEvent event) {
-                               if(event.getAction() == android.view.MotionEvent.ACTION_DOWN) {
+                               if (event.getAction() == android.view.MotionEvent.ACTION_UP) {
                                        Button_on_click(final_sender_object);
                                        return true;
+                               } else if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) {
+                                       return true;
                                }
                                return false;
                        }
@@ -320,7 +349,8 @@ end
 redef class Android_app_Fragment
        private new (nit_window: Window)
        import Window.on_create_fragment in "Java" `{
-               final int final_nit_window = nit_window;
+               final nit.app.NitObject final_nit_window = nit_window;
+               Window_incr_ref(nit_window);
 
                return new android.app.Fragment(){
                        @Override
@@ -332,3 +362,18 @@ redef class Android_app_Fragment
                };
        `}
 end
+
+redef class Text
+       redef fun open_in_browser
+       do to_java_string.native_open_in_browser(app.native_activity)
+end
+
+redef class JavaString
+       private fun native_open_in_browser(context: NativeContext)
+       in "Java" `{
+               android.content.Intent intent = new android.content.Intent(
+                       android.content.Intent.ACTION_VIEW,
+                       android.net.Uri.parse(self));
+               context.startActivity(intent);
+       `}
+end