External bus and configuration opening for Web UI
This commit is contained in:
		| @@ -14,3 +14,22 @@ window.externalApp.getExternalAuth = function(options) { | |||||||
|         }, 500); |         }, 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"; | ||||||
|  |     } | ||||||
|  | }; | ||||||
| @@ -155,7 +155,7 @@ Future<void> _reportError(dynamic error, dynamic stackTrace) async { | |||||||
| } | } | ||||||
|  |  | ||||||
| void main() async { | void main() async { | ||||||
|   Crashlytics.instance.enableInDevMode = false; |   Crashlytics.instance.enableInDevMode = true; | ||||||
|  |  | ||||||
|   FlutterError.onError = (FlutterErrorDetails details) { |   FlutterError.onError = (FlutterErrorDetails details) { | ||||||
|     Logger.e(" Caut Flutter runtime error: ${details.exception}"); |     Logger.e(" Caut Flutter runtime error: ${details.exception}"); | ||||||
|   | |||||||
| @@ -24,7 +24,6 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver, Ticker | |||||||
|   int _previousViewCount; |   int _previousViewCount; | ||||||
|   bool _showLoginButton = false; |   bool _showLoginButton = false; | ||||||
|   bool _preventAppRefresh = false; |   bool _preventAppRefresh = false; | ||||||
|   bool _showWebViewControls = true; |  | ||||||
|   Entity _entityToShow; |   Entity _entityToShow; | ||||||
|  |  | ||||||
|   @override |   @override | ||||||
| @@ -131,10 +130,11 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver, Ticker | |||||||
|         } |         } | ||||||
|       }); |       }); | ||||||
|        |        | ||||||
|       flutterWebViewPlugin.onScrollYChanged.listen((double offsetY) { |       flutterWebViewPlugin.onUrlChanged.listen((String url) { | ||||||
|         setState(() { |         if (url.contains("htcmd://show-settings")) { | ||||||
|           _showWebViewControls = (offsetY == 0); |           flutterWebViewPlugin.hide(); | ||||||
|         }); |           Navigator.pushNamed(context, "/connection-settings"); | ||||||
|  |         } | ||||||
|       }); |       }); | ||||||
|     } |     } | ||||||
|     await HomeAssistant().fetchData().then((_) { |     await HomeAssistant().fetchData().then((_) { | ||||||
| @@ -867,25 +867,17 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver, Ticker | |||||||
|           ) |           ) | ||||||
|       ); |       ); | ||||||
|     } else if (ConnectionManager().settingsLoaded && ConnectionManager().useWebView) { |     } else if (ConnectionManager().settingsLoaded && ConnectionManager().useWebView) { | ||||||
|  |       String webUIurl = ConnectionManager().httpWebHost; | ||||||
|  |       if (webUIurl.contains("?")) { | ||||||
|  |         webUIurl += "&external_auth=1"; | ||||||
|  |       } else { | ||||||
|  |         webUIurl += "?external_auth=1"; | ||||||
|  |       } | ||||||
|       return WebviewScaffold( |       return WebviewScaffold( | ||||||
|         url: ConnectionManager().httpWebHost, |         url: webUIurl, | ||||||
|         primary: false, |         primary: false, | ||||||
|         appBar: !_showWebViewControls ? EmptyAppBar() : AppBar( |         debuggingEnabled: true, | ||||||
|           actions: <Widget>[ |         appBar: EmptyAppBar(), | ||||||
|             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, |         bottomNavigationBar: bottomBar, | ||||||
|       ); |       ); | ||||||
|     } else { |     } else { | ||||||
| @@ -944,29 +936,10 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver, Ticker | |||||||
| class  EmptyAppBar  extends StatelessWidget implements PreferredSizeWidget { | class  EmptyAppBar  extends StatelessWidget implements PreferredSizeWidget { | ||||||
|   @override |   @override | ||||||
|   Widget build(BuildContext context) { |   Widget build(BuildContext context) { | ||||||
|     return Container(); |     return Container( | ||||||
|  |       color: Colors.blue, | ||||||
|  |     ); | ||||||
|   } |   } | ||||||
|   @override |   @override | ||||||
|   Size get preferredSize => Size(0.0,0.0); |   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: <Widget>[ |  | ||||||
|         IconButton( |  | ||||||
|           icon: Icon(Icons.smartphone), |  | ||||||
|           onPressed: () { |  | ||||||
|             Navigator.of(context).pushNamed('/connection-settings'); |  | ||||||
|           }, |  | ||||||
|         ), |  | ||||||
|       ], |  | ||||||
|     ); |  | ||||||
|     //return Container(); |  | ||||||
|   } |  | ||||||
|   @override |  | ||||||
|   Size get preferredSize => Size(0.0,30.0); |  | ||||||
| } |  | ||||||
|   | |||||||
| @@ -20,7 +20,7 @@ class _ConnectionSettingsPageState extends State<ConnectionSettingsPage> { | |||||||
|   String _newLongLivedToken = ""; |   String _newLongLivedToken = ""; | ||||||
|   bool _useLovelace = true; |   bool _useLovelace = true; | ||||||
|   bool _newUseLovelace = true; |   bool _newUseLovelace = true; | ||||||
|   bool _useWebView = true; |   bool _useWebView = false; | ||||||
|   bool _newUseWebView = true; |   bool _newUseWebView = true; | ||||||
|  |  | ||||||
|   String oauthUrl; |   String oauthUrl; | ||||||
| @@ -63,9 +63,9 @@ class _ConnectionSettingsPageState extends State<ConnectionSettingsPage> { | |||||||
|         _useLovelace = _newUseLovelace = true; |         _useLovelace = _newUseLovelace = true; | ||||||
|       } |       } | ||||||
|       try { |       try { | ||||||
|         _useWebView = _newUseWebView = prefs.getBool("use-webview") ?? true; |         _useWebView = _newUseWebView = prefs.getBool("use-webview") ?? false; | ||||||
|       } catch (e) { |       } catch (e) { | ||||||
|         _useWebView = _newUseWebView = true; |         _useWebView = _newUseWebView = false; | ||||||
|       } |       } | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user