From f969c5ccf7f1187dedda6c46fec5b0047bc28ae5 Mon Sep 17 00:00:00 2001 From: Robert Jaros Date: Wed, 29 May 2019 16:05:12 +0200 Subject: Support for Cordova status bar api. --- .../pl/treksoft/kvision/cordova/StatusBar.kt | 152 +++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 kvision-modules/kvision-cordova/src/main/kotlin/pl/treksoft/kvision/cordova/StatusBar.kt (limited to 'kvision-modules/kvision-cordova/src') diff --git a/kvision-modules/kvision-cordova/src/main/kotlin/pl/treksoft/kvision/cordova/StatusBar.kt b/kvision-modules/kvision-cordova/src/main/kotlin/pl/treksoft/kvision/cordova/StatusBar.kt new file mode 100644 index 00000000..5617bf9b --- /dev/null +++ b/kvision-modules/kvision-cordova/src/main/kotlin/pl/treksoft/kvision/cordova/StatusBar.kt @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2017-present Robert Jaros + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package pl.treksoft.kvision.cordova + +import pl.treksoft.kvision.utils.toHexString +import kotlin.browser.window +import kotlin.coroutines.resume +import kotlin.coroutines.suspendCoroutine + +@JsName("StatusBar") +internal external val StatusBarJs: dynamic + +/** + * Main object for Cordova status bar. + */ +object StatusBar { + + /** + * Show status bar. + */ + fun show() { + addDeviceReadyListener { + @Suppress("UnsafeCastFromDynamic") + StatusBarJs.show() + } + } + + /** + * Hide status bar. + */ + fun hide() { + addDeviceReadyListener { + @Suppress("UnsafeCastFromDynamic") + StatusBarJs.hide() + } + } + + /** + * Set overlay. + * @param overlays determines if the status bar overlays the web view + */ + fun overlaysWebView(overlays: Boolean) { + addDeviceReadyListener { + @Suppress("UnsafeCastFromDynamic") + StatusBarJs.overlaysWebView(overlays) + } + } + + /** + * Use the default status bar (dark text, for light backgrounds). + */ + fun styleDefault() { + addDeviceReadyListener { + @Suppress("UnsafeCastFromDynamic") + StatusBarJs.styleDefault() + } + } + + /** + * Use the lightContent status bar (light text, for dark backgrounds). + */ + fun styleLightContent() { + addDeviceReadyListener { + @Suppress("UnsafeCastFromDynamic") + StatusBarJs.styleLightContent() + } + } + + /** + * Use the blackTranslucent status bar (light text, for dark backgrounds). + */ + fun styleBlackTranslucent() { + addDeviceReadyListener { + @Suppress("UnsafeCastFromDynamic") + StatusBarJs.styleBlackTranslucent() + } + } + + /** + * Use the blackOpaque status bar (light text, for dark backgrounds). + */ + fun styleBlackOpaque() { + addDeviceReadyListener { + @Suppress("UnsafeCastFromDynamic") + StatusBarJs.styleBlackOpaque() + } + } + + /** + * Sets the background color of the status bar by a hexadecimal Int. + */ + fun setBackgroundColor(color: Int) { + addDeviceReadyListener { + @Suppress("UnsafeCastFromDynamic") + StatusBarJs.backgroundColorByHexString("#" + color.toHexString()) + } + } + + /** + * Sets the background color of the status bar by a hex string. + */ + fun setBackgroundColorByHexString(color: String) { + addDeviceReadyListener { + @Suppress("UnsafeCastFromDynamic") + StatusBarJs.backgroundColorByHexString(color) + } + } + + /** + * Returns if the status bar is visible. + */ + @Suppress("UnsafeCastFromDynamic") + suspend fun isVisible(): Boolean { + return suspendCoroutine { continuation -> + addDeviceReadyListener { + continuation.resume(StatusBarJs.isVisible) + } + } + } + + /** + * Add listeners for the status bar tap event. + */ + fun addTapListener(listener: () -> Unit) { + addDeviceReadyListener { + window.addEventListener("statusTap", { + listener() + }) + } + } + +} -- cgit