From e1ca2638e3a838424cfe660e0026313853f787b9 Mon Sep 17 00:00:00 2001 From: Yegor Vialov Date: Tue, 11 Feb 2020 22:55:16 +0000 Subject: [PATCH] External bus and configuration opening for Web UI --- assets/js/externalAuth.js | 19 +++++++++++ lib/main.dart | 2 +- lib/pages/main/main.page.dart | 63 ++++++++++------------------------- lib/pages/settings.page.dart | 6 ++-- 4 files changed, 41 insertions(+), 49 deletions(-) diff --git a/assets/js/externalAuth.js b/assets/js/externalAuth.js index 36818ad..be92fff 100644 --- a/assets/js/externalAuth.js +++ b/assets/js/externalAuth.js @@ -13,4 +13,23 @@ window.externalApp.getExternalAuth = function(options) { window[options.callback](true, responseData); }, 500); } +}; +window.externalApp.externalBus = function(message) { + console.log("External bus message: " + message); + var messageObj = JSON.parse(message); + if (messageObj.type == "config/get") { + var responseData = { + id: messageObj.id, + type: "result", + success: true, + result: { + hasSettingsScreen: true + } + }; + setTimeout(function(){ + window.externalBus(responseData); + }, 500); + } else if (messageObj.type == "config_screen/show") { + window.location.href = "htcmd://show-settings"; + } }; \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index 71d833a..36922e8 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -155,7 +155,7 @@ Future _reportError(dynamic error, dynamic stackTrace) async { } void main() async { - Crashlytics.instance.enableInDevMode = false; + Crashlytics.instance.enableInDevMode = true; FlutterError.onError = (FlutterErrorDetails details) { Logger.e(" Caut Flutter runtime error: ${details.exception}"); diff --git a/lib/pages/main/main.page.dart b/lib/pages/main/main.page.dart index 86ee18f..b13103d 100644 --- a/lib/pages/main/main.page.dart +++ b/lib/pages/main/main.page.dart @@ -24,7 +24,6 @@ class _MainPageState extends State with WidgetsBindingObserver, Ticker int _previousViewCount; bool _showLoginButton = false; bool _preventAppRefresh = false; - bool _showWebViewControls = true; Entity _entityToShow; @override @@ -130,11 +129,12 @@ class _MainPageState extends State with WidgetsBindingObserver, Ticker }); } }); - - flutterWebViewPlugin.onScrollYChanged.listen((double offsetY) { - setState(() { - _showWebViewControls = (offsetY == 0); - }); + + flutterWebViewPlugin.onUrlChanged.listen((String url) { + if (url.contains("htcmd://show-settings")) { + flutterWebViewPlugin.hide(); + Navigator.pushNamed(context, "/connection-settings"); + } }); } await HomeAssistant().fetchData().then((_) { @@ -867,25 +867,17 @@ class _MainPageState extends State with WidgetsBindingObserver, Ticker ) ); } else if (ConnectionManager().settingsLoaded && ConnectionManager().useWebView) { + String webUIurl = ConnectionManager().httpWebHost; + if (webUIurl.contains("?")) { + webUIurl += "&external_auth=1"; + } else { + webUIurl += "?external_auth=1"; + } return WebviewScaffold( - url: ConnectionManager().httpWebHost, + url: webUIurl, primary: false, - 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'); - } - ) - ] - ), + debuggingEnabled: true, + appBar: EmptyAppBar(), bottomNavigationBar: bottomBar, ); } else { @@ -944,29 +936,10 @@ class _MainPageState extends State with WidgetsBindingObserver, Ticker class EmptyAppBar extends StatelessWidget implements PreferredSizeWidget { @override Widget build(BuildContext context) { - return Container(); + return Container( + color: Colors.blue, + ); } @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 0af208d..a00d1bc 100644 --- a/lib/pages/settings.page.dart +++ b/lib/pages/settings.page.dart @@ -20,7 +20,7 @@ class _ConnectionSettingsPageState extends State { String _newLongLivedToken = ""; bool _useLovelace = true; bool _newUseLovelace = true; - bool _useWebView = true; + bool _useWebView = false; bool _newUseWebView = true; String oauthUrl; @@ -63,9 +63,9 @@ class _ConnectionSettingsPageState extends State { _useLovelace = _newUseLovelace = true; } try { - _useWebView = _newUseWebView = prefs.getBool("use-webview") ?? true; + _useWebView = _newUseWebView = prefs.getBool("use-webview") ?? false; } catch (e) { - _useWebView = _newUseWebView = true; + _useWebView = _newUseWebView = false; } }); }