JS interface improvements
This commit is contained in:
parent
6695756727
commit
6e448d3458
@ -30,6 +30,6 @@ window.externalApp.externalBus = function(message) {
|
|||||||
window.externalBus(responseData);
|
window.externalBus(responseData);
|
||||||
}, 500);
|
}, 500);
|
||||||
} else if (messageObj.type == "config_screen/show") {
|
} else if (messageObj.type == "config_screen/show") {
|
||||||
window.location.href = "htcmd://show-settings";
|
HAClient.postMessage('show-settings');
|
||||||
}
|
}
|
||||||
};
|
};
|
@ -30,7 +30,7 @@ import 'package:workmanager/workmanager.dart' as workManager;
|
|||||||
import 'package:geolocator/geolocator.dart';
|
import 'package:geolocator/geolocator.dart';
|
||||||
import 'package:battery/battery.dart';
|
import 'package:battery/battery.dart';
|
||||||
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
|
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
|
||||||
import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';
|
import 'package:flutter_webview_plugin/flutter_webview_plugin.dart' as standaloneWebview;
|
||||||
import 'package:webview_flutter/webview_flutter.dart';
|
import 'package:webview_flutter/webview_flutter.dart';
|
||||||
|
|
||||||
import 'utils/logger.dart';
|
import 'utils/logger.dart';
|
||||||
@ -231,7 +231,7 @@ class _HAClientAppState extends State<HAClientApp> {
|
|||||||
mediaType: "${ModalRoute.of(context).settings.arguments != null ? (ModalRoute.of(context).settings.arguments as Map)['type'] ?? '' : ''}",
|
mediaType: "${ModalRoute.of(context).settings.arguments != null ? (ModalRoute.of(context).settings.arguments as Map)['type'] ?? '' : ''}",
|
||||||
),
|
),
|
||||||
"/log-view": (context) => LogViewPage(title: "Log"),
|
"/log-view": (context) => LogViewPage(title: "Log"),
|
||||||
"/webview": (context) => WebviewScaffold(
|
"/webview": (context) => standaloneWebview.WebviewScaffold(
|
||||||
url: "${(ModalRoute.of(context).settings.arguments as Map)['url']}",
|
url: "${(ModalRoute.of(context).settings.arguments as Map)['url']}",
|
||||||
appBar: new AppBar(
|
appBar: new AppBar(
|
||||||
leading: IconButton(
|
leading: IconButton(
|
||||||
@ -242,7 +242,7 @@ class _HAClientAppState extends State<HAClientApp> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
"/whats-new": (context) => WhatsNewPage(),
|
"/whats-new": (context) => WhatsNewPage(),
|
||||||
"/auth": (context) => new WebviewScaffold(
|
"/auth": (context) => new standaloneWebview.WebviewScaffold(
|
||||||
url: "${ConnectionManager().oauthUrl}",
|
url: "${ConnectionManager().oauthUrl}",
|
||||||
appBar: new AppBar(
|
appBar: new AppBar(
|
||||||
leading: IconButton(
|
leading: IconButton(
|
||||||
|
@ -12,7 +12,7 @@ class AuthManager {
|
|||||||
|
|
||||||
Future start({String oauthUrl}) {
|
Future start({String oauthUrl}) {
|
||||||
Completer completer = Completer();
|
Completer completer = Completer();
|
||||||
final flutterWebviewPlugin = new FlutterWebviewPlugin();
|
final flutterWebviewPlugin = new standaloneWebview.FlutterWebviewPlugin();
|
||||||
flutterWebviewPlugin.onUrlChanged.listen((String url) {
|
flutterWebviewPlugin.onUrlChanged.listen((String url) {
|
||||||
if (url.startsWith("https://ha-client.app/service/auth_callback.html")) {
|
if (url.startsWith("https://ha-client.app/service/auth_callback.html")) {
|
||||||
Logger.d("url=$url");
|
Logger.d("url=$url");
|
||||||
|
@ -871,10 +871,10 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver, Ticker
|
|||||||
primary: false,
|
primary: false,
|
||||||
bottomNavigationBar: bottomBar,
|
bottomNavigationBar: bottomBar,
|
||||||
body: Container(
|
body: Container(
|
||||||
color: Colors.white,
|
color: Colors.blue,
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
} else if (ConnectionManager().settingsLoaded && ConnectionManager().useWebView) {
|
} else if (ConnectionManager().settingsLoaded && ConnectionManager().useWebView && !_showLoginButton) {
|
||||||
return WillPopScope(
|
return WillPopScope(
|
||||||
child: Scaffold(
|
child: Scaffold(
|
||||||
primary: true,
|
primary: true,
|
||||||
@ -890,10 +890,6 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver, Ticker
|
|||||||
Logger.d("[MainWebView] Page started: $url");
|
Logger.d("[MainWebView] Page started: $url");
|
||||||
if (url.contains(ConnectionManager()._domain)) {
|
if (url.contains(ConnectionManager()._domain)) {
|
||||||
_loadJSInterface();
|
_loadJSInterface();
|
||||||
} else if (url.contains("htcmd://show-settings")) {
|
|
||||||
Navigator.of(context).pushNamed("/connection-settings").then((_) {
|
|
||||||
_mainWebViewController.goBack();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
gestureNavigationEnabled: true,
|
gestureNavigationEnabled: true,
|
||||||
@ -902,6 +898,13 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver, Ticker
|
|||||||
() => new EagerGestureRecognizer(),
|
() => new EagerGestureRecognizer(),
|
||||||
),
|
),
|
||||||
].toSet(),
|
].toSet(),
|
||||||
|
javascriptChannels: {
|
||||||
|
new JavascriptChannel(name: 'HAClient', onMessageReceived: (JavascriptMessage message) {
|
||||||
|
if (message.message == "show-settings") {
|
||||||
|
Navigator.of(context).pushNamed("/connection-settings");
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
onWillPop: () {
|
onWillPop: () {
|
||||||
|
@ -41,9 +41,9 @@ class Launcher {
|
|||||||
} else {
|
} else {
|
||||||
url += "?external_auth=1";
|
url += "?external_auth=1";
|
||||||
}
|
}
|
||||||
final flutterWebViewPlugin = new FlutterWebviewPlugin();
|
final flutterWebViewPlugin = new standaloneWebview.FlutterWebviewPlugin();
|
||||||
flutterWebViewPlugin.onStateChanged.listen((viewState) async {
|
flutterWebViewPlugin.onStateChanged.listen((viewState) async {
|
||||||
if (viewState.type == WebViewState.startLoad) {
|
if (viewState.type == standaloneWebview.WebViewState.startLoad) {
|
||||||
Logger.d("[WebView] Injecting external auth JS");
|
Logger.d("[WebView] Injecting external auth JS");
|
||||||
rootBundle.loadString('assets/js/externalAuth.js').then((js){
|
rootBundle.loadString('assets/js/externalAuth.js').then((js){
|
||||||
flutterWebViewPlugin.evalJavascript(js.replaceFirst("[token]", ConnectionManager()._token));
|
flutterWebViewPlugin.evalJavascript(js.replaceFirst("[token]", ConnectionManager()._token));
|
||||||
|
Reference in New Issue
Block a user