Details
-
Type: Task
-
Status: Resolved
-
Priority: Major
-
Resolution: Fixed
-
Affects Version/s: 1.2 Final
-
Fix Version/s: 1.3 Beta
-
Component/s: None
-
Labels:None
-
Environment:ICEmobile, BlackBerry Z10
Description
Issue Links
Activity
- All
- Comments
- History
- Activity
- Remote Attachments
- Subversion
Revision: 33947
Author: philip.breau
Date: March-15-13 10:09:20 AM
Message:
MOBI-674 BlackBerry 10 investigation
- add bb10 to user agent detection
Modified : /icemobile/trunk/icemobile/core/src/main/java/org/icemobile/util/UserAgentInfo.java
The Android container has been verified on the BlackBerry 10 with very good results.
We do need a new BlackBerry theme that reflects the current motif (for instance a back button styled with a "<" arrow). It's very possible that the "android light" theme would be sufficient.
The tabs in mobileshowcase for Description|Example|Resources show "Resources" wrapping onto the next line.
Scrolling performance is good.
Camera, Camcorder, Contact List, Microphone, and QR code scan are all working. Augmented Reality, Cloud Push, and geolocation do not work. geolocation does work, however in the stock browser outside the android environment.
Only fixed-URL video works.
Geolocation wasn't fetching any results for the Android container in BB10 runtime. It seems to be something similar to the issue I had with the OS6 phone, where the low precision location fetch doesn't seem to cause the phone to do anything. I changed the backing bean test to include BB10 in the asNeeded test and with high precision enabled, the geolocation app works just fine.
The menu button components are not working on the Android container in BB plugin. None of: the theme changing widget, the menu button example page, nor the as needed dropdown in the geolocation page respond to any UI interaction.
CSS modifications are in progress.
I've got some exceptions in the audio and video media pages in mobileshowcase.
1) Audio: In the audio page, you can click on the arrow in the widget, or on the the "play" link under the widget. On clicking the arrow, the audio clip plays, but on completion I see:
04-30 16:31:17.684: D/MediaPlayer(71606493): Couldn't open file on client side, trying server side
04-30 16:31:18.008: D/MediaPlayer(71606493): getMetadata
04-30 16:31:28.348: D/AndroidRuntime(71606493): Shutting down VM
04-30 16:31:28.348: W/dalvikvm(71606493): threadid=1: thread exiting with uncaught exception (group=79d0c568)
04-30 16:31:28.353: E/AndroidRuntime(71606493): FATAL EXCEPTION: main
04-30 16:31:28.353: E/AndroidRuntime(71606493): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
04-30 16:31:28.353: E/AndroidRuntime(71606493): at android.view.ViewGroup.addViewInner(ViewGroup.java:1976)
04-30 16:31:28.353: E/AndroidRuntime(71606493): at android.view.ViewGroup.addView(ViewGroup.java:1871)
04-30 16:31:28.353: E/AndroidRuntime(71606493): at android.view.ViewGroup.addView(ViewGroup.java:1851)
04-30 16:31:28.353: E/AndroidRuntime(71606493): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:227)
04-30 16:31:28.353: E/AndroidRuntime(71606493): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:217)
04-30 16:31:28.353: E/AndroidRuntime(71606493): at android.app.Activity.setContentView(Activity.java:1706)
04-30 16:31:28.353: E/AndroidRuntime(71606493): at org.icemobile.client.android.ICEmobileContainer$ICEfacesWebChromeClient.returnToWebView(ICEmobileContainer.java:606)
04-30 16:31:28.353: E/AndroidRuntime(71606493): at org.icemobile.client.android.ICEmobileContainer$ICEfacesWebChromeClient.onCompletion(ICEmobileContainer.java:592)
04-30 16:31:28.353: E/AndroidRuntime(71606493): at android.widget.VideoView$3.onCompletion(VideoView.java:349)
04-30 16:31:28.353: E/AndroidRuntime(71606493): at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:1316)
04-30 16:31:28.353: E/AndroidRuntime(71606493): at android.os.Handler.dispatchMessage(Handler.java:99)
04-30 16:31:28.353: E/AndroidRuntime(71606493): at android.os.Looper.loop(Looper.java:123)
04-30 16:31:28.353: E/AndroidRuntime(71606493): at android.app.ActivityThread.main(ActivityThread.java:3687)
04-30 16:31:28.353: E/AndroidRuntime(71606493): at java.lang.reflect.Method.invokeNative(Native Method)
04-30 16:31:28.353: E/AndroidRuntime(71606493): at java.lang.reflect.Method.invoke(Method.java:507)
04-30 16:31:28.353: E/AndroidRuntime(71606493): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
04-30 16:31:28.353: E/AndroidRuntime(71606493): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
04-30 16:31:28.353: E/AndroidRuntime(71606493): at dalvik.system.NativeStart.main(Native Method)
When I click on the "Play" link, the audio clip is farmed out to a browser, the clip plays without issue, but in the log the following messages are printed every second without stopping:
04-30 16:38:14.290: E/Web Console(71700695): Uncaught Error: Too much time spent in unload handler. at v8/DateExtension:1
04-30 16:38:15.298: E/Web Console(71700695): Uncaught Error: Too much time spent in unload handler. at v8/DateExtension:1
04-30 16:38:16.301: E/Web Console(71700695): Uncaught Error: Too much time spent in unload handler. at v8/DateExtension:1
04-30 16:38:17.298: E/Web Console(71700695): Uncaught Error: Too much time spent in unload handler. at v8/DateExtension:1
04-30 16:38:18.297: E/Web Console(71700695): Uncaught Error: Too much time spent in unload handler. at v8/DateExtension:1
04-30 16:38:19.299: E/Web Console(71700695): Uncaught Error: Too much time spent in unload handler. at v8/DateExtension:1
2) In the Video media page, clicking the arrow fails prior to playing the clip, with the following exception:
<there's a little preamble at the top>
04-29 23:39:55.082: V/QNXMediaPlayer(12165226): mBitrate = 81289
04-29 23:39:55.084: V/QNXMediaPlayer(12165226): mDuration = 15936
04-29 23:39:55.085: V/QNXMediaPlayer(12165226): mVideoWidth = 176
04-29 23:39:55.085: V/QNXMediaPlayer(12165226): mVideoHeight = 132
04-29 23:39:55.086: V/QNXMediaPlayer(12165226): seekable
04-29 23:39:55.090: V/QNXMediaPlayer(12165226): speed: 1000
04-29 23:39:55.090: V/QNXMediaPlayer(12165226): state: playing
04-29 23:39:55.092: V/QNXMediaPlayer(12165226): speed: 1000
04-29 23:39:55.093: V/QNXMediaPlayer(12165226): state: playing
04-29 23:39:55.192: V/QNXMediaPlayer(12165226): speed: 1000
04-29 23:39:55.193: V/QNXMediaPlayer(12165226): state: stopped
04-29 23:39:55.193: W/QNXMediaPlayer(12165226): error: 9
04-29 23:39:55.194: E/MediaPlayer(43118809): error (1, 9)
04-29 23:39:55.196: E/MediaPlayer(43118809): Error (1,9)
04-29 23:39:55.196: D/VideoView(43118809): Error: 1,9
04-29 23:39:55.196: E/MediaPlayer(43118809): stop called in state 0
04-29 23:39:55.196: E/MediaPlayer(43118809): error (-89, 0)
04-29 23:39:55.197: V/QNXMediaPlayer(12165226): speed: 1000
04-29 23:39:55.198: V/QNXMediaPlayer(12165226): state: stopped
04-29 23:39:55.198: W/QNXMediaPlayer(12165226): error: 9
04-29 23:39:55.199: V/QNXMediaPlayer(12165226): reset
04-29 23:39:55.218: I/QNXRawEvent(12202194): screenWindow destroyed win=7f19a628
04-29 23:39:55.219: I/QNXRawEvent(12202194): screenWindow destroyed win=7f19a050
04-29 23:39:55.252: V/QNXMediaPlayer(12165226): reset
04-29 23:39:55.261: D/AndroidRuntime(43118809): Shutting down VM
04-29 23:39:55.261: W/dalvikvm(43118809): threadid=1: thread exiting with uncaught exception (group=79d0c568)
04-29 23:39:55.270: E/AndroidRuntime(43118809): FATAL EXCEPTION: main
04-29 23:39:55.270: E/AndroidRuntime(43118809): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
04-29 23:39:55.270: E/AndroidRuntime(43118809): at android.view.ViewGroup.addViewInner(ViewGroup.java:1976)
04-29 23:39:55.270: E/AndroidRuntime(43118809): at android.view.ViewGroup.addView(ViewGroup.java:1871)
04-29 23:39:55.270: E/AndroidRuntime(43118809): at android.view.ViewGroup.addView(ViewGroup.java:1851)
04-29 23:39:55.270: E/AndroidRuntime(43118809): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:227)
04-29 23:39:55.270: E/AndroidRuntime(43118809): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:217)
04-29 23:39:55.270: E/AndroidRuntime(43118809): at android.app.Activity.setContentView(Activity.java:1706)
04-29 23:39:55.270: E/AndroidRuntime(43118809): at org.icemobile.client.android.ICEmobileContainer$ICEfacesWebChromeClient.returnToWebView(ICEmobileContainer.java:606)
04-29 23:39:55.270: E/AndroidRuntime(43118809): at org.icemobile.client.android.ICEmobileContainer$ICEfacesWebChromeClient.onError(ICEmobileContainer.java:596)
04-29 23:39:55.270: E/AndroidRuntime(43118809): at android.widget.VideoView$4.onError(VideoView.java:366)
04-29 23:39:55.270: E/AndroidRuntime(43118809): at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:1341)
04-29 23:39:55.270: E/AndroidRuntime(43118809): at android.os.Handler.dispatchMessage(Handler.java:99)
04-29 23:39:55.270: E/AndroidRuntime(43118809): at android.os.Looper.loop(Looper.java:123)
04-29 23:39:55.270: E/AndroidRuntime(43118809): at android.app.ActivityThread.main(ActivityThread.java:3687)
04-29 23:39:55.270: E/AndroidRuntime(43118809): at java.lang.reflect.Method.invokeNative(Native Method)
04-29 23:39:55.270: E/AndroidRuntime(43118809): at java.lang.reflect.Method.invoke(Method.java:507)
04-29 23:39:55.270: E/AndroidRuntime(43118809): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
04-29 23:39:55.270: E/AndroidRuntime(43118809): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
04-29 23:39:55.270: E/AndroidRuntime(43118809): at dalvik.system.NativeStart.main(Native Method)
04-29 23:39:55.282: W/ActivityManager(12202194): Force finishing activity org.icemobile.client.android/.ICEmobileContainer
The second test, to click "play" under the widget, can't play that form of video, but I don't have any conversion enabled on my server.
Current Codebase of the Android container running in BB10 runtime has the following issues:
Geolocation - working now that the high precision mode is enabled by default.
MenuButtons - An issue with using absolute positions in the css has been identified. Without those constructs, the container menuButtons and select fields work properly.
CSS and markup - There are some trivial css issues in a few (< 5) pages.
Audio and Video media pages - Some serious issues listed above.
In the native integration pages
--------------------------------
Camcorder page records and uploads fine, but playback fails with the same exception outlined above.
microphone - records and uploads and plays fine, but after clip plays, app crashes with exception outlined above.
Cloud push - working fine.
The rest of the native integration pages all are working.
At this stage I'm convinced the Android-sx container approach in the BB runtime does not work.
https://developer.blackberry.com/cascades/documentation/device_platform/invocation/invocation_framework.html
Looking at the code in the native BB10 invocation target, there's a lot of connecting OS signals to SLOTs for event handling of the invocation. The BB10 plugin would have to interpret the Android Application Manifest where the intent filters are defined and jigger up a similar BAR based invocation scheme. Now that we have the "enable SX" button correctly sniffing OS10, the button shows up, but nothing is triggered in Android-sx when it's pressed.
That's not to say that the sx scheme is not going to work... I had modified the native invocation target manifest to be launched with the "icemobile:" scheme, and it was launched when I clicked the -sx button. The -sx notion is valid, it would have to work with a native bb10 -sx container, and not depend on the existing Android one.
I have found another issue with the Android container in BB runtime. In the Content Stack page, clicking the next and or previous buttons don't navigate anywhere. Clicking on the menuButton to directly select a page does, however.
I see the following in the console log:
Uncaught SyntaxError: Unexpected identifier at http://<ip address:port>/mobileshowcase/showcase.jsf:2
The resource registry problem was the cause of the media tags not working
Every issue with the Android Container in BB10 runtime has been resolved. The platform is not 100% ideal since the port operates on the 2.3 WebView and includes a few of the early bugs that you can see have been resolved in the bb10 native browser but I'm certain this process has been faster than trying to duplicate the Container as a native BB10 application
The BlackBerry Z10 is currently detected as a desktop browser.
User-Agent: Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+
Fallback to <input type=file> displays an image picker with the choice to switch to the camera, upload an existing image, or browse other folders.
The upload, however, does not contain the image file. This may be due to existing BlackBerry detection that is no longer correct for BB10.
This is fixed as follows, however it will break FormData detection on the older BlackBerry. This can be retested on BB6 since the FormData bug may be fixed.
+++ jsf/components/component/resources/org.icefaces.component.util/component.js (working copy)
@@ -438,9 +438,7 @@
function () {
jsf.getViewState = html5getViewState;
if ((undefined !== window.FormData) &&
, false);
Push appears to be working well.
Screen width appears to be actual pixel width, resulting in very small text.
Header/footer in mobileshowcase remains attached to the window border, so appears better than iOS browser in that respect.
audio and video playback components cause browser crash. The crash does not occur with a simple test page containing a <video> element, and once the test page is loaded, mobileshowcase no longer crashes.
mobi:geolocation works well with default settings. google map also works.
A native date spinner is supported, but the JavaScript version is currently active. Both are functional, however double clicks on the JavaScript spinner result in page zooming.