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
@@ -0,0 +1,64 @@
import lvgl as lv
from mpos import Activity, AppearanceManager
from mpos import Activity, DisplayMetrics, BuildInfo, DeviceInfo
try:
import network
except ImportError:
network = None

class ChannelActivity(Activity):
def onCreate(self):
screen = lv.obj()
screen.set_style_pad_all(0, lv.PART.MAIN)
screen.set_flex_flow(lv.FLEX_FLOW.COLUMN)

self._add_label(screen, 'Current Network settings:', is_header=True)
if network:
sta = network.WLAN(network.WLAN.IF_STA)
self.current_config = sta.config
else:
self.current_config={
'essid': '<no network>',
'channel': None
}

self._add_label(screen, f'channel: {self.current_config["channel"]}')
self._add_label(screen, f'essid: {self.current_config["essid"]}')

#
# self.input_textarea = lv.textarea(screen)
# self.input_textarea.set_width(lv.pct(100))
# self.input_textarea.set_placeholder_text("Message ...")
# self.input_textarea.set_style_text_font(lv.font_montserrat_16, lv.PART.MAIN)
#
# keyboard = lv.keyboard(screen)
# keyboard.set_style_text_font(lv.font_montserrat_20, lv.PART.MAIN)
# keyboard.set_style_min_height(175, lv.PART.MAIN)
# AppearanceManager.apply_keyboard_fix(keyboard)
# keyboard.set_textarea(self.input_textarea)
# keyboard.add_event_cb(self.keyboard_cb, lv.EVENT.READY, None)

self.setContentView(screen)

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

def _add_label(self, parent, text, is_header=False, margin_top=DisplayMetrics.pct_of_height(5)):
"""
Based on About._add_label()
"""
label = lv.label(parent)
label.set_text(text)

if is_header:
primary_color = lv.theme_get_color_primary(None)
label.set_style_text_color(primary_color, lv.PART.MAIN)
label.set_style_text_font(lv.font_montserrat_14, lv.PART.MAIN)
label.set_style_margin_top(margin_top, lv.PART.MAIN)
label.set_style_margin_bottom(DisplayMetrics.pct_of_height(2), lv.PART.MAIN)
else:
label.set_style_text_font(lv.font_montserrat_12, lv.PART.MAIN)
label.set_style_margin_bottom(2, lv.PART.MAIN)
return label
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@

import lvgl as lv
import machine
from channel_activity import ChannelActivity
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 @@ -32,29 +34,38 @@ 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)
screen = lv.obj()
screen.set_style_pad_all(0, lv.PART.MAIN)
screen.set_flex_flow(lv.FLEX_FLOW.COLUMN)

messages_row = lv.obj(screen)
messages_row.set_width(lv.pct(100))
messages_row.set_height(lv.SIZE_CONTENT)
messages_row.set_style_pad_all(0, 1)
messages_row.set_flex_flow(lv.FLEX_FLOW.ROW)

self.messages = lv.label(messages_row)
self.messages.set_style_text_font(lv.font_montserrat_12, 0)

self.button_row = lv.obj(screen)
self.button_row.set_width(lv.pct(100))
self.button_row.set_height(lv.SIZE_CONTENT)
self.button_row.set_flex_flow(lv.FLEX_FLOW.ROW)

self.write_btn = lv.button(self.button_row)
write_label = lv.label(self.write_btn)
write_label.set_text("Send Message")
self.write_btn.add_event_cb(self.open_message_input, lv.EVENT.CLICKED, None)

self.channel_btn = lv.button(self.button_row)
channel_btn_label = lv.label(self.channel_btn)
channel_btn_label.set_text("Channel")
self.channel_btn.add_event_cb(self.open_channel_activity, lv.EVENT.CLICKED, None)

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

self.setContentView(main_content)
self.setContentView(screen)

if aioespnow and network:
print("Initialize WLAN interface...")
Expand All @@ -80,21 +91,28 @@ 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=}...")
self.button_row.scroll_to_view_recursive(True)

def open_message_input(self, event):
intent = Intent(activity_class=MessageInputActivity)
self.startActivityForResult(intent, self.on_message_input_result)

def open_channel_activity(self, event):
intent = Intent(activity_class=ChannelActivity)
self.startActivityForResult(intent, self.on_channel_activity_result)

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))

def show_keyboard(self, event):
print("Show keyboard")
self.keyboard.remove_flag(lv.obj.FLAG.HIDDEN)
def on_channel_activity_result(self, result: dict):
print(f"WIP - on_channel_activity_result: {result=}")

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,29 @@
import lvgl as lv
from mpos import Activity, AppearanceManager


class MessageInputActivity(Activity):
def onCreate(self):
screen = lv.obj()
screen.set_style_pad_all(0, lv.PART.MAIN)
screen.set_flex_flow(lv.FLEX_FLOW.COLUMN)

self.input_textarea = lv.textarea(screen)
self.input_textarea.set_width(lv.pct(100))
self.input_textarea.set_one_line(True)
self.input_textarea.set_placeholder_text("Message ...")
self.input_textarea.set_style_text_font(lv.font_montserrat_16, lv.PART.MAIN)

keyboard = lv.keyboard(screen)
keyboard.set_style_text_font(lv.font_montserrat_20, lv.PART.MAIN)
keyboard.set_style_min_height(175, lv.PART.MAIN)
AppearanceManager.apply_keyboard_fix(keyboard)
keyboard.set_textarea(self.input_textarea)
keyboard.add_event_cb(self.keyboard_cb, lv.EVENT.READY, None)

self.setContentView(screen)

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