Skip to content

Commit edb3a4b

Browse files
committed
EspNowChat: Split input into seperate activity
1 parent e248ce2 commit edb3a4b

2 files changed

Lines changed: 71 additions & 27 deletions

File tree

internal_filesystem/apps/com.micropythonos.espnow_chat/assets/espnow_chat.py

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66

77
import lvgl as lv
88
import machine
9+
from message_input_activity import MessageInputActivity
910
from micropython import const
10-
from mpos import Activity, MposKeyboard, TaskManager
11+
from mpos import Activity, Intent, TaskManager
1112
from mpos.time import localtime
1213

1314
try:
@@ -33,24 +34,16 @@ def pformat_mac(mac):
3334
class EspNowChat(Activity):
3435
def onCreate(self):
3536
main_content = lv.obj()
36-
main_content.set_flex_flow(lv.FLEX_FLOW.COLUMN)
37-
main_content.set_style_pad_gap(10, 0)
38-
39-
self.input_textarea = lv.textarea(main_content)
40-
self.input_textarea.set_placeholder_text("Message input...")
41-
self.input_textarea.set_one_line(True)
42-
self.input_textarea.set_style_text_font(lv.font_montserrat_16, lv.PART.MAIN)
43-
self.input_textarea.set_width(lv.pct(100))
44-
self.input_textarea.add_event_cb(self.show_keyboard, lv.EVENT.CLICKED, None)
45-
46-
self.keyboard = MposKeyboard(main_content)
47-
self.keyboard.set_textarea(self.input_textarea)
48-
self.keyboard.add_event_cb(self.keyboard_cb, lv.EVENT.READY, None)
49-
self.keyboard.add_flag(lv.obj.FLAG.HIDDEN)
5037

5138
self.messages = lv.label(main_content)
5239
self.messages.set_style_text_font(lv.font_montserrat_14, 0)
5340

41+
self.write_btn = lv.button(main_content)
42+
write_label = lv.label(self.write_btn)
43+
write_label.set_text("Send Message")
44+
self.write_btn.align(lv.ALIGN.BOTTOM_RIGHT, -10, -10)
45+
self.write_btn.add_event_cb(self.open_message_input, lv.EVENT.CLICKED, None)
46+
5447
# Buffer to store and display the latest 20 messages:
5548
self.messages_buffer = deque((), 20)
5649

@@ -80,21 +73,20 @@ def info(self, text):
8073
hour, minute, second = now[3], now[4], now[5]
8174
message = f"{hour:02}:{minute:02}:{second:02} {text}"
8275
print(message)
83-
self.messages_buffer.appendleft(message)
76+
self.messages_buffer.append(message)
8477
self.messages.set_text("\n".join(self.messages_buffer))
8578

86-
def keyboard_cb(self, event):
87-
message = self.input_textarea.get_text()
88-
if not message:
89-
print("Ignore empty input")
90-
else:
91-
self.input_textarea.set_text("")
92-
print(f"Create task to send {message=}...")
93-
TaskManager.create_task(self.send_messages(message))
79+
def open_message_input(self, event):
80+
intent = Intent(activity_class=MessageInputActivity)
81+
self.startActivityForResult(intent, self.on_message_input_result)
9482

95-
def show_keyboard(self, event):
96-
print("Show keyboard")
97-
self.keyboard.remove_flag(lv.obj.FLAG.HIDDEN)
83+
def on_message_input_result(self, result: dict):
84+
print(f"on_message_input_result: {result=}")
85+
if not result:
86+
return
87+
if message := result.get("data"):
88+
print(f"Create task to send {message=}")
89+
TaskManager.create_task(self.send_messages(message))
9890

9991
async def send_messages(self, message):
10092
self.info(f"Sending: {message} ({self.own_id})")
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import lvgl as lv
2+
from mpos import Activity
3+
4+
5+
class MessageInputActivity(Activity):
6+
def onCreate(self):
7+
main_content = lv.obj()
8+
main_content.set_flex_flow(lv.FLEX_FLOW.COLUMN)
9+
# main_content.set_size(lv.pct(100), lv.SIZE_CONTENT)
10+
main_content.set_width(lv.pct(100))
11+
main_content.set_style_pad_gap(1, 1)
12+
13+
input_column = lv.obj(main_content)
14+
input_column.set_flex_flow(lv.FLEX_FLOW.COLUMN)
15+
input_column.set_size(lv.pct(100), lv.SIZE_CONTENT)
16+
input_column.set_style_pad_gap(0, 0)
17+
18+
self.input_textarea = lv.textarea(input_column)
19+
self.input_textarea.set_placeholder_text("Message ...")
20+
self.input_textarea.set_one_line(True)
21+
self.input_textarea.set_style_text_font(lv.font_montserrat_16, lv.PART.MAIN)
22+
23+
keyboard_column = lv.obj(main_content)
24+
keyboard_column.set_flex_flow(lv.FLEX_FLOW.COLUMN)
25+
keyboard_column.set_width(lv.pct(100))
26+
keyboard_column.set_style_pad_gap(0, 0)
27+
28+
self.keyboard = lv.keyboard(keyboard_column)
29+
self.keyboard.set_textarea(self.input_textarea)
30+
self.keyboard.add_event_cb(self.keyboard_cb, lv.EVENT.READY, None)
31+
32+
btn_column = lv.obj(main_content)
33+
btn_column.set_flex_flow(lv.FLEX_FLOW.COLUMN)
34+
btn_column.set_size(lv.pct(100), lv.SIZE_CONTENT)
35+
btn_column.set_style_pad_gap(0, 0)
36+
37+
cancel_btn = lv.button(btn_column)
38+
cancel_label = lv.label(cancel_btn)
39+
cancel_label.set_text("Cancel")
40+
cancel_label.align(lv.ALIGN.BOTTOM_RIGHT, -2, -2)
41+
cancel_btn.add_event_cb(self.cancel_clicked, lv.EVENT.CLICKED, None)
42+
43+
self.setContentView(main_content)
44+
45+
def keyboard_cb(self, event):
46+
text = self.input_textarea.get_text()
47+
self.setResult(result_code="text", data=text)
48+
self.finish()
49+
50+
def cancel_clicked(self, event):
51+
self.setResult(None)
52+
self.finish()

0 commit comments

Comments
 (0)