WIP #339 Open unsupported Panels as authenticared webviews

This commit is contained in:
estevez-dev
2019-09-02 19:05:49 +03:00
parent 691e48a36b
commit f2fdfb0a32
4 changed files with 51 additions and 14 deletions

View File

@ -134,10 +134,10 @@ void main() async {
};
runZoned(() {
AndroidAlarmManager.initialize().then((_) {
//AndroidAlarmManager.initialize().then((_) {
runApp(new HAClientApp());
print("Running MAIN isolate ${Isolate.current.hashCode}");
});
// print("Running MAIN isolate ${Isolate.current.hashCode}");
//});
}, onError: (error, stack) {
Logger.e("$error");
@ -181,6 +181,16 @@ class HAClientApp extends StatelessWidget {
)
],
),
),
"/webview": (context) => WebviewScaffold(
url: "${(ModalRoute.of(context).settings.arguments as Map)['url']}",
appBar: new AppBar(
leading: IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () => Navigator.of(context).pop()
),
title: new Text("${(ModalRoute.of(context).settings.arguments as Map)['title']}"),
),
)
},
);
@ -250,8 +260,6 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver, Ticker
flutterLocalNotificationsPlugin.initialize(initializationSettings,
onSelectNotification: onSelectNotification);
_settingsSubscription = eventBus.on<SettingsChangedEvent>().listen((event) {
Logger.d("Settings change event: reconnect=${event.reconnect}");
if (event.reconnect) {
@ -495,6 +503,7 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver, Ticker
);
}
//TODO remove this shit
void _callService(String domain, String service, String entityId, Map additionalParams) {
_showInfoBottomBar(
message: "Calling $domain.$service",

View File

@ -22,23 +22,35 @@ class Panel {
if (icon == null || !icon.startsWith("mdi:")) {
icon = Panel.iconsByComponent[type];
}
isHidden = (type != "iframe" && type != "config");
Logger.d("New panel '$title'. type=$type, icon=$icon, urlPath=$urlPath");
isHidden = (type == 'lovelace' || type == 'kiosk' || type == 'states');
}
void handleOpen(BuildContext context) {
if (type == "iframe") {
Logger.d("Launching custom tab with ${config["url"]}");
HAUtils.launchURLInCustomTab(context: context, url: config["url"]);
} else if (type == "config") {
if (type == "config") {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => PanelPage(title: "$title", panel: this),
)
);
} else {
String url = "${ConnectionManager().httpWebHost}/$urlPath";
Logger.d("Launching custom tab with $url");
HAUtils.launchURLInCustomTab(context: context, url: url);
String url = "${ConnectionManager().httpWebHost}/$urlPath?external_auth=1";
final flutterWebViewPlugin = new FlutterWebviewPlugin();
flutterWebViewPlugin.onStateChanged.listen((viewState) async {
if (viewState.type == WebViewState.startLoad) {
Logger.d("[WebView] Injecting external auth JS");
rootBundle.loadString('assets/js/externalAuth.js').then((js){
flutterWebViewPlugin.evalJavascript(js.replaceFirst("[token]", ConnectionManager()._token));
});
}
});
Navigator.of(context).pushNamed(
"/webview",
arguments: {
"url": "$url",
"title": "${this.title}"
}
);
}
}