From a6344f14f99c19d60a783d92a742285fa3c62fca Mon Sep 17 00:00:00 2001 From: daserge Date: Mon, 10 Nov 2014 22:20:42 +0300 Subject: [PATCH] CB-7986 Add cordova-plugin-statusbar support for Windows Phone 8.1 Added Windows Phone 8.1 support Updated the documentation --- doc/index.md | 9 ++++ plugin.xml | 6 +++ src/windows/StatusBar.js | 90 ++++++++++++++++++++++++++++++++++++++++ www/statusbar.js | 3 ++ 4 files changed, 108 insertions(+) create mode 100644 src/windows/StatusBar.js diff --git a/doc/index.md b/doc/index.md index aa773f4..23739ed 100644 --- a/doc/index.md +++ b/doc/index.md @@ -120,6 +120,7 @@ Supported Platforms - iOS - Windows Phone 7 - Windows Phone 8 +- Windows Phone 8.1 StatusBar.styleLightContent ================= @@ -135,6 +136,7 @@ Supported Platforms - iOS - Windows Phone 7 - Windows Phone 8 +- Windows Phone 8.1 StatusBar.styleBlackTranslucent ================= @@ -150,6 +152,7 @@ Supported Platforms - iOS - Windows Phone 7 - Windows Phone 8 +- Windows Phone 8.1 StatusBar.styleBlackOpaque ================= @@ -165,6 +168,7 @@ Supported Platforms - iOS - Windows Phone 7 - Windows Phone 8 +- Windows Phone 8.1 StatusBar.backgroundColorByName @@ -185,6 +189,7 @@ Supported Platforms - iOS - Windows Phone 7 - Windows Phone 8 +- Windows Phone 8.1 StatusBar.backgroundColorByHexString ================= @@ -208,6 +213,7 @@ Supported Platforms - iOS - Windows Phone 7 - Windows Phone 8 +- Windows Phone 8.1 StatusBar.hide ================= @@ -224,6 +230,7 @@ Supported Platforms - Android - Windows Phone 7 - Windows Phone 8 +- Windows Phone 8.1 StatusBar.show ================= @@ -240,6 +247,7 @@ Supported Platforms - Android - Windows Phone 7 - Windows Phone 8 +- Windows Phone 8.1 StatusBar.isVisible @@ -259,5 +267,6 @@ Supported Platforms - Android - Windows Phone 7 - Windows Phone 8 +- Windows Phone 8.1 diff --git a/plugin.xml b/plugin.xml index ce2e689..29f1e16 100644 --- a/plugin.xml +++ b/plugin.xml @@ -82,4 +82,10 @@ + + + + + + diff --git a/src/windows/StatusBar.js b/src/windows/StatusBar.js new file mode 100644 index 0000000..1d5a60a --- /dev/null +++ b/src/windows/StatusBar.js @@ -0,0 +1,90 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +var statusBar = Windows.UI.ViewManagement.StatusBar.getForCurrentView(); + +function darkForeground () { + // dark text ( to be used on a light background ) + statusBar.foregroundColor = { a: 0, r: 0, g: 0, b: 0 }; +} + +function lightForeground() { + // light text ( to be used on a dark background ) + statusBar.foregroundColor = { a: 0, r: 255, g: 255, b: 255 }; +} + +function hexToRgb(hex) { + // Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF") + var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i; + hex = hex.replace(shorthandRegex, function (m, r, g, b) { + return r + r + g + g + b + b; + }); + + var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); + return result ? { + r: parseInt(result[1], 16), + g: parseInt(result[2], 16), + b: parseInt(result[3], 16) + } : null; +} + +var StatusBar = { + _ready: function(win, fail) { + win(statusBar.occludedRect.height !== 0); + }, + + overlaysWebView: function () { + // not supported + }, + + styleDefault: function () { + darkForeground(); + }, + + styleLightContent: function () { + lightForeground(); + }, + + styleBlackTranslucent: function () { + // #88000000 ? Apple says to use lightContent instead + lightForeground(); + }, + + styleBlackOpaque: function () { + // #FF000000 ? Apple says to use lightContent instead + lightForeground(); + }, + + backgroundColorByHexString: function (win, fail, args) { + var rgb = hexToRgb(args[0]); + statusBar.backgroundColor = { a: 0, r: rgb.r, g: rgb.g, b: rgb.b }; + statusBar.backgroundOpacity = 1; + }, + + show: function (win, fail) { + statusBar.showAsync().done(win, fail); + }, + + hide: function (win, fail) { + statusBar.hideAsync().done(win, fail); + } +}; + +require("cordova/exec/proxy").add("StatusBar", StatusBar); diff --git a/www/statusbar.js b/www/statusbar.js index d6f68ac..5327452 100644 --- a/www/statusbar.js +++ b/www/statusbar.js @@ -21,6 +21,9 @@ var exec = require('cordova/exec'); +// Needed for Windows Phone 8.1 as it is initialized after this module +var StatusBar = StatusBar || require('org.apache.cordova.statusbar.StatusBar'); + var namedColors = { "black": "#000000", "darkGray": "#A9A9A9",