mirror of
https://github.com/liberatedsystems/Sideband_CE.git
synced 2024-09-03 04:13:27 +02:00
Refactored views, improved color pickers
This commit is contained in:
parent
a0628b61c9
commit
336b527b0e
248
sbapp/main.py
248
sbapp/main.py
@ -51,7 +51,7 @@ from mapview import CustomMapMarker
|
|||||||
if RNS.vendor.platformutils.get_platform() == "android":
|
if RNS.vendor.platformutils.get_platform() == "android":
|
||||||
from sideband.core import SidebandCore
|
from sideband.core import SidebandCore
|
||||||
|
|
||||||
from ui.layouts import root_layout
|
from ui.layouts import *
|
||||||
from ui.conversations import Conversations, MsgSync, NewConv
|
from ui.conversations import Conversations, MsgSync, NewConv
|
||||||
from ui.announces import Announces
|
from ui.announces import Announces
|
||||||
from ui.messages import Messages, ts_format
|
from ui.messages import Messages, ts_format
|
||||||
@ -68,7 +68,7 @@ if RNS.vendor.platformutils.get_platform() == "android":
|
|||||||
else:
|
else:
|
||||||
from .sideband.core import SidebandCore
|
from .sideband.core import SidebandCore
|
||||||
|
|
||||||
from .ui.layouts import root_layout
|
from .ui.layouts import *
|
||||||
from .ui.conversations import Conversations, MsgSync, NewConv
|
from .ui.conversations import Conversations, MsgSync, NewConv
|
||||||
from .ui.announces import Announces
|
from .ui.announces import Announces
|
||||||
from .ui.messages import Messages, ts_format
|
from .ui.messages import Messages, ts_format
|
||||||
@ -117,6 +117,8 @@ class SidebandApp(MDApp):
|
|||||||
self.set_ui_theme()
|
self.set_ui_theme()
|
||||||
|
|
||||||
self.conversations_view = None
|
self.conversations_view = None
|
||||||
|
self.messages_view = None
|
||||||
|
self.map_screen = None
|
||||||
self.sync_dialog = None
|
self.sync_dialog = None
|
||||||
self.settings_ready = False
|
self.settings_ready = False
|
||||||
self.telemetry_ready = False
|
self.telemetry_ready = False
|
||||||
@ -550,6 +552,8 @@ class SidebandApp(MDApp):
|
|||||||
else:
|
else:
|
||||||
screen = Builder.load_string(root_layout)
|
screen = Builder.load_string(root_layout)
|
||||||
|
|
||||||
|
self.nav_drawer = screen.ids.nav_drawer
|
||||||
|
|
||||||
return screen
|
return screen
|
||||||
|
|
||||||
def jobs(self, delta_time):
|
def jobs(self, delta_time):
|
||||||
@ -607,10 +611,10 @@ class SidebandApp(MDApp):
|
|||||||
self.announces_view.update()
|
self.announces_view.update()
|
||||||
|
|
||||||
elif self.root.ids.screen_manager.current == "map_screen":
|
elif self.root.ids.screen_manager.current == "map_screen":
|
||||||
if hasattr(self.root.ids.map_layout, "map") and self.root.ids.map_layout.map != None:
|
if self.map_screen and hasattr(self.map_screen.ids.map_layout, "map") and self.map_screen.ids.map_layout.map != None:
|
||||||
self.sideband.config["map_lat"] = self.root.ids.map_layout.map.lat
|
self.sideband.config["map_lat"] = self.map_screen.ids.map_layout.map.lat
|
||||||
self.sideband.config["map_lon"] = self.root.ids.map_layout.map.lon
|
self.sideband.config["map_lon"] = self.map_screen.ids.map_layout.map.lon
|
||||||
self.sideband.config["map_zoom"] = self.root.ids.map_layout.map.zoom
|
self.sideband.config["map_zoom"] = self.map_screen.ids.map_layout.map.zoom
|
||||||
|
|
||||||
self.last_telemetry_received = self.sideband.getstate("app.flags.last_telemetry", allow_cache=True) or 0
|
self.last_telemetry_received = self.sideband.getstate("app.flags.last_telemetry", allow_cache=True) or 0
|
||||||
if self.last_telemetry_received > self.last_map_update:
|
if self.last_telemetry_received > self.last_map_update:
|
||||||
@ -757,6 +761,10 @@ class SidebandApp(MDApp):
|
|||||||
self.root.ids.nav_drawer.set_state("closed")
|
self.root.ids.nav_drawer.set_state("closed")
|
||||||
self.sideband.should_persist_data()
|
self.sideband.should_persist_data()
|
||||||
|
|
||||||
|
if not self.root.ids.screen_manager.has_screen("exit_screen"):
|
||||||
|
self.exit_screen = Builder.load_string(layout_exit_screen)
|
||||||
|
self.root.ids.screen_manager.add_widget(self.exit_screen)
|
||||||
|
|
||||||
self.root.ids.screen_manager.transition = NoTransition()
|
self.root.ids.screen_manager.transition = NoTransition()
|
||||||
self.root.ids.screen_manager.current = "exit_screen"
|
self.root.ids.screen_manager.current = "exit_screen"
|
||||||
self.sideband.setstate("app.displaying", self.root.ids.screen_manager.current)
|
self.sideband.setstate("app.displaying", self.root.ids.screen_manager.current)
|
||||||
@ -994,14 +1002,15 @@ class SidebandApp(MDApp):
|
|||||||
if not self.conversations_view:
|
if not self.conversations_view:
|
||||||
self.conversations_view = Conversations(self)
|
self.conversations_view = Conversations(self)
|
||||||
|
|
||||||
for child in self.root.ids.conversations_scrollview.children:
|
for child in self.conversations_view.ids.conversations_scrollview.children:
|
||||||
self.root.ids.conversations_scrollview.remove_widget(child)
|
self.conversations_view.ids.conversations_scrollview.remove_widget(child)
|
||||||
|
|
||||||
self.root.ids.conversations_scrollview.effect_cls = ScrollEffect
|
self.conversations_view.ids.conversations_scrollview.effect_cls = ScrollEffect
|
||||||
self.root.ids.conversations_scrollview.add_widget(self.conversations_view.get_widget())
|
self.conversations_view.ids.conversations_scrollview.add_widget(self.conversations_view.get_widget())
|
||||||
|
|
||||||
self.root.ids.screen_manager.current = "conversations_screen"
|
self.root.ids.screen_manager.current = "conversations_screen"
|
||||||
self.root.ids.messages_scrollview.active_conversation = None
|
if self.messages_view:
|
||||||
|
self.messages_view.ids.messages_scrollview.active_conversation = None
|
||||||
|
|
||||||
def cb(dt):
|
def cb(dt):
|
||||||
self.sideband.setstate("app.displaying", self.root.ids.screen_manager.current)
|
self.sideband.setstate("app.displaying", self.root.ids.screen_manager.current)
|
||||||
@ -2707,11 +2716,11 @@ class SidebandApp(MDApp):
|
|||||||
self.announces_view = Announces(self)
|
self.announces_view = Announces(self)
|
||||||
self.sideband.setstate("app.flags.new_announces", True)
|
self.sideband.setstate("app.flags.new_announces", True)
|
||||||
|
|
||||||
for child in self.root.ids.announces_scrollview.children:
|
for child in self.announces_view.ids.announces_scrollview.children:
|
||||||
self.root.ids.announces_scrollview.remove_widget(child)
|
self.announces_view.ids.announces_scrollview.remove_widget(child)
|
||||||
|
|
||||||
self.root.ids.announces_scrollview.effect_cls = ScrollEffect
|
self.announces_view.ids.announces_scrollview.effect_cls = ScrollEffect
|
||||||
self.root.ids.announces_scrollview.add_widget(self.announces_view.get_widget())
|
self.announces_view.ids.announces_scrollview.add_widget(self.announces_view.get_widget())
|
||||||
|
|
||||||
def announces_action(self, sender=None):
|
def announces_action(self, sender=None):
|
||||||
self.root.ids.screen_manager.transition.direction = "left"
|
self.root.ids.screen_manager.transition.direction = "left"
|
||||||
@ -2843,83 +2852,88 @@ class SidebandApp(MDApp):
|
|||||||
|
|
||||||
def telemetry_init(self):
|
def telemetry_init(self):
|
||||||
if not self.telemetry_ready:
|
if not self.telemetry_ready:
|
||||||
self.root.ids.telemetry_collector.bind(focus=self.telemetry_save)
|
if not self.root.ids.screen_manager.has_screen("telemetry_screen"):
|
||||||
|
self.telemetry_screen = Builder.load_string(layout_telemetry_screen)
|
||||||
|
self.telemetry_screen.app = self
|
||||||
|
self.root.ids.screen_manager.add_widget(self.telemetry_screen)
|
||||||
|
|
||||||
|
self.telemetry_screen.ids.telemetry_collector.bind(focus=self.telemetry_save)
|
||||||
if self.sideband.config["telemetry_collector"] == None:
|
if self.sideband.config["telemetry_collector"] == None:
|
||||||
self.root.ids.telemetry_collector.text = ""
|
self.telemetry_screen.ids.telemetry_collector.text = ""
|
||||||
else:
|
else:
|
||||||
self.root.ids.telemetry_collector.text = RNS.hexrep(self.sideband.config["telemetry_collector"], delimit=False)
|
self.telemetry_screen.ids.telemetry_collector.text = RNS.hexrep(self.sideband.config["telemetry_collector"], delimit=False)
|
||||||
|
|
||||||
self.root.ids.telemetry_icon_preview.icon_color = self.sideband.config["telemetry_fg"]
|
self.telemetry_screen.ids.telemetry_icon_preview.icon_color = self.sideband.config["telemetry_fg"]
|
||||||
self.root.ids.telemetry_icon_preview.md_bg_color = self.sideband.config["telemetry_bg"]
|
self.telemetry_screen.ids.telemetry_icon_preview.md_bg_color = self.sideband.config["telemetry_bg"]
|
||||||
self.root.ids.telemetry_icon_preview.icon = self.sideband.config["telemetry_icon"]
|
self.telemetry_screen.ids.telemetry_icon_preview.icon = self.sideband.config["telemetry_icon"]
|
||||||
|
|
||||||
self.root.ids.telemetry_enabled.active = self.sideband.config["telemetry_enabled"]
|
self.telemetry_screen.ids.telemetry_enabled.active = self.sideband.config["telemetry_enabled"]
|
||||||
self.root.ids.telemetry_enabled.bind(active=self.telemetry_enabled_toggle)
|
self.telemetry_screen.ids.telemetry_enabled.bind(active=self.telemetry_enabled_toggle)
|
||||||
|
|
||||||
self.root.ids.telemetry_send_to_collector.active = self.sideband.config["telemetry_send_to_collector"]
|
self.telemetry_screen.ids.telemetry_send_to_collector.active = self.sideband.config["telemetry_send_to_collector"]
|
||||||
self.root.ids.telemetry_send_to_collector.bind(active=self.telemetry_save)
|
self.telemetry_screen.ids.telemetry_send_to_collector.bind(active=self.telemetry_save)
|
||||||
|
|
||||||
self.root.ids.telemetry_send_to_trusted.active = self.sideband.config["telemetry_send_to_trusted"]
|
self.telemetry_screen.ids.telemetry_send_to_trusted.active = self.sideband.config["telemetry_send_to_trusted"]
|
||||||
self.root.ids.telemetry_send_to_trusted.bind(active=self.telemetry_save)
|
self.telemetry_screen.ids.telemetry_send_to_trusted.bind(active=self.telemetry_save)
|
||||||
|
|
||||||
self.root.ids.telemetry_send_appearance.active = self.sideband.config["telemetry_send_appearance"]
|
self.telemetry_screen.ids.telemetry_send_appearance.active = self.sideband.config["telemetry_send_appearance"]
|
||||||
self.root.ids.telemetry_send_appearance.bind(active=self.telemetry_save)
|
self.telemetry_screen.ids.telemetry_send_appearance.bind(active=self.telemetry_save)
|
||||||
|
|
||||||
self.root.ids.telemetry_s_location.active = self.sideband.config["telemetry_s_location"]
|
self.telemetry_screen.ids.telemetry_s_location.active = self.sideband.config["telemetry_s_location"]
|
||||||
self.root.ids.telemetry_s_location.bind(active=self.telemetry_location_toggle)
|
self.telemetry_screen.ids.telemetry_s_location.bind(active=self.telemetry_location_toggle)
|
||||||
|
|
||||||
self.root.ids.telemetry_s_battery.active = self.sideband.config["telemetry_s_battery"]
|
self.telemetry_screen.ids.telemetry_s_battery.active = self.sideband.config["telemetry_s_battery"]
|
||||||
self.root.ids.telemetry_s_battery.bind(active=self.telemetry_save)
|
self.telemetry_screen.ids.telemetry_s_battery.bind(active=self.telemetry_save)
|
||||||
|
|
||||||
self.root.ids.telemetry_s_barometer.active = self.sideband.config["telemetry_s_pressure"]
|
self.telemetry_screen.ids.telemetry_s_barometer.active = self.sideband.config["telemetry_s_pressure"]
|
||||||
self.root.ids.telemetry_s_barometer.bind(active=self.telemetry_save)
|
self.telemetry_screen.ids.telemetry_s_barometer.bind(active=self.telemetry_save)
|
||||||
|
|
||||||
self.root.ids.telemetry_s_temperature.active = self.sideband.config["telemetry_s_temperature"]
|
self.telemetry_screen.ids.telemetry_s_temperature.active = self.sideband.config["telemetry_s_temperature"]
|
||||||
self.root.ids.telemetry_s_temperature.bind(active=self.telemetry_save)
|
self.telemetry_screen.ids.telemetry_s_temperature.bind(active=self.telemetry_save)
|
||||||
|
|
||||||
self.root.ids.telemetry_s_humidity.active = self.sideband.config["telemetry_s_humidity"]
|
self.telemetry_screen.ids.telemetry_s_humidity.active = self.sideband.config["telemetry_s_humidity"]
|
||||||
self.root.ids.telemetry_s_humidity.bind(active=self.telemetry_save)
|
self.telemetry_screen.ids.telemetry_s_humidity.bind(active=self.telemetry_save)
|
||||||
|
|
||||||
self.root.ids.telemetry_s_compass.active = self.sideband.config["telemetry_s_magnetic_field"]
|
self.telemetry_screen.ids.telemetry_s_compass.active = self.sideband.config["telemetry_s_magnetic_field"]
|
||||||
self.root.ids.telemetry_s_compass.bind(active=self.telemetry_save)
|
self.telemetry_screen.ids.telemetry_s_compass.bind(active=self.telemetry_save)
|
||||||
|
|
||||||
self.root.ids.telemetry_s_light.active = self.sideband.config["telemetry_s_ambient_light"]
|
self.telemetry_screen.ids.telemetry_s_light.active = self.sideband.config["telemetry_s_ambient_light"]
|
||||||
self.root.ids.telemetry_s_light.bind(active=self.telemetry_save)
|
self.telemetry_screen.ids.telemetry_s_light.bind(active=self.telemetry_save)
|
||||||
|
|
||||||
self.root.ids.telemetry_s_gravity.active = self.sideband.config["telemetry_s_gravity"]
|
self.telemetry_screen.ids.telemetry_s_gravity.active = self.sideband.config["telemetry_s_gravity"]
|
||||||
self.root.ids.telemetry_s_gravity.bind(active=self.telemetry_save)
|
self.telemetry_screen.ids.telemetry_s_gravity.bind(active=self.telemetry_save)
|
||||||
|
|
||||||
self.root.ids.telemetry_s_gyroscope.active = self.sideband.config["telemetry_s_angular_velocity"]
|
self.telemetry_screen.ids.telemetry_s_gyroscope.active = self.sideband.config["telemetry_s_angular_velocity"]
|
||||||
self.root.ids.telemetry_s_gyroscope.bind(active=self.telemetry_save)
|
self.telemetry_screen.ids.telemetry_s_gyroscope.bind(active=self.telemetry_save)
|
||||||
|
|
||||||
self.root.ids.telemetry_s_accelerometer.active = self.sideband.config["telemetry_s_acceleration"]
|
self.telemetry_screen.ids.telemetry_s_accelerometer.active = self.sideband.config["telemetry_s_acceleration"]
|
||||||
self.root.ids.telemetry_s_accelerometer.bind(active=self.telemetry_save)
|
self.telemetry_screen.ids.telemetry_s_accelerometer.bind(active=self.telemetry_save)
|
||||||
|
|
||||||
self.root.ids.telemetry_s_proximity.active = self.sideband.config["telemetry_s_proximity"]
|
self.telemetry_screen.ids.telemetry_s_proximity.active = self.sideband.config["telemetry_s_proximity"]
|
||||||
self.root.ids.telemetry_s_proximity.bind(active=self.telemetry_save)
|
self.telemetry_screen.ids.telemetry_s_proximity.bind(active=self.telemetry_save)
|
||||||
|
|
||||||
self.telemetry_ready = True
|
self.telemetry_ready = True
|
||||||
|
|
||||||
def telemetry_set_icon(self, text="", search=False):
|
def telemetry_set_icon(self, text="", search=False):
|
||||||
if text in md_icons.keys():
|
if text in md_icons.keys():
|
||||||
self.root.ids.telemetry_icon_preview.icon = text
|
self.telemetry_screen.ids.telemetry_icon_preview.icon = text
|
||||||
else:
|
else:
|
||||||
self.root.ids.telemetry_icon_preview.icon = "alpha-p-circle-outline"
|
self.telemetry_screen.ids.telemetry_icon_preview.icon = "alpha-p-circle-outline"
|
||||||
|
|
||||||
self.sideband.config["telemetry_icon"] = self.root.ids.telemetry_icon_preview.icon
|
self.sideband.config["telemetry_icon"] = self.telemetry_screen.ids.telemetry_icon_preview.icon
|
||||||
self.sideband.save_configuration()
|
self.sideband.save_configuration()
|
||||||
self.own_appearance_changed = True
|
self.own_appearance_changed = True
|
||||||
|
|
||||||
|
|
||||||
def telemetry_enabled_toggle(self, sender=None, event=None):
|
def telemetry_enabled_toggle(self, sender=None, event=None):
|
||||||
self.telemetry_save()
|
self.telemetry_save()
|
||||||
if self.root.ids.telemetry_enabled.active:
|
if self.telemetry_screen.ids.telemetry_enabled.active:
|
||||||
self.sideband.run_telemetry()
|
self.sideband.run_telemetry()
|
||||||
else:
|
else:
|
||||||
self.sideband.stop_telemetry()
|
self.sideband.stop_telemetry()
|
||||||
|
|
||||||
def telemetry_location_toggle(self, sender=None, event=None):
|
def telemetry_location_toggle(self, sender=None, event=None):
|
||||||
if self.root.ids.telemetry_s_location.active:
|
if self.telemetry_screen.ids.telemetry_s_location.active:
|
||||||
if RNS.vendor.platformutils.is_android():
|
if RNS.vendor.platformutils.is_android():
|
||||||
if not check_permission("android.permission.ACCESS_COARSE_LOCATION") or not check_permission("android.permission.ACCESS_FINE_LOCATION"):
|
if not check_permission("android.permission.ACCESS_COARSE_LOCATION") or not check_permission("android.permission.ACCESS_FINE_LOCATION"):
|
||||||
RNS.log("Requesting location permission", RNS.LOG_DEBUG)
|
RNS.log("Requesting location permission", RNS.LOG_DEBUG)
|
||||||
@ -2928,38 +2942,38 @@ class SidebandApp(MDApp):
|
|||||||
self.telemetry_save()
|
self.telemetry_save()
|
||||||
|
|
||||||
def telemetry_save(self, sender=None, event=None):
|
def telemetry_save(self, sender=None, event=None):
|
||||||
if len(self.root.ids.telemetry_collector.text) != 32:
|
if len(self.telemetry_screen.ids.telemetry_collector.text) != 32:
|
||||||
self.root.ids.telemetry_collector.text = ""
|
self.telemetry_screen.ids.telemetry_collector.text = ""
|
||||||
self.sideband.config["telemetry_collector"] = None
|
self.sideband.config["telemetry_collector"] = None
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
self.sideband.config["telemetry_collector"] = bytes.fromhex(self.root.ids.telemetry_collector.text)
|
self.sideband.config["telemetry_collector"] = bytes.fromhex(self.telemetry_screen.ids.telemetry_collector.text)
|
||||||
except:
|
except:
|
||||||
self.root.ids.telemetry_collector.text = ""
|
self.telemetry_screen.ids.telemetry_collector.text = ""
|
||||||
self.sideband.config["telemetry_collector"] = None
|
self.sideband.config["telemetry_collector"] = None
|
||||||
|
|
||||||
self.sideband.config["telemetry_enabled"] = self.root.ids.telemetry_enabled.active
|
self.sideband.config["telemetry_enabled"] = self.telemetry_screen.ids.telemetry_enabled.active
|
||||||
self.sideband.config["telemetry_send_to_collector"] = self.root.ids.telemetry_send_to_collector.active
|
self.sideband.config["telemetry_send_to_collector"] = self.telemetry_screen.ids.telemetry_send_to_collector.active
|
||||||
self.sideband.config["telemetry_send_to_trusted"] = self.root.ids.telemetry_send_to_trusted.active
|
self.sideband.config["telemetry_send_to_trusted"] = self.telemetry_screen.ids.telemetry_send_to_trusted.active
|
||||||
self.sideband.config["telemetry_send_appearance"] = self.root.ids.telemetry_send_appearance.active
|
self.sideband.config["telemetry_send_appearance"] = self.telemetry_screen.ids.telemetry_send_appearance.active
|
||||||
|
|
||||||
self.sideband.config["telemetry_s_location"] = self.root.ids.telemetry_s_location.active
|
self.sideband.config["telemetry_s_location"] = self.telemetry_screen.ids.telemetry_s_location.active
|
||||||
self.sideband.config["telemetry_s_battery"] = self.root.ids.telemetry_s_battery.active
|
self.sideband.config["telemetry_s_battery"] = self.telemetry_screen.ids.telemetry_s_battery.active
|
||||||
self.sideband.config["telemetry_s_pressure"] = self.root.ids.telemetry_s_barometer.active
|
self.sideband.config["telemetry_s_pressure"] = self.telemetry_screen.ids.telemetry_s_barometer.active
|
||||||
self.sideband.config["telemetry_s_temperature"] = self.root.ids.telemetry_s_temperature.active
|
self.sideband.config["telemetry_s_temperature"] = self.telemetry_screen.ids.telemetry_s_temperature.active
|
||||||
self.sideband.config["telemetry_s_humidity"] = self.root.ids.telemetry_s_humidity.active
|
self.sideband.config["telemetry_s_humidity"] = self.telemetry_screen.ids.telemetry_s_humidity.active
|
||||||
self.sideband.config["telemetry_s_magnetic_field"] = self.root.ids.telemetry_s_compass.active
|
self.sideband.config["telemetry_s_magnetic_field"] = self.telemetry_screen.ids.telemetry_s_compass.active
|
||||||
self.sideband.config["telemetry_s_ambient_light"] = self.root.ids.telemetry_s_light.active
|
self.sideband.config["telemetry_s_ambient_light"] = self.telemetry_screen.ids.telemetry_s_light.active
|
||||||
self.sideband.config["telemetry_s_gravity"] = self.root.ids.telemetry_s_gravity.active
|
self.sideband.config["telemetry_s_gravity"] = self.telemetry_screen.ids.telemetry_s_gravity.active
|
||||||
self.sideband.config["telemetry_s_angular_velocity"] = self.root.ids.telemetry_s_gyroscope.active
|
self.sideband.config["telemetry_s_angular_velocity"] = self.telemetry_screen.ids.telemetry_s_gyroscope.active
|
||||||
self.sideband.config["telemetry_s_acceleration"] = self.root.ids.telemetry_s_accelerometer.active
|
self.sideband.config["telemetry_s_acceleration"] = self.telemetry_screen.ids.telemetry_s_accelerometer.active
|
||||||
self.sideband.config["telemetry_s_proximity"] = self.root.ids.telemetry_s_proximity.active
|
self.sideband.config["telemetry_s_proximity"] = self.telemetry_screen.ids.telemetry_s_proximity.active
|
||||||
|
|
||||||
self.sideband.save_configuration()
|
self.sideband.save_configuration()
|
||||||
|
|
||||||
def telemetry_action(self, sender=None, direction="left"):
|
def telemetry_action(self, sender=None, direction="left"):
|
||||||
self.telemetry_init()
|
self.telemetry_init()
|
||||||
self.root.ids.telemetry_scrollview.effect_cls = ScrollEffect
|
self.telemetry_screen.ids.telemetry_scrollview.effect_cls = ScrollEffect
|
||||||
info = "\nSideband allows you to securely share telemetry, such as location and sensor data, with people, custom programs, machines or other system over LXMF. You have complete control over what kind of telemetry to send, and who you share it with.\n\nTelemetry data is never sent to, via or processed by any external services or servers, but is carried exclusively within encrypted LXMF messages over Reticulum.\n\nWhen telemetry is enabled, it is possible to embed telemetry data in normal messages on a per-peer basis. You can control this from the [b]Conversations[/b] list, by selecting the [b]Edit[/b] option for the relevant peer.\n\nYou can also define a [b]Telemetry Collector[/b], that Sideband will automatically send telemetry to on a periodic basis - for example your Nomad Network home node.\n"
|
info = "\nSideband allows you to securely share telemetry, such as location and sensor data, with people, custom programs, machines or other system over LXMF. You have complete control over what kind of telemetry to send, and who you share it with.\n\nTelemetry data is never sent to, via or processed by any external services or servers, but is carried exclusively within encrypted LXMF messages over Reticulum.\n\nWhen telemetry is enabled, it is possible to embed telemetry data in normal messages on a per-peer basis. You can control this from the [b]Conversations[/b] list, by selecting the [b]Edit[/b] option for the relevant peer.\n\nYou can also define a [b]Telemetry Collector[/b], that Sideband will automatically send telemetry to on a periodic basis - for example your Nomad Network home node.\n"
|
||||||
info3 = "\nTo include a specific type of telemetry data while sending, it must be enabled below. Please note that some sensor types are not supported on all devices. Sideband will only be able to read a specific type of sensor if your device actually includes hardware for it.\n"
|
info3 = "\nTo include a specific type of telemetry data while sending, it must be enabled below. Please note that some sensor types are not supported on all devices. Sideband will only be able to read a specific type of sensor if your device actually includes hardware for it.\n"
|
||||||
if self.theme_cls.theme_style == "Dark":
|
if self.theme_cls.theme_style == "Dark":
|
||||||
@ -2967,9 +2981,9 @@ class SidebandApp(MDApp):
|
|||||||
# info2 = "[color=#"+dark_theme_text_color+"]"+info2+"[/color]"
|
# info2 = "[color=#"+dark_theme_text_color+"]"+info2+"[/color]"
|
||||||
info3 = "[color=#"+dark_theme_text_color+"]"+info3+"[/color]"
|
info3 = "[color=#"+dark_theme_text_color+"]"+info3+"[/color]"
|
||||||
|
|
||||||
self.root.ids.telemetry_info.text = info
|
self.telemetry_screen.ids.telemetry_info.text = info
|
||||||
# self.root.ids.telemetry_info2.text = info2
|
# self.root.ids.telemetry_info2.text = info2
|
||||||
self.root.ids.telemetry_info3.text = info3
|
self.telemetry_screen.ids.telemetry_info3.text = info3
|
||||||
self.root.ids.screen_manager.transition.direction = direction
|
self.root.ids.screen_manager.transition.direction = direction
|
||||||
self.root.ids.screen_manager.current = "telemetry_screen"
|
self.root.ids.screen_manager.current = "telemetry_screen"
|
||||||
self.root.ids.nav_drawer.set_state("closed")
|
self.root.ids.nav_drawer.set_state("closed")
|
||||||
@ -2985,15 +2999,18 @@ class SidebandApp(MDApp):
|
|||||||
|
|
||||||
def telemetry_fg_color(self, sender=None):
|
def telemetry_fg_color(self, sender=None):
|
||||||
color_picker = MDColorPicker(size_hint=(0.85, 0.85))
|
color_picker = MDColorPicker(size_hint=(0.85, 0.85))
|
||||||
color_picker.open()
|
|
||||||
color_picker.bind(
|
|
||||||
on_release=self.telemetry_fg_select,
|
|
||||||
)
|
|
||||||
self.color_picker = color_picker
|
self.color_picker = color_picker
|
||||||
|
|
||||||
|
color_picker.open()
|
||||||
|
color_picker.bind(on_release=self.telemetry_fg_select)
|
||||||
|
def job(sender=None):
|
||||||
|
color_picker._rgb = self.sideband.config["telemetry_fg"][:-1]
|
||||||
|
color_picker.ids.view_headline.on_tab_press()
|
||||||
|
Clock.schedule_once(job, 0)
|
||||||
|
|
||||||
def telemetry_fg_select(self, instance_color_picker: MDColorPicker, type_color: str, selected_color: Union[list, str]):
|
def telemetry_fg_select(self, instance_color_picker: MDColorPicker, type_color: str, selected_color: Union[list, str]):
|
||||||
color = selected_color[:-1] + [1]
|
color = selected_color[:-1] + [1]
|
||||||
self.root.ids.telemetry_icon_preview.icon_color = color
|
self.telemetry_screen.ids.telemetry_icon_preview.icon_color = color
|
||||||
self.sideband.config["telemetry_fg"] = color
|
self.sideband.config["telemetry_fg"] = color
|
||||||
self.sideband.save_configuration()
|
self.sideband.save_configuration()
|
||||||
self.own_appearance_changed = True
|
self.own_appearance_changed = True
|
||||||
@ -3003,15 +3020,18 @@ class SidebandApp(MDApp):
|
|||||||
|
|
||||||
def telemetry_bg_color(self, sender=None):
|
def telemetry_bg_color(self, sender=None):
|
||||||
color_picker = MDColorPicker(size_hint=(0.85, 0.85))
|
color_picker = MDColorPicker(size_hint=(0.85, 0.85))
|
||||||
color_picker.open()
|
|
||||||
color_picker.bind(
|
|
||||||
on_release=self.telemetry_bg_select,
|
|
||||||
)
|
|
||||||
self.color_picker = color_picker
|
self.color_picker = color_picker
|
||||||
|
|
||||||
|
color_picker.open()
|
||||||
|
color_picker.bind(on_release=self.telemetry_bg_select)
|
||||||
|
def job(sender=None):
|
||||||
|
color_picker._rgb = self.sideband.config["telemetry_bg"][:-1]
|
||||||
|
color_picker.ids.view_headline.on_tab_press()
|
||||||
|
Clock.schedule_once(job, 0)
|
||||||
|
|
||||||
def telemetry_bg_select(self, instance_color_picker: MDColorPicker, type_color: str, selected_color: Union[list, str]):
|
def telemetry_bg_select(self, instance_color_picker: MDColorPicker, type_color: str, selected_color: Union[list, str]):
|
||||||
color = selected_color[:-1] + [1]
|
color = selected_color[:-1] + [1]
|
||||||
self.root.ids.telemetry_icon_preview.md_bg_color = color
|
self.telemetry_screen.ids.telemetry_icon_preview.md_bg_color = color
|
||||||
self.sideband.config["telemetry_bg"] = color
|
self.sideband.config["telemetry_bg"] = color
|
||||||
self.sideband.save_configuration()
|
self.sideband.save_configuration()
|
||||||
self.own_appearance_changed = True
|
self.own_appearance_changed = True
|
||||||
@ -3026,6 +3046,11 @@ class SidebandApp(MDApp):
|
|||||||
######################################
|
######################################
|
||||||
|
|
||||||
def icons_action(self, sender=None):
|
def icons_action(self, sender=None):
|
||||||
|
if not self.root.ids.screen_manager.has_screen("icons_screen"):
|
||||||
|
self.icons_screen = Builder.load_string(layout_icons_screen)
|
||||||
|
self.icons_screen.app = self
|
||||||
|
self.root.ids.screen_manager.add_widget(self.icons_screen)
|
||||||
|
|
||||||
self.icons_filter()
|
self.icons_filter()
|
||||||
self.root.ids.screen_manager.transition.direction = "left"
|
self.root.ids.screen_manager.transition.direction = "left"
|
||||||
self.root.ids.screen_manager.current = "icons_screen"
|
self.root.ids.screen_manager.current = "icons_screen"
|
||||||
@ -3043,10 +3068,10 @@ class SidebandApp(MDApp):
|
|||||||
def add_icon_item(name_icon):
|
def add_icon_item(name_icon):
|
||||||
def select_factory(x):
|
def select_factory(x):
|
||||||
def f():
|
def f():
|
||||||
self.root.ids.screen_manager.app.icons_selected(x)
|
self.icons_selected(x)
|
||||||
return f
|
return f
|
||||||
|
|
||||||
self.root.ids.icons_rv.data.append(
|
self.icons_screen.ids.icons_rv.data.append(
|
||||||
{
|
{
|
||||||
"viewclass": "CustomOneLineIconListItem",
|
"viewclass": "CustomOneLineIconListItem",
|
||||||
"icon": name_icon,
|
"icon": name_icon,
|
||||||
@ -3056,7 +3081,7 @@ class SidebandApp(MDApp):
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
self.root.ids.icons_rv.data = []
|
self.icons_screen.ids.icons_rv.data = []
|
||||||
for name_icon in md_icons.keys():
|
for name_icon in md_icons.keys():
|
||||||
if search:
|
if search:
|
||||||
if text in name_icon:
|
if text in name_icon:
|
||||||
@ -3068,13 +3093,17 @@ class SidebandApp(MDApp):
|
|||||||
######################################
|
######################################
|
||||||
|
|
||||||
def map_action(self, sender=None):
|
def map_action(self, sender=None):
|
||||||
if not hasattr(self.root.ids.map_layout, "map") or self.root.ids.map_layout.map == None:
|
if not self.root.ids.screen_manager.has_screen("map_screen"):
|
||||||
|
self.map_screen = Builder.load_string(layout_map_screen)
|
||||||
|
self.map_screen.app = self
|
||||||
|
self.root.ids.screen_manager.add_widget(self.map_screen)
|
||||||
|
|
||||||
from mapview import MapView
|
from mapview import MapView
|
||||||
mapview = MapView(zoom=self.sideband.config["map_zoom"], lat=self.sideband.config["map_lat"], lon=self.sideband.config["map_lon"])
|
mapview = MapView(zoom=self.sideband.config["map_zoom"], lat=self.sideband.config["map_lat"], lon=self.sideband.config["map_lon"])
|
||||||
mapview.snap_to_zoom = False
|
mapview.snap_to_zoom = False
|
||||||
mapview.double_tap_zoom = True
|
mapview.double_tap_zoom = True
|
||||||
self.root.ids.map_layout.map = mapview
|
self.map_screen.ids.map_layout.map = mapview
|
||||||
self.root.ids.map_layout.add_widget(self.root.ids.map_layout.map)
|
self.map_screen.ids.map_layout.add_widget(self.map_screen.ids.map_layout.map)
|
||||||
|
|
||||||
self.root.ids.screen_manager.transition.direction = "left"
|
self.root.ids.screen_manager.transition.direction = "left"
|
||||||
self.root.ids.screen_manager.current = "map_screen"
|
self.root.ids.screen_manager.current = "map_screen"
|
||||||
@ -3094,9 +3123,9 @@ class SidebandApp(MDApp):
|
|||||||
|
|
||||||
def map_show(self, location):
|
def map_show(self, location):
|
||||||
if hasattr(self.root.ids.map_layout, "map") and self.root.ids.map_layout.map:
|
if hasattr(self.root.ids.map_layout, "map") and self.root.ids.map_layout.map:
|
||||||
self.root.ids.map_layout.map.lat = location["latitude"]
|
self.map_screen.ids.map_layout.map.lat = location["latitude"]
|
||||||
self.root.ids.map_layout.map.lon = location["longtitude"]
|
self.map_screen.ids.map_layout.map.lon = location["longtitude"]
|
||||||
self.root.ids.map_layout.map.zoom = 16
|
self.map_screen.ids.map_layout.map.zoom = 16
|
||||||
|
|
||||||
def map_show_peer_location(self, context_dest):
|
def map_show_peer_location(self, context_dest):
|
||||||
location = self.sideband.peer_location(context_dest)
|
location = self.sideband.peer_location(context_dest)
|
||||||
@ -3174,7 +3203,7 @@ class SidebandApp(MDApp):
|
|||||||
marker = self.map_create_marker(own_address, own_telemetry, own_appearance)
|
marker = self.map_create_marker(own_address, own_telemetry, own_appearance)
|
||||||
if marker != None:
|
if marker != None:
|
||||||
self.map_markers[own_address] = marker
|
self.map_markers[own_address] = marker
|
||||||
self.root.ids.map_layout.map.add_marker(marker)
|
self.map_screen.ids.map_layout.map.add_marker(marker)
|
||||||
changes = True
|
changes = True
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@ -3201,7 +3230,7 @@ class SidebandApp(MDApp):
|
|||||||
|
|
||||||
for marker in stale_markers:
|
for marker in stale_markers:
|
||||||
try:
|
try:
|
||||||
self.root.ids.map_layout.map.remove_widget(self.map_markers[marker])
|
self.map_screen.ids.map_layout.map.remove_widget(self.map_markers[marker])
|
||||||
self.map_markers.pop(marker)
|
self.map_markers.pop(marker)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
RNS.log("Error while removing map marker: "+str(e), RNS.LOG_ERROR)
|
RNS.log("Error while removing map marker: "+str(e), RNS.LOG_ERROR)
|
||||||
@ -3238,7 +3267,7 @@ class SidebandApp(MDApp):
|
|||||||
marker = self.map_create_marker(telemetry_source, latest_viewable, self.sideband.peer_appearance(telemetry_source))
|
marker = self.map_create_marker(telemetry_source, latest_viewable, self.sideband.peer_appearance(telemetry_source))
|
||||||
if marker != None:
|
if marker != None:
|
||||||
self.map_markers[telemetry_source] = marker
|
self.map_markers[telemetry_source] = marker
|
||||||
self.root.ids.map_layout.map.add_marker(marker)
|
self.map_screen.ids.map_layout.map.add_marker(marker)
|
||||||
changes = True
|
changes = True
|
||||||
else:
|
else:
|
||||||
marker = self.map_markers[telemetry_source]
|
marker = self.map_markers[telemetry_source]
|
||||||
@ -3256,7 +3285,7 @@ class SidebandApp(MDApp):
|
|||||||
|
|
||||||
self.last_map_update = time.time()
|
self.last_map_update = time.time()
|
||||||
if changes:
|
if changes:
|
||||||
mv = self.root.ids.map_layout.map
|
mv = self.map_screen.ids.map_layout.map
|
||||||
mv.trigger_update(True)
|
mv.trigger_update(True)
|
||||||
|
|
||||||
### Guide screen
|
### Guide screen
|
||||||
@ -3356,15 +3385,22 @@ Thank you very much for using Free Communications Systems.
|
|||||||
|
|
||||||
def broadcasts_action(self, sender=None):
|
def broadcasts_action(self, sender=None):
|
||||||
def link_exec(sender=None, event=None):
|
def link_exec(sender=None, event=None):
|
||||||
import webbrowser
|
def lejob():
|
||||||
webbrowser.open("https://unsigned.io/donate")
|
import webbrowser
|
||||||
|
webbrowser.open("https://unsigned.io/donate")
|
||||||
|
threading.Thread(target=lejob, daemon=True).start()
|
||||||
|
|
||||||
self.root.ids.broadcasts_scrollview.effect_cls = ScrollEffect
|
if not self.root.ids.screen_manager.has_screen("broadcasts_screen"):
|
||||||
|
self.broadcasts_screen = Builder.load_string(layout_broadcasts_screen)
|
||||||
|
self.broadcasts_screen.app = self
|
||||||
|
self.root.ids.screen_manager.add_widget(self.broadcasts_screen)
|
||||||
|
|
||||||
|
self.broadcasts_screen.ids.broadcasts_scrollview.effect_cls = ScrollEffect
|
||||||
info = "The [b]Local Broadcasts[/b] feature will allow you to send and listen for local broadcast transmissions on connected radio, LoRa and WiFi interfaces.\n\n[b]Local Broadcasts[/b] makes it easy to establish public information exchange with anyone in direct radio range, or even with large areas far away using the [i]Remote Broadcast Repeater[/i] feature.\n\nThese features are not yet implemented in Sideband.\n\nWant it faster? Go to [u][ref=link]https://unsigned.io/donate[/ref][/u] to support the project."
|
info = "The [b]Local Broadcasts[/b] feature will allow you to send and listen for local broadcast transmissions on connected radio, LoRa and WiFi interfaces.\n\n[b]Local Broadcasts[/b] makes it easy to establish public information exchange with anyone in direct radio range, or even with large areas far away using the [i]Remote Broadcast Repeater[/i] feature.\n\nThese features are not yet implemented in Sideband.\n\nWant it faster? Go to [u][ref=link]https://unsigned.io/donate[/ref][/u] to support the project."
|
||||||
if self.theme_cls.theme_style == "Dark":
|
if self.theme_cls.theme_style == "Dark":
|
||||||
info = "[color=#"+dark_theme_text_color+"]"+info+"[/color]"
|
info = "[color=#"+dark_theme_text_color+"]"+info+"[/color]"
|
||||||
self.root.ids.broadcasts_info.text = info
|
self.broadcasts_screen.ids.broadcasts_info.text = info
|
||||||
self.root.ids.broadcasts_info.bind(on_ref_press=link_exec)
|
self.broadcasts_screen.ids.broadcasts_info.bind(on_ref_press=link_exec)
|
||||||
self.root.ids.screen_manager.transition.direction = "left"
|
self.root.ids.screen_manager.transition.direction = "left"
|
||||||
self.root.ids.screen_manager.current = "broadcasts_screen"
|
self.root.ids.screen_manager.current = "broadcasts_screen"
|
||||||
self.root.ids.nav_drawer.set_state("closed")
|
self.root.ids.nav_drawer.set_state("closed")
|
||||||
|
@ -14,6 +14,8 @@ from kivy.core.clipboard import Clipboard
|
|||||||
from kivymd.uix.button import MDRectangleFlatButton
|
from kivymd.uix.button import MDRectangleFlatButton
|
||||||
from kivymd.uix.dialog import MDDialog
|
from kivymd.uix.dialog import MDDialog
|
||||||
|
|
||||||
|
from kivy.lang.builder import Builder
|
||||||
|
|
||||||
if RNS.vendor.platformutils.get_platform() == "android":
|
if RNS.vendor.platformutils.get_platform() == "android":
|
||||||
from ui.helpers import ts_format
|
from ui.helpers import ts_format
|
||||||
else:
|
else:
|
||||||
@ -25,6 +27,15 @@ class Announces():
|
|||||||
self.context_dests = []
|
self.context_dests = []
|
||||||
self.added_item_dests = []
|
self.added_item_dests = []
|
||||||
self.list = None
|
self.list = None
|
||||||
|
|
||||||
|
if not self.app.root.ids.screen_manager.has_screen("announces_screen"):
|
||||||
|
# TODO: Remove
|
||||||
|
RNS.log("Adding announces screen", RNS.LOG_WARNING)
|
||||||
|
self.screen = Builder.load_string(layout_announces_screen)
|
||||||
|
self.screen.app = self.app
|
||||||
|
self.ids = self.screen.ids
|
||||||
|
self.app.root.ids.screen_manager.add_widget(self.screen)
|
||||||
|
|
||||||
self.fetch_announces()
|
self.fetch_announces()
|
||||||
self.list = MDList()
|
self.list = MDList()
|
||||||
# self.update()
|
# self.update()
|
||||||
@ -241,3 +252,41 @@ class Announces():
|
|||||||
|
|
||||||
def get_widget(self):
|
def get_widget(self):
|
||||||
return self.list
|
return self.list
|
||||||
|
|
||||||
|
layout_announces_screen = """
|
||||||
|
MDScreen:
|
||||||
|
name: "announces_screen"
|
||||||
|
|
||||||
|
BoxLayout:
|
||||||
|
orientation: "vertical"
|
||||||
|
|
||||||
|
MDTopAppBar:
|
||||||
|
title: "Announce Stream"
|
||||||
|
anchor_title: "left"
|
||||||
|
elevation: 0
|
||||||
|
left_action_items:
|
||||||
|
[['menu', lambda x: root.app.nav_drawer.set_state("open")]]
|
||||||
|
right_action_items:
|
||||||
|
[
|
||||||
|
['close', lambda x: root.app.close_settings_action(self)],
|
||||||
|
]
|
||||||
|
# [['eye-off', lambda x: root.ids.screen_manager.app.announce_filter_action(self)]]
|
||||||
|
|
||||||
|
ScrollView:
|
||||||
|
id: announces_scrollview
|
||||||
|
|
||||||
|
MDBoxLayout:
|
||||||
|
orientation: "vertical"
|
||||||
|
spacing: "24dp"
|
||||||
|
size_hint_y: None
|
||||||
|
height: self.minimum_height
|
||||||
|
padding: dp(64)
|
||||||
|
|
||||||
|
MDLabel:
|
||||||
|
id: announces_info
|
||||||
|
markup: True
|
||||||
|
text: ""
|
||||||
|
size_hint_y: None
|
||||||
|
text_size: self.width, None
|
||||||
|
height: self.texture_size[1]
|
||||||
|
"""
|
||||||
|
@ -38,7 +38,10 @@ class Conversations():
|
|||||||
self.ids = None
|
self.ids = None
|
||||||
|
|
||||||
if not self.app.root.ids.screen_manager.has_screen("conversations_screen"):
|
if not self.app.root.ids.screen_manager.has_screen("conversations_screen"):
|
||||||
|
# TODO: Remove
|
||||||
|
RNS.log("Adding conversations screen", RNS.LOG_WARNING)
|
||||||
self.screen = Builder.load_string(conv_screen_kv)
|
self.screen = Builder.load_string(conv_screen_kv)
|
||||||
|
self.screen.app = self.app
|
||||||
self.ids = self.screen.ids
|
self.ids = self.screen.ids
|
||||||
self.app.root.ids.screen_manager.add_widget(self.screen)
|
self.app.root.ids.screen_manager.add_widget(self.screen)
|
||||||
|
|
||||||
@ -357,7 +360,7 @@ MDScreen:
|
|||||||
elevation: 0
|
elevation: 0
|
||||||
left_action_items:
|
left_action_items:
|
||||||
[
|
[
|
||||||
['menu', lambda x: nav_drawer.set_state("open")],
|
['menu', lambda x: root.app.nav_drawer.set_state("open")],
|
||||||
]
|
]
|
||||||
right_action_items:
|
right_action_items:
|
||||||
[
|
[
|
||||||
|
4523
sbapp/ui/layouts.py
4523
sbapp/ui/layouts.py
File diff suppressed because it is too large
Load Diff
@ -41,6 +41,15 @@ class Messages():
|
|||||||
def __init__(self, app, context_dest):
|
def __init__(self, app, context_dest):
|
||||||
self.app = app
|
self.app = app
|
||||||
self.context_dest = context_dest
|
self.context_dest = context_dest
|
||||||
|
|
||||||
|
if not self.app.root.ids.screen_manager.has_screen("messages_screen"):
|
||||||
|
# TODO: Remove
|
||||||
|
RNS.log("Adding messages screen", RNS.LOG_WARNING)
|
||||||
|
self.screen = Builder.load_string(messages_screen_kv)
|
||||||
|
self.screen.app = self.app
|
||||||
|
self.ids = self.screen.ids
|
||||||
|
self.app.root.ids.screen_manager.add_widget(self.screen)
|
||||||
|
|
||||||
self.new_messages = []
|
self.new_messages = []
|
||||||
self.added_item_hashes = []
|
self.added_item_hashes = []
|
||||||
self.added_messages = 0
|
self.added_messages = 0
|
||||||
@ -578,6 +587,76 @@ class Messages():
|
|||||||
if self.send_error_dialog:
|
if self.send_error_dialog:
|
||||||
self.send_error_dialog.dismiss()
|
self.send_error_dialog.dismiss()
|
||||||
|
|
||||||
|
messages_screen_kv = """
|
||||||
|
MDScreen:
|
||||||
|
name: "messages_screen"
|
||||||
|
|
||||||
|
BoxLayout:
|
||||||
|
orientation: "vertical"
|
||||||
|
|
||||||
|
MDTopAppBar:
|
||||||
|
id: messages_toolbar
|
||||||
|
anchor_title: "left"
|
||||||
|
title: "Messages"
|
||||||
|
elevation: 0
|
||||||
|
left_action_items:
|
||||||
|
[['menu', lambda x: root.app.nav_drawer.set_state("open")],]
|
||||||
|
right_action_items:
|
||||||
|
[
|
||||||
|
['map-search', lambda x: root.ids.screen_manager.app.peer_show_location_action(self)],
|
||||||
|
['lan-connect', lambda x: root.ids.screen_manager.app.message_propagation_action(self)],
|
||||||
|
['close', lambda x: root.app.close_settings_action(self)],
|
||||||
|
]
|
||||||
|
|
||||||
|
ScrollView:
|
||||||
|
id: messages_scrollview
|
||||||
|
do_scroll_x: False
|
||||||
|
do_scroll_y: True
|
||||||
|
|
||||||
|
BoxLayout:
|
||||||
|
id: no_keys_part
|
||||||
|
orientation: "vertical"
|
||||||
|
padding: [dp(16), dp(0), dp(16), dp(16)]
|
||||||
|
spacing: dp(24)
|
||||||
|
size_hint_y: None
|
||||||
|
height: self.minimum_height + dp(64)
|
||||||
|
|
||||||
|
MDLabel:
|
||||||
|
id: nokeys_text
|
||||||
|
text: ""
|
||||||
|
|
||||||
|
MDRectangleFlatIconButton:
|
||||||
|
icon: "key-wireless"
|
||||||
|
text: "Query Network For Keys"
|
||||||
|
on_release: root.ids.screen_manager.app.key_query_action(self)
|
||||||
|
|
||||||
|
|
||||||
|
BoxLayout:
|
||||||
|
id: message_input_part
|
||||||
|
padding: [dp(16), dp(0), dp(16), dp(16)]
|
||||||
|
spacing: dp(24)
|
||||||
|
size_hint_y: None
|
||||||
|
height: self.minimum_height
|
||||||
|
|
||||||
|
MDTextField:
|
||||||
|
id: message_text
|
||||||
|
input_type: "text"
|
||||||
|
keyboard_suggestions: True
|
||||||
|
multiline: True
|
||||||
|
hint_text: "Write message"
|
||||||
|
mode: "rectangle"
|
||||||
|
max_height: dp(100)
|
||||||
|
|
||||||
|
MDRectangleFlatIconButton:
|
||||||
|
id: message_send_button
|
||||||
|
icon: "transfer-up"
|
||||||
|
text: "Send"
|
||||||
|
padding: [dp(10), dp(13), dp(10), dp(14)]
|
||||||
|
icon_size: dp(24)
|
||||||
|
font_size: dp(16)
|
||||||
|
on_release: root.ids.screen_manager.app.message_send_action(self)
|
||||||
|
"""
|
||||||
|
|
||||||
Builder.load_string("""
|
Builder.load_string("""
|
||||||
<ListLXMessageCard>:
|
<ListLXMessageCard>:
|
||||||
style: "outlined"
|
style: "outlined"
|
||||||
|
Loading…
Reference in New Issue
Block a user