1dc6d786279fa9fff7471333cbd12acb62bb341a
1 # This file is part of NIT (http://www.nitlanguage.org).
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
15 # Views and services to use the Android native user interface
18 # Implementation note:
20 # We cannot rely on `Activity::on_restore_instance_state` to implement
21 # `on_restore_state` is it only invoked if there is a bundled state,
22 # and we don't use the Android bundled state.
29 private import data_store
32 # The Android element used to implement `self`
33 fun native
: NATIVE is abstract
36 type NATIVE: JavaObject
40 redef var native
= app
.native_activity
.new_global_ref
42 redef type NATIVE: NativeActivity
48 # FIXME abstract the Android restriction where `content_view` must be a layout
49 assert item
isa Layout
50 native
.content_view
= item
.native
55 redef type NATIVE: NativeView
57 redef fun enabled
=(enabled
) do native
.enabled
= enabled
or else true
58 redef fun enabled
do return native
.enabled
62 redef type NATIVE: NativeViewGroup
70 # FIXME abstract the use either homogeneous or weight to balance views size in a layout
71 native
.add_view_with_weight
(item
.native
, 1.0)
75 redef class HorizontalLayout
77 var layout
= new NativeLinearLayout(app
.native_activity
)
78 layout
= layout
.new_global_ref
84 redef class VerticalLayout
86 var layout
= new NativeLinearLayout(app
.native_activity
)
87 layout
= layout
.new_global_ref
94 redef type NATIVE: NativeTextView
96 redef fun text
do return native
.text
.to_s
97 redef fun text
=(value
) do
98 if value
== null then value
= ""
99 native
.text
= value
.to_java_string
103 fun text_size
: Float do return native
.text_size
106 fun text_size
=(text_size
: nullable Float) do
107 if text_size
!= null then native
.text_size
= text_size
111 redef class TextInput
112 redef type NATIVE: NativeEditText
113 redef var native
= (new NativeEditText(app
.native_activity
)).new_global_ref
119 redef type NATIVE: NativeButton
120 redef var native
= (new NativeButton(app
.native_activity
, self)).new_global_ref
122 private fun on_click
do notify_observers
new ButtonPressEvent(self)
124 redef fun finalize
do native
.delete_global_ref
127 redef class NativeButton
128 private new (context
: NativeActivity, sender_object
: Button)
129 import Button.on_click
in "Java" `{
130 final int final_sender_object = sender_object;
132 return new android.widget.Button(context){
134 public boolean onTouchEvent(android.view.MotionEvent event) {
135 if(event.getAction() == android.view.MotionEvent.ACTION_DOWN) {
136 Button_on_click(final_sender_object);