From 79df28a77a44356cf7f23ed05e6e5cf7ac16e75a Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Fri, 7 Oct 2022 17:22:03 +0200 Subject: [PATCH] Added exit screen. Disabled overscroll to mitigate KivyMD bug (disappearing list entries due to extreme overscroll. Added debug log option. --- sbapp/main.py | 40 ++++++++++++++++++++++++++++++++++++--- sbapp/ui/conversations.py | 5 +++++ sbapp/ui/layouts.py | 37 ++++++++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+), 3 deletions(-) diff --git a/sbapp/main.py b/sbapp/main.py index af8a625..3cf2bcc 100644 --- a/sbapp/main.py +++ b/sbapp/main.py @@ -1,3 +1,4 @@ +__debug_build__ = False __version__ = "0.2.1" __variant__ = "beta" @@ -18,7 +19,7 @@ import base64 import threading from kivy.logger import Logger, LOG_LEVELS -if args.verbose: +if __debug_build__ or args.verbose: Logger.setLevel(LOG_LEVELS["debug"]) else: Logger.setLevel(LOG_LEVELS["error"]) @@ -33,6 +34,10 @@ from kivy.core.clipboard import Clipboard from kivy.base import EventLoop from kivy.clock import Clock from kivy.lang.builder import Builder +from kivy.effects.scroll import ScrollEffect +from kivy.uix.screenmanager import ScreenManager +from kivy.uix.screenmanager import FadeTransition, NoTransition +from kivy.effects.dampedscroll import DampedScrollEffect if RNS.vendor.platformutils.get_platform() == "android": from sideband.core import SidebandCore @@ -85,9 +90,9 @@ class SidebandApp(MDApp): self.app_dir = plyer.storagepath.get_application_dir() if RNS.vendor.platformutils.get_platform() == "android": - self.sideband = SidebandCore(self, is_client=True, android_app_dir=self.app_dir) + self.sideband = SidebandCore(self, is_client=True, android_app_dir=self.app_dir, verbose=__debug_build__) else: - self.sideband = SidebandCore(self, is_client=False, verbose=args.verbose) + self.sideband = SidebandCore(self, is_client=False, verbose=(args.verbose or __debug_build__)) self.update_ui_theme() @@ -191,22 +196,41 @@ class SidebandApp(MDApp): mActivity.startActivity(shareIntent) def on_pause(self): + RNS.log("App pausing...", RNS.LOG_DEBUG) self.sideband.setstate("app.running", True) self.sideband.setstate("app.foreground", False) self.app_state = SidebandApp.PAUSED self.sideband.should_persist_data() + if self.conversations_view != None: + self.root.ids.conversations_scrollview.effect_cls = ScrollEffect + self.conversations_view.update() + self.root.ids.conversations_scrollview.scroll = 1 + + RNS.log("App paused", RNS.LOG_DEBUG) return True def on_resume(self): + RNS.log("App resuming...", RNS.LOG_DEBUG) self.sideband.setstate("app.running", True) self.sideband.setstate("app.foreground", True) self.sideband.setstate("wants.clear_notifications", True) self.app_state = SidebandApp.ACTIVE + if self.conversations_view != None: + self.root.ids.conversations_scrollview.effect_cls = ScrollEffect + self.conversations_view.update() + self.root.ids.conversations_scrollview.scroll = 1 + + else: + RNS.log("Conversations view did not exist", RNS.LOG_DEBUG) + + RNS.log("App resumed...", RNS.LOG_DEBUG) def on_stop(self): + RNS.log("App stopping...", RNS.LOG_DEBUG) self.sideband.setstate("app.running", False) self.sideband.setstate("app.foreground", False) self.app_state = SidebandApp.STOPPING + RNS.log("App stopped", RNS.LOG_DEBUG) def is_in_foreground(self): if self.app_state == SidebandApp.ACTIVE: @@ -371,6 +395,10 @@ class SidebandApp(MDApp): self.root.ids.nav_drawer.set_state("closed") self.sideband.should_persist_data() + self.root.ids.screen_manager.transition = NoTransition() + self.root.ids.screen_manager.current = "exit_screen" + self.sideband.setstate("app.displaying", self.root.ids.screen_manager.current) + self.sideband.setstate("app.running", False) self.sideband.setstate("app.foreground", False) @@ -434,6 +462,8 @@ class SidebandApp(MDApp): self.root.ids.screen_manager.transition.direction = "left" self.messages_view = Messages(self, context_dest) + self.root.ids.messages_scrollview.effect_cls = ScrollEffect + self.root.ids.messages_scrollview.scroll_y = 1 for child in self.root.ids.messages_scrollview.children: self.root.ids.messages_scrollview.remove_widget(child) @@ -554,6 +584,7 @@ class SidebandApp(MDApp): for child in self.root.ids.conversations_scrollview.children: self.root.ids.conversations_scrollview.remove_widget(child) + self.root.ids.conversations_scrollview.effect_cls = ScrollEffect self.root.ids.conversations_scrollview.add_widget(self.conversations_view.get_widget()) self.root.ids.screen_manager.current = "conversations_screen" @@ -983,6 +1014,7 @@ class SidebandApp(MDApp): for child in self.root.ids.announces_scrollview.children: self.root.ids.announces_scrollview.remove_widget(child) + self.root.ids.announces_scrollview.effect_cls = ScrollEffect self.root.ids.announces_scrollview.add_widget(self.announces_view.get_widget()) def announces_action(self, sender=None): @@ -1005,6 +1037,8 @@ class SidebandApp(MDApp): def screen_transition_complete(self, sender): if self.root.ids.screen_manager.current == "announces_screen": pass + if self.root.ids.screen_manager.current == "conversations_screen": + pass ### Keys screen ###################################### diff --git a/sbapp/ui/conversations.py b/sbapp/ui/conversations.py index 7d3ef93..8574de5 100644 --- a/sbapp/ui/conversations.py +++ b/sbapp/ui/conversations.py @@ -1,4 +1,5 @@ import RNS +import time from kivy.metrics import dp from kivy.uix.boxlayout import BoxLayout @@ -55,6 +56,8 @@ class Conversations(): self.app.sideband.setstate("app.flags.new_conversations", False) def update_widget(self): + us = time.time() + RNS.log("Updating conversation list widgets", RNS.LOG_DEBUG) if self.list == None: self.list = MDList() @@ -230,5 +233,7 @@ class Conversations(): self.added_item_dests.append(context_dest) self.list.add_widget(item) + RNS.log("Updated conversation list widgets in "+RNS.prettytime(time.time()-us), RNS.LOG_DEBUG) + def get_widget(self): return self.list \ No newline at end of file diff --git a/sbapp/ui/layouts.py b/sbapp/ui/layouts.py index b7ed93a..81c5afe 100644 --- a/sbapp/ui/layouts.py +++ b/sbapp/ui/layouts.py @@ -47,6 +47,43 @@ MDNavigationLayout: height: self.texture_size[1] + MDScreen: + name: "exit_screen" + + AnchorLayout: + anchor_x: "center" + anchor_y: "center" + padding: dp(64) + + BoxLayout: + spacing: dp(36) + orientation: 'vertical' + size_hint_y: None + + MDLabel: + id: connecting_info + halign: "center" + text: "Please Wait" + font_size: "32dp" + size_hint_y: None + text_size: self.width, None + height: self.texture_size[1] + + MDIconButton: + pos_hint: {"center_x": .5, "center_y": .5} + icon: "close-network-outline" + icon_size: "72dp" + + MDLabel: + id: connecting_info + halign: "center" + text: "Shutting down..." + font_size: "32dp" + size_hint_y: None + text_size: self.width, None + height: self.texture_size[1] + + MDScreen: name: "conversations_screen"