diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 78e1c8d..a508e31 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -28,7 +28,7 @@ * [CB-4752] Incremented plugin version on dev branch. ### 0.2.3 (Oct 9, 2013) -* [CB-4806] (Re-fix) Update splashscreen image bounds for iOS 7 +* [CB-4806] Re-fix Update splashscreen image bounds for iOS 7 * [CB-4934] plugin-splashscreen should not show by default on Windows8 * [CB-4929] plugin-splashscreen not loading proxy windows8 * [CB-4915] Incremented plugin version on dev branch. @@ -45,3 +45,7 @@ ### 0.2.6 (Jan 02, 2014) * CB-5658 Add doc/index.md for Splashscreen plugin * Handle error when splash image is missing. + +### 0.2.7 (Feb 05, 2014) +* [CB-3562] Fix aspect ratio on landscape-only iPhone applications +* CB-4051 fix for splashscreen rotation problem diff --git a/plugin.xml b/plugin.xml index dd2636a..86df9c4 100644 --- a/plugin.xml +++ b/plugin.xml @@ -2,7 +2,7 @@ + version="0.2.7"> Splashscreen Cordova Splashscreen Plugin Apache 2.0 diff --git a/src/ios/CDVSplashScreen.m b/src/ios/CDVSplashScreen.m index bba7deb..093fc87 100644 --- a/src/ios/CDVSplashScreen.m +++ b/src/ios/CDVSplashScreen.m @@ -18,6 +18,7 @@ */ #import "CDVSplashScreen.h" +#import #define kSplashScreenDurationDefault 0.25f @@ -123,6 +124,12 @@ // Use UILaunchImageFile if specified in plist. Otherwise, use Default. NSString* imageName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UILaunchImageFile"]; + // Checks to see if the developer has locked the orientation to use only one of Portrait or Landscape + CDVViewController* vc = (CDVViewController*)self.viewController; + BOOL supportsLandscape = [vc supportsOrientation:UIInterfaceOrientationLandscapeLeft] || [vc supportsOrientation:UIInterfaceOrientationLandscapeRight]; + BOOL supportsPortrait = [vc supportsOrientation:UIInterfaceOrientationPortrait] || [vc supportsOrientation:UIInterfaceOrientationPortraitUpsideDown]; + BOOL isOrientationLocked = !(supportsPortrait && supportsLandscape); + if (imageName) { imageName = [imageName stringByDeletingPathExtension]; } else { @@ -131,7 +138,7 @@ if (CDV_IsIPhone5()) { imageName = [imageName stringByAppendingString:@"-568h"]; - } else if (CDV_IsIPad()) { + } else if (CDV_IsIPad() || isOrientationLocked) { switch (orientation) { case UIInterfaceOrientationLandscapeLeft: case UIInterfaceOrientationLandscapeRight: @@ -166,6 +173,18 @@ CGRect imgBounds = (img) ? CGRectMake(0, 0, img.size.width, img.size.height) : CGRectZero; CGSize screenSize = [self.viewController.view convertRect:[UIScreen mainScreen].bounds fromView:nil].size; + UIInterfaceOrientation orientation = self.viewController.interfaceOrientation; + CGAffineTransform imgTransform = CGAffineTransformIdentity; + + /* If and only if an iPhone application is landscape-only as per + * UISupportedInterfaceOrientations, the view controller's orientation is + * landscape. In this case the image must be rotated in order to appear + * correctly. + */ + if (UIInterfaceOrientationIsLandscape(orientation) && !CDV_IsIPad()) { + imgTransform = CGAffineTransformMakeRotation(M_PI / 2); + imgBounds.size = CGSizeMake(imgBounds.size.height, imgBounds.size.width); + } // There's a special case when the image is the size of the screen. if (CGSizeEqualToSize(screenSize, imgBounds.size)) { @@ -188,6 +207,7 @@ imgBounds.size.width *= ratio; } + _imageView.transform = imgTransform; _imageView.frame = imgBounds; } diff --git a/test/cordova-incl.js b/test/cordova-incl.js deleted file mode 100644 index d5c90fb..0000000 --- a/test/cordova-incl.js +++ /dev/null @@ -1,72 +0,0 @@ -/* - * - * 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 PLAT; -if (/cordova-amazon-fireos/.exec(navigator.userAgent)) { - PLAT = 'amazon-fireos'; -} else if (/Android/.exec(navigator.userAgent)) { - PLAT = 'android'; -} else if (/(iPad)|(iPhone)|(iPod)/.exec(navigator.userAgent)) { - PLAT = 'ios'; -} else if (/(BB10)|(PlayBook)|(BlackBerry)/.exec(navigator.userAgent)) { - PLAT = 'blackberry'; -} - -var scripts = document.getElementsByTagName('script'); -var currentPath = scripts[scripts.length - 1].src; -var platformCordovaPath = currentPath.replace("cordova-incl.js", "cordova." + PLAT + ".js"); -var normalCordovaPath = currentPath.replace("cordova-incl.js", "cordova.js"); -var cordovaPath = normalCordovaPath; - -if (PLAT) { - // XHR to local file is an error on some platforms, windowsphone for one - try { - var xhr = new XMLHttpRequest(); - xhr.open("GET", platformCordovaPath, false); - xhr.onreadystatechange = function() { - - if (this.readyState == this.DONE && this.responseText.length > 0) { - if(parseInt(this.status) >= 400){ - cordovaPath = normalCordovaPath; - }else{ - cordovaPath = platformCordovaPath; - } - } - }; - xhr.send(null); - } - catch(e){ - cordovaPath = normalCordovaPath; - } // access denied! -} - -if (!window._doNotWriteCordovaScript) { - document.write(''); -} - -function backHome() { - if (window.device && device.platform && (device.platform.toLowerCase() == 'android' || device.platform.toLowerCase() == 'amazon-fireos')) { - navigator.app.backHistory(); - } - else { - window.history.go(-1); - } -} diff --git a/test/index.html b/test/index.html deleted file mode 100644 index 2c5447b..0000000 --- a/test/index.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - Cordova Mobile Spec - - - - - - -

Apache Cordova Tests

-
-

Platform:

-

Version:

-

UUID:

-

Name:

-

Model:

-

Width: , Height: - , Color Depth:

-

User-Agent:

-
- Automatic Test - Accelerometer - Audio Play/Record - Battery - Camera - Compass - Contacts - Events - Location - Lazy Loading of cordova-incl.js - Misc Content - Network - Notification - Splashscreen - Web SQL - Local Storage - Benchmarks - In App Browser - - diff --git a/test/main.js b/test/main.js deleted file mode 100644 index 66c1bd3..0000000 --- a/test/main.js +++ /dev/null @@ -1,163 +0,0 @@ -/* - * - * 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 deviceInfo = function() { - document.getElementById("platform").innerHTML = device.platform; - document.getElementById("version").innerHTML = device.version; - document.getElementById("uuid").innerHTML = device.uuid; - document.getElementById("name").innerHTML = device.name; - document.getElementById("model").innerHTML = device.model; - document.getElementById("width").innerHTML = screen.width; - document.getElementById("height").innerHTML = screen.height; - document.getElementById("colorDepth").innerHTML = screen.colorDepth; -}; - -var getLocation = function() { - var suc = function(p) { - alert(p.coords.latitude + " " + p.coords.longitude); - }; - var locFail = function() { - }; - navigator.geolocation.getCurrentPosition(suc, locFail); -}; - -var beep = function() { - navigator.notification.beep(2); -}; - -var vibrate = function() { - navigator.notification.vibrate(0); -}; - -function roundNumber(num) { - var dec = 3; - var result = Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec); - return result; -} - -var accelerationWatch = null; - -function updateAcceleration(a) { - document.getElementById('x').innerHTML = roundNumber(a.x); - document.getElementById('y').innerHTML = roundNumber(a.y); - document.getElementById('z').innerHTML = roundNumber(a.z); -} - -var toggleAccel = function() { - if (accelerationWatch !== null) { - navigator.accelerometer.clearWatch(accelerationWatch); - updateAcceleration({ - x : "", - y : "", - z : "" - }); - accelerationWatch = null; - } else { - var options = {}; - options.frequency = 1000; - accelerationWatch = navigator.accelerometer.watchAcceleration( - updateAcceleration, function(ex) { - alert("accel fail (" + ex.name + ": " + ex.message + ")"); - }, options); - } -}; - -var preventBehavior = function(e) { - e.preventDefault(); -}; - -function dump_pic(data) { - var viewport = document.getElementById('viewport'); - console.log(data); - viewport.style.display = ""; - viewport.style.position = "absolute"; - viewport.style.top = "10px"; - viewport.style.left = "10px"; - document.getElementById("test_img").src = "data:image/jpeg;base64," + data; -} - -function fail(msg) { - alert(msg); -} - -function show_pic() { - navigator.camera.getPicture(dump_pic, fail, { - quality : 50 - }); -} - -function close() { - var viewport = document.getElementById('viewport'); - viewport.style.position = "relative"; - viewport.style.display = "none"; -} - -// This is just to do this. -function readFile() { - navigator.file.read('/sdcard/cordova.txt', fail, fail); -} - -function writeFile() { - navigator.file.write('foo.txt', "This is a test of writing to a file", - fail, fail); -} - -function contacts_success(contacts) { - alert(contacts.length - + ' contacts returned.' - + (contacts[2] && contacts[2].name ? (' Third contact is ' + contacts[2].name.formatted) - : '')); -} - -function get_contacts() { - var obj = new ContactFindOptions(); - obj.filter = ""; - obj.multiple = true; - obj.limit = 5; - navigator.service.contacts.find( - [ "displayName", "name" ], contacts_success, - fail, obj); -} - -var networkReachableCallback = function(reachability) { - // There is no consistency on the format of reachability - var networkState = reachability.code || reachability; - - var currentState = {}; - currentState[NetworkStatus.NOT_REACHABLE] = 'No network connection'; - currentState[NetworkStatus.REACHABLE_VIA_CARRIER_DATA_NETWORK] = 'Carrier data connection'; - currentState[NetworkStatus.REACHABLE_VIA_WIFI_NETWORK] = 'WiFi connection'; - - confirm("Connection type:\n" + currentState[networkState]); -}; - -function check_network() { - navigator.network.isReachable("www.mobiledevelopersolutions.com", - networkReachableCallback, {}); -} - -function init() { - // the next line makes it impossible to see Contacts on the HTC Evo since it - // doesn't have a scroll button - // document.addEventListener("touchmove", preventBehavior, false); - document.addEventListener("deviceready", deviceInfo, true); - document.getElementById("user-agent").textContent = navigator.userAgent; -} diff --git a/test/master.css b/test/master.css deleted file mode 100644 index e93c937..0000000 --- a/test/master.css +++ /dev/null @@ -1,164 +0,0 @@ -/* - * - * 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. - * -*/ - - body { - background:#222 none repeat scroll 0 0; - color:#666; - font-family:Helvetica; - font-size:72%; - line-height:1.5em; - margin:0; - border-top:1px solid #393939; - } - - #info{ - background:#ffa; - border: 1px solid #ffd324; - -webkit-border-radius: 5px; - border-radius: 5px; - clear:both; - margin:15px 6px 0; - min-width:295px; - max-width:97%; - padding:4px 0px 2px 10px; - word-wrap:break-word; - margin-bottom:10px; - display:inline-block; - min-height: 160px; - max-height: 300px; - overflow: auto; - -webkit-overflow-scrolling: touch; - } - - #info > h4{ - font-size:.95em; - margin:5px 0; - } - - #stage.theme{ - padding-top:3px; - } - - /* Definition List */ - #stage.theme > dl{ - padding-top:10px; - clear:both; - margin:0; - list-style-type:none; - padding-left:10px; - overflow:auto; - } - - #stage.theme > dl > dt{ - font-weight:bold; - float:left; - margin-left:5px; - } - - #stage.theme > dl > dd{ - width:45px; - float:left; - color:#a87; - font-weight:bold; - } - - /* Content Styling */ - #stage.theme > h1, #stage.theme > h2, #stage.theme > p{ - margin:1em 0 .5em 13px; - } - - #stage.theme > h1{ - color:#eee; - font-size:1.6em; - text-align:center; - margin:0; - margin-top:15px; - padding:0; - } - - #stage.theme > h2{ - clear:both; - margin:0; - padding:3px; - font-size:1em; - text-align:center; - } - - /* Stage Buttons */ - #stage.theme .btn{ - border: 1px solid #555; - -webkit-border-radius: 5px; - border-radius: 5px; - text-align:center; - display:inline-block; - background:#444; - width:150px; - color:#9ab; - font-size:1.1em; - text-decoration:none; - padding:1.2em 0; - margin:3px 0px 3px 5px; - } - - #stage.theme .large{ - width:308px; - padding:1.2em 0; - } - - #stage.theme .wide{ - width:100%; - padding:1.2em 0; - } - - #stage.theme .backBtn{ - border: 1px solid #555; - -webkit-border-radius: 5px; - border-radius: 5px; - text-align:center; - display:block; - float:right; - background:#666; - width:75px; - color:#9ab; - font-size:1.1em; - text-decoration:none; - padding:1.2em 0; - margin:3px 5px 3px 5px; - } - - #stage.theme .input{ - border: 1px solid #555; - -webkit-border-radius: 5px; - border-radius: 5px; - text-align:center; - display:block; - float:light; - background:#888; - color:#9cd; - font-size:1.1em; - text-decoration:none; - padding:1.2em 0; - margin:3px 0px 3px 5px; - } - - #stage.theme .numeric{ - width:100%; - } diff --git a/test/splashscreen/index.html b/test/splashscreen/index.html deleted file mode 100644 index 19132a4..0000000 --- a/test/splashscreen/index.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - Cordova Mobile Spec - - - - - - -

Splashscreen

-

Action

-
Show for 1 second
-
Show for 5 seconds
-

Back
- -