From 01226cb9eb283556c07cfc9a880b9e69d9b3c10a Mon Sep 17 00:00:00 2001 From: Yegor Vialov Date: Tue, 11 Feb 2020 20:53:29 +0000 Subject: [PATCH] WebVIew UI settings --- lib/main.dart | 2 +- lib/managers/connection_manager.class.dart | 3 +- lib/pages/{ => main}/main.page.dart | 52 ++++++++++++++++++++-- lib/pages/settings.page.dart | 22 +++++++++ 4 files changed, 73 insertions(+), 6 deletions(-) rename lib/pages/{ => main}/main.page.dart (95%) diff --git a/lib/main.dart b/lib/main.dart index bf9e399..71d833a 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -104,7 +104,7 @@ part 'pages/widgets/product_purchase.widget.dart'; part 'pages/widgets/page_loading_indicator.dart'; part 'pages/widgets/page_loading_error.dart'; part 'pages/panel.page.dart'; -part 'pages/main.page.dart'; +part 'pages/main/main.page.dart'; part 'pages/integration_settings.page.dart'; part 'home_assistant.class.dart'; part 'pages/log.page.dart'; diff --git a/lib/managers/connection_manager.class.dart b/lib/managers/connection_manager.class.dart index 787653c..1474d60 100644 --- a/lib/managers/connection_manager.class.dart +++ b/lib/managers/connection_manager.class.dart @@ -20,7 +20,7 @@ class ConnectionManager { String oauthUrl; String webhookId; bool useLovelace = true; - bool useWebView = true; + bool useWebView = false; bool settingsLoaded = false; bool get isAuthenticated => _token != null; StreamSubscription _socketSubscription; @@ -42,6 +42,7 @@ class ConnectionManager { Logger.e("Loading settings..."); SharedPreferences prefs = await SharedPreferences.getInstance(); useLovelace = prefs.getBool('use-lovelace') ?? true; + useWebView = prefs.getBool("use-webview") ?? false; _domain = prefs.getString('hassio-domain'); _port = prefs.getString('hassio-port'); webhookId = prefs.getString('app-webhook-id'); diff --git a/lib/pages/main.page.dart b/lib/pages/main/main.page.dart similarity index 95% rename from lib/pages/main.page.dart rename to lib/pages/main/main.page.dart index 2202d9f..86ee18f 100644 --- a/lib/pages/main.page.dart +++ b/lib/pages/main/main.page.dart @@ -1,4 +1,4 @@ -part of '../main.dart'; +part of '../../main.dart'; class MainPage extends StatefulWidget { MainPage({Key key, this.title}) : super(key: key); @@ -24,6 +24,7 @@ class _MainPageState extends State with WidgetsBindingObserver, Ticker int _previousViewCount; bool _showLoginButton = false; bool _preventAppRefresh = false; + bool _showWebViewControls = true; Entity _entityToShow; @override @@ -129,6 +130,12 @@ class _MainPageState extends State with WidgetsBindingObserver, Ticker }); } }); + + flutterWebViewPlugin.onScrollYChanged.listen((double offsetY) { + setState(() { + _showWebViewControls = (offsetY == 0); + }); + }); } await HomeAssistant().fetchData().then((_) { _hideBottomBar(); @@ -855,14 +862,30 @@ class _MainPageState extends State with WidgetsBindingObserver, Ticker key: _scaffoldKey, primary: false, bottomNavigationBar: bottomBar, - body: _buildScaffoldBody(true) + body: Container( + color: Colors.white, + ) ); } else if (ConnectionManager().settingsLoaded && ConnectionManager().useWebView) { - SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark); return WebviewScaffold( url: ConnectionManager().httpWebHost, primary: false, - appBar: EmptyAppBar (), + appBar: !_showWebViewControls ? EmptyAppBar() : AppBar( + actions: [ + IconButton( + icon: Icon(Icons.smartphone), + onPressed: () { + Navigator.of(context).pushNamed('/integration-settings'); + } + ), + IconButton( + icon: Icon(Icons.settings), + onPressed: () { + Navigator.of(context).pushNamed('/connection-settings'); + } + ) + ] + ), bottomNavigationBar: bottomBar, ); } else { @@ -926,3 +949,24 @@ class EmptyAppBar extends StatelessWidget implements PreferredSizeWidget { @override Size get preferredSize => Size(0.0,0.0); } + +class WebViewAppBar extends StatelessWidget implements PreferredSizeWidget { + @override + Widget build(BuildContext context) { + return Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + IconButton( + icon: Icon(Icons.smartphone), + onPressed: () { + Navigator.of(context).pushNamed('/connection-settings'); + }, + ), + ], + ); + //return Container(); + } + @override + Size get preferredSize => Size(0.0,30.0); +} diff --git a/lib/pages/settings.page.dart b/lib/pages/settings.page.dart index e1c984a..0af208d 100644 --- a/lib/pages/settings.page.dart +++ b/lib/pages/settings.page.dart @@ -20,6 +20,8 @@ class _ConnectionSettingsPageState extends State { String _newLongLivedToken = ""; bool _useLovelace = true; bool _newUseLovelace = true; + bool _useWebView = true; + bool _newUseWebView = true; String oauthUrl; bool useOAuth = false; @@ -60,6 +62,11 @@ class _ConnectionSettingsPageState extends State { } catch (e) { _useLovelace = _newUseLovelace = true; } + try { + _useWebView = _newUseWebView = prefs.getBool("use-webview") ?? true; + } catch (e) { + _useWebView = _newUseWebView = true; + } }); } @@ -69,6 +76,7 @@ class _ConnectionSettingsPageState extends State { (_newHassioDomain != _hassioDomain) || (_newSocketProtocol != _socketProtocol) || (_newUseLovelace != _useLovelace) || + (_newUseWebView != _useWebView) || (_newLongLivedToken != _longLivedToken)); } @@ -104,6 +112,7 @@ class _ConnectionSettingsPageState extends State { prefs.setString("hassio-protocol", _newSocketProtocol); prefs.setString("hassio-res-protocol", _newSocketProtocol == "wss" ? "https" : "http"); prefs.setBool("use-lovelace", _newUseLovelace); + prefs.setBool("use-webview", _newUseWebView); } @override @@ -201,6 +210,19 @@ class _ConnectionSettingsPageState extends State { ) ], ), + new Row( + children: [ + Text("Use web UI"), + Switch( + value: _newUseWebView, + onChanged: (value) { + setState(() { + _newUseWebView = value; + }); + }, + ) + ], + ), Text( "Authentication settings", style: TextStyle(