Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@

import lvgl as lv
import machine
from message_input_activity import MessageInputActivity
from micropython import const
from mpos import Activity, MposKeyboard, TaskManager
from mpos import Activity, Intent, TaskManager
from mpos.time import localtime

try:
Expand All @@ -33,24 +34,16 @@ def pformat_mac(mac):
class EspNowChat(Activity):
def onCreate(self):
main_content = lv.obj()
main_content.set_flex_flow(lv.FLEX_FLOW.COLUMN)
main_content.set_style_pad_gap(10, 0)

self.input_textarea = lv.textarea(main_content)
self.input_textarea.set_placeholder_text("Message input...")
self.input_textarea.set_one_line(True)
self.input_textarea.set_style_text_font(lv.font_montserrat_16, lv.PART.MAIN)
self.input_textarea.set_width(lv.pct(100))
self.input_textarea.add_event_cb(self.show_keyboard, lv.EVENT.CLICKED, None)

self.keyboard = MposKeyboard(main_content)
self.keyboard.set_textarea(self.input_textarea)
self.keyboard.add_event_cb(self.keyboard_cb, lv.EVENT.READY, None)
self.keyboard.add_flag(lv.obj.FLAG.HIDDEN)

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

self.write_btn = lv.button(main_content)
write_label = lv.label(self.write_btn)
write_label.set_text("Send Message")
self.write_btn.align(lv.ALIGN.BOTTOM_RIGHT, -10, -10)
self.write_btn.add_event_cb(self.open_message_input, lv.EVENT.CLICKED, None)

# Buffer to store and display the latest 20 messages:
self.messages_buffer = deque((), 20)

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

def keyboard_cb(self, event):
message = self.input_textarea.get_text()
if not message:
print("Ignore empty input")
else:
self.input_textarea.set_text("")
print(f"Create task to send {message=}...")
TaskManager.create_task(self.send_messages(message))
def open_message_input(self, event):
intent = Intent(activity_class=MessageInputActivity)
self.startActivityForResult(intent, self.on_message_input_result)

def show_keyboard(self, event):
print("Show keyboard")
self.keyboard.remove_flag(lv.obj.FLAG.HIDDEN)
def on_message_input_result(self, result: dict):
print(f"on_message_input_result: {result=}")
if not result:
return
if message := result.get("data"):
print(f"Create task to send {message=}")
TaskManager.create_task(self.send_messages(message))

async def send_messages(self, message):
self.info(f"Sending: {message} ({self.own_id})")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import lvgl as lv
from mpos import Activity


class MessageInputActivity(Activity):
def onCreate(self):
main_content = lv.obj()
main_content.set_flex_flow(lv.FLEX_FLOW.COLUMN)
# main_content.set_size(lv.pct(100), lv.SIZE_CONTENT)
main_content.set_width(lv.pct(100))
main_content.set_style_pad_gap(1, 1)

input_column = lv.obj(main_content)
input_column.set_flex_flow(lv.FLEX_FLOW.COLUMN)
input_column.set_size(lv.pct(100), lv.SIZE_CONTENT)
input_column.set_style_pad_gap(0, 0)

self.input_textarea = lv.textarea(input_column)
self.input_textarea.set_placeholder_text("Message ...")
self.input_textarea.set_one_line(True)
self.input_textarea.set_style_text_font(lv.font_montserrat_16, lv.PART.MAIN)

keyboard_column = lv.obj(main_content)
keyboard_column.set_flex_flow(lv.FLEX_FLOW.COLUMN)
keyboard_column.set_width(lv.pct(100))
keyboard_column.set_style_pad_gap(0, 0)

self.keyboard = lv.keyboard(keyboard_column)
self.keyboard.set_textarea(self.input_textarea)
self.keyboard.add_event_cb(self.keyboard_cb, lv.EVENT.READY, None)

btn_column = lv.obj(main_content)
btn_column.set_flex_flow(lv.FLEX_FLOW.COLUMN)
btn_column.set_size(lv.pct(100), lv.SIZE_CONTENT)
btn_column.set_style_pad_gap(0, 0)

cancel_btn = lv.button(btn_column)
cancel_label = lv.label(cancel_btn)
cancel_label.set_text("Cancel")
cancel_label.align(lv.ALIGN.BOTTOM_RIGHT, -2, -2)
cancel_btn.add_event_cb(self.cancel_clicked, lv.EVENT.CLICKED, None)

self.setContentView(main_content)

def keyboard_cb(self, event):
text = self.input_textarea.get_text()
self.setResult(result_code="text", data=text)
self.finish()

def cancel_clicked(self, event):
self.setResult(None)
self.finish()
Loading