Files
School/Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/data/titanium.csv
T
2025-02-06 20:33:26 +02:00

2.6 MiB

1issuekeytitledescriptionstorypoint
2TIMOB-8075Android: While debugger is running, cannot back out and go back into an appIf you debug an Android app, you can't back out of that app and go back into it. It hangs then at the splash screen, and shows both "Bad Socket" and "Connection Refused" errors in logcat. Logcat: [https://gist.github.com/43b1285ca8743eaaf672] Screencast: [http://screencast.com/t/m0C2c9Ojxo] 2
3TIMOB-559Android: Appversion never taken from tiapp.xmlI found this bug while I created new release for Android Market. appversion is never changed from tiapp.xml file (version tag). I send you patch to correct this, to apply on 1.0.0/android/android.py3
4TIMOB-684Android: Border properties are broken for ImageView{code} // In Android, the border around the image is not visible // I tried removing borderRadius property, but the issue still remains // It works on iPhone though var imageView = Titanium.UI.createImageView({ url: "/path/to/image", width: 280, height: 175, borderWidth: 1, borderColor: "#ccc", borderRadius: 5 }); Titanium.UI.currentWindow.add(imageView); // Workaround // Wrap the image view in another view and set its border properties // Set the width and height to be 2 pixels more than the width and height of the image view var wrapperView = Titanium.UI.createView({ width: 282, height: 177, borderWidth: 1, borderColor: "#ccc", borderRadius: 5 }); var imageView = Titanium.UI.createImageView({ url: "/path/to/image", width: 280, height: 175 }); wrapperView.add(imageView); Titanium.UI.currentWindow.add(wrapperView); {code}2
5TIMOB-1097Android: Titlebar is displayed when fullscreen splash screen is used.{html}<div><p>There are a couple of possibly related problems with trying to run a fullscreen application in Android. The first is with the splash screen. There should be a way to have the splash screen display on the whole screen, but this is not the case despite the tiapp.xml configuration in this screenshot which shows both the emulator and the code:</p> <p><a href= "http://skitch.com/kwhinnery/dgmps/fullscreen">http://skitch.com/kwhinnery/dgmps/fullscreen</a></p> <p>Also, once the app launches, you should be able to open a window fullscreen with no title - this would be necessary for an app to go totally fullscreen:</p> <p><a href= "http://skitch.com/kwhinnery/dgmp7/fullscreen">http://skitch.com/kwhinnery/dgmp7/fullscreen</a></p></div>{html} h5. Test Code {code} in theme.xml <?xml version="1.0" encoding="utf-8"?> <resources> <style name="Theme.Titanium" parent="android:Theme.NoTitleBar.Fullscreen"> <item name="android:windowBackground">@drawable/background</item> </style> </resources> {code} h5. Expected behavior The splash screen should be displayed full screen with no title bar h5. Actual behavior The title bar, is displayed. During build the theme.xml gets reset, causing the title bar to be displayed. h5. Work-around There is a workaround posted in community Q and A. out one way to resolve this problem. 1) Create folders <your project>\platform\android\res\values (see KitchenSink folder structure) 2) Put in folder "values" the file theme.xml modifyed (i.e. ) 2
6TIMOB-1242iOS: Drag and drop map pin annotations{html}<div><p>MKAnnotationView has support for allowing a map annotation to be draggable (in iOS 4).<br> Boolean property on Annotation object - draggable:true/false<br> Add associated Events - e.g. DragStart &amp; DragEnd etc.</p></div>{html}5
7TIMOB-1800iOS: Analytics causes app crash when no network is available - iphone{html}<div><p>A customer reports that if analytics is enabled and no network (cell or wifi) causes a crash. I cannot reproduce this but at the request of the customer I am logging this ticket so we can investigate further.</p></div>{html}2
8TIMOB-1872Android: Fix AVD naming scheme{html}<div><p>The current script for naming AVDs is based on the download order of the emulators. For instance if you download API 4 and API 8 and run the API 8 emulator. Then later you download the Google API emulator 4. It will launch the API 8 emulator.</p> <p>If possible, we should also try and detect that the problem exists in their environment and fix the AVDs name to the new solution based on the contents of the AVD configuration file.</p></div>{html}2
9TIMOB-1902iOS: Scrollview can scroll to much on ipad when keyboard is up{html}<div><p>This can be recreated in KS Controls&gt;Text Field&gt;Border Style.</p></div>{html}1
10TIMOB-2017Android: WebView No Longer Fires Click Event{html}<div><p>Bill triaged the problem.</p> <p>In April you added this code to disallow registering for touch on the WebView:</p> <p><a href= "http://github.com/appcelerator/titanium_mobile/commit/d47e4e06456d033af0eede50469633054bfc65cc#L1R149"> http://github.com/appcelerator/titanium_mobile/commit/d47e4e06456d0...</a></p> <p>I'm going to mark this as a regression since I didn't comment on the commit well enough to know if I disabled it on purpose. Will need to check interference with clickable items in a webview and scrolling.</p></div>{html}1
11TIMOB-2099Android: border properties broken for Label{html}<div><p>Adding "border:1, borderColor:'black'" to a label works fine on 1.4.1 under iOS, but not on 1.4.2 under Android. Under android, the entire label is blacked out, instead of a border being placed around the label.</p></div>{html}1
12TIMOB-2122Android: Implement Video Recording{html}{html}3
13TIMOB-2209Android: Re-enable incremental buildBefore all of our new changes for stylesheet and RA.java code generation we knew when new Java code was generated so we could skip the javac and dex parts of the APK building process. We need to go back through and make sure to only dex/javac when necessary.3
14TIMOB-2231iOS: Add the ability to add Vector Overlay on MapsI couldn't find an existing ticket for this, but I remember it being mentioned somewhere before. Would like to be able to draw vector shapes on top of a map with various colours / opacity / textures. Bonus points for code that assists with drawing and manipulating the vector with touch events, placing markers on the corners for resizing etc. Otherwise, at the very least some event triggering for clicking + interacting with the vector shape. This adds a whole other dimension to mapping applications for plotting areas and recording information against these areas.34
15TIMOB-2363Android: Strip debugging symbols from JARs when building for productionIt might be a good space saving measure to strip debugging symbols from our JARs when building apps for production mode. The biggest implication this has is not having line numbers in stack traces from production apps.3
16TIMOB-2484iOS: Httpclient ssl problem without different port{html}<div><p>If I put a port 443 or a different one the connection does not work</p></div>{html}1
17TIMOB-2527Android: App launch/build problem if ampersand in home folder name (windows)http://developer.appcelerator.com/question/86611/ampersand-in-user-path-prevents-creation-of-avd-windows-vista The user folder (C:\users...) for my profile contains an ampersand (C:\users\tom&amp;jerry\ - real names hidden). This is preventing Titanium from creating the Android AVDs needed to test apps, giving the following error: [TRACE] Error: 'C:\Users\tom' is not recognized as a valid sdcard value. It looks like the command that creates the avd is stripping away part of the string when it tries to create an avd. I've manage to track down a function 'create_avd' in 1.4.0/android/builder.py which I think may be the culprit, but I'm not sure where to go from there. The sdcard has been created, so the problem must be after that point. There are a multitude of methods for renaming the user folder, none of which are straight forward (registry edits, etc.). I'm hoping someone can tell me a way of making Titanium function with this, albeit rare and idiotic, usage case. Does anyone have any suggestions?5
18TIMOB-2646Android: Support passing customized launch params to Android emulatorDevelopers would like to have the ability to add custom launch parameters to the android emulator such as setting a HTTP proxy. Here is one example of the parameters they would like to be able to include: {code} # start the emulator emulator_cmd = [ self.sdk.get_emulator(), '-avd', avd_name, '-port', '5560', '-sdcard', self.sdcard, '-logcat', "'*:d *'", '-no-boot-anim', # '-http-proxy', # 'http://127.0.0.1:8888', '-partition-size', '128' # in between nexusone and droid ] {code} Reference HD Tickets: http://appc.me/c/APP-364571 http://appc.me/c/EPH-39417-1983
19TIMOB-2653Android: Complex/autogenerated remote image URLs fail, whereas simple URLs succeedh2. Problem A complex url to an image, used in an imageView do not render. The issues is not present in 1.4.3 (21Nov). h2. Test case The following code will cause an exception: {code:lang=javascript|title=app.js} var window = Titanium.UI.createWindow({ backgroundColor:'red' }); var graph = Titanium.UI.createImageView({ top: 20, image: 'http://chart.apis.google.com/chart?chco=666666,555555,444444,333333,222222&amp;cht=p&amp;chd=t:36,15,12,10,26&amp;chdl=xyz|abc|def|ghi|jkl&amp;chdlp=b&amp;chf=c,s,ffffff|bg,s,ffffff&amp;chl=36%|15%|12%|10%|26%&amp;chs=288x150' // image: 'http://developer.appcelerator.com/assets/img/sprites.png' }); window.add(graph); window.open(); {code} When the commented/uncommented image lines are toggled, the app works without a problem. h2. Logs {code:lang=none|title=logcat} 449 AndroidRuntime D >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<< 449 AndroidRuntime D CheckJNI is ON 449 AndroidRuntime D --- registering native functions --- 60 ActivityManager I Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.appcelerator.testing10/.Testing10Activity } 60 ActivityManager I Start proc com.appcelerator.testing10 for activity com.appcelerator.testing10/.Testing10Activity: pid=455 uid=10041 gids={1015, 3003} 449 AndroidRuntime D Shutting down VM 455 TiApplication I (main) [0,0] checkpoint, app created. 455 TiApplication I (main) [402,402] Titanium 1.8.1 (2012/01/27 17:31 a24502a) 455 TiFastDev D (main) [110,512] Enabling Fastdev on port 51023 455 TiFastDev D (main) [8,520] sent tokens successfully 455 TiFastDev D (main) [1,521] Fastdev session handshake succesful. 455 TiApplication I (main) [4,525] Titanium Javascript runtime: v8 455 TiApplication W (main) [47,572] activity stack is emtpy, unable to get current activity 455 TiRootActivity I (main) [0,0] checkpoint, on root activity create, savedInstanceState: null 455 TiApplication W (main) [116,116] activity stack is emtpy, unable to get current activity 455 TiApplication W (main) [1,117] activity stack is emtpy, unable to get current activity 455 TiApplication W (main) [0,117] activity stack is emtpy, unable to get current activity 60 NotificationService W Object died trying to hide notification android.app.ITransientNotification$Stub$Proxy@4500b128 in package com.appcelerator.testing10 60 ActivityManager W setProcessForeground called on unknown pid: 427 455 TiApplication E (KrollRuntimeThread) [1083,1200] APP PROXY: ti.modules.titanium.app.AppModule@44fccf38 455 TiAssetHelper D Fetching "app.js" with Fastdev... 455 TiUIImageView E (main) [524,1724] URISyntaxException for url http://chart.apis.google.com/chart?chco=666666,555555,444444,333333,222222&amp;cht=p&amp;chd=t:36,15,12,10,26&amp;chdl=xyz|abc |def|ghi|jkl&amp;chdlp=b&amp;chf=c,s,ffffff|bg,s,ffffff&amp;chl=36%|15%|12%|10%|26%&amp;chs=288x150 455 TiUIImageView E java.net.URISyntaxException: Illegal character in query at index 122: http://chart.apis.google.com/chart?chco=666666,555555,444444,333333,222222&amp;cht=p&amp;chd=t:36,15, 12,10,26&amp;chdl=xyz|abc|def|ghi|jkl&amp;chdlp=b&amp;chf=c,s,ffffff|bg,s,ffffff&amp;chl=36%|15%|12%|10%|26%&amp;chs=288x150 455 TiUIImageView E java.net.URI$Helper.validateQuery(URI.java:458) 455 TiUIImageView E java.net.URI$Helper.parseURI(URI.java:360) 455 TiUIImageView E java.net.URI$Helper.access$100(URI.java:302) 455 TiUIImageView E java.net.URI.<init>(URI.java:87) 455 TiUIImageView E ti.modules.titanium.ui.widget.TiUIImageView.setImage(TiUIImageView.java:715) 455 TiUIImageView E ti.modules.titanium.ui.widget.TiUIImageView.processProperties(TiUIImageView.java:849) 455 TiUIImageView E org.appcelerator.kroll.KrollProxy.setModelListener(KrollProxy.java:641) 455 TiUIImageView E org.appcelerator.titanium.proxy.TiViewProxy.realizeViews(TiViewProxy.java:464) 455 TiUIImageView E org.appcelerator.titanium.proxy.TiViewProxy.handleGetView(TiViewProxy.java:456) 455 TiUIImageView E org.appcelerator.titanium.proxy.TiViewProxy.getOrCreateView(TiViewProxy.java:434) 455 TiUIImageView E org.appcelerator.titanium.proxy.TiViewProxy.handleAdd(TiViewProxy.java:538) 455 TiUIImageView E org.appcelerator.titanium.proxy.TiViewProxy.handleMessage(TiViewProxy.java:271) 455 TiUIImageView E android.os.Handler.dispatchMessage(Handler.java:95) 455 TiUIImageView E org.appcelerator.kroll.common.TiMessenger.dispatchMessage(TiMessenger.java:318) 455 TiUIImageView E org.appcelerator.kroll.common.TiMessenger.dispatchPendingMessages(TiMessenger.java:303) 455 TiUIImageView E org.appcelerator.kroll.common.TiMessenger$2.getResult(TiMessenger.java:188) 455 TiUIImageView E org.appcelerator.kroll.common.TiMessenger.sendBlockingMessage(TiMessenger.java:215) 455 TiUIImageView E org.appcelerator.kroll.common.TiMessenger.sendBlockingRuntimeMessage(TiMessenger.java:143) 455 TiUIImageView E org.appcelerator.kroll.KrollProxy.fireSyncEvent(KrollProxy.java:417) 455 TiUIImageView E org.appcelerator.titanium.TiBaseActivity.onCreate(TiBaseActivity.java:344) 455 TiUIImageView E org.appcelerator.titanium.TiLaunchActivity.onCreate(TiLaunchActivity.java:117) 455 TiUIImageView E org.appcelerator.titanium.TiRootActivity.onCreate(TiRootActivity.java:46) 455 TiUIImageView E android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 455 TiUIImageView E android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 455 TiUIImageView E android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 455 TiUIImageView E android.app.ActivityThread.access$2300(ActivityThread.java:125) 455 TiUIImageView E android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 455 TiUIImageView E android.os.Handler.dispatchMessage(Handler.java:99) 455 TiUIImageView E android.os.Looper.loop(Looper.java:123) 455 TiUIImageView E android.app.ActivityThread.main(ActivityThread.java:4627) 455 TiUIImageView E java.lang.reflect.Method.invokeNative(Native Method) 455 TiUIImageView E java.lang.reflect.Method.invoke(Method.java:521) 455 TiUIImageView E com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 455 TiUIImageView E com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 455 TiUIImageView E dalvik.system.NativeStart.main(Native Method) 455 TiDrawableReference E (main) [123,1847] Problem opening stream with url http://chart.apis.google.com/chart?chco=666666,555555,444444,333333,222222&amp;cht=p&amp;chd=t:36,15,12,10,26&amp;chdl=xy z|abc|def|ghi|jkl&amp;chdlp=b&amp;chf=c,s,ffffff|bg,s,ffffff&amp;chl=36%|15%|12%|10%|26%&amp;chs=288x150: http://chart.apis.google.com/chart?chco=666666,555555,444444,3333 33,222222&amp;cht=p&amp;chd=t:36,15,12,10,26&amp;chdl=xyz|abc|def|ghi|jkl&amp;chdlp=b&amp;chf=c,s,ffffff|bg,s,ffffff&amp;chl=36%|15%|12%|10%|26%&amp;chs=288x150 455 TiDrawableReference E java.io.FileNotFoundException: http://chart.apis.google.com/chart?chco=666666,555555,444444,333333,222222&amp;cht=p&amp;chd=t:36,15,12,10,26&amp;chdl=xyz|abc|def|ghi|jkl&a mp;chdlp=b&amp;chf=c,s,ffffff|bg,s,ffffff&amp;chl=36%|15%|12%|10%|26%&amp;chs=288x150 455 TiDrawableReference E org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:1162) 455 TiDrawableReference E java.net.URL.openStream(URL.java:653) 455 TiDrawableReference E org.appcelerator.titanium.util.TiFileHelper.openInputStream(TiFileHelper.java:172) 455 TiDrawableReference E org.appcelerator.titanium.view.TiDrawableReference.getInputStream(TiDrawableReference.java:671) 455 TiDrawableReference E org.appcelerator.titanium.view.TiDrawableReference.peekBounds(TiDrawableReference.java:628) 455 TiDrawableReference E org.appcelerator.titanium.view.TiDrawableReference.getBitmap(TiDrawableReference.java:461) 455 TiDrawableReference E ti.modules.titanium.ui.widget.TiUIImageView.setImage(TiUIImageView.java:724) 455 TiDrawableReference E ti.modules.titanium.ui.widget.TiUIImageView.processProperties(TiUIImageView.java:849) 455 TiDrawableReference E org.appcelerator.kroll.KrollProxy.setModelListener(KrollProxy.java:641) 455 TiDrawableReference E org.appcelerator.titanium.proxy.TiViewProxy.realizeViews(TiViewProxy.java:464) 455 TiDrawableReference E org.appcelerator.titanium.proxy.TiViewProxy.handleGetView(TiViewProxy.java:456) 455 TiDrawableReference E org.appcelerator.titanium.proxy.TiViewProxy.getOrCreateView(TiViewProxy.java:434) 455 TiDrawableReference E org.appcelerator.titanium.proxy.TiViewProxy.handleAdd(TiViewProxy.java:538) 455 TiDrawableReference E org.appcelerator.titanium.proxy.TiViewProxy.handleMessage(TiViewProxy.java:271) 455 TiDrawableReference E android.os.Handler.dispatchMessage(Handler.java:95) 455 TiDrawableReference E org.appcelerator.kroll.common.TiMessenger.dispatchMessage(TiMessenger.java:318) 455 TiDrawableReference E org.appcelerator.kroll.common.TiMessenger.dispatchPendingMessages(TiMessenger.java:303) 455 TiDrawableReference E org.appcelerator.kroll.common.TiMessenger$2.getResult(TiMessenger.java:188) 455 TiDrawableReference E org.appcelerator.kroll.common.TiMessenger.sendBlockingMessage(TiMessenger.java:215) 455 TiDrawableReference E org.appcelerator.kroll.common.TiMessenger.sendBlockingRuntimeMessage(TiMessenger.java:143) 455 TiDrawableReference E org.appcelerator.kroll.KrollProxy.fireSyncEvent(KrollProxy.java:417) 455 TiDrawableReference E org.appcelerator.titanium.TiBaseActivity.onCreate(TiBaseActivity.java:344) 455 TiDrawableReference E org.appcelerator.titanium.TiLaunchActivity.onCreate(TiLaunchActivity.java:117) 455 TiDrawableReference E org.appcelerator.titanium.TiRootActivity.onCreate(TiRootActivity.java:46) 455 TiDrawableReference E android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 455 TiDrawableReference E android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 455 TiDrawableReference E android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 455 TiDrawableReference E android.app.ActivityThread.access$2300(ActivityThread.java:125) 455 TiDrawableReference E android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 455 TiDrawableReference E android.os.Handler.dispatchMessage(Handler.java:99) 455 TiDrawableReference E android.os.Looper.loop(Looper.java:123) 455 TiDrawableReference E android.app.ActivityThread.main(ActivityThread.java:4627) 455 TiDrawableReference E java.lang.reflect.Method.invokeNative(Native Method) 455 TiDrawableReference E java.lang.reflect.Method.invoke(Method.java:521) 455 TiDrawableReference E com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 455 TiDrawableReference E com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 455 TiDrawableReference E dalvik.system.NativeStart.main(Native Method) 455 TiDrawableReference W (main) [54,1901] Could not open stream for drawable, therefore bounds checking could not be completed 455 TiDrawableReference W (main) [5,1906] Bitmap bounds could not be determined. If bitmap is loaded, it won't be scaled. 455 TiDrawableReference E (main) [95,2001] Problem opening stream with url http://chart.apis.google.com/chart?chco=666666,555555,444444,333333,222222&amp;cht=p&amp;chd=t:36,15,12,10,26&amp;chdl=xyz |abc|def|ghi|jkl&amp;chdlp=b&amp;chf=c,s,ffffff|bg,s,ffffff&amp;chl=36%|15%|12%|10%|26%&amp;chs=288x150: http://chart.apis.google.com/chart?chco=666666,555555,444444,33333 3,222222&amp;cht=p&amp;chd=t:36,15,12,10,26&amp;chdl=xyz|abc|def|ghi|jkl&amp;chdlp=b&amp;chf=c,s,ffffff|bg,s,ffffff&amp;chl=36%|15%|12%|10%|26%&amp;chs=288x150 455 TiDrawableReference E java.io.FileNotFoundException: http://chart.apis.google.com/chart?chco=666666,555555,444444,333333,222222&amp;cht=p&amp;chd=t:36,15,12,10,26&amp;chdl=xyz|abc|def|ghi|jkl&a mp;chdlp=b&amp;chf=c,s,ffffff|bg,s,ffffff&amp;chl=36%|15%|12%|10%|26%&amp;chs=288x150 455 TiDrawableReference E org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:1162) 455 TiDrawableReference E java.net.URL.openStream(URL.java:653) 455 TiDrawableReference E org.appcelerator.titanium.util.TiFileHelper.openInputStream(TiFileHelper.java:172) 455 TiDrawableReference E org.appcelerator.titanium.view.TiDrawableReference.getInputStream(TiDrawableReference.java:671) 455 TiDrawableReference E org.appcelerator.titanium.view.TiDrawableReference.getBitmap(TiDrawableReference.java:238) 455 TiDrawableReference E org.appcelerator.titanium.view.TiDrawableReference.getBitmap(TiDrawableReference.java:467) 455 TiDrawableReference E ti.modules.titanium.ui.widget.TiUIImageView.setImage(TiUIImageView.java:724) 455 TiDrawableReference E ti.modules.titanium.ui.widget.TiUIImageView.processProperties(TiUIImageView.java:849) 455 TiDrawableReference E org.appcelerator.kroll.KrollProxy.setModelListener(KrollProxy.java:641) 455 TiDrawableReference E org.appcelerator.titanium.proxy.TiViewProxy.realizeViews(TiViewProxy.java:464) 455 TiDrawableReference E org.appcelerator.titanium.proxy.TiViewProxy.handleGetView(TiViewProxy.java:456) 455 TiDrawableReference E org.appcelerator.titanium.proxy.TiViewProxy.getOrCreateView(TiViewProxy.java:434) 455 TiDrawableReference E org.appcelerator.titanium.proxy.TiViewProxy.handleAdd(TiViewProxy.java:538) 455 TiDrawableReference E org.appcelerator.titanium.proxy.TiViewProxy.handleMessage(TiViewProxy.java:271) 455 TiDrawableReference E android.os.Handler.dispatchMessage(Handler.java:95) 455 TiDrawableReference E org.appcelerator.kroll.common.TiMessenger.dispatchMessage(TiMessenger.java:318) 455 TiDrawableReference E org.appcelerator.kroll.common.TiMessenger.dispatchPendingMessages(TiMessenger.java:303) 455 TiDrawableReference E org.appcelerator.kroll.common.TiMessenger$2.getResult(TiMessenger.java:188) 455 TiDrawableReference E org.appcelerator.kroll.common.TiMessenger.sendBlockingMessage(TiMessenger.java:215) 455 TiDrawableReference E org.appcelerator.kroll.common.TiMessenger.sendBlockingRuntimeMessage(TiMessenger.java:143) 455 TiDrawableReference E org.appcelerator.kroll.KrollProxy.fireSyncEvent(KrollProxy.java:417) 455 TiDrawableReference E org.appcelerator.titanium.TiBaseActivity.onCreate(TiBaseActivity.java:344) 455 TiDrawableReference E org.appcelerator.titanium.TiLaunchActivity.onCreate(TiLaunchActivity.java:117) 455 TiDrawableReference E org.appcelerator.titanium.TiRootActivity.onCreate(TiRootActivity.java:46) 455 TiDrawableReference E android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 455 TiDrawableReference E android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 455 TiDrawableReference E android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 455 TiDrawableReference E android.app.ActivityThread.access$2300(ActivityThread.java:125) 455 TiDrawableReference E android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 455 TiDrawableReference E android.os.Handler.dispatchMessage(Handler.java:99) 455 TiDrawableReference E android.os.Looper.loop(Looper.java:123) 455 TiDrawableReference E android.app.ActivityThread.main(ActivityThread.java:4627) 455 TiDrawableReference E java.lang.reflect.Method.invokeNative(Native Method) 455 TiDrawableReference E java.lang.reflect.Method.invoke(Method.java:521) 455 TiDrawableReference E com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 455 TiDrawableReference E com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 455 TiDrawableReference E dalvik.system.NativeStart.main(Native Method) 455 TiDrawableReference W (main) [12,2013] Could not open stream to get bitmap 455 TiRootActivity I (main) [0,0] checkpoint, on root activity resume. activity = com.appcelerator.testing10.Testing10Activity@44f7a570 60 ActivityManager I Displayed activity com.appcelerator.testing10/.Testing10Activity: 3686 ms (total 3686 ms) 455 TiUIImageView D (main) [398,398] Retrying bitmap decode: 1/5 455 TiUIImageView E (main) [1,399] URISyntaxException for url http://chart.apis.google.com/chart?chco=666666,555555,444444,333333,222222&amp;cht=p&amp;chd=t:36,15,12,10,26&amp;chdl=xyz|abc|de f|ghi|jkl&amp;chdlp=b&amp;chf=c,s,ffffff|bg,s,ffffff&amp;chl=36%|15%|12%|10%|26%&amp;chs=288x150 455 TiUIImageView E java.net.URISyntaxException: Illegal character in query at index 122: http://chart.apis.google.com/chart?chco=666666,555555,444444,333333,222222&amp;cht=p&amp;chd=t:36,15, 12,10,26&amp;chdl=xyz|abc|def|ghi|jkl&amp;chdlp=b&amp;chf=c,s,ffffff|bg,s,ffffff&amp;chl=36%|15%|12%|10%|26%&amp;chs=288x150 455 TiUIImageView E java.net.URI$Helper.validateQuery(URI.java:458) 455 TiUIImageView E java.net.URI$Helper.parseURI(URI.java:360) 455 TiUIImageView E java.net.URI$Helper.access$100(URI.java:302) 455 TiUIImageView E java.net.URI.<init>(URI.java:87) 455 TiUIImageView E ti.modules.titanium.ui.widget.TiUIImageView.setImage(TiUIImageView.java:715) 455 TiUIImageView E ti.modules.titanium.ui.widget.TiUIImageView.access$500(TiUIImageView.java:53) 455 TiUIImageView E ti.modules.titanium.ui.widget.TiUIImageView$3.run(TiUIImageView.java:771) 455 TiUIImageView E android.os.Handler.handleCallback(Handler.java:587) 455 TiUIImageView E android.os.Handler.dispatchMessage(Handler.java:92) 455 TiUIImageView E android.os.Looper.loop(Looper.java:123) 455 TiUIImageView E android.app.ActivityThread.main(ActivityThread.java:4627) 455 TiUIImageView E java.lang.reflect.Method.invokeNative(Native Method) 455 TiUIImageView E java.lang.reflect.Method.invoke(Method.java:521) 455 ...3
20TIMOB-2662android SDK > 1.5.0 "Compiling Javascript Resources" each timeWith SDK older than 1.5.0, when Ti developer "Launch" button is clicked, application is immediately displaying in the emulator: {code} [INFO] Building test for Android ... one moment [INFO] Copying project resources.. [INFO] Tiapp.xml unchanged, skipping class generation [INFO] Manifest unchanged, skipping Java build [INFO] Re-launching application ... test [INFO] Relaunched test ... Application should be running. {code} With 1.5.0 & 1.5.1 each time I get a "compiling Android Resources": {code} [INFO] Building test for Android ... one moment [INFO] Titanium SDK version: 1.5.1 (12/16/10 16:25 16bbb92) [INFO] Copying project resources.. [INFO] Tiapp.xml unchanged, skipping class generation [INFO] Compiling Javascript Resources ... [INFO] Compiling Android Resources... This could take some time {code}3
21TIMOB-2705App names containing "Titanium" break the iPhone build{html}<div><p>If the (case-sensitive) string "Titanium" appears is used in a project name, the Xcode project files (*.pbxproj) get mangled and can't be built from the Titanium Developer GUI.</p> <p>I can reproduce this reliably with the following versions:<br> Titanium Developer 1.2.2<br> Titanium Mobile SDK 1.1.0<br> Mac OS X 10.6.5<br> Xcode 3.2.3</p> <p>Details for reproducing:</p> <p>When I create a new Mobile project from Titanium Developer, called "Hello Titanium", building the app throws an error because the named Xcode target doesn't exist. (I found that in <code>build/iphone/build/build.log</code>)</p> <p><code>$ xcodebuild -list</code></p> <pre> <code>Information about project "Hello Titanium": Targets: Hello HelloTitanium (Active) Hello HelloTitanium-iPad Build Configurations: Debug (Active) Release If no build configuration is specified "Release" is used.</code> </pre> <p>These cases also fail:</p> <ul> <li>"Hello2Titanium" =&gt; "Hello2Hello2Titanium"</li> <li>"Hello4Titanium" =&gt; "Hello4Hello4Titanium"</li> <li>"Titanium7Hello" =&gt; "Titanium7Hello7Hello"</li> <li>"Hello8Titanium8Hello" =&gt; "Hello8Hello8Titanium8Hello8Hello"</li> <li>"Welcome Titanium Howdy" =&gt; "Welcome WelcomeTitaniumHowdy Howdy"</li> </ul> <p>But these cases are just fine:</p> <ul> <li>"Hello5Titanius" =&gt; "Hello5Titanius"</li> <li>"some titanium in lowercase" =&gt; "some titanium in lowercase"</li> </ul></div>{html}1
22TIMOB-2733Android: Getting Error at Rebuilding after changing tiapp.xml.Hi, I am developing Android application using Titanium. Earlier i was using {{Titanium.Platform.displayCaps.platformHeight}} and i tried solution provided here: http://developer.appcelerator.com/question/91631/titaniumplatformdisplaycapsplatformheight-runtime-error Now i am getting following error {code} [INFO] Detected tiapp.xml change, forcing full re-build... [ERROR] Error in compiler. <type 'exceptions.IOError'>, [Errno 13] Permission denied: 'D:\\Test\\TestApp\\build\\android\\bin\\assets\\Resources\\Thumbs.db'; Traceback (most recent call last): File "C:\Documents and Settings\All Users\Application Data\Titanium\mobilesdk\win32\1.5.1\android\builder.py", line 1548, in <module> s.build_and_run(False,avd_id) File "C:\Documents and Settings\All Users\Application Data\Titanium\mobilesdk\win32\1.5.1\android\builder.py", line 1296, in build_and_run self.copy_project_resources() File "C:\Documents and Settings\All Users\Application Data\Titanium\mobilesdk\win32\1.5.1\android\builder.py", line 549, in copy_project_resources shutil.copy(path, dest) File "C:\Documents and Settings\All Users\Application Data\Titanium\modules\win32\python\1.0.0\lib\shutil.py", line 85, in copy copyfile(src, dst) File "C:\Documents and Settings\All Users\Application Data\Titanium\modules\win32\python\1.0.0\lib\shutil.py", line 52, in copyfile fdst = open(dst, 'wb') IOError: [Errno 13] Permission denied: 'D:\\Test\\TestApp\\build\\android\\bin\\assets\\Resources\\Thumbs.db' {code} Suggest Something ASAP. Regards, Rahul3
23TIMOB-2760need to be able to ref adb from either /tools or /platform-tools subdir{html}<div><p>as it stands users have to make a symlink in /tools to /platform-tools/adb</p></div>{html}3
24TIMOB-2782Android: Generate a Proguard configuration based on API usageThis will decrease the final APK size, improve performance, and further obfuscate bytecode. More info here: http://developer.android.com/tools/help/proguard.html3
25TIMOB-2801iOS: HTTPClient intermittently errors on HTTPS requests{html}<div><h1>Problem</h1> <p>The HTTPClient errors intermittently (around half the time) when making an HTTPS request. The following error message is sent:</p> <pre> <code>Error Domain=ASIHTTPRequestErrorDomain Code=1 "A connection failure occurred" UserInfo=0xb236b70 {NSUnderlyingError=0xb234cf0 "The operation couldn&rsquo;t be completed. Connection reset by peer", NSLocalizedDescription=A connection failure occurred}</code> </pre> <h1>Tested On</h1> <p>All platforms tested with clean builds from both Titanium Mobile 1.5.1 and 1.6.0 (pulled January 8th, 2011).<br> BROKEN on iPhone Simulator 4.2<br> BROKEN on iPod Touch 4.2<br> WORKS on Android Simulator 2.2<br> WORKS in browser (hitting the URL) </p> <h1>Sample Code</h1> <pre> <code class= "javascript">var win = Titanium.UI.createWindow({ backgroudColor: '#333' }); var statusLabel = Titanium.UI.createTextArea({ top: 10, right: 10, left: 10, bottom: 45 }); win.add(statusLabel); function runRequest() { var xhr = Titanium.Network.createHTTPClient(); xhr.onload = function () { statusLabel.value = this.responseText; //Ti.API.info(this.responseText); }; xhr.onerror = function (e) { statusLabel.value = e.error; Ti.API.error(e.error); }; statusLabel.value = 'Waiting for response...'; xhr.open('GET', 'https://acomsx1.cos.agilent.com/QueryOpenNotificationsCount'); xhr.send(); } var refresh = Ti.UI.createButton({ title: 'Refresh', bottom: 10, left: 10, right: 10, height: 25 }); refresh.addEventListener('click', runRequest); win.add(refresh); win.open(); runRequest();</code> </pre> <h2>Associated Helpdesk Ticket</h2> <p><a href= "http://developer.appcelerator.com/helpdesk/view/64561">http://developer.appcelerator.com/helpdesk/view/64561</a></p></div>{html}2
26TIMOB-2908iOS: Switch - Disable animation on init and allow developer to disable for setValueWhen loading a switch with a value set to 'true' the switch shows an animation going from 'off' to 'on'. Users would like a property added to the switch object of 'animate' as a boolean value, to turn off the animation on-load if the value of the switch is preset to true. Reference ticket: http://developer.appcelerator.com/helpdesk/view/673012
27TIMOB-3162Android: Ti.API.log doesn't work with one argument only{html}<div><p>I used Ti.API.log with one argument in an external JS file wrongly. It works on iPhone and a message is printed as info log. But on Android, it fails without error message and scripts after the log line are not executed.</p></div>{html}1
28TIMOB-3180Android: JAVA_HOME not recognized when launching some Android applicationsGoogled and found that spaces in the Java paths would create complications: http://developer.appcelerator.com/question/34701/error-jdk-version-javac-is-not-recognized-as-an-internal-or-external-command-testing-on-android We moved the JDK location to C:\Java\java-jdk-folder and it appeared to work fine after updating JAVA_HOME and the Path environment variables to the new location.3
29TIMOB-3186Android: Persistent internal compiler errorh2. Error Message: {code} [INFO] Compiling Javascript Resources ... [ERROR] Error in compiler. , 'utf8' codec can't decode byte 0x8e in position 324: unexpected code byte; Traceback (most recent call last): File "C:\ProgramData\Titanium\mobilesdk\win32\1.5.1\android\builder.py", line 1548, in s.build_and_run(False,avd_id) File "C:\ProgramData\Titanium\mobilesdk\win32\1.5.1\android\builder.py", line 1307, in build_and_run compiler.compile() File "C:\ProgramData\Titanium\mobilesdk\win32\1.5.1\android\compiler.py", line 239, in compile js_contents = self.make_function_from_file(fullpath, pack=False) File "C:\ProgramData\Titanium\mobilesdk\win32\1.5.1\android\compiler.py", line 183, in make_function_from_file file_contents = codecs.open(path,'r',encoding='utf-8').read() File "C:\ProgramData\Titanium\modules\win32\python\1.0.0\lib\codecs.py", line 618, in read return self.reader.read(size) File "C:\ProgramData\Titanium\modules\win32\python\1.0.0\lib\codecs.py", line 424, in read newchars, decodedbytes = self.decode(data, self.errors) UnicodeDecodeError: 'utf8' codec can't decode byte 0x8e in position 324: unexpected code byte {code} h2. Version Info: * Titanium Mobile 1.5.1 * Android SDK r8 and r9 h2. Repo Steps: * Create a new titanium project * Add attached BigInt.js to the /Resources directory * Recompile *Error occurs here* * Remove BigInt.js from /Resources directory * Recompile *Compiler error still occurs* It appears that the entire titanium mobile project is trashed from this point and will not recompile again. Edit: fixed the formatting3
30TIMOB-3286Android: Support service constants{html}<div><p>Is it possible to add support for the constants for services for better control over the instances through Ti.Android.Service and the start event handler?</p> <p>I'm finding my Android background service is getting cleared up when the device is running low on memory. I guess the alternative is support for foreground services.</p> <p>Android Docs: <a href= "http://developer.android.com/reference/android/app/Service.html#START_STICKY"> http://developer.android.com/reference/android/app/Service.html#STA...</a><br> QA Thread: <a href= "http://developer.appcelerator.com/question/116757/creating-services-with-startsticky"> http://developer.appcelerator.com/question/116757/creating-services...</a></p></div>{html}1
31TIMOB-3432iOS: Clear app url from App Arguments on resume{html}<div><p>A <a href= "http://developer.appcelerator.com/helpdesk/view/76659">helpdesk ticket</a> encounter a problem while coming back to the app after it has been in the background (multitasking).</p> <p>If the app is opened from being close, Ti.App.getArguments().url return nothing, and if it is opened again from backgrounding, it also returns nothing. This is fine, but when the app is launched from Safari (for example: app://), getArguments().url returns "app://" (or whatever the name of the app is) as expected. If the app is placed in the background again and reopened normally, the same url appears as if it was opened through safari.</p> <p>More details and sample app.js in helpdesk ticket <a href= "http://developer.appcelerator.com/helpdesk/view/76659">76659</a>.</p></div>{html}1
32TIMOB-3541iOS: Implement Composite Layout Behavior SpecImplementation of the new (Composite) Behavior Spec for IOS. 8
33TIMOB-3569Titanium.UI.iPhone.SystemButton does not existSometimes it does, other times not... ditto for {{SystemButtonStyle}}. (iPhone emulator) Restarting Titanium developer and deleting the build folder brought it back. But...2
34TIMOB-3588Android: Geolocation displays error alert for Current location{html}<div><p>Steps to Reproduce<br> 1. Launch KitchenSink<br> 2. Run Phone &gt; Geolocation<br> 3. Go back and then go back into geolocation again</p> <p>Actual Result:<br> Alert "error{<a href=""></a><a href="2}">code</a></p> <p>Expected Result:<br> To return the geolocation values</p> <p>Note:<br> Droid 1 happens on first launch<br> Nexus S, sometimes happen on first launch, sometimes require a second launch<br> See also bug # 2418</p> <p>Tested on:<br> Nexus S 2.3.2 Titanium SDK version: 1.7.0 (Apr 12 2011 15:24 rcc9dd9e1)<br> Droid 1 2.2.1 Titanium SDK version: 1.7.0 (Apr 12 2011 15:24 rcc9dd9e1)</p></div>{html}1
35TIMOB-3594TableViewRow.header/footer is undocumentated{html}<div><p>Usage example in the Kitchensink: <a href= "https://github.com/appcelerator/KitchenSink/blob/master/Resources/examples/table_view_api_custom_rowheader.js"> https://github.com/appcelerator/KitchenSink/blob/master/Resources/e...</a></p> <p>But the current API documentation doesn't know this attribute: <a href= "http://developer.appcelerator.com/apidoc/mobile/latest/Titanium.UI.TableViewRow-object"> http://developer.appcelerator.com/apidoc/mobile/latest/Titanium.UI....</a></p></div>{html}1
36TIMOB-4063Android: TabGroup: most events not do not fire (only focus works)Environment: * TiStudio Preview * Android 2.3.3 * Titanium SDK (all versions) The following code demonstrates that only the focus event is fired for tabGroups: {code} Titanium.UI.setBackgroundColor('#000'); var tabGroup = Titanium.UI.createTabGroup(); var win1 = Titanium.UI.createWindow({ title:'Tab 1', backgroundColor:'#fff' }); var tab1 = Titanium.UI.createTab({ title:'Tab 1', window:win1 }); var label1 = Titanium.UI.createLabel({ color:'#999', text:'I am Window 1' }); win1.add(label1); var win2 = Titanium.UI.createWindow({ title:'Tab 2', backgroundColor:'#fff' }); var tab2 = Titanium.UI.createTab({ title:'Tab 2', window:win2 }); var label2 = Titanium.UI.createLabel({ color:'#999', text:'I am Window 2' }); win2.add(label2); tabGroup.addTab(tab1); tabGroup.addTab(tab2); tabGroup.open(); label1.addEventListener("click", function(){ Ti.API.info("label1 click event fired!"); }); tabGroup.addEventListener("click", function(){ Ti.API.info("tabGroup click event fired!"); }); tabGroup.addEventListener("dblclick", function(){ Ti.API.info("tabGroup dblclick event fired!"); }); tabGroup.addEventListener("doubletap", function(){ Ti.API.info("tabGroup doubletap event fired!"); }); tabGroup.addEventListener("focus", function(){ Ti.API.info("tabGroup focus event fired!"); }); tabGroup.addEventListener("swipe", function(){ Ti.API.info("tabGroup swipe event fired!"); }); {code}2
37TIMOB-4162Android: Debugger: Breakpoint hits prior to value change when condition is setSteps to Reproduce: 1. Run Debug test 1014 and 1015 from http://wiki.appcelerator.org/display/tp/Debugger+Test+Plan Actual Result: Frames 1-7 is not being displayed in the debug window Expected Result: Call frames in the debug window should be: 9 call frames: frame[0] : [Eval script] [app.js:24] frame[1]-frame[7] : [Eval script] [app.js:28] frame[8] : [Top-level script] [app.js:53] Workaround: Click Resume twice3
38TIMOB-4244iOS: Enable searchBar to animate cancel buttonWhen a searchBar is NOT attached to a tableView, instead attached to a view on the window, the cancel button isn't animated. Nor does there seem to be a property to enable it. The cancel button IS animated when a searchBar is attached to a tableView. On the Q&A site, there is this: [http://developer.appcelerator.com/question/67231/searchbar-animate-cancel-button] Hidayet Dogan, looked at the source and wrote: {code:title=iphone/Classes/TiUISearchBar.m (about line 70)} Change: [search setShowsCancelButton:[TiUtils boolValue:value]]; to [search setShowsCancelButton:[TiUtils boolValue:value] animated:YES]; {code} Could be a configurable option, I suppose, but having it match the tableView searchBar would probably make sense. The latter is not configurable.1
39TIMOB-4274iOS: searchHidden value does not stay when window containing scroll view is blurred/focusedThe use of searchHidden:true is losing its value in that once a window containing a table with this property is blurred, on return the search is displayed. Code example below: {code:lang=javascript|title=app.js} Titanium.UI.setBackgroundColor('#fff'); var tabGroup = Titanium.UI.createTabGroup(); var win1 = Titanium.UI.createWindow({ title:'Tab 1' }); var tab1 = Titanium.UI.createTab({ title:'Tab 1', window:win1 }); var data = [{ title:'row 1' }]; var s1 = Titanium.UI.createSearchBar(); var tb = Ti.UI.createTableView({ data:data, search:s1, searchHidden:true }); win1.add(tb); var win2 = Titanium.UI.createWindow({ title:'Tab 2' }); var tab2 = Titanium.UI.createTab({ title:'Tab 2', window:win2 }); var label2 = Titanium.UI.createLabel({ text:'I am Window 2' }); win2.add(label2); tabGroup.addTab(tab1); tabGroup.addTab(tab2); tabGroup.open(); {code}3
40TIMOB-4388Implement getPressure in Android viewCan you expose the getPressure value on android devices: http://developer.android.com/reference/android/view/MotionEvent.html#getPressure%28int%29 2
41TIMOB-4644iOS: New properties of Titanium.UI.View beginning with "get" always link to main objectNew properties of Titanium.UI.View beginning with "get" always link to main object {code} var myApp = {}; myApp.ui = {}; myApp.ui.createMyView = function() { var v = Ti.UI.createView({}); v.getSomething = function() { return 100; }; v._getSomething = function() { return 100; }; v.getFood = 200; return v; }; var myView = myApp.ui.createMyView(); alert(myView.getSomething); // [object TiUIView], shold be function alert(myView.getSomething()); // nothing, shold be "100" alert(myView._getSomething()); // "100" - OK alert(myView.getFood); // [object TiUIView], shold be 200 {code}3
42TIMOB-4510Force full re-build discrepancy between Android and iOS - Android requires modified tiapp.xmlAndroid requires that tiapp.xml is modified (touched) to force a full rebuild, whereas iOS checks for files in the build/iphone directory. To demonstrate this, follow these steps: * cd $PROJECT/build/android * touch ../../tiapp.xml * rm -rf * (delete all files and folders within build/android) * launch app with the following code: {code:lang=javascript} Ti.UI.backgroundColor = "white"; var win = Ti.UI.createWindow({ exitOnClose: true }); var prod_button = Ti.UI.createButton({ width:81, height:21, top:125, left:150, title:'View Online', font:{fontSize:10,fontWeight:'bold'} }); win.add(prod_button); win.open(); {code} * after successful app launch, replace code above (does not contain maps) with the code below (contains maps) * do *not* touch tiapp.xml * cd $PROJECT/build/android * rm -rf * (delete all files and folders within build/android) * launch app {code:lang=javascript} Ti.UI.backgroundColor = "white"; var win = Ti.UI.createWindow({ exitOnClose: true }); var mapview = Ti.Map.createView({ mapType: Ti.Map.STANDARD_TYPE, region:{latitude:33.74511, longitude:-84.38993, latitudeDelta:0.5, longitudeDelta:0.5}, animate:true, regionFit:true, userLocation:true }); win.add(mapview); win.open(); {code} The app does not launch, nothing is output to logcat, but the following "Application Installer" console errors occur: {code} [INFO] logfile = /home/appcel/Titanium Studio Workspace/testing7/build.log [DEBUG] /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/builder.py simulator testing7 /opt/android-sdk /home/appcel/Titanium Studio Workspace/testing7 com.testing.testing7 6 WVGA800 [INFO] Building testing7 for Android ... one moment [INFO] Titanium SDK version: 1.7.1 (06/17/11 00:13 1293a6d...) [DEBUG] Waiting for device to be ready ... [TRACE] adb devices returned 1 devices/emulators [DEBUG] Device connected... (waited 0 seconds) [DEBUG] waited 0.004323 seconds on emulator to get ready [DEBUG] /opt/android-sdk/platform-tools/adb -e shell ls /data/app/com.testing.testing7*.apk [DEBUG] com.testing.testing7 installed? True [INFO] Fastdev server running, deploying in Fastdev mode [INFO] Copying project resources.. [TRACE] COPYING MODIFIED FILE: /home/appcel/Titanium Studio Workspace/testing7/Resources/app.js => /home/appcel/Titanium Studio Workspace/testing7/build/android/bin/assets/Resources/app.js [TRACE] Generating Java Classes [DEBUG] detected module analytics, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-analytics.jar [DEBUG] detected module android, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-android.jar [DEBUG] adding required library: titanium.jar [DEBUG] adding required library: ti-commons-codec-1.3.jar [DEBUG] adding required library: smalljs.jar [DEBUG] adding required library: jaxen-1.1.1.jar [DEBUG] detected module ui, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-ui.jar [DEBUG] detected module app, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-app.jar [DEBUG] detected module api, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-api.jar [DEBUG] detected module filesystem, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-filesystem.jar [DEBUG] detected module media, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-media.jar [DEBUG] detected module json, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-json.jar [DEBUG] detected module locale, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-locale.jar [INFO] Force including all modules... [DEBUG] detected module android.calendar, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-calendar.jar [DEBUG] detected module media.android, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-media.jar [DEBUG] detected module database, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-database.jar [DEBUG] detected module android.optionmenu, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-ui.jar [DEBUG] detected module ui.clipboard, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-ui.jar [DEBUG] detected module ui.android, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-ui.jar [DEBUG] detected module ui.iphone, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-ui.jar [DEBUG] detected module ui.activityindicator, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-ui.jar [DEBUG] detected module bump, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-bump.jar [DEBUG] adding required library: bump-api.jar [DEBUG] detected module geolocation, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-geolocation.jar [DEBUG] detected module yahoo, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-yahoo.jar [DEBUG] detected module network, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-network.jar [DEBUG] detected module xml, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-xml.jar [DEBUG] detected module utils, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-utils.jar [DEBUG] detected module titanium.stream, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/titanium.jar [DEBUG] detected module titanium, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/titanium.jar [DEBUG] detected module kroll, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/titanium.jar [DEBUG] detected module titanium.codec, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/titanium.jar [DEBUG] detected module accelerometer, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-accelerometer.jar [DEBUG] detected module facebook, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-facebook.jar [DEBUG] detected module network.socket, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-network.jar [DEBUG] detected module contacts, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-contacts.jar [DEBUG] detected module app.android, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-app.jar [DEBUG] detected module app.properties, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-app.jar [DEBUG] detected module android.notificationmanager, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-android.jar [DEBUG] detected module gesture, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-gesture.jar [DEBUG] detected module map, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-map.jar [DEBUG] detected module platform, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-platform.jar [DEBUG] unknown module = ui.iphone.tableviewcellselectionstyle [DEBUG] unknown module = ui.iphone.tableviewstyle [DEBUG] unknown module = ui.iphone.systembuttonstyle [DEBUG] unknown module = ui.currentwindow.app.window [DEBUG] Detecting modules in /home/appcel/Titanium Studio Workspace/testing7/modules [DEBUG] Detecting modules in /home/appcel/.titanium/modules [TRACE] Generating /home/appcel/Titanium Studio Workspace/testing7/build/android/gen/com/testing/testing7/Testing7AppInfo.java [TRACE] Generating /home/appcel/Titanium Studio Workspace/testing7/build/android/AndroidManifest.xml [TRACE] Generating /home/appcel/Titanium Studio Workspace/testing7/build/android/gen/com/testing/testing7/Testing7Application.java [TRACE] Generating /home/appcel/Titanium Studio Workspace/testing7/build/android/gen/com/testing/testing7/Testing7Activity.java [TRACE] Generating /home/appcel/Titanium Studio Workspace/testing7/build/android/.classpath [TRACE] Generating /home/appcel/Titanium Studio Workspace/testing7/build/android/.project [TRACE] Generating /home/appcel/Titanium Studio Workspace/testing7/build/android/default.properties [TRACE] Skipping copying gitignore -> .gitignore because already exists [DEBUG] detected module analytics, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-analytics.jar [DEBUG] detected module android, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-android.jar [DEBUG] adding required library: titanium.jar [DEBUG] adding required library: ti-commons-codec-1.3.jar [DEBUG] adding required library: smalljs.jar [DEBUG] adding required library: jaxen-1.1.1.jar [DEBUG] detected module ui, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-ui.jar [DEBUG] detected module app, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-app.jar [DEBUG] detected module api, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-api.jar [DEBUG] detected module filesystem, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-filesystem.jar [DEBUG] detected module media, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-media.jar [DEBUG] detected module json, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-json.jar [DEBUG] detected module locale, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-locale.jar [INFO] Force including all modules... [DEBUG] detected module android.calendar, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-calendar.jar [DEBUG] detected module media.android, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-media.jar [DEBUG] detected module database, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-database.jar [DEBUG] detected module android.optionmenu, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-ui.jar [DEBUG] detected module ui.clipboard, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-ui.jar [DEBUG] detected module ui.android, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-ui.jar [DEBUG] detected module ui.iphone, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-ui.jar [DEBUG] detected module ui.activityindicator, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-ui.jar [DEBUG] detected module bump, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-bump.jar [DEBUG] adding required library: bump-api.jar [DEBUG] detected module geolocation, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-geolocation.jar [DEBUG] detected module yahoo, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-yahoo.jar [DEBUG] detected module network, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-network.jar [DEBUG] detected module xml, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-xml.jar [DEBUG] detected module utils, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-utils.jar [DEBUG] detected module titanium.stream, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/titanium.jar [DEBUG] detected module titanium, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/titanium.jar [DEBUG] detected module kroll, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/titanium.jar [DEBUG] detected module titanium.codec, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/titanium.jar [DEBUG] detected module accelerometer, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-accelerometer.jar [DEBUG] detected module facebook, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-facebook.jar [DEBUG] detected module network.socket, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-network.jar [DEBUG] detected module contacts, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-contacts.jar [DEBUG] detected module app.android, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-app.jar [DEBUG] detected module app.properties, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-app.jar [DEBUG] detected module android.notificationmanager, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-android.jar [DEBUG] detected module gesture, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-gesture.jar [DEBUG] detected module map, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-map.jar [DEBUG] detected module platform, path = /home/appcel/.titanium/mobilesdk/linux/1.7.1/android/modules/titanium-platform.jar [INFO] Compiling Javascript Resources ... [DEBUG] Processing Android resource drawables [DEBUG] Detecting modules in /home/appcel/Titanium Studio Workspace/testing7/modules [DEBUG] Detecting modules in /home/appcel/.titanium/modules [DEBUG] app stylesheet => /home/appcel/Titanium Studio Workspace/testing7/build/android/gen/com/testing/testing7/ApplicationStylesheet.java [DEBUG] copying app icon: /home/appcel/Titanium Studio Workspace/testing7/build/android/bin/assets/Resources/appicon.png [ERROR] Exception occured while building Android project: [ERROR] Traceback (most recent call last): [ERROR] File "/home/appcel/.titanium/mobilesdk/linux/1.7.1/android/builder.py", line 1947, in <module> [ERROR] s.build_and_run(False, avd_id, debugger_host=debugger_host) [ERROR] File "/home/appcel/.titanium/mobilesdk/linux/1.7.1/android/builder.py", line 1740, in build_and_run [ERROR] self.manifest_changed = self.generate_android_manifest(compiler) [ERROR] File "/home/appcel/.titanium/mobilesdk/linux/1.7.1/android/builder.py", line 811, in generate_android_manifest [ERROR] shutil.copy(iconpath, dest_icon) [ERROR] File "/usr/lib/python2.6/shutil.py", line 88, in copy [ERROR] copyfile(src, dst) [ERROR] File "/usr/lib/python2.6/shutil.py", line 52, in copyfile [ERROR] fsrc = open(src, 'rb') [ERROR] IOError: [Errno 2] No such file or directory: u'/home/appcel/Titanium Studio Workspace/testing7/build/android/bin/assets/Resources/appicon.png' {code} * no improvement is observed when the app is relaunched any number of times * once the tiapp.xml file is touched, a "Detected tiapp.xml change, forcing full re-build..." message is output to the console, and the app is launched as expected 3
43TIMOB-4521Android: Natively Compiled JS Modulesh1. Feature Support natively compiled JavaScript modules like we do on iOS. h2. Example Module The following steps create a compiled module that you could distribute as a zip on iOS. Once implemented, the same process would work on Android. 1. Create a new module for Android: titanium create --platform=android --type=module --name=jsmod --id=ti.jsmod --android=/path/to/android-sdk 2. Drop the below in assets/ti.jsmod.js: {code:title=assets/ti.jsmod.js} exports.createBox = function() { return Ti.UI.createView({ width: 100, height: 100, backgroundColor: 'red' }); }; {code} 3. Drop the below in example/app.js: {code:title=example/app.js} var window = Ti.UI.createWindow({ backgroundColor: 'white' }); window.add(require('ti.jsmod').createBox()); window.open(); {code} 4. Enjoy your luscious red rectangle h2. Workaround Until this feature is available, you can always distribute just the JS file. Developers can utilize it in its un-compiled state, although your code isn't protected from prying eyes. h3. Associated Helpdesk Ticket http://appc.me/c/APP-4878112
44TIMOB-4730Android 3.2 Simulator behavior on windows is very poor (not launched at all or useless emulator launched)1.update your sdk install to include 3.2 2.target 3.2 as the run config and launch the emulator results: we see 2 things occur 1.time out with no emulator launched 2. emulator launches, but is useless (half the screen renders, buttons do not work etc) fwiw, lion and 10.6.8 work as expected Also, as per Don this is not a studio or TIMOB issue2
45TIMOB-4800Ti.UI.backgroundColor/Ti.UI.backgroundImage not translucenth3. Setting background on Root Window 1) Create project in TiStudio and replace app.js with {code:JavaScript} Ti.UI.backgroundColor = '#f00'; Ti.UI.backgroundImage = 'KS_nav_ui.png'; var win = Ti.UI.createWindow(); win.open(); {code} (or use attached Resources folder) 2) Launch application Expected: Image appears with a red background. Actual: Only image appears. (See screen shot) Note: Talked to Jon Alter about this. He says it isn't a major issue because he doesn't see a circumstance where someone would set the background this way. It is a parity issue. Setting the background this way works as expected on iOS devices. h3. Setting background on a view. Verify image is shown with a red background. Also verify background color changes when the state of the view changes (ex: focused, selected). {code:JavaScript} var win = Ti.UI.createWindow({ backgroundColor: 'white', layout: 'vertical' }); var colorView = Ti.UI.createView({ width: 400, height: 400, focusable: true, backgroundColor: 'blue', backgroundImage: 'background.png', backgroundSelectedColor: 'red', backgroundFocusedColor: 'yellow', backgroundDisabledColor: 'black' }); win.add(colorView); var disableButton = Ti.UI.createButton({ title: 'Enable/Disable View', width: 150 }); disableButton.on('click', function() { colorView.enabled = !colorView.enabled; }); win.add(disableButton); win.open(); {code} 2
46TIMOB-4865iOS: imageAsCropped rotates imageimageAsCropped seems to be rotating the image 90 degrees when applied. Before Crop: http://support-admin.appcelerator.com/files/cf1c121c-b9ae-11e0-8901-12313b1264a1/Before_crop.PNG After Crop: http://support-admin.appcelerator.com/files/cf110d22-b9ae-11e0-8901-12313b1264a1/After_crop.PNG Repro Code: {code:javascript} var win = Ti.UI.createWindow(); var currPic = null; var takePic = Ti.UI.createButton({ zIndex: 1000, width: "90%", height: 40, title: "Take picture" }); var imgView = null; takePic.addEventListener("click", function() { if (currPic !== null) { var croppedImg = currPic.imageAsCropped({ x: 0, y: 0, width: currPic.width, height: currPic.height }); imgView.image = croppedImg; } else { Ti.Media.requestCameraPermissions(takePhoto); } }); win.add(takePic); win.open(); function takePhoto(e) { if (!e.success) { Ti.API.error("No camera permissions granted"); return; } Ti.Media.showCamera({ success: function(event) { takePic.title = "Crop image"; var image = event.media; var width = image.width / 5; var height = image.height / 5; currPic = image; imgView = Ti.UI.createImageView({ zIndex: 0, width: width, height: height, image: image, top: 40 }); win.add(imgView) }, cancel: function() {}, error: function(error) {}, saveToPhotoGallery: false, mediaTypes: [Ti.Media.MEDIA_TYPE_PHOTO] }); } {code}5
47TIMOB-5010Latest version of Java unusable for building Android projects1) Download and install latest Java JDK 7 http://www.oracle.com/technetwork/java/javase/downloads/java-se-jdk-7-download-432154.html 2) Create a new Android project and launch to emulator Results: build.log has the following contents Logfile initialized [INFO] logfile = C:\Users\alan\My Documents\Titanium Studio Workspace\Hello\build.log [DEBUG] C:\ProgramData\Titanium\mobilesdk\win32\1.8.0.v20110811101746\android\builder.py simulator Hello C:\Users\alan\android-sdk C:\Users\alan\My Documents\Titanium Studio Workspace\Hello com.appcelerator.hello 17 WVGA854 [INFO] Building Hello for Android ... one moment [ERROR] JDK version 1.7.0 detected, but 1.6 is required 3
48TIMOB-5303Android: UI view size property values incorrecth2. Problem The view's size property values are intended to reflect the rendered dimensions. However, if these properties are queried too soon after rendering has completed, the old values will be output. The advice of querying property values within a window open event listener does not work. h2. Test case {code:lang=javascript|title=app.js} var win = Ti.UI.createWindow({ // fullscreen: false, // once fixed, please check with this line uncommented backgroundColor:'red' }); var view = Ti.UI.createView({ backgroundColor:'blue', width:'50', height:50 }); win.add(view); Ti.API.info("*** Before window open - view.size.width = 50 ***"); Ti.API.info("view.size w x h: " + view.size.width + " x " + view.size.height); // incorrect view.width = 100; win.addEventListener('open', function(){ Ti.API.info("*** Window open - view.size.width = 100 ***"); Ti.API.info("view.size w x h: " + view.size.width + " x " + view.size.height); // incorrect }); Ti.Gesture.addEventListener('orientationchange', function(){ Ti.API.info("*** orientationchange - view.size.width = 200 ***"); view.width = 200; Ti.API.info("view.size w x h: " + view.size.width + " x " + view.size.height); // incorrect }); win.open(); {code} h2. Logs {code:lang=none} 1454 AndroidRuntime D >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<< 1454 AndroidRuntime D CheckJNI is ON 60 InputManagerService W Got RemoteException sending setActive(false) notification to pid 1430 uid 10044 1454 AndroidRuntime D --- registering native functions --- 60 ActivityManager I Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.appcelerator.testing10/.Testing10Activity } 60 ActivityManager I Start proc com.appcelerator.testing10 for activity com.appcelerator.testing10/.Testing10Activity: pid=1461 uid=10044 gids={1015, 3003} 1454 AndroidRuntime D Shutting down VM 1454 AndroidRuntime I NOTE: attach of thread 'Binder Thread #3' failed 1461 TiApplication I (main) [0,0] checkpoint, app created. 1461 TiApplication I (main) [536,536] Titanium 1.8.0.1 (2011/12/22 13:09 fbdc96f) 1461 TiFastDev D (main) [164,700] Enabling Fastdev on port 58902 1461 TiFastDev D (main) [10,710] sent tokens successfully 1461 TiFastDev D (main) [1,711] Fastdev session handshake succesful. 1461 TiApplication I (main) [8,719] Titanium Javascript runtime: v8 1461 TiApplication W (main) [68,787] activity stack is emtpy, unable to get current activity 1461 TiRootActivity I (main) [0,0] checkpoint, on root activity create, savedInstanceState: null 1461 TiApplication W (main) [119,119] activity stack is emtpy, unable to get current activity 1461 TiApplication W (main) [1,120] activity stack is emtpy, unable to get current activity 1461 TiApplication W (main) [1,121] activity stack is emtpy, unable to get current activity 1461 TiApplication E (KrollRuntimeThread) [937,1058] APP PROXY: ti.modules.titanium.app.AppModule@44eb3110 1461 TiAssetHelper D Fetching "app.js" with Fastdev... 1461 TiAPI I *** Before window open - view.size.width = 50 *** 1461 TiAPI I view.size w x h: 0 x 0 1461 TiAPI I *** Window open - view.size.width = 100 *** 1461 TiAPI I view.size w x h: 0 x 0 1461 TiRootActivity I (main) [0,0] checkpoint, on root activity resume. activity = com.appcelerator.testing10.Testing10Activity@44e76478 60 ActivityManager I Displayed activity com.appcelerator.testing10/.Testing10Activity: 3359 ms (total 3359 ms) 60 WindowManager I Setting rotation to 1, animFlags=1 60 ActivityManager I Config changed: { scale=1.0 imsi=310/260 loc=en_US touch=3 keys=2/1/1 nav=3/1 orien=2 layout=34 uiMode=17 seq=70} 1461 TiAPI I *** orientationchange - view.size.width = 200 *** 1461 TiAPI I view.size w x h: 100 x 50 60 ActivityManager I Config changed: { scale=1.0 imsi=310/260 loc=en_US touch=3 keys=2/1/2 nav=3/1 orien=2 layout=34 uiMode=17 seq=71} 60 WindowManager I Setting rotation to 0, animFlags=0 60 ActivityManager I Config changed: { scale=1.0 imsi=310/260 loc=en_US touch=3 keys=2/1/2 nav=3/1 orien=1 layout=34 uiMode=17 seq=72} 1461 TiAPI I *** orientationchange - view.size.width = 200 *** 1461 TiAPI I view.size w x h: 200 x 50 {code} h2. Discussions See Q/A topic: http://developer.appcelerator.com/question/124426/how-does-dimensions-work#216821 h2. Workaround Using setTimeout allows the size values to be updated to reflect the re-rendered view. 1
49TIMOB-5162iOS: Ti.Database.ResultSet fieldCount is a property beginning in 3.3.0. Update Anvil, KS, etc.iOS incorrectly has fieldCount as a function fieldCount(). In addition: * The DB tests must be updated to catch mistakes like this going forward, if possible, and also test correct values * The documentation for Ti.Database.ResultSet must be updated3
50TIMOB-5233Android: Splash screen stretched on the app launch if device in landscapeh5.Problem Splash screen is stretched if window orientation mode is locked up, when launching the app in landscape mode. h5.Target Environment {noformat} Titanium SDK: Mobile 1.7.2 Platform OS: Android Version: 2.1 {noformat} h5.Repro sequence {code:title=app.js} var win1 = Titanium.UI.createWindow({ title:'Tab 1', backgroundColor:'#fff' }); win1.orientationModes = [ Titanium.UI.PORTRAIT]; var label1 = Titanium.UI.createLabel({ color:'#999', text:'I am Window 1', font:{fontSize:20,fontFamily:'Helvetica Neue'}, textAlign:'center', width:'auto' }); win1.add(label1); win1.open(); {code}1
51TIMOB-5438Android: Add compiler warning when using maps with Non-Google APIs SDKCurrently, we don't provide a clear error message if the developer attempts to use the Google Maps APIs in their Titanium application with a "vanilla" Android SDK version. It would be good to put in some kind of compiler warning to let the developer know that they are trying to run a Maps-enabled application on an Android flavor that does not support it.3
52TIMOB-5749Android: AndroidManifest.xml not properly created when using Ti.Geolocation eventsUsing the code below, the appropriate <uses-permission> entries are not added to the AndroidManifest.xml file to allow for using location services. {code:lang=javascript} var win = Ti.UI.createWindow(); win.open(); var locationAdded = false; var handleLocation = function(e) { if (!e.error) { Ti.API.info(e.coords); } }; var addHandler = function() { if (!locationAdded) { Ti.Geolocation.addEventListener('location', handleLocation); locationAdded = true; } }; var removeHandler = function() { if (locationAdded) { Ti.Geolocation.removeEventListener('location', handleLocation); locationAdded = false; } }; Ti.Geolocation.accuracy = Ti.Geolocation.ACCURACY_BEST; Ti.Geolocation.preferredProvider = Ti.Geolocation.PROVIDER_GPS; if (Ti.Geolocation.locationServicesEnabled) { addHandler(); var activity = Ti.Android.currentActivity; activity.addEventListener('destroy', removeHandler); activity.addEventListener('pause', removeHandler); activity.addEventListener('resume', addHandler); } else { alert('Please enable location services'); } {code} The expected values of {code:lang=xml} <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> {code} are absent from the generated AndroidManifest.xml. If you add the following line of code into the above code, the AndroidManifest.xml generates just fine. {code:lang=javascript} Ti.Geolocation.getCurrentPosition(function(e) {}); {code}3
53TIMOB-5769Android: Add the ability to add multiple polygons to the MapViewh5.Feature Request To add routes and allow for multiple polygons to be added to the MapView as well as have fill, opacity and color properties. h6.Utilities That would allow developers to implement geofencing (see http://en.wikipedia.org/wiki/Geo-fence) a common technique for Android apps. h6.Customer notes "We'd like to be able to hook into the events when a user enters and leaves a geo-fenced polygon or a radius around a geolocated point."34
54TIMOB-5812iOS: Support UIMenuController!http://i.stack.imgur.com/yQKL4.png! Would be a useful feature to have. Already need it for so much. This is something that should be built-in.8
55TIMOB-5823iOS: Support building to device, directly to the device, skipping iTunesWhen building to device, it would be good to build directly to the device rather then building, then having to sync via iTunes. Here is a good jumping off point: http://stackoverflow.com/questions/5010062/xcodebuild-simulator-or-device For those people who wish to sync to iTunes, we will inject a fake "device ID" that represents iTunes Sync and this will revert to using the existing mechanism.8
56TIMOB-5799Android: Child element does not respect opacity of parenth3. Original test case. A child element attached to a parent with an opacity of 0 is still visible, but should be hidden. {code} var win = Ti.UI.createWindow({ title: "Window", backgroundColor: "#FFF" }); var view = Ti.UI.createView({ width: 50, height: 50, left: 0, top: 0, backgroundColor: "transparent", opacity: 0 }); var img = Ti.UI.createImageView({ image: "KS_nav_ui.png", width: 40, height: 40, left: 0, top: 0 }); view.add(img); win.add(view); win.open(); {code} h3. Child and Parent View w/ sliders to control opacity. Try adjusting the opacity of the parent and child views. The child's opacity should be properly composited with that of the parent. As you lower the opacity of the parent, the child should also become more transparent. But if you only lower the child's opacity, the parent should not be affected. {code} var win = Ti.UI.createWindow({ layout: 'vertical', backgroundColor: 'white' }); var parent = Ti.UI.createView({ backgroundColor: "blue", width: 200, height: 200 }); win.add(parent); var child = Ti.UI.createView({ backgroundColor: "black", width: '50%', height: '50%' }); parent.add(child); function createOpacitySlider(title, view) { var container = Ti.UI.createView({ width: '75%', height: 75, layout: 'horizontal' }); container.add(Ti.UI.createLabel({ text: title, left: 5 })); var slider = Ti.UI.createSlider({ min: 0, max: 100, value: 100 }); container.add(slider); slider.addEventListener('change', function(e) { view.opacity = e.value / 100; }); return container; } win.add(createOpacitySlider('Parent', parent)); win.add(createOpacitySlider('Child', child)); win.open(); {code}3
57TIMOB-5817Android: keyboard type set as number pad permits input of non-numeric valuesh2. Problem New minor version of Titanium SDK has a new look of numeric keyboard. The problem is that it allows input of non-numeric values. h2. Test case How to reproduce the issue: run this example with 1.7.4 version of Titanium SDK, click on text field and type "*" or "#" symbol. You'll see that they are present in text field, while they shouldn't be present. Compile and run same example with 1.7.3 SDK version and try to do same thing. You'll see that you can't input "*" or "#" symbols (or any other that is not a number). {code} var win = Ti.UI.createWindow({ modal: true, backgroundColor: '#000' }); var textField = Ti.UI.createTextField({ width: 200, keyboardType: Ti.UI.KEYBOARD_NUMBER_PAD }); win.add(textField); win.open(); {code} Also, it would be nice if there was key in this new keyboard that would minimize keyboard (if that is possible).3
58TIMOB-6922Android: Network - HTTPClient cannot retrieve non-ascii datah2. Problem When loading some JSON file (UFT-8) from the web and displaying the data, the Non-Ascii-chars text is garbled. See attached screenshot of this problem on 1.7.2 Note that this works fine on iPhone. The Kitchen Sink Demo of XHR has the same problem. It works on the iPhone but fails on Android. h2. Test case {code:lang=javascript|title=app.js} Ti.UI.setBackgroundColor('#ddd'); var win = Ti.UI.createWindow({}); var loadDataButton = Ti.UI.createButton({ title: "Let's load UTF-8 from the web!", width: 260, top: 50, height: 40 }); win.add(loadDataButton); loadDataButton.addEventListener('click', function() { var test1 = loadFromWeb("http://crossplattformvergleich.dnsalias.org/test.js"); /* file contains in UTF8: { "result" : "áäüÖßÉ?" } and a comment */ var test2 = loadFromWeb("http://crossplattformvergleich.dnsalias.org/test2.js"); /* this is a 36-byte file. Appears as 0 bytes on android */ }); function loadFromWeb(url) { var asyncRequest = Ti.Network.createHTTPClient(); asyncRequest.timeout = 30*1000; asyncRequest.open("GET", url); asyncRequest.onload = loadCallback; asyncRequest.send(); } function loadCallback() { alert(this.responseText); } win.open(); {code} h2. Discussions Q&A: [problem fetching uft-8 content on android|http://developer.appcelerator.com/question/126712/problem-fetching-uft-8-content-on-android#comment-101538] 2
59TIMOB-5837Tooling: Adding a module requires a clean buildCurrently when a new 3rd party module is added to the code and TiApp.xml file, the user must also do a clean build rather then Titanium detecting that the newly requested module is available and including it automatically2
60TIMOB-5989Android: Button's image attribute behaves the same as the backgroundImage attributeh4.Problem The button's image attribute does not work as described in documentation "the image to display on the button to the left of the title". Image scales to fill the entire button background. h6.Titanium API - Image property http://developer.appcelerator.com/apidoc/mobile/latest/Titanium.UI.Button-object h6.Tested on Android Emulator v2.2 & Android LG Ally device v2.2.1 h6.Repro sequence {code:title=app.js} var win1 = Titanium.UI.createWindow({ title:'Win 1', backgroundColor:'#fff' }); var button = Titanium.UI.createButton({ top: 60, title : 'Hello', width : '140', height : '40', //backgroundImage : 'button.png', image: 'button.png', //backgroundLeftCap:12, //backgroundTopCap:12, //textAlign: Titanium.UI.TEXT_ALIGNMENT_RIGHT }); win1.add(button); win1.open(); {code} h6.Associated HD ticket APP-3791582
61TIMOB-6038Android: Ti.App.Properties - Cannot retrieve property value set in tiapp.xml 1. Include the following code into app.js: Titanium.UI.setBackgroundColor('white'); var win = Titanium.UI.createWindow(); var text = '' + Ti.App.Properties.getString('appstate'); alert(text); win.open(); 2. Add the following line to tiapp.xml: <property name="appstate" type="string">DEV</property> 3. Run the app for Android Result: See null in the alert dialog Expected: Should see DEV in the alert dialog Note: This bug is already fixed for iOS -> http://jira.appcelerator.org/browse/TIMOB-46961
62TIMOB-6060iOS: Blurring Textfield in Modal Window Doesn't Dismiss KeyboardWhen using the MODAL_PRESENTATION_FORMSHEET modal style, iOS by default does not dismiss the keyboard even when text fields are blurred. iOS 4.3 and later allows us to override this, but this property is not currently exposed. This will be an iOS-only property on the Ti.UI.Window class, and will not apply to Android. In the mean time, MODAL_PRESENTATION_PAGESHEET is perfectly sufficient. (Not a bug, but leaving old comments) h1. Problem When blurring a text field in a modal window, the keyboard doesn't go away. h2. Reproduction Drop the following in an app.js, and click in the text field. It automatically blurs itself after gaining focus. If you change "modal: true" to "modal: false", the keyboard will properly hide itself. {code:title=app.js} var win = Ti.UI.createWindow({ backgroundColor: '#fff' }); var textField = Ti.UI.createTextField({ value: '1. Touch Me', height: 34, top: 10, left: 10, right: 10, borderStyle: Ti.UI.INPUT_BORDERSTYLE_ROUNDED }); textField.addEventListener('focus', function () { Ti.API.info('blurring'); textField.blur(); Ti.API.info('blurred'); }); win.add(textField); win.open({ modal: true, modalStyle: Ti.UI.iPhone.MODAL_PRESENTATION_FORMSHEET }); {code}5
63TIMOB-6860Tooling: Android build process requires "Google APIs" even if "Ti.Map.createView" only occurs in commentsh2. Problem For a Titanium mobile project on Android, if Titanium sees that you're using a Ti.Map.createView in your project, running on the emulator will fail unless your run configuration indicates use of one of the "Google APIs" Android API. I assume it is scanning the source js files for this. That's fine. The problem is that if the only place you have the text "Ti.Map.createView" is in a comment (// comment), Titanium does the same thing, and fails to install with the message, {{Package com.testing.testing9 requires unavailable shared library com.google.android.maps; failing!}}. I have to think that there are other things like that too. Titanium's build process should not detect things like this that are in comments, thus triggering the "Google APIs" requirement. I do not know if this affects iOS as well. h2. Test case {code:lang=javascript|title=app.js} var win = Ti.UI.createWindow({ layout:'vertical', exitOnClose:true, navBarHidden:true }); var label = Ti.UI.createLabel({ color:'white', text:'Hello World', width:'auto' }); win.add(label); // some day add a Ti.Map.createView to this win.open(); {code} h2. Logs {code} 403 AndroidRuntime D >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<< 403 AndroidRuntime D CheckJNI is ON 403 AndroidRuntime D --- registering native functions --- 87 PackageParser D Scanning package: /data/app/vmdl28961.tmp 87 PackageManager D Scanning package com.testing.testing9 87 PackageManager E Package com.testing.testing9 requires unavailable shared library com.google.android.maps; failing! 87 PackageManager W Package couldn't be installed in /data/app/com.testing.testing9-1.apk 403 AndroidRuntime D Shutting down VM 403 AndroidRuntime I NOTE: attach of thread 'Binder Thread #3' failed {code} 3
64TIMOB-6245Android: Animations provided to Window.open() and close() on Lightweight windows aren't being appliedanimation properties or proxy given to open() or close() methods on a LW window are not supported currently in 1.8. FROM DUPLICATE TIMOB-11790: Note: Heavyweight windows are addressed in TIMOB-10302. h3. Issue Animations on opening a lightweight window are not working. h3. Steps to Reproduce 1. Run the sample code below {noformat} var win = Ti.UI.createWindow({ backgroundColor: 'white' }); win.open(); win.addEventListener('click', function(){ var win1 = Ti.UI.createWindow({ backgroundColor: 'red', left: 320 }); var slide_it_left = Titanium.UI.createAnimation(); slide_it_left.left = 0; slide_it_left.duration = 300; win1.open(slide_it_left); }); {noformat} 2. No animation occurs. The new window is stuck at position 320. 3
65TIMOB-6292iOS: Update jscore to iOS 5.0 version (JSCore-903)Ticket for tracking the update of JSCore to the version shipping with iOS 5.0 (JSCore-903) and documenting the process.3
66TIMOB-6423Android: Build should accept an alias passwordThe ADT supports packaging an apk using a specific keystore/password and a key/password. It appears that we require both the keystore and alias passwords to be the same. When I run the builder.py script using the correct keystore password, but use a alias with a different password, the script hangs.3
67TIMOB-6493iOS: Titanium.Media.takeScreenshot fails to orient captured image to reflect hardware orientationh4. Expected Behavior: Take an horizontal screenShot and attach it to an email and the image attached goes horizontal too, or save the screenshot on the Photo Gallery and save it horizontal too. h4. Actual Behavior: The image saves and attach to the email vertically, even if i create a matrix transformation and rotate this one, if i add to the window the image rotated looks good, but if i save to the photo gallery or attach it to an email, looks vertical again h4. Test Case: {code} var win = Ti.UI.createWindow({ backgroundColor:'#FFFFFF', orientationModes:[Ti.UI.PORTRAIT,Titanium.UI.LANDSCAPE_LEFT,Titanium.UI.LANDSCAPE_RIGHT] }); var button = Ti.UI.createButton({ title: 'ScreenShot!!' }) button.addEventListener('click',function(){ Titanium.Media.takeScreenshot(function(event){ var screenShot = event.media; var img = Titanium.UI.createImageView({ image: screenShot, borderColor: 'red', borderWidth: 10 }); Ti.API.info('taking screenshot'); img.addEventListener('click', function() { Ti.API.info('remove image'); win.remove(img); img = null; }); win.add(img); }); }); win.add(button); win.open(); {code} 3
68TIMOB-6500Android: Implement API Coverage for V8We need to re-implement our coverage report data for the new V8 runtime5
69TIMOB-6666Android: Allow users to specify "Default.jpg" in place of "Default.png" h6.Feature request Establish the way to choose which image format should be used as splash image. i.e. Use JPEG image rather than PNG image. h6.Associated HD ticket APP-4936153
70TIMOB-6845Android: Ti should include only the used features/libs into a new apph4. PROBLEM DESCRIPTION For iOS, when you create a new mobile project in Titanium Studio and run it on device, the ipa file it generates is well over 4MB. h4. STEPS TO REPRODUCE 1. Create new mobile project 2. Compile it to device 3. Check the size of the app. h4. ACTUAL RESULTS App bigger than 4MB, even if it's an almost empty app. h4. EXPECTED RESULTS Ti only adding the needed functionality, according to the namespaces used in the app. 3
71TIMOB-7124Android: Tab icons are not being shown when are in density foldersProblem: Images in density folders will not show if you re-install the app without rebuilding AND you didn't set ti.android.fastdev property to false. This property is true by default. Note that this bug affect Emulators and Devices. Steps to reproduce: 1. Download and import the attached project, change line 49 in app.js in the test project to 'KS_nav_views.png' (Since the other image isn't included in the proj) 2. Launch emulator/device (uninstall the app if already installed). 3. Install and run the app 4. Observe the tab1 image is showing up correctly. 5. Now uninstall the app from emulator/device, and reinstall/run the app via Titanium Studio's play button. (DO NOT rebuild). 2
72TIMOB-7143Android: KitchenSink - Platform > Sockets > Connecting Socket - Connect without setting field causes crashIn KitchenSink, Platform > Sockets > Connecting Socket, pressing Connect when the module first loads causes crash. This is not a new behavior, and is a general Android issue. Steps to Reproduce: 1. Launch KitchenSink. 2. Run Platform > Sockets > Connecting Socket. 3. Press 'Connect'. Expected Result: Runtime error. Actual Result: Crash.1
73TIMOB-7152iOS: Memory Leak: Objects created in a Ti.UI.tabGroup are not released when the tabGroup is closedh3. Problem Objects created in a Ti.UI.tabGroup are not released when the tabGroup is closed. h3. Reproducible steps: 1. Run the code below. 2. Use the instruments application to monitor the memory 3. Click on Open tabgroup button 4. Click on close button Please see TiUITabproxy on the category. It is never released from the memory. h3. Expected behavior: Customer wants to release the memory of a tab. h3. Tested with the next specs: Simulator iPhone 4 Version of the device: 5.0.1 Titanium Studio, build: 1.0.8.201112291658 Titanium SDK: 1.8.0.1 h3.More info: Please see the video attached. h3. Code: {Code} function createTabGroup() { var colors = ['#ff9966', '#99ff66', '#6699ff', '#66ffff', '#ffff66']; function openWindowOnStack(i) { var win = Ti.UI.createWindow( { title : 'Window ' + i, backgroundColor : colors[i] }); win.addEventListener('open', function(evt) { Ti.API.info('Opened: ' + evt.source.title); if(i < 4) { setTimeout(function() { openWindowOnStack(i + 1); }, 500); } }); win.addEventListener('close', function(evt) { Ti.API.info('Closed: ' + evt.source.title); trackClosedWindow(tab1, evt.source); }); openInTab(tab1, win); } var navButton = Ti.UI.createButton( { title : 'Open Windows' }); var outer = Ti.UI.createWindow( { title : 'Root Window', backgroundColor : '#d0d0d0', rightNavButton : navButton }); outer.rightNavButton.addEventListener('click', function() { openWindowOnStack(0); }); function trackClosedWindow(thistab, window) { var windows = thistab.windows || []; for(var w = windows.length - 1; w >= 0; w--) { if(windows[w] == window) { windows[w] = null; windows.splice(w, 1); break; } } thistab.windows = windows; } function closeAllInTab(thistab) { var windows = thistab.windows || []; for(var w = 0; w < windows.length; w++) { windows[w].close(); windows[w] = null; } thistab.windows = windows = []; } function openInTab(thistab, window) { var windows = thistab.windows || []; windows.push(window); thistab.open(window); thistab.windows = windows; } var tabGroup = Ti.UI.createTabGroup(); var tab1 = Ti.UI.createTab( { window : outer, title : 'Touch Me' }); tabGroup.addTab(tab1); var button2 = Ti.UI.createButton( { title : 'close', height : 35, width : 200 }); outer.add(button2); button2.addEventListener('click', function(e) { outer.remove(button2); outer.rightNavButton = null; button2 = null; navButton = null; closeAllInTab(tab1); tabGroup.removeTab(tab1); tab1.window = null; tab1 = null; tabGroup.tabs = null; tabGroup.close(); tabGroup = null; outer.close(); outer = null; Ti.API.info('Closed tab group'); }); return tabGroup; } var win1 = Ti.UI.createWindow( { backgroundColor : '#fff', title : "Home" }); var button1 = Ti.UI.createButton( { title : 'Open tabgroup', height : 35, width : 200 }); button1.addEventListener('click', function(e) { var tabGroup1 = createTabGroup(); tabGroup1.open(); Ti.API.info('Opened tab group'); }); win1.add(button1); win1.open(); {Code} h3. Helpdesk APP-443889 1
74TIMOB-7233Android: evalJS and evalFile methods deprecated in TiContexth3.Issue One of the General changes while porting modules to our current SDK 1.8.0.1 was remove TiContext. h6.Customer's remarks Inside my Android module, I have to execute some JavaScript statements in the current context. I was using TiContext to do that in pre-1.8.0.1 versions of SDK. Since TiContext is deprecated where in 1.8.0.1 Android module SDK can I find evalJS() and evalFile() methods? h6.General changes {noformat} TiContext is being replaced, and any implementation utilizing TiContext will take a performance / stability hit compared to using the desired API's directly. In most of the places where TiContext is used as an argument, the TiContext argument can be removed entirely or replaced with an Activity reference. {noformat} h6.evalJS and evalFile methods migrated {code:title=TiContext.java} public Object evalFile(String filename) throws IOException { return evalFile(filename, null, -1); } public Object evalJS(String src) { if (krollBridge == null) { Log.e(LCAT,"on evalJS, evaluator is null and shouldn't be"); } return krollBridge.evalJS(src); } {code} h6.References https://wiki.appcelerator.org/display/guides/Android+Module+Porting+Guide+for+1.8.0.1 3
75TIMOB-7246iOS - Window Proxy does not get release if animated with callbackh3. The Problem: A window that has some type of animation with a callback function leaks. h3. Test case Open instruments and look for proxies while opening and closing the window in the following code sample: h3. Code {code} function Window1(){ var self = {}; var win = Ti.UI.createWindow(); var btn = Ti.UI.createButton({ title:'open', left:20, right:20, height:44 }); btn.addEventListener('click', function(){ Window2().open(); }); win.add(btn); self.open = win.open; self.close = win.close; return self; } function Window2(){ var self = {}; var win = Ti.UI.createWindow({ backgroundColor:'green' }); // win.addEventListener('close', function(){ // win = null; // this will make the window go away from memory, but not the items within // }); win.addEventListener('open', function(){ win.animate({ left:10, duration:300 }, function(){ Ti.API.info('complete'); }); }); var btn = Ti.UI.createButton({title:'close', left:20,right:20,height:44}); btn.addEventListener('click', function(){ win.close(); }); win.add(btn); self.open = win.open; self.close = win.close; return self; } Window1().open(); {code}21
76TIMOB-7249Android: Intent - getData(), getAction(), and getType() do not workh2. Problem When deciding how an app should handle an incoming Android Intent, knowing the type, action, and data values that were sent with the Intent are critical. If your app only handles one very specific Intent, this is OK, but if you have an app that handles images, URIs, video,, etc... you need to know these values. Right now when an Intent is received via Intent Filter in Titanium, the following lists the values/errors you will get for the data, type, and action functions and properties of an Intent: * {{getData()}} always equals {{null}} * {{getType()}} and {{getAction()}} always throw this exception, despite the fact that logic and documentation dictates that these functions do not require arguments: {code}Uncaught Error: Requires property name as first argument{code} * The {{data}} property always returns {{null}} * The {{action}} and {{type}} properties always return {{undefined}} h2. Proposed Solution The above listed functions and properties need to return the appropriate values for {{data}}, {{type}}, and {{action}} so that developers will know what to do with the Android Intent that they are receiving. Like I said, if you are handling only one type of data as dictated by your Intent Filter, you are OK. But if you plan to handle images, video, etc... and you need to read them from Ti.Android.EXTRA_STREAM, you have no way of knowing which type of Intent you are receiving. Also, I believe the implementation of {{getAction()}} and {{getType()}} need to change so that they do not require a parameter. h2. Test Case {code:javascript} var win = Ti.UI.createWindow({ backgroundColor: '#fff', fullscreen: false, exitOnClose: true }); win.addEventListener('open', function(e) { var intent = Ti.Android.currentActivity.getIntent(); var iname = Ti.Android.EXTRA_STREAM; if (intent && intent.hasExtra(iname)) { Ti.API.info(intent.getAction()); Ti.API.info(intent.getData()); Ti.API.info(intent.getType()); } else { Ti.API.info('No extra named "' + iname + '" found in Intent'); } }); win.open(); {code} It will also be necessary to add an intent filter to a custom AndroidManifest.xml to get this test case to receive intents. The only below needs to go in the main activity and will receive all image share intents. You can easily trigger an image share intent by long clicking on an image in the android gallery then select 'share' from the intent list. Then just select your test case app from the list. {code:xml} <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="image/*" /> </intent-filter> {code}1
77TIMOB-7259Android: Gesture - orientation change fires on app start when initial orientation is landscapeh2. Problem If initial orientation of the emulator is landscape, two orientationchange events are fired when re-orienting to portrait. Thereafter, it works as expected. The same does not happen when initial orientation is portrait. h2. Test case * set emulator to landscape (CTRL+F11) * launch app with code below {code:lang=javascript|title=app.js} var win = Ti.UI.createWindow({ title: 'Rotate device to test', backgroundColor: 'white', orientationModes: [ Titanium.UI.PORTRAIT, Titanium.UI.UPSIDE_PORTRAIT, Titanium.UI.LANDSCAPE_LEFT, Titanium.UI.LANDSCAPE_RIGHT ], fullscreen: false, // same results regardless of whether its a heavyweight window exitOnClose: true }); Ti.Gesture.addEventListener('orientationchange',function(e){ Titanium.API.info("orientation changed = " + Ti.Gesture.orientation + ", is portrait? " + e.source.isPortrait() + ", is landscape? " + e.source.isLandscape()); }); win.open(); {code} h2. Logs {code:lang=none} 421 AndroidRuntime D >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<< 421 AndroidRuntime D CheckJNI is ON 422 TiApplication I (main) [0,0] checkpoint, app created. 421 AndroidRuntime D --- registering native functions --- 422 TiApplication I (main) [399,399] Titanium 2.0.0 (2012/03/01 14:01 0ccdf63) 422 TiFastDev D (main) [276,675] Enabling Fastdev on port 46158 422 TiFastDev D (main) [21,696] sent tokens successfully 422 TiFastDev D (main) [1,697] Fastdev session handshake succesful. 422 TiApplication I (main) [24,721] Titanium Javascript runtime: v8 422 TiRootActivity I (main) [0,0] checkpoint, on root activity create, savedInstanceState: Bundle[mParcelledData.dataSize=204] 61 ActivityManager I Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.appcelerator.testing10/.Testing10Activity } 421 AndroidRuntime D Shutting down VM 421 AndroidRuntime I NOTE: attach of thread 'Binder Thread #3' failed 422 TiApplication E (KrollRuntimeThread) [1126,1126] APP PROXY: ti.modules.titanium.app.AppModule@44fc8058 422 TiAssetHelper D Fetching "app.js" with Fastdev... 61 ActivityManager I Starting activity: Intent { cmp=com.appcelerator.testing10/org.appcelerator.titanium.TiActivity (has extras) } 422 TiRootActivity I (main) [0,0] checkpoint, on root activity resume. activity = com.appcelerator.testing10.Testing10Activity@44f60a88 422 TiUIView D (main) [440,440] Nativeview is null 422 TiUIView D (main) [44,484] Nativeview is null 61 InputManagerService W Got RemoteException sending setActive(false) notification to pid 401 uid 10040 61 NotificationService W Object died trying to hide notification android.app.ITransientNotification$Stub$Proxy@4509fef8 in package com.appcelerator.testing10 61 ActivityManager W setProcessForeground called on unknown pid: 401 61 ActivityManager I Displayed activity com.appcelerator.testing10/.Testing10Activity: 14070 ms (total 3531 ms) 61 ActivityManager I Displayed activity com.appcelerator.testing10/org.appcelerator.titanium.TiActivity: 701 ms (total 701 ms) 61 ActivityManager I Config changed: { scale=1.0 imsi=310/260 loc=en_US touch=3 keys=2/1/2 nav=3/1 orien=2 layout=34 uiMode=17 seq=27} 422 TiAPI I orientation changed = 2, is portrait? false, is landscape? true 61 WindowManager I Setting rotation to 0, animFlags=0 61 ActivityManager I Config changed: { scale=1.0 imsi=310/260 loc=en_US touch=3 keys=2/1/2 nav=3/1 orien=1 layout=34 uiMode=17 seq=28} 422 TiAPI I orientation changed = 1, is portrait? true, is landscape? false {code} 1
78TIMOB-7301Android: JSS with import and js with include files not workingh3. Actual behavior Working with an app.js with an include an app.jss with a require, and adding labels to the window, those are not getting the styles dictated by the jss files h3. Expected behavior Jss working as used to work on 1.7.6 with the same structure h3. Files {code:title=app.js|borderStyle=solid} var gt = {}; gt.ui={}; Ti.include('/incs/incs.js'); gt.ui.makeWin = function(){ var win1 = Titanium.UI.createWindow({ backgroundColor:'#fff', navBarHidden:true }); var label1 = gt.ui.makeLabel('label1'); var label2 = gt.ui.makeLabel('label2'); win1.add(label1); win1.add(label2); return win1; }; var win = gt.ui.makeWin(); win.open(); {code} {code:title=app.jss|borderStyle=solid} @import 'lay/style.jss'; #label2 { color:'#f0f'; text:'I am Window 2'; fontSize:40; textAlign:'center'; height:80; width:'auto'; } {code} {code:title=incs/incs.js|borderStyle=solid} Ti.API.info('Including the inc file'); gt.ui.makeLabel = function(id) { var label = Titanium.UI.createLabel({ id:id, className:'button' }); return label; }; {code} {code:title=lay/style.jss|borderStyle=solid} #label1 { color:'#f00'; top:0; text-align:'center'; text:'I am label 1'; height:40; width:'auto'; } .button { background-color:'#00f'; } {code}5
79TIMOB-7333Allow specification of arbitrary AVD in build/launch scriptsRelated to TISTUD-998, right now in Studio you can select (some of) the properties of an AVD (Run->Run Configurations->Titanium Android Emulator) but this isn't configurable enough for some cases (although you can modify an AVD created by Studio in the {{android}} tools, as long as it has the right name). It would be nice to have the feature to select a pre-existing AVD in the run configurations, so that you can use an existing AVD without having Studio create a new one for you. It appears to require build script modifications allowing for the specification of an arbitrary AVD.2
80TIMOB-7334iOS: EXC_BAD_ACCESS (SIGSEGV) crash while parsing xmlEXC_BAD_ACCESS (SIGSEGV) crash while parsing xml. Occurs 1 times out of 10. Steps to Reproduce: 1. Create new project. 2. Replace app.js with attached app.js. 3. Run app. 4. Press 'load' until app crashes. Expected Result: App should not crash. Actual Result: App crashes. Crash logs attached.1
81TIMOB-7664iOS: Allow for custom Info.plist values via tiapp.xmlIt would be great if we didn't have to create our own Info.plist file to override common values. We can already specify android manifest parameters in tiapp.xml. Examples: I need an app with a shorter name for the Home screen (Bundle Display Name) I would like to have a custom url scheme (URL Schemes array) I want to specify all my icon files for a universal app (Icon files) Since Info.plist is an XML file anyway, it seems like the same logic that went into the Android Manifest section of tiapp.xml could be applied here. This would be something *really great* to have in 1.9 to bring parity between iOS & Android.3
82TIMOB-7365Android: Ti.Media.AudioPlayer.getUrl not exposed as methodBoth getUrl, setUrl work on iOS, but only setUrl works on Android. I believe this is just a typo, note missing @Kroll.method annotation: @Kroll.getProperty public String getUrl() { return TiConvert.toString(getProperty(TiC.PROPERTY_URL)); } @Kroll.setProperty @Kroll.method public void setUrl(String url) { if (url != null) { setProperty(TiC.PROPERTY_URL, resolveUrl(null, TiConvert.toString(url))); } 1
83TIMOB-7391Android: Ti.Geolocation.locationServicesEnabled is always falseTi.Geolocation.locationServicesEnabled always return false even when the Use wireless networks and Use GPS satellites are checked. alert('Please enable location services') h4. Repro Steps Run the below code in the android device {code} var win = Ti.UI.createWindow({ backgroundColor:'white' }); if (Ti.Geolocation.locationServicesEnabled) { //Ti.Geolocation.purpose = 'Get your current location'; } else { alert('Please enable location services'); } win.open(); {\code} 1
84TIMOB-7393As a developer, I want to be able to pass arbitrary arguments to the Android emulatorThis is a blocker issue for TISTUD-623. "When a run/debug configuration is created, we need the ability to pass additional command-line arguments to the android emulator. Specifically, the -scale argument in order to use skins whose full scale causes them to be larger than the screen you are running on. For example, I am using the Motorola MD860 skin for the Atrix 4G whose screen is 960 pixels high. The resulting emulator window is some 1200 pixels high but my screen is only 900 pixels high. If you run the AVD from the AVD Manager, it offers the option to run with a particular screen size which uses the -scale argument. We need the capability to do this in Studio. I would recommend simply adding an extensible option to specify any additional command line arguments. The standard Eclipse launch configurator allows this on the configuration's Target tab but that appears to be disabled in Studio." I believe we are not allowed to pass arbitrary arguments to the emulator. I could not find a duplicate issue, but if one exists, please mark this as such.1
85TIMOB-7412Android: V8/Rhino: Animation: Setting animation on a lightweight window makes the window color go transparentSteps To Reproduce: 1. Run the attached code: {code} Ti.UI.setBackgroundColor('white'); var win = Ti.UI.createWindow({ backgroundColor: 'black' }); var fromColor = '#2d6e32'; var toColor = '#35883b'; var v = Ti.UI.createView({ width: '100dp', height: '100dp', backgroundColor: fromColor }); var b = Ti.UI.createButton({ title: 'Animate', bottom: '10dp', left: '10dp' }); b.addEventListener('click', function() { v.animate({ backgroundColor: toColor, duration: 500 }); }); var b1 = Ti.UI.createButton({ title: 'Reset', bottom: '10dp', right: '10dp' }); b1.addEventListener('click', function() { v.backgroundColor = toColor; v.backgroundColor = fromColor; }); var v1 = Ti.UI.createView({ width : '50dp', height: '50dp', backgroundColor: 'white' }); win.add(v); win.add(b); win.add(b1); win.add(v1); win.open(); {code} 2. Click Animate Actual Result: The window background color became transparent Expected Result: The window background color should stay black Note: Existed in 1.8.0.1 and works in 1.7.52
86TIMOB-7421Tooling: As a Ti documentation writer, I would like to have access to enhanced TDoc toolsEnhance TDoc2 tools to support the following functionality. - Enhance documentation generators - Support Code Snippets - Support Modules - Support Localization 3
87TIMOB-7424Android: Push Notification: Android 3.0+ is not getting notifications when the application has quitSteps To Reproduce: 1. Run the attached application 2. Launch the application 3. Enable Push 4. Go to UrbanAirship and send a push notification to the APID 5. Force Quit the application 6. Send again Actual: The push is not received Expected: Should receive the push Note: Works on Nexus s (2.3.6)2
88TIMOB-7458Tooling: api.jsca is generated with invalid xml tags resulting in content assist disparitiesUsing content assist, in the studio editor, Ti.Media.videoPlayer.repeatMode and other sdk properties have incomplete content assist property descriptions. The api.jsca file in the sdk has invalid tags for these properties in 1.8.0.1 and 1.8.1. Screenshot attached. The xml tags were correct and the properties were properly described in content assist using sdk 1.7.5. Screenshot attached. Steps to Reproduce: 1. Open studio. 2. Create a new project. 3. Select sdk 1.8.0.1 or 1.8.1. 4. In the app.js file, type: {code:title=app.js} var videoPlayer = Ti.Media.createVideoPlayer(); videoPlayer {code} 5. Open content assist. If it is not open by pressing cntrl + space. 6. Next to videoPlayer, type .repeatMode (e.g., videoPlayer.repeatMode) 7. Click on the content assist description for the property. Expected Result: Property description should be fully populated with descriptive elements (i.e., other properties). Part of the description should read: 'Defaults to Titanium.Media.VIDEO_REPEAT_MODE_NONE.' Actual Result: There are holes in the description. Part of the description reads: 'Defaults to .'1
89TIMOB-7467iOS: Map Annotation Memory Leakh4. PROBLEM DESCRIPTION User added and removed annotations from the map, it was releasing the TiMapAnnotationProxy but not the TiMapPinAnnotationView. It kept them "Living" and continued to add to their live bytes instead of moving the old ones into "Transitory". h4. ACTUAL BEHAVIOR TiMapPinAnnotationView is not being released. h4. EXPECTED BEHAVIOR TiMapPinAnnotationView should be released when not needed. h4. TEST CASE {code} var win = Ti.UI.createWindow({ title:'Map' }), map = Ti.Map.createView({ region:{ latitude:36, latitudeDelta:5, longitude:-93, longitudeDelta:5 }, toggled:false, userLocation:false }), toggleAnnos = function(e){ var lat = 31, lng = (e.source.toggled ? -98 : -89), annos = []; for(i=0;i<10;i++){ annos.push({latitude:lat,longitude:lng}); lat++; if(e.source.toggled){ lng++; }else{ lng--; } } e.source.removeAllAnnotations(); e.source.addAnnotations(annos); e.source.toggled = !e.source.toggled; }; win.add(map); win.open(); map.addEventListener('regionChanged',toggleAnnos); {code} h4. COMMUNITY DISCUSSION http://developer.appcelerator.com/question/131291/map-annotation-memory-leak 8
90TIMOB-7486iOS - on modal window orientation misplaces childrenh3. The Problem: When the window changes orientation, if it's modal, it's children end up behind the nav bar. h3. Code Sample: {code} var win = Ti.UI.createWindow({ orientationModes:[ Titanium.UI.PORTRAIT, Titanium.UI.UPSIDE_PORTRAIT, Titanium.UI.LANDSCAPE_LEFT, Titanium.UI.LANDSCAPE_RIGHT ] }); var view = Ti.UI.createView({ backgroundColor:'white' }); var label = Ti.UI.createLabel({ top:0, height:10, text:'lalalalala' }); view.add(label); win.add(view); win.open({modal:true}); {code} h3. To Reproduce: Run the code above in app.js and rotate the device/simulator h3. Behavior: - What happens: View with the label with text "lalalala" ends up under the navbar and invisible to the user - What has to happen: View containing the label has to resize accordingly1
91TIMOB-7536when using titanium "create" from command line to create a new ios module it fails to correctly configure titanium.xcconfig file for OSX lionwhen using titanium "create" from command line to create a new ios module it fails to correctly configure titanium.xcconfig The TITANIUM_SDK is incorrect for OSX lion it should have a ~ in front of the path.1
92TIMOB-7559iOS: CommonJS require: undeclared variable referenced from module fails to generate errorUndeclared variables referenced from a module fail to generate an error. Android does generate the error. Screenshot attached. The undeclared variable can then be used in further logic, such as adding it to a window. Screenshot attached. If an undeclared variable is used in the module itself, there is an error. If an undeclared variable is returned from an exports function-call, there is an error. If an undeclared variable is defined as a return value in an exports function, but the function is never called, there is no error. If an undeclared variable is returned from an exports function-call and assigned to a new variable outside the module, there is no error, and the variable can continue to be used. Steps to Reproduce: 1. Run Code (also attached): {code:title=app.js} var undeclaredVar = require('Module').getUndeclaredVar(); Ti.UI.createWindow().add(undeclaredVar); {code} {code:title=Module.js} exports.getUndeclaredVar = function() { return undeclaredVar; }; {code} Expected Result: Runtime error indicating undeclared variable. Actual Result: No runtime error.2
93TIMOB-8472Android: setting backgroundImage of TableViewRow to null or empty string crashes apph6.Problem Setting the backgroundImage property of a TableViewRow to null crashes the app with a NullPointerException/force close. Setting backgroundImage to an empty string locks up the app (which will eventually crash if you keep clicking or try to back out). h6.Rationale This is a problem because we have the need to apply a background image to a row, and then at some point later remove that background image completely. h6.Tested on Droid Razr 2.3.5 Android 2.2 emulator h6.Runtime engines V8/Rhino h6.Reproduction steps 1. Drop the following app.js code into a new project - initially, the row has no background image (property no specified) 2. click the row once...a background image appears (and the caption changes) 3. click the row again...a Force Close messaage appears on the screen, and a NullPointerException appears in the console if you repeat the test with the "1st test" line commented out and the "2nd test" line uncommented, the app will freeze (nothing new appears in the console window) and then crash if you click the row again or try to "back" out. h6.Repro sequence {code} var win1 = Ti.UI.createWindow({ backgroundColor:'black' }); var TheListBox=Ti.UI.createTableView({width:'auto'}); var BIRow=Ti.UI.createTableViewRow({color:'white', title:'No background image...click to toggle'}); TheListBox.appendRow(BIRow); win1.open(); win1.add(TheListBox); BIRow.addEventListener('click',ToggleBI); function ToggleBI() { if (!BIRow.backgroundImage) { BIRow.backgroundImage='appicon.png'; BIRow.title='Titanium background image...click to toggle'; } else { BIRow.backgroundImage=null; // 1st test...NullPointerException //BIRow.backgroundImage=''; // 2nd test...lockup/freeze...crash on next click BIRow.title='No background image...click to toggle'; } } {code} h6.Console output {noformat} cation: (main) [34,34] Titanium 1.8.1 (2012/01/27 17:31 a24502a) 03-31 22:59:19.411 5847 5847 I TiApplication: (main) [52,86] Titanium Javascript runtime: v8 03-31 22:59:19.411 5847 5855 D dalvikvm: Trying to load lib /data/data/com.appcelerator.test/lib/libstlport_shared.so 0x4051cf58 03-31 22:59:19.411 5847 5855 D dalvikvm: Added shared lib /data/data/com.appcelerator.test/lib/libstlport_shared.so 0x4051cf58 03-31 22:59:19.411 5847 5855 D dalvikvm: No JNI_OnLoad found in /data/data/com.appcelerator.test/lib/libstlport_shared.so 0x4051cf58, skipping init 03-31 22:59:19.411 5847 5855 D dalvikvm: Trying to load lib /data/data/com.appcelerator.test/lib/libkroll-v8.so 0x4051cf58 03-31 22:59:19.419 5847 5855 D dalvikvm: Added shared lib /data/data/com.appcelerator.test/lib/libkroll-v8.so 0x4051cf58 03-31 22:59:19.442 5847 5847 W TiApplication: (main) [38,124] activity stack is emtpy, unable to get current activity 03-31 22:59:19.442 5847 5847 I TiRootActivity: (main) [0,0] checkpoint, on root activity create, savedInstanceState: null 03-31 22:59:19.513 5847 5847 W TiApplication: (main) [70,70] activity stack is emtpy, unable to get current activity 03-31 22:59:19.513 5847 5847 W TiApplication: (main) [1,71] activity stack is emtpy, unable to get current activity 03-31 22:59:19.513 5847 5847 W TiApplication: (main) [0,71] activity stack is emtpy, unable to get current activity 03-31 22:59:19.716 5847 5855 E TiApplication: (KrollRuntimeThread) [201,272] APP PROXY: ti.modules.titanium.app.AppModule@405ac7e0 03-31 22:59:19.864 5847 5847 D dalvikvm: GC_EXTERNAL_ALLOC freed 490K, 45% free 3304K/5959K, external 2741K/2773K, paused 36ms 03-31 22:59:19.911 5847 5847 I TiRootActivity: (main) [0,0] checkpoint, on root activity resume. activity = com.appcelerator.test._1bestpracticesActivity@40594d48 03-31 22:59:19.942 509 722 W InputManagerService: Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@4092bfd8 (uid=10035 pid=890) 03-31 22:59:19.950 509 801 I gralloc : Allocated 0x660072 size 6488161 03-31 22:59:19.997 509 604 I ActivityManager: Displayed com.appcelerator.test/._1bestpracticesActivity: +743ms 03-31 22:59:21.122 509 509 I gralloc : Allocated 0x660072 size 6488161 03-31 22:59:23.349 509 603 I AlarmManager: sending alarm Alarm{4067a338 type 0 com.android.vending} 03-31 22:59:23.771 1836 1838 D dalvikvm: GC_CONCURRENT freed 149K, 45% free 4022K/7239K, external 2357K/2773K, paused 1ms+1ms 03-31 22:59:23.825 1836 1836 D Finsky : [1] 5.onFinished: Installation state replication succeeded. 03-31 22:59:24.458 509 603 I AlarmManager: sending alarm Alarm{40bd1650 type 0 com.google.android.gsf} 03-31 22:59:24.481 897 4041 I EventLogService: Aggregate from 1333254564412 (log), 1333254564412 (data) 03-31 22:59:25.872 509 600 D BatteryTempPolicy: updateBatteryTemp temperature = 310, Threshhold = 3 03-31 22:59:25.880 258 495 E NetlinkListener: ignoring non-kernel netlink multicast message 03-31 22:59:25.880 256 283 E NetlinkListener: ignoring non-kernel netlink multicast message 03-31 22:59:25.880 254 291 E NetlinkListener: ignoring non-kernel netlink multicast message 03-31 22:59:25.880 258 584 E NetlinkListener: ignoring non-kernel netlink multicast message 03-31 22:59:25.911 664 664 D StatusBarPolicy: handleBatteryUpdate 03-31 22:59:30.997 890 890 D dalvikvm: GC_EXPLICIT freed 527K, 49% free 4499K/8775K, external 8803K/10851K, paused 76ms 03-31 22:59:36.005 2207 2207 D dalvikvm: GC_EXPLICIT freed 15K, 38% free 4178K/6663K, external 2357K/2773K, paused 75ms 03-31 22:59:40.989 2281 2281 D dalvikvm: GC_EXPLICIT freed 8K, 44% free 3173K/5575K, external 2357K/2773K, paused 57ms 03-31 22:59:46.005 2082 2082 D dalvikvm: GC_EXPLICIT freed 299K, 42% free 3443K/5895K, external 2357K/2773K, paused 72ms 03-31 22:59:49.552 5847 5886 W TiAnalyticsSvc: (Thread-13) [29641,29641] Analytics Service Started 03-31 22:59:49.575 5847 5886 I TiAnalyticsSvc: (Thread-13) [26,29667] Network unavailable, can't send analytics 03-31 22:59:49.575 5847 5886 W TiAnalyticsSvc: (Thread-13) [0,29667] Stopping Analytics Service 03-31 22:59:54.606 4351 4351 D dalvikvm: GC_EXPLICIT freed 11K, 42% free 3131K/5379K, external 2357K/2773K, paused 58ms 03-31 22:59:59.630 2191 2191 D dalvikvm: GC_EXPLICIT freed 163K, 47% free 4043K/7559K, external 2357K/2773K, paused 78ms 03-31 22:59:59.997 509 603 I AlarmManager: sending alarm Alarm{40d99778 type 1 android} 03-31 23:00:05.075 2216 2216 D dalvikvm: GC_EXPLICIT freed 17K, 44% free 3042K/5379K, external 2357K/2773K, paused 24ms 03-31 23:00:10.099 2226 2226 D dalvikvm: GC_EXPLICIT freed 6K, 44% free 3022K/5379K, external 2357K/2773K, paused 42ms 03-31 23:00:10.552 5847 5855 W TypeConverter: jsValueToJavaObject returning null 03-31 23:00:10.552 5847 5847 D AndroidRuntime: Shutting down VM 03-31 23:00:10.552 5847 5847 W dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x4001e560) 03-31 23:00:10.560 5847 5847 E TiApplication: (main) [20975,50642] Sending event: exception on thread: main msg:java.lang.NullPointerException; Titanium 1.8.1,2012/01/27 17:31,a24502a 03-31 23:00:10.560 5847 5847 E TiApplication: java.lang.NullPointerException 03-31 23:00:10.560 5847 5847 E TiApplication: ti.modules.titanium.ui.widget.tableview.TiBaseTableViewItem.setBackgroundFromProxy(TiBaseTableViewItem.java:182) 03-31 23:00:10.560 5847 5847 E TiApplication: ti.modules.titanium.ui.widget.tableview.TiTableViewRowProxyItem.setRowData(TiTableViewRowProxyItem.java:213) 03-31 23:00:10.560 5847 5847 E TiApplication: ti.modules.titanium.ui.widget.tableview.TiTableViewRowProxyItem.setRowData(TiTableViewRowProxyItem.java:84) 03-31 23:00:10.560 5847 5847 E TiApplication: ti.modules.titanium.ui.widget.tableview.TiTableView$TTVListAdapter.getView(TiTableView.java:210) 03-31 23:00:10.560 5847 5847 E TiApplication: android.widget.AbsListView.obtainView(AbsListView.java:1435) 03-31 23:00:10.560 5847 5847 E TiApplication: android.widget.ListView.makeAndAddView(ListView.java:1824) 03-31 23:00:10.560 5847 5847 E TiApplication: android.widget.ListView.fillSpecific(ListView.java:1365) 03-31 23:00:10.560 5847 5847 E TiApplication: android.widget.ListView.layoutChildren(ListView.java:1651) 03-31 23:00:10.560 5847 5847 E TiApplication: android.widget.AbsListView.onLayout(AbsListView.java:1286) 03-31 23:00:10.560 5847 5847 E TiApplication: android.view.View.layout(View.java:7184) 03-31 23:00:10.560 5847 5847 E TiApplication: android.widget.FrameLayout.onLayout(FrameLayout.java:338) 03-31 23:00:10.560 5847 5847 E TiApplication: android.view.View.layout(View.java:7184) 03-31 23:00:10.560 5847 5847 E TiApplication: org.appcelerator.titanium.view.TiCompositeLayout.onLayout(TiCompositeLayout.java:382) 03-31 23:00:10.560 5847 5847 E TiApplication: android.view.View.layout(View.java:7184) 03-31 23:00:10.560 5847 5847 E TiApplication: org.appcelerator.titanium.view.TiCompositeLayout.onLayout(TiCompositeLayout.java:382) 03-31 23:00:10.560 5847 5847 E TiApplication: android.view.View.layout(View.java:7184) 03-31 23:00:10.560 5847 5847 E TiApplication: android.widget.FrameLayout.onLayout(FrameLayout.java:338) 03-31 23:00:10.560 5847 5847 E TiApplication: android.view.View.layout(View.java:7184) 03-31 23:00:10.560 5847 5847 E TiApplication: android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254) 03-31 23:00:10.560 5847 5847 E TiApplication: android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130) 03-31 23:00:10.560 5847 5847 E TiApplication: android.widget.LinearLayout.onLayout(LinearLayout.java:1047) 03-31 23:00:10.560 5847 5847 E TiApplication: android.view.View.layout(View.java:7184) 03-31 23:00:10.560 5847 5847 E TiApplication: android.widget.FrameLayout.onLayout(FrameLayout.java:338) 03-31 23:00:10.560 5847 5847 E TiApplication: android.view.View.layout(View.java:7184) 03-31 23:00:10.560 5847 5847 E TiApplication: android.view.ViewRoot.performTraversals(ViewRoot.java:1180) 03-31 23:00:10.560 5847 5847 E TiApplication: android.view.ViewRoot.handleMessage(ViewRoot.java:1914) 03-31 23:00:10.560 5847 5847 E TiApplication: android.os.Handler.dispatchMessage(Handler.java:99) 03-31 23:00:10.560 5847 5847 E TiApplication: android.os.Looper.loop(Looper.java:130) 03-31 23:00:10.560 5847 5847 E TiApplication: android.app.ActivityThread.main(ActivityThread.java:3859) 03-31 23:00:10.560 5847 5847 E TiApplication: java.lang.reflect.Method.invokeNative(Native Method) 03-31 23:00:10.560 5847 5847 E TiApplication: java.lang.reflect.Method.invoke(Method.java:507) 03-31 23:00:10.560 5847 5847 E TiApplication: com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:840) 03-31 23:00:10.560 5847 5847 E TiApplication: com.android.internal.os.ZygoteInit.main(ZygoteInit.java:598) 03-31 23:00:10.560 5847 5847 E TiApplication: dalvik.system.NativeStart.main(Native Method) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: FATAL EXCEPTION: main 03-31 23:00:10.591 5847 5847 E AndroidRuntime: java.lang.NullPointerException 03-31 23:00:10.591 5847 5847 E AndroidRuntime: ti.modules.titanium.ui.widget.tableview.TiBaseTableViewItem.setBackgroundFromProxy(TiBaseTableViewItem.java:182) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: ti.modules.titanium.ui.widget.tableview.TiTableViewRowProxyItem.setRowData(TiTableViewRowProxyItem.java:213) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: ti.modules.titanium.ui.widget.tableview.TiTableViewRowProxyItem.setRowData(TiTableViewRowProxyItem.java:84) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: ti.modules.titanium.ui.widget.tableview.TiTableView$TTVListAdapter.getView(TiTableView.java:210) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: android.widget.AbsListView.obtainView(AbsListView.java:1435) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: android.widget.ListView.makeAndAddView(ListView.java:1824) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: android.widget.ListView.fillSpecific(ListView.java:1365) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: android.widget.ListView.layoutChildren(ListView.java:1651) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: android.widget.AbsListView.onLayout(AbsListView.java:1286) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: android.view.View.layout(View.java:7184) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: android.widget.FrameLayout.onLayout(FrameLayout.java:338) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: android.view.View.layout(View.java:7184) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: org.appcelerator.titanium.view.TiCompositeLayout.onLayout(TiCompositeLayout.java:382) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: android.view.View.layout(View.java:7184) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: org.appcelerator.titanium.view.TiCompositeLayout.onLayout(TiCompositeLayout.java:382) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: android.view.View.layout(View.java:7184) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: android.widget.FrameLayout.onLayout(FrameLayout.java:338) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: android.view.View.layout(View.java:7184) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: android.widget.LinearLayout.onLayout(LinearLayout.java:1047) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: android.view.View.layout(View.java:7184) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: android.widget.FrameLayout.onLayout(FrameLayout.java:338) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: android.view.View.layout(View.java:7184) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: android.view.ViewRoot.performTraversals(ViewRoot.java:1180) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: android.view.ViewRoot.handleMessage(ViewRoot.java:1914) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: android.os.Handler.dispatchMessage(Handler.java:99) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: android.os.Looper.loop(Looper.java:130) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: android.app.ActivityThread.main(ActivityThread.java:3859) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: java.lang.reflect.Method.invokeNative(Native Method) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: java.lang.reflect.Method.invoke(Method.java:507) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:840) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: com.android.internal.os.ZygoteInit.main(ZygoteInit.java:598) 03-31 23:00:10.591 5847 5847 E AndroidRuntime: dalvik.system.NativeStart.main(Native Method) 03-31 23:00:10.599 509 783 W ActivityManager: Force finishing activity com.appcelerator.test/._1bestpracticesActivity 03-31 23:00:10.708 509 526 D dalvikvm: GC_EXTERNAL_ALLOC freed 1343K, 36% free 9055K/14023K, external 10065K/10188K, paused 85ms 03-31 23:00:10.724 509 526 W ApplicationContext: Unable to create files directory 03-31 23:00:10.747 509 526 I gralloc : Allocated 0x61663d64 size 2103800684 03-31 23:00:11.099 509 524 W ActivityManager: Activity pause timeout for HistoryRecord{40a2c3d8 com.appcelerator.test/._1bestpracticesActivity} 03-31 23:00:11.099 509 524 I ActivityManager: No longer want amep.games.af_final:remote (pid 4351): hidden #21 03-31 23:00:11.122 890 890 D ActivitityRenderTarget: onResume 03-31 23:00:11.177 890 5830 W IMGSRV : eglglue.c:778: InitContext: ignoring buffer type CBUF_TYPE_PDS_VERT_SECONDARY_PREGEN_BUFFER 03-31 23:00:11.192 509 515 I gralloc : Allocated 0x660072 size 6488161 03-31 23:00:11.294 509 873 I gralloc : Allocated 0x660072 size 6488161 03-31 23:00:11.349 509 722 I gralloc : Allocated 0x660072 size 6488161 03-31 23:00:11.356 509 820 W ActivityManager: Scheduling restart of crashed service amep.games.af_final/com.appenda.AppNotify in 5000ms 03-31 23:00:11.599 509 524 I ActivityManager: No longer want com.motorola.im.service (pid 4333): hidden #21 03-31 23:00:11.622 509 827 W ActivityManager: Scheduling restart of crashed service com.motorola.im/.service.RemoteImService in 14734ms 03-31 23:00:11.731 509 526 I gralloc : Allocated 0x61663d64 size 2103800684 {noformat} h6.API docs http://developer.appcelerator.com/apidoc/mobile/latest/Titanium.UI.TableViewRow.backgroundImage-property.html 1
94TIMOB-7584Android: opening a new window, background color is briefly displayed before objects are added to the screenh2. Problem When opening a new window, the background color of the new window is displayed for a brief moment and then objects are drawn and added to the screen. This is happening from 1.8.0.1 - it's not reproducible on 1.7.5. Opening the new window on 1.8.0.1 with V8 is still overall faster than on 1.7.5 (around 4-5 times faster, something around 120ms against 500ms). h2. Steps to reproduce The behavior is noticeable especially on the emulator (since is less reactive). {code:lang=javascript|title=app.js} var win = Ti.UI.createWindow({ navBarHidden : true, backgroundColor : 'green', }); function createNewWin() { var win2 = Ti.UI.createWindow({ navBarHidden : true, backgroundColor : 'black', }); for( i = 0; i < 20; i++) { var view = Ti.UI.createView({ backgroundColor : 'blue', }); win2.add(view); } return win2; } var button = Ti.UI.createButton({ title : 'Open New Win', width : 150, height : 60, top : 20 }); win.add(button); button.addEventListener('click', function() { var win3 = createNewWin(); win3.open(); }); win.open(); {code} h2. Link Ticket related: http://support-admin.appcelerator.com/display/APP-1753143
95TIMOB-7586iOS: image saved to filesystem using toImage() loses it's transparencyh2. Problem Saving an image to the filesystem using toImage() method, does not keep the transparent property of the image h2. Steps to reproduce See attached code {code:lang=javascript|title=app.js} var window = Ti.UI.createWindow({ backgroundColor:'#ff0' }); var view = Ti.UI.createImageView({ image:'KS_nav_ui.png', // var view = Ti.UI.createView({ backgroundColor:'transparent', borderWidth:2, borderColor:'#f00', width:100, height:100, top:10 }); window.add(view); var image = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, 'tst.png'); image.write(view.toImage()); var img = Ti.UI.createImageView({ width:200, height:200, bottom:10, image:image.nativePath }); window.add(img); window.open(); {code} h2. Link Ticket : http://support-admin.appcelerator.com/display/APP-7859151
96TIMOB-8346iOS: "open" event fires multiple times at startup, plus whenever focused when using NavigationGrouph2.Problem The "open" event of a window fires 3 times when first opened, then whenever the window re-receives focus (when navigating back to it using a NavigationGroup), the "open" event fires again. h2.Expected Result The "open" event should only fire once...when it is first opened, period. And it should not fire when the window re-receives focus. h2.Steps to Reproduce # drop the following app.js code into a new project # build with SDK 1.8.1 # run in the iPhone simulator. You will see: {code} [INFO] One moment, building ... [INFO] Titanium SDK version: 1.8.1 (01/27/12 17:31 a24502a) [INFO] iPhone Device family: iphone [INFO] iPhone SDK version: 5.0 [INFO] iPhone simulated device: iphone [INFO] Launching application in Simulator [INFO] Launched application in Simulator (3.78 seconds) [INFO] Found 5.0 patch installed [INFO] Application started [INFO] NavGroupFocusTest/1.0 (1.8.1.a24502a) [INFO] rootWin OPEN fired [INFO] rootWin OPEN fired [INFO] rootWin OPEN fired {code} # Say to yourself: "Why did OPEN fire 3 times?!?!?!?!?!" # click the "open new window" button and watch the console log. You will see: {code} [INFO] 2nd wind {code} # click the "back" button and watch the console log. You will see: {code} [INFO] rootWin FOCUSED [INFO] rootWin OPEN fired {code} # Say to yourself: "Why did OPEN fire again?!?!?!?!?!" Repeat steps 5, 6, and 7 and continue to get the same result until you're bored with this game. h2.Testcase {code:title=app.js} var rootWin = Ti.UI.createWindow(); rootWin.addEventListener('focus', function() { Ti.API.info("rootWin FOCUSED"); }); rootWin.addEventListener('open', function() { Ti.API.info("rootWin OPEN fired"); }); var btnOpenWin = Ti.UI.createButton({ title : "open new window", width : 200, height : 35 }); btnOpenWin.addEventListener('click', function() { var win2 = Ti.UI.createWindow(); ng.open(win2, {animated:true}); Ti.API.info("2nd wind"); }); rootWin.add(btnOpenWin); ng = Ti.UI.iPhone.createNavigationGroup({window:rootWin}); var NavBase = Ti.UI.createWindow(); NavBase.add(ng); NavBase.open(); // this opens the "root" window, automatically {code} In a larger project, sometimes when you go "back" to the main window, no events fire at all (no focus, no open). I would expect the focus event to fire each time. Just something to keep in mind while you're looking into the code, as I haven't been successful in reproducing this in a small testcase. 1
97TIMOB-7607iOS: Status Bar disappears when video is closed in landscape/portrait modeh5. Expected When the video is closed in landscape/portrait mode, Status bar should be visible. h5. Actual Currently its not visible. Below is attached the sample app.js, and screen shots to explain the issue. h5. Test Code {code} var win = Ti.UI.createWindow({ backgroundColor:'#fff', top: 0, left: 0, width: '100%', height: '100%', zIndex: 10, }); var bTSOStream = Ti.UI.createButton({ width: 150, height: 30, color: 'blue', title: 'Live-Stream', font: {fontSize:14,fontFamily:'Helvetica Neue'}, left: 0, top: 0, }); bTSOStream.addEventListener('click', function(e){ var wStream = Ti.UI.createWindow({ fullscreen: true, orientationModes: [Titanium.UI.PORTRAIT, Titanium.UI.LANDSCAPE_RIGHT, Titanium.UI.LANDSCAPE_LEFT], backgroundColor: '#000', }); wStream.open(); var vpStream = Ti.Media.createVideoPlayer({ contentURL: 'http://movies.apple.com/media/us/ipad/2010/tours/apple-ipad-video-us-20100127_r848-9cie.mov', backgroundColor: '#111', movieControlMode: Titanium.Media.VIDEO_CONTROL_DEFAULT, //scalingMode: Titanium.Media.VIDEO_SCALING_MODE_FILL , scalingMode: Titanium.Media.VIDEO_SCALING_ASPECT_FIT, fullscreen: true, }); var ignoreFullscreenEvent = false; vpStream.addEventListener('naturalSizeAvailable', function(e){ ignoreFullscreenEvent = true; }); vpStream.addEventListener('fullscreen', function(e){ if(!ignoreFullscreenEvent){ wStream.close(); } ignoreFullscreenEvent = false; }); wStream.add(vpStream); }); win.add(bTSOStream); win.open(); {code}1
98TIMOB-8100iOS: barImage hides nav buttons after window transitionIn window with a navbar that has a barImage and nav buttons (such as a rightNavButton), if we go to a child window and then back the nav buttons will be hidden by the barImage (but are still there and react to the touch). STEPS TO REPRODUCE: * Put the app.js (code below and attached) and navbar.png (attached) in the Resources directory * Run the code in the iOS simulator * Click on the "Open Window 2" button * Click on the back button to return to window 1 The right nav button will now be hidden (although you can still click it) app.js example code follows. {code} var win1 = Ti.UI.createWindow({ title : 'Window 1', barImage : 'navbar.png' }); var navButton = Ti.UI.createButton({ title : 'rightNavButton' }); navButton.addEventListener('click', function(e) { Ti.UI.createAlertDialog({ message : 'nav button clicked' }).show(); }); win1.rightNavButton = navButton; win1.titleControl = Ti.UI.createLabel({text : 'Title Control'}); var button = Ti.UI.createButton({ width : 200, height : 50, title : 'Open Window 2' }); button.addEventListener('click', function(e) { tabGroup.activeTab.open(win2); }); win1.add(button); var win2 = Ti.UI.createWindow({ title : 'Window 2' }); var tab1 = Ti.UI.createTab({ title : 'Tab 1', window : win1 }); var tabGroup = Ti.UI.createTabGroup(); tabGroup.addTab(tab1); tabGroup.open(); {code} Possibly related to: http://developer.appcelerator.com/question/131672/rightnavbutton-and-leftnavbutton-not-displaying-in-181 2
99TIMOB-8326Android: Regression: TableView no longer responds to touch events (touchstart, touchmove, touchend, touchcancel)h2.Problem TableView does not respond to touch events (touchstart, touchmove, touchend, touchcancel). This is a regression, as this worked fine in 1.7.5 and the 1.8.0.v... continuous build from September. This also works fine in iOS. Only Android is affected. h2.Test Case # drop the following app.js code into a new project # build with SDK 1.8.1 # run on the Android 2.2 emulator # press and hold any row. *No touchstart event occurs.* # while still holding the row, move the mouse around a little. *No touchmove event occurs.* # let go of the row. *No touchend event occurs.* {code:title=app.js} var win1=Ti.UI.createWindow({ backgroundColor:'#fff', exitOnClose:true, layout:'vertical', navBarHidden:false, backgroundColor:'black' }); var TopLabel=Ti.UI.createLabel({text:'Last row will only be half visible when scrolled', color:'black', left:0, right:0, height:25, backgroundColor:'yellow'}); win1.add(TopLabel); var MyListbox=Ti.UI.createTableView({backgroundColor:'black'}); for (var i=1; (i <= 10); i++) MyListbox.appendRow(Ti.UI.createTableViewRow({title:'Row '+i})); Ti.API.info('adding EventListener for touchstart'); MyListbox.addEventListener('touchstart',TchStart); function TchStart(evt) { Ti.API.info('TchStart'); } Ti.API.info('adding EventListener for touchmove'); MyListbox.addEventListener('touchmove',TchMove); function TchMove(evt) { Ti.API.info('TchMove'); } Ti.API.info('adding EventListener for touchend'); MyListbox.addEventListener('touchend',TchEnd); function TchEnd(evt) { Ti.API.info('TchEnd'); } Ti.API.info('adding EventListener for touchcancel'); MyListbox.addEventListener('touchcancel',TchCancel); function TchCancel(evt) { Ti.API.info('TchCancel'); } Ti.API.info('adding EventListener for click'); MyListbox.addEventListener('click',LBClick); function LBClick(evt) { Ti.API.info('LBClick'); } win1.add(MyListbox); win1.open(); {code} 3
100TIMOB-7624Android: Ti.API - enable logging methods to accept either an array of strings or a stringh2. Problem To bring parity with iOS to the [Titanium.API|http://developer.appcelerator.com/apidoc/mobile/latest/Titanium.API-module] logging methods, enable them to accept arrays of strings in addition to the existing string arguments.1
101TIMOB-7627iOS: UI - Email/SMS Dialog does not change orientation properlyh3.Issue When you create a window and set win.orientationModes = [Titanium.UI.PORTRAIT]; or set it in Tiapp.xml. Then create an emailDialog or SMSDialog and open that window. If you proceed to rotate the device into LANDSCAPE the window itself rotates into LANDSCAPE but the statusbar and keyboard remain in PORTRAIT. h6.Expected behavior The keyboard and statusBar rotate accordingly. Used to work in 1.7.x - as seen in the screenshots. h6.Tested on iPhone 4 iOS simulator 5 TiSDK 1.7 > OK TiSDK 1.8 > Fail TiSDK 1.9 > Fail h6.Steps to reproduce 1) Run code below 2) Click "Email" button 3) Select a field from Email dialog - the keyboard shows up. 4) Rotate device 5) Misbehavior appears suddenly. h6.Repro sequence {code:title=app.js} // this sets the background color of the master UIView (when there are no windows/tab groups on it) Titanium.UI.setBackgroundColor('#000'); // create tab group var tabGroup = Titanium.UI.createTabGroup(); // // create base UI tab and root window // var win1 = Titanium.UI.createWindow({ title:'Tab 1', backgroundColor:'#fff' }); var tab1 = Titanium.UI.createTab({ icon:'KS_nav_views.png', title:'Tab 1', window:win1 }); var label1 = Titanium.UI.createLabel({ color:'#999', text:'I am Window 1', font:{fontSize:20,fontFamily:'Helvetica Neue'}, textAlign:'center', width:'auto' }); var button = Ti.UI.createButton({ title:'Email', height:40 }); button.addEventListener('click', function(){ var emailDialog = Ti.UI.createEmailDialog(); emailDialog.open(); }); win1.add(label1); win1.add(button); // // create controls tab and root window // var win2 = Titanium.UI.createWindow({ title:'Tab 2', backgroundColor:'#fff' }); var tab2 = Titanium.UI.createTab({ icon:'KS_nav_ui.png', title:'Tab 2', window:win2 }); var label2 = Titanium.UI.createLabel({ color:'#999', text:'I am Window 2', font:{fontSize:20,fontFamily:'Helvetica Neue'}, textAlign:'center', width:'auto' }); win2.add(label2); // // add tabs // tabGroup.addTab(tab1); tabGroup.addTab(tab2); // open tab group tabGroup.open(); {code} h6.Additional info If the window is locked doesn't seems to work either. Locked the orientation on iOS: {code:title=Tiapp.xml} <iphone> <orientations device="iphone"> <orientation>Ti.UI.PORTRAIT</orientation> </orientations> <orientations device="ipad"> <orientation>Ti.UI.PORTRAIT</orientation> <orientation>Ti.UI.UPSIDE_PORTRAIT</orientation> <orientation>Ti.UI.LANDSCAPE_LEFT</orientation> <orientation>Ti.UI.LANDSCAPE_RIGHT</orientation> </orientations> </iphone> {code}1
102TIMOB-7642iOS: Memory Leak when local html file is used in a WebViewMemory is not being released when a webview, with a local HTML file, is added to a window and then removed from it. But this does not happen when a remote URL is used. Below is the sample code and the local HTML file has been attached. *Sample Code* {noformat} var win = Ti.UI.createWindow({ backgroundColor : 'white' }); var webview = null; var btnAdd = Ti.UI.createButton({ title : 'Add', top : 0, left : 0, height : 50, width : 100 }); btnAdd.addEventListener('click', function() { webview = Ti.UI.createWebView({ url : 'local_webview.html', // url : 'http://www.google.com', height : 200, bottom : 10 }); win.add(webview); }); var btnRemove = Ti.UI.createButton({ title : 'Remove', top : 0, right : 0, height : 50, width : 100 }); btnRemove.addEventListener('click', function() { win.remove(webview); webview = null; }); win.add(btnAdd); win.add(btnRemove); win.open(); {noformat} *STEPS TO REPRODUCE* - Drop the above sample code into app.js and copy the attached 'local_webview.html' to Resources folder. - Start the application and open Instruments to profile it. - Click the 'Add' button and then the 'Remove' button. - Search for 'proxy' in instruments and it can be seen that webview proxies are not released even if memory warnings are simulated. *EXPECTED BEHAVIOR* Proxies related to webview should be released. *OBSERVED BEHAVIOR* Memory is not being freed. *OTHER OBSERVATIONS* Memory is being freed when a remote URL (uncomment the line with google.com and comment out the line with local_webview.html) is used.2
103TIMOB-7643Android: Implement the UI Composite Layout Behavior SpecSpec: https://wiki.appcelerator.org/display/spe/UI+Composite+Layout+Behavior+Spec Detailed QE Test Case: https://wiki.appcelerator.org/display/tp/UI+Composite+Layout+Behavior+Test+Case5
104TIMOB-7644iOS: Memory is not being released when a tab is removed from tabGroupMemory is not being released when a tab is removed from a tabGroup on iOS using 'removeTab'. *Sample Code* {noformat} // create tab group var tabGroup = Titanium.UI.createTabGroup(); // create base UI tab and root window var win1 = Titanium.UI.createWindow({ title:'Tab 1', backgroundColor:'#fff' }); var tab1 = Titanium.UI.createTab({ icon:'KS_nav_views.png', title:'Tab 1', window:win1 }); var label1 = Titanium.UI.createLabel({ color:'#999', text:'Remove Tab1', font:{fontSize:20,fontFamily:'Helvetica Neue'}, textAlign:'center', width:'auto' }); label1.addEventListener('click', function() { tabGroup.removeTab(tab1); label1 = win1 = tab1 = null; }); win1.add(label1); // create controls tab and root window var win2 = Titanium.UI.createWindow({ title:'Tab 2', backgroundColor:'#fff' }); var tab2 = Titanium.UI.createTab({ icon:'KS_nav_ui.png', title:'Tab 2', window:win2 }); var label2 = Titanium.UI.createLabel({ color:'#999', text:'I am Window 2', font:{fontSize:20,fontFamily:'Helvetica Neue'}, textAlign:'center', width:'auto' }); win2.add(label2); // add tabs tabGroup.addTab(tab1); tabGroup.addTab(tab2); // open tab group tabGroup.open(); {noformat} *STEPS TO REPRODUCE* - Drop the above sample code into app.js. - Start the application and open Instruments to profile it. - Click the 'Remove Tab1' label. - Search for 'proxy' in instruments and it can be seen that tab proxy(along with window and label proxies inside tab1) are not released even if memory warnings are simulated. *EXPECTED BEHAVIOR* Proxies related to tab and elements inside it should be released. *OBSERVED BEHAVIOR* Memory is not being freed.1
105TIMOB-7652Tooling: Add "clean" option to titanium build scriptsBased on ticket TISTUD-1180, it seems odd that Titanium Studio knows how to "clean" a build, especially since it doesn't know how to do the build itself. From here: https://wiki.appcelerator.org/display/guides/Titanium+Command+Line+Interface, it seems that a "titanium clean --platform=p1,p2" command (or if omitted, cleans all platforms) would be good, as then Studio does not need to internalize a very platform-specific function.1
106TIMOB-7657Android: Permissions failure in android.calendar Drillbit testLooks like the android.calendar test recently started failing due to missing permissions, log: {code} Permission Denial: opening provider com.android.providers.calendar.CalendarProvider2 from ProcessRecord{423b2048 20514:org.appcelerator.titanium.testharness/10082} (pid=20514, uid=10082) requires android.permission.READ_CALENDAR or android.permission.WRITE_CALENDAR {code}1
107TIMOB-7660iOS: Moving rows between sections & hard crashMoving rows between sections causing crashes. See attached examples. Repro steps at the top of each attached file. Some other tickets referencing this issue: https://jira.appcelerator.org/browse/TIMOB-2655 https://jira.appcelerator.org/browse/TIMOB-2117 https://jira.appcelerator.org/browse/TIMOB-5430 Let me know if there's any other info I can provide.1
108TIMOB-7659iOS: backgroundSelectedImage does not scale in iPod 2nd genThe backgroundSelectedImage property doesn't scale in iPod 2nd gen. You can only see a cropped image. The image scales fine in iPod 3rd gen. h4. Repro Steps 1. Run the below code. 2. In iPod 2nd gen the images will not scale {code} var win=Ti.UI.createWindow({ backgroundColor: 'white' }); var button = Titanium.UI.createButton({ backgroundImage:'appsS.png', backgroundSelectedImage:'appsP.png', top: Titanium.Platform.displayCaps.platformHeight*0.5, width: Titanium.Platform.displayCaps.platformHeight * 0.13, height: Titanium.Platform.displayCaps.platformHeight * 0.16 }); button.addEventListener('click',function(e){ Titanium.API.info("You clicked the button"); }); win.add(button); win.open(); {code}1
109TIMOB-7661Coverage: Fix error in coverage generation scriptCurrently the coverage.py script is failing whenever it is run without arguments, which impedes us from automating and getting metrics about API docs and the APIs themselves.1
110TIMOB-7700Android: Enable searchBar to animate cancel buttonFrom the original iOS issue: When a searchBar is NOT attached to a tableView, instead attached to a view on the window, the cancel button isn't animated. Nor does there seem to be a property to enable it. The cancel button IS animated when a searchBar is attached to a tableView. iOS now has an optional argument in setShowCancel, of setShowCancel(BOOL,{animated:true}) wherein the cancel button is animated in its hiding. If Android offers something similar, we probably should support it for parity's sake.1
111TIMOB-8293iOS: Subsequently setting the html property of a webview does not show the changed html but shows blank contenth2. Problem In our app we create one instance of Ti.UI.WebView and reuse it for showing html content which is stored in a sql db. As the user navigates to different entries within a messages list, the new selected content is pushed into the webview by asigning the value to the html property of the webview. The first time the value is set, the content shows up as expected. If the value is set the second time the webview shows up empty. h2. Test case Create a fresh mobile project and replace the default app.js with the following code: {code:lang=javascript|title=app.js} // this sets the background color of the master UIView (when there are no windows/tab groups on it) Titanium.UI.setBackgroundColor('#000'); // create tab group var tabGroup = Titanium.UI.createTabGroup(); // // create base UI tab and root window // var win1 = Titanium.UI.createWindow({ title:'Tab 1', backgroundColor:'#fff' }); var tab1 = Titanium.UI.createTab({ icon:'KS_nav_views.png', title:'Tab 1', window:win1 }); var button1 = Titanium.UI.createButton({ title:'open webview window', width:220, height:40 }); win1.add(button1); var winwebview = Titanium.UI.createWindow({ title:'Window with webview', backgroundColor:'#fff' }); var webview = Titanium.UI.createWebView({ }); winwebview.add(webview); var counter = 0; button1.addEventListener('click',function(e) { counter++; webview.html = '<h1>Counter is: ' + counter + '</h1>'; tab1.open(winwebview,{animated:true}); }); // // create controls tab and root window // var win2 = Titanium.UI.createWindow({ title:'Tab 2', backgroundColor:'#fff' }); var tab2 = Titanium.UI.createTab({ icon:'KS_nav_ui.png', title:'Tab 2', window:win2 }); var label2 = Titanium.UI.createLabel({ color:'#999', text:'I am Window 2', font:{fontSize:20,fontFamily:'Helvetica Neue'}, textAlign:'center', width:'auto' }); win2.add(label2); // // add tabs // tabGroup.addTab(tab1); tabGroup.addTab(tab2); // open tab group tabGroup.open(); {code} # Build an run the app in simulator. # Tap on the button "open webview window". # The webview shows the line "Counter is: 1". # Navigate back to Tab 1 and tap again on the button "open webview window". # The webview should show the line "Counter is: 2", but the webview shows up empty. With Titaniums SDK 1.8.0.1 and 1.8.1 this works as expected. 1
112TIMOB-7806Tooling: Bundle ACS (and potentially MQTT) module binaries with the MobileSDK We need to bundle the new ACS module alongside the MobileSDK. Android may also require a second MQTT module that the ACS module will depend on. A brief overview for how this should work: * The ACS (and MQTT) modules will be provided as zip binaries by the Modules team, preferably living under something like support/common * {{site_scons/package.py}} will need to be updated so those zips are extracted and live in the "modules" top level directory of the MobileSDK zip. This will ensure that when the MobileSDK zip is extracted, the modules are installed in the system directory as well h3. Testing 1. Download the two ti.* modules attached to this ticket (ignore bogus.zip). 2. Copy these two zips into titanium_mobile/support/module/packaged 3. Run scons to build the SDK. 4. Extract the SDK zip in dist/ and verify the file structure in modules/ matches as described in this ticket (see comments). 1
113TIMOB-7816Android: Ignore files that start with ._On a Mac, some editors will generate a ._ file. When you compile an Android app, the android/compiler.py's make_function_from_file() function will error saying: {code} UnicodeDecodeError: 'utf8' codec can't decode byte 0xb0 in position 37: invalid start byte {code} Just need to ignore ._ files.3
114TIMOB-7833Tooling: Add support for a "common" CommonJS module installation folderWith our current module system, modules must either be installed into a project or in the system Titanium folder. In both cases, modules are platform-specific compiled binaries (a static lib for iOS, shared lib for Android). It would be nice to allow pure Javascript / CommonJS modules in a common place that could simply be distributed as JS files, for example a {{common}} or {{commonjs}} folder under the system Titanium directory that would be analogous to today's {{iphone}} and {{android}} directories.1
115TIMOB-7862iOS: UIPopover background colorPrevious to 5.0 there was no way to customize the UIPopover background color. From reading the docs and around the web since 5.0 people have been doing it. References: https://developer.apple.com/library/ios/#documentation/uikit/reference/UIPopoverController_class/Reference/Reference.html#//apple_ref/occ/instp/UIPopoverController/popoverBackgroundViewClass https://developer.apple.com/library/ios/#documentation/uikit/reference/UIPopoverBackgroundView_class/Reference/Reference.html#//apple_ref/occ/cl/UIPopoverBackgroundView http://stackoverflow.com/questions/5974439/customizing-the-uipopovercontroller-view-background-and-border-color http://stackoverflow.com/questions/8490261/change-color-navigation-controller-in-a-popover1
116TIMOB-7865Android: XML - On V8, parsing xml multiple times crashes the phoneDetails: When running the app.js in SDK build 2.0.0.v20120302093154 for V8, the app will eventually crash and GC will be continuously called. See attachment 2.0_logcat.txt. And when running the app.js in SDK build 1.8.2 for V8, I get a out of memory exception. See attachment 1.8.2_logcat.txt. However, the app.js does not crash when running on Rhino for both builds. Steps to reproduce: 1. Create new project. 2. Replace app.js with attached app.js. 3. Run app. 4. Press 'load' until app crashes. Actual: App crashes. See attachments. Expected: The app should not crash.1
117TIMOB-8486iOS: VideoPlayer does not fire touch events since 1.8.1VideoPlayer is not firing touch events anymore on iOS (other platforms not tested). The next code works with sdk 1.7.5 and 1.8.0.1 on iOS, but is not working with sdk 1.8.1 nor 1.8.2 I tried to capture click, dblclik and touchstart events with same result. Bug has been confirmed by the community at Q&A [http://developer.appcelerator.com/question/132645/bug-videoplayer-does-not-fire-touch-events-sdk-181] {code:title=Test case: App.js|borderStyle=solid} var win = Ti.UI.createWindow(); var videoObject = Titanium.Media.createVideoPlayer({ contentURL:'test.mp4', scalingMode:Titanium.Media.VIDEO_SCALING_MODE_FILL, top:0, left:0, height:'100%', width:'100%', autoplay:true }); videoObject.addEventListener('click', function(){ alert('click!'); }); win.add(videoObject); win.open(); {code}2
118TIMOB-7897Android: Memory leak by windows not properly cleaning up after close.Windows appear to be leaking memory by not properly cleaning up after they have been closed. This only affects "heavy" windows that have their own activity. h3. Test Case: Opening a window and adding many child views. Run the application and click the button to open a window. Wait for an alert dialog to popup telling you its okay to back out now. Hit the back button to close out the window. Repeat this process. Expected: Memory usage should peak and remain steady. Actual: Memory usages constantly rises until out of memory crash occurs. {code:javascript} function mainViews() { var newWin = Ti.UI.createWindow({ navBarHidden: true }); Ti.API.info('****** mainViews function has started ******'); var views =[]; var view = null; for (var i=0; i < 500; i++) { view = Ti.UI.createView(); views.push(view); newWin.add(view); } newWin.open(); alert("You may click back now."); Ti.API.info('Titanium views created and added to array'); Ti.API.info('****** mainViews function has stopped ******'); } var win = Ti.UI.createWindow({ backgroundColor: "white" }); var button = Ti.UI.createButton({ title: "create 5k views" }); button.addEventListener("click", function(e) { mainViews(); Ti.API.info('Available memory: ' + Ti.Platform.availableMemory); }); win.add(button); win.open(); {code}1
119TIMOB-7948Android: Invalid column visibility when querying events in Ti.Android.CalendarHere is the sample app from our Calendar TDoc that shows the error. The error seems to happen when {{getEventsInYear}} is called {code} var calendars = []; var selectedCalendarName; var selectedCalendarId; var pickerData = []; var win = Ti.UI.createWindow({ backgroundColor: 'white', exitOnClose: true, fullscreen: false, layout: 'vertical', title: 'Calendar Demo' }); var scrollView = Ti.UI.createScrollView({ backgroundColor: '#eee', height: 500, top: 20 }); var label = Ti.UI.createLabel({ backgroundColor: 'white', text: 'Click on the button to display the events for the selected calendar', textAlign: Ti.UI.TEXT_ALIGNMENT_CENTER, top: 20 }); scrollView.add(label); var selectableCalendars = Ti.Android.Calendar.selectableCalendars; for (var i = 0, ilen = selectableCalendars.length; i < ilen; i++) { calendars.push({ name: selectableCalendars[i].name, id: selectableCalendars[i].id }); pickerData.push( Ti.UI.createPickerRow({ title: calendars[i].name }) ); if(i === 0){ selectedCalendarName = selectableCalendars[i].name; selectedCalendarId = selectableCalendars[i].id; } } var selectableCalendars = null; if(!calendars.length){ label.text = 'No calendars available. Select at least one in the native calendar before using this app'; } else { label.text = 'Click button to view calendar events'; var picker = Ti.UI.createPicker({ top:20 }); picker.add(pickerData); win.add(picker); picker.addEventListener('change', function(e){ for (var i = 0, ilen = calendars.length; i < ilen; i++) { if(calendars[i].name === e.row.title){ selectedCalendarName = calendars[i].name; selectedCalendarId = calendars[i].id; } } }); var button = Ti.UI.createButton({ title: 'View events', top: 20 }); win.add(button); button.addEventListener('click', function(e){ label.text = 'Generating...'; var currentYear = new Date().getFullYear(); var consoleString = ''; function print(s) { if (consoleString.length) { consoleString = consoleString + '\n'; } consoleString = consoleString + s; } var calendar = Ti.Android.Calendar.getCalendarById(selectedCalendarId); function printReminder(r) { var typetext = '[method unknown]'; if (r.method == Ti.Android.Calendar.METHOD_EMAIL) { typetext = 'Email'; } else if (r.method == Ti.Android.Calendar.METHOD_SMS) { typetext = 'SMS'; } else if (r.method == Ti.Android.Calendar.METHOD_ALERT) { typetext = 'Alert'; } else if (r.method == Ti.Android.Calendar.METHOD_DEFAULT) { typetext = '[default reminder method]'; } print(typetext + ' reminder to be sent ' + r.minutes + ' minutes before the event'); } function printAlert(a) { print('Alert id ' + a.id + ' begin ' + a.begin + '; end ' + a.end + '; alarmTime ' + a.alarmTime + '; minutes ' + a.minutes); } function printEvent(event) { if (event.allDay) { print('Event: ' + event.title + '; ' + event.begin.toLocaleDateString() + ' (all day)'); } else { print('Event: ' + event.title + '; ' + event.begin.toLocaleDateString() + ' ' + event.begin.toLocaleTimeString()+ '-' + event.end.toLocaleTimeString()); } var reminders = event.reminders; if (reminders && reminders.length) { print('There is/are ' + reminders.length + ' reminder(s)'); for (var i = 0; i < reminders.length; i++) { printReminder(reminders[i]); } } print('hasAlarm? ' + event.hasAlarm); var alerts = event.alerts; if (alerts && alerts.length) { for (var i = 0; i < alerts.length; i++) { printAlert(alerts[i]); } } var status = event.status; if (status == Ti.Android.Calendar.STATUS_TENTATIVE) { print('This event is tentative'); } if (status == Ti.Android.Calendar.STATUS_CONFIRMED) { print('This event is confirmed'); } if (status == Ti.Android.Calendar.STATUS_CANCELED) { print('This event was canceled'); } } var events = calendar.getEventsInYear(currentYear); if (events && events.length) { print(events.length + ' event(s) in ' + currentYear); print(''); for (var i = 0; i < events.length; i++) { printEvent(events[i]); print(''); } } else { print('No events'); } label.text = consoleString; }); } win.add(scrollView); win.open(); {code} Also make sure you add READ_CALENDAR and WRITE_CALENDAR permissions to your tiapp.xml: {code} <ti:app> <android> <manifest> <uses-permission android:name="android.permission.READ_CALENDAR" /> <uses-permission android:name="android.permission.WRITE_CALENDAR" /> </manifest> </android> </ti:app> {code} And finally, here is the trace: {code} /CursorWrapperInner(31255): Cursor finalized without prior close() E/DatabaseUtils(31274): Writing exception to parcel E/DatabaseUtils(31274): java.lang.IllegalArgumentException: Invalid column visibility E/DatabaseUtils(31274): android.database.sqlite.SQLiteQueryBuilder.computeProjection(SQLiteQueryBuilder.java:588) E/DatabaseUtils(31274): android.database.sqlite.SQLiteQueryBuilder.buildQuery(SQLiteQueryBuilder.java:403) E/DatabaseUtils(31274): android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:347) E/DatabaseUtils(31274): android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:291) E/DatabaseUtils(31274): com.android.providers.calendar.CalendarProvider2.handleInstanceQuery(CalendarProvider2.java:1015) E/DatabaseUtils(31274): com.android.providers.calendar.CalendarProvider2.query(CalendarProvider2.java:840) E/DatabaseUtils(31274): android.content.ContentProvider$Transport.query(ContentProvider.java:178) E/DatabaseUtils(31274): android.content.ContentProviderNative.onTransact(ContentProviderNative.java:112) E/DatabaseUtils(31274): android.os.Binder.execTransact(Binder.java:338) E/DatabaseUtils(31274): dalvik.system.NativeStart.run(Native Method) E/TiJSError(31255): (main) [141129,172202] ----- Titanium Javascript Runtime Error ----- E/TiJSError(31255): (main) [0,172202] - In pullRequests/1591.js:135,27 E/TiJSError(31255): (main) [0,172202] - Message: Uncaught Error: Invalid column visibility E/TiJSError(31255): (main) [0,172202] - Source: var events = calendar.getEventsInYear(currentYear); E/V8Exception(31255): Exception occurred at pullRequests/1591.js:135: Uncaught Error: Invalid column visibility {code}1
120TIMOB-7967Android: Replace Node.text with Node.textContentFor MobileWeb parity in 2.0, we need to deprecate the current {{Node.text}} property in our XML API, and rename it to {{textContent}}. We won't be fully implementing {{textContent}} from the DOM3 spec as it requires read-write access, and the traversal rules are slightly different than our current implementation. This is mainly for source level equivalence, until we have time to implement it properly.1
121TIMOB-7968iOS: Replace Node.text with Node.textContentFor MobileWeb parity in 2.0, we need to deprecate the current {{Node.text}} property in our XML API, and rename it to {{textContent}}. We won't be fully implementing {{textContent}} from the DOM3 spec as it requires read-write access, and the traversal rules are slightly different than our current implementation. This is mainly for source level equivalence, until we have time to implement it properly.1
122TIMOB-8077iOS: TableView - setContentInsets not working correctly, values assigned are not always respectedWhen using many or complex rows in a table view, in connection with a pull to refresh UI, the table does not always stay stuck down (with things like a reloading message showing). To reproduce, do the following: - Run the following code on device (simulator works fine) - Scroll down the table a bit. - scroll back up and try to do a pull to refresh a few times. The result: The table will not always stay "pulled down" by 60. sometimes it will, but more often it will be around 5. If however you pull down and hold the table down for about a second before releasing, it seems to work correctly. The code to re-create this issue is in the kitchen sink, I just am having it run with more rows to make the issue more clear... the issue is also clear when using more complex row layouts. {code} var win = Ti.UI.createWindow(); function formatDate() { var date = new Date(); var datestr = date.getMonth()+'/'+date.getDate()+'/'+date.getFullYear(); if (date.getHours()>=12) { datestr+=' '+(date.getHours()==12 ? date.getHours() : date.getHours()-12)+':'+date.getMinutes()+' PM'; } else { datestr+=' '+date.getHours()+':'+date.getMinutes()+' AM'; } return datestr; } var data = []; for(i=0; i<600; i++) { data.push({title:"Row "+i}); } var lastRow = 4; var tableView = Ti.UI.createTableView({ data: data }); win.add(tableView); var border = Ti.UI.createView({ backgroundColor:"#576c89", height:2, bottom:0 }); var tableHeader = Ti.UI.createView({ backgroundColor:"#e2e7ed", width:320, height:60 }); // fake it til ya make it.. create a 2 pixel // bottom border tableHeader.add(border); var arrow = Ti.UI.createView({ backgroundImage:"../images/whiteArrow.png", width:23, height:60, bottom:10, left:20 }); var statusLabel = Ti.UI.createLabel({ text:"Pull to reload", left:55, width:200, bottom:30, height:"auto", color:"#576c89", textAlign:"center", font:{fontSize:13,fontWeight:"bold"}, shadowColor:"#999", shadowOffset:{x:0,y:1} }); var lastUpdatedLabel = Ti.UI.createLabel({ text:"Last Updated: "+formatDate(), left:55, width:200, bottom:15, height:"auto", color:"#576c89", textAlign:"center", font:{fontSize:12}, shadowColor:"#999", shadowOffset:{x:0,y:1} }); var actInd = Titanium.UI.createActivityIndicator({ left:20, bottom:13, width:30, height:30 }); tableHeader.add(arrow); tableHeader.add(statusLabel); tableHeader.add(lastUpdatedLabel); tableHeader.add(actInd); tableView.headerPullView = tableHeader; var pulling = false; var reloading = false; function beginReloading() { // just mock out the reload setTimeout(endReloading,2000); } function endReloading() { // simulate loading for (var c=lastRow;c<lastRow+10;c++) { tableView.appendRow({title:"Row "+c}); } lastRow += 10; // when you're done, just reset tableView.setContentInsets({top:0},{animated:true}); reloading = false; lastUpdatedLabel.text = "Last Updated: "+formatDate(); statusLabel.text = "Pull down to refresh..."; actInd.hide(); arrow.show(); } tableView.addEventListener('scroll',function(e) { var offset = e.contentOffset.y; if (offset <= -65.0 && !pulling) { var t = Ti.UI.create2DMatrix(); t = t.rotate(-180); pulling = true; arrow.animate({transform:t,duration:180}); statusLabel.text = "Release to refresh..."; } else if (pulling && offset > -65.0 && offset < 0) { pulling = false; var t = Ti.UI.create2DMatrix(); arrow.animate({transform:t,duration:180}); statusLabel.text = "Pull down to refresh..."; } }); tableView.addEventListener('scrollEnd',function(e) { if (pulling && !reloading && e.contentOffset.y <= -65.0) { reloading = true; pulling = false; arrow.hide(); actInd.show(); statusLabel.text = "Reloading..."; tableView.setContentInsets({top:60},{animated:true}); arrow.transform=Ti.UI.create2DMatrix(); beginReloading(); } }); win.open(); {code}2
123TIMOB-8048Android: removeEventListener does not work for the CI BuildsremoveEventListener does not work on android, when used to remove and eventlistener on 'focus' event. Run the code below. Do the following: open app alert comes up - clear it click on Win 2's tab click on Win 1's tab Observed behavior: alert comes up again (the event listener wasn't removed during the call to onFocus ()). Expected behavior: the second alert should not come up (the event listener should have been removed during the call to onFocus()) Thinking that maybe it was because I was calling removeEventListener() from within the event listener function, I also added a button that should remove the event listener from the window. It doesn't work either. {code} var tabGroup = Ti.UI.createTabGroup(); var win1 = Ti.UI.createWindow({ backgroundColor: '#fff', title: 'Win 1' }); tabGroup.addTab(Ti.UI.createTab({ window: win1, title: win1.title })); var win2 = Ti.UI.createWindow({ backgroundColor: '#666', title: 'Win 2' }); tabGroup.addTab(Ti.UI.createTab({ window: win2, title: win2.title })); var onFocus = function () { alert('[focus] size: ' + win1.size.width + ', ' + win1.size.height); win1.removeEventListener ('focus', onFocus); } win1.addEventListener('focus', onFocus); var btn1 = Titanium.UI.createButton({ width: 200, height: 50, title: 'Click me', }); btn1.addEventListener('click', function(e) { win1.removeEventListener ('focus', onFocus); }); win1.add(btn1); tabGroup.open(); {code} 2
124TIMOB-8505Android: Module build.xml no longer compiles C++ source code in the "jni" directoryMarshall's post on using native libraries in an Android module (http://developer.appcelerator.com/blog/2011/01/titanium-and-the-android-ndk.html) states that you need to place C++ source files in the jni directory of the module project and they will be compiled into .so files and included in the module. This is not the case in version 1.8.2 of the SDK -- the build.xml file under TITANIUM_HOME/mobilesdk/osx/1.8.2/modules/android never looks in that directory. To get the described behavior, the following targets can be added to the module's build.xml file: {code:xml} <property name="genlocaljni" location="${build}/generated/local-jni"/> <target name="build.jni"> <mkdir dir="${genlocaljni}"/> <copy todir="${genlocaljni}"> <fileset dir="${ti.module.root}"> <include name="jni/**"/> </fileset> </copy> <check.ndk/> <condition property="ndk.build" value="${ndk.path}/ndk-build.cmd" else="${ndk.path}/ndk-build"> <os family="windows"/> </condition> <exec executable="${ndk.build}" dir="${genlocaljni}" failonerror="true"> <arg value="TI_MOBILE_SDK=${mobilesdk.dir}"/> <arg value="NDK_PROJECT_PATH=${genlocaljni}"/> <arg value="PYTHON=${python.exec}"/> <arg value="V=${ndk.verbose}"/> </exec> <copy todir="${libs}"> <fileset dir="${genlocaljni}/libs"> <include name="**/*.so"/> </fileset> </copy> </target> <target name="post.compile"> <antcall target="build.jni"/> </target> {code} Ideally, these targets would be part of the SDK's build.xml. In the meantime, it would be good to update the blog post to indicate that it is out of date.1
125TIMOB-8066Android: xhdpi density folder for extra large screens is not working Adding res-notlong-port-xhdpi" and other related xhdpi folders to android -> images folder does not work as the image is not taken from those folders. As per the Android Developer website, I tried to create a 640 x 960 resolution avd to test this issue for xhdpi. To test: 1. Create an AVD for 640 x 960 resolution for titanium to run on. (This link explains the resolution needed for different densities: http://developer.android.com/guide/practices/screens_support.html) *You might have to edit the already created AVD to appropriate resolution since Titanium creates a new AVD by itself (unless there is another way)* 2. Create any default app with res-long-port-xhdpi, res-long-land-xhdpi, res-notlong-port-xhdpi, res-notlong-land-xhdpi folders under android and add differen images to these folder to differentiate easily. (See Screenshot for the folder structure) 3. Run the app with the desired AVD. The starting screen image that appears is not of xhdpi but of mdpi folder. Please clarify about this issue. *Note: You would also need to set the tool-api-level and some other properties as below since the xhdpi has been added to android after api level 8.* {noformat} <android xmlns:android="http://schemas.android.com/apk/res/android"> <tool-api-level>8</tool-api-level> <manifest> <supports-screens android:anyDensity="true" android:screenOrientation="portrait" android:resizeable="true"/> <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="14"/> </manifest> </android> {noformat} 2
126TIMOB-8076Android: V8: GC lag can cause crash on older devicesOn older devices like Droid 2, GC lag cause result in a crash when: 1) alot of object are created resulting in high memory allocation on the java side 2) said objects are available for cleanup (no reference maintained in JS) 3) GC has not scanned yet due to the memory overhead on the V8 side not causing enough pressure on the GC We need a way to notify V8 that we are running low on memory so that a GC occurs sooner than V8 would normally do on it's own. A ticket has been linked that provides a fail case for this issue (original test case in ticket - not the one attached in the comments)5
127TIMOB-8094Android: App crashes on the device while uploading images, Memory issuesThe app uses camera to click pictures, and upload to their server. Before uploading they perform image compression and resizing. Ti.imagefactory module is used for these purposes. The pictures are high resolution images, taken by a 8MP camera on the Motorola Droid X. The issue arises, when he uploads more than 1 image or multiple similar images or displaying the image in imageview. He gets "Unable to load bitmap.Not enough memory.bitmap size exceeds VM budget." error on the device. You can see the crash log here {code}03-19 10:32:54.837: E/dalvikvm-heap(3474): 5752604-byte external allocation too large for this process. 03-19 10:32:54.916: E/GraphicsJNI(3474): VM won't let us allocate 5752604 bytes 03-19 10:32:54.916: D/dalvikvm(3474): GC_FOR_MALLOC freed 0K, 47% free 9431K/17479K, external 11586K/13634K, paused 73ms 03-19 10:32:54.923: E/TiDrawableReference(3474): (main) [1277,430400] Unable to load bitmap. Not enough memory: bitmap size exceeds VM budget 03-19 10:32:54.923: E/TiDrawableReference(3474): java.lang.OutOfMemoryError: bitmap size exceeds VM budget 03-19 10:32:54.923: E/TiDrawableReference(3474): at android.graphics.Bitmap.nativeCreate(Native Method) 03-19 10:32:54.923: E/TiDrawableReference(3474): at android.graphics.Bitmap.createBitmap(Bitmap.java:507) 03-19 10:32:54.923: E/TiDrawableReference(3474): at android.graphics.Bitmap.createBitmap(Bitmap.java:474) 03-19 10:32:54.923: E/TiDrawableReference(3474): at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:379) 03-19 10:32:54.923: E/TiDrawableReference(3474): at org.appcelerator.titanium.view.TiDrawableReference.getBitmap(TiDrawableReference.java:558) 03-19 10:32:54.923: E/TiDrawableReference(3474): at ti.modules.titanium.ui.widget.TiUIImageView.setImage(TiUIImageView.java:736) 03-19 10:32:54.923: E/TiDrawableReference(3474): at ti.modules.titanium.ui.widget.TiUIImageView.processProperties(TiUIImageView.java:849) 03-19 10:32:54.923: E/TiDrawableReference(3474): at org.appcelerator.kroll.KrollProxy.setModelListener(KrollProxy.java:641) 03-19 10:32:54.923: E/TiDrawableReference(3474): at org.appcelerator.titanium.proxy.TiViewProxy.realizeViews(TiViewProxy.java:464) 03-19 10:32:54.923: E/TiDrawableReference(3474): at org.appcelerator.titanium.proxy.TiViewProxy.handleGetView(TiViewProxy.java:456) 03-19 10:32:54.923: E/TiDrawableReference(3474): at org.appcelerator.titanium.proxy.TiViewProxy.getOrCreateView(TiViewProxy.java:434) 03-19 10:32:54.923: E/TiDrawableReference(3474): at org.appcelerator.titanium.proxy.TiViewProxy.handleToImage(TiViewProxy.java:716) 03-19 10:32:54.923: E/TiDrawableReference(3474): at org.appcelerator.titanium.proxy.TiViewProxy.handleMessage(TiViewProxy.java:303) 03-19 10:32:54.923: E/TiDrawableReference(3474): at android.os.Handler.dispatchMessage(Handler.java:95) 03-19 10:32:54.923: E/TiDrawableReference(3474): at org.appcelerator.kroll.common.TiMessenger.dispatchMessage(TiMessenger.java:318) 03-19 10:32:54.923: E/TiDrawableReference(3474): at org.appcelerator.kroll.common.TiMessenger.dispatchPendingMessages(TiMessenger.java:303) 03-19 10:32:54.923: E/TiDrawableReference(3474): at org.appcelerator.kroll.common.TiMessenger$2.getResult(TiMessenger.java:188) 03-19 10:32:54.923: E/TiDrawableReference(3474): at org.appcelerator.kroll.common.TiMessenger.sendBlockingMessage(TiMessenger.java:215) 03-19 10:32:54.923: E/TiDrawableReference(3474): at org.appcelerator.kroll.common.TiMessenger.sendBlockingRuntimeMessage(TiMessenger.java:143) 03-19 10:32:54.923: E/TiDrawableReference(3474): at org.appcelerator.kroll.KrollProxy.fireSyncEvent(KrollProxy.java:417) 03-19 10:32:54.923: E/TiDrawableReference(3474): at org.appcelerator.titanium.TiBaseActivity.onRestart(TiBaseActivity.java:830) 03-19 10:32:54.923: E/TiDrawableReference(3474): at android.app.Instrumentation.callActivityOnRestart(Instrumentation.java:1139) 03-19 10:32:54.923: E/TiDrawableReference(3474): at android.app.Activity.performRestart(Activity.java:3865) 03-19 10:32:54.923: E/TiDrawableReference(3474): at android.app.Activity.performResume(Activity.java:3876) 03-19 10:32:54.923: E/TiDrawableReference(3474): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2191) 03-19 10:32:54.923: E/TiDrawableReference(3474): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2228) 03-19 10:32:54.923: E/TiDrawableReference(3474): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:994) 03-19 10:32:54.923: E/TiDrawableReference(3474): at android.os.Handler.dispatchMessage(Handler.java:99) 03-19 10:32:54.923: E/TiDrawableReference(3474): at android.os.Looper.loop(Looper.java:123) 03-19 10:32:54.923: E/TiDrawableReference(3474): at android.app.ActivityThread.main(ActivityThread.java:3806) 03-19 10:32:54.923: E/TiDrawableReference(3474): at java.lang.reflect.Method.invokeNative(Native Method) 03-19 10:32:54.923: E/TiDrawableReference(3474): at java.lang.reflect.Method.invoke(Method.java:507) 03-19 10:32:54.923: E/TiDrawableReference(3474): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 03-19 10:32:54.923: E/TiDrawableReference(3474): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 03-19 10:32:54.923: E/TiDrawableReference(3474): at dalvik.system.NativeStart.main(Native Method) 03-19 10:32:54.923: I/TiUIHelper(3474): (main) [8,430408] view does not have parent, calling layout {code} Created sample apps, using the ti.imagefactory module, but could not reproduce this issue. Also tested the code on Motorola Droid3, LG OptimusV but still could not reproduce the issue. 3
128TIMOB-8113Android: Ti.UI.WebView doesn't seem to load pages that try to open a new window*Code* * app.js {code} var win = Ti.UI.createWindow(); var webview = Titanium.UI.createWebView({ url: 'index.html' }); win.add(webview); win.open(); {code} * index.html {code} <a href="http://www.google.com" target="_blank">Click to load Google in a new window.</a> <br></br> <a href="http://www.google.com">Click to load Google in the same window.</a> {code} *Expected behavior* When you click on either of the two links, it should load up Google. *Actual behavior* What actually happens, is that the first link doesn't seem to do anything, only the second one seems to work. *Notes* -Only tested on a HTC Sensation and Samsung Galaxy S2, both giving me the same result. -Same result, whether I use the Rhino or V8 engine. -When testing the same code on the iOS simulator, both links seem to work fine. -The issue is 'target="_blank"' without this, it seems to work fine. -HD ticket: http://support-admin.appcelerator.com/display/APP-2576373
129TIMOB-8127iOS: You can't call the Facebook Authorization from a Dialog (not even with app events)h4. Problem Description Customer adds a Facebook.authorize(); from an app, without any results. h4. Actual Results The function never goes and logs into facebook. h4. Expected results The app should be able to login into fb h4. Test Case 1. Create a new mobile project 2. Add the code in the example to a button 3. Run it {code} wishToShareViaFacebook.addEventListener('click', function(e){ if (e.index == 0) { if (Titanium.Facebook.loggedIn) { var data = { link: "www.jokwear.com", name: "Great Apparel, Great Message", message: "Check out JokWear!", caption: "Follow your favourite athletes, support other athletes", picture: "http://jokwear.com/images/joklogo.gif", description: "JokWear is a clothing brand that not only touts excellent fabric but also a social movement that you can achieve anything you set your mind to.", test: [ {foo:'Encoding test', bar:'Durp durp'}, 'test' ] }; Titanium.Facebook.requestWithGraphPath('me/feed', data, 'POST', showRequestResult); } else { Titanium.Facebook.authorize(); } } }); {code} h4. Extra info There is a bug where platform didn't want to launch the FB authorize from a dialog, since it's bad practice to get a dialog from a dialog. So, we recommended the customer to add an app event catching this, closing the dialog and then adding the other dialog. It's not runnning. The customer creates a small function doing a setTimeout, and that way, the function it's called properly within the if. 1
130TIMOB-8136iOS: Coverflow - @2x images don't have a very clear retina displayh6.Issue Images in the carrousel don't have a very clear retina display. It does show the @2x image but there's not much difference in the quality of the image. h6.Tested on iPhone 4 iOS simulator retina h6.Current behavior Same image is shown both in the coverflow and in an imageview, the rendered final image shows differently. h6.Steps to reproduce Import Resources.zip into a Studio project. Attached ZIP. 2
131TIMOB-8172Android: memory leaks opening/closing tabGroupsh2. Problem Memory leaks when opening and closing a window including a tabGroup h2. Code and steps to reproduce {code:lang=javascript|title=app.js} var mainwin = Ti.UI.createWindow({ title:'TEST WINDOW', backgroundColor:'#fff', fullscreen:true, statusBarHidden: true, navBarHidden:true, exitOnClose:true }); var button = Ti.UI.createButton({ title: "create tabGroup" }); var MY_TABGROUP = null; Titanium.App.addEventListener('tabGroupclosed', function(e) { Ti.API.debug('MY_TABGROUP close...'); MY_TABGROUP = null; }); button.addEventListener('click', function(e) { MY_TABGROUP = require('/myNewTabGroup').innerTabGroup(); MY_TABGROUP.open({ animated: true }); }); var button2 = Ti.UI.createButton({ bottom: 200, title:'show MY_TABGROUP' }); button2.addEventListener('click', function(){ alert(MY_TABGROUP) }); mainwin.add(button2); var button3 = Ti.UI.createButton({ bottom:5, title:'GC' }); button3.addEventListener('click', function(){ views1 = []; views2 = []; MY_TABGROUP=null; }); mainwin.add(button3); mainwin.add(button); mainwin.open(); {code} {code:lang=javascript|title=myNewTabGroup.js} exports.innerTabGroup = function() { var tabGroup = null; var win1 = null; var tab1 = null; var win2 = null; var tab2 = null; var views1 =[]; var view1 = null; var views2 =[]; var view2 = null; tabGroup = Titanium.UI.createTabGroup(); win1 = Titanium.UI.createWindow({ title:'Tab 1', backgroundColor:'#fff' }); for (var i=0; i < 600; i++) { view1 = Ti.UI.createView(); views1.push(view1); win1.add(view1); } tab1 = Titanium.UI.createTab({ icon:'KS_nav_views.png', title:'Tab 1', window:win1 }); win2 = Titanium.UI.createWindow({ title:'Tab 2', backgroundColor:'#fff' }); for (var i=0; i < 600; i++) { view2 = Ti.UI.createView(); views2.push(view2); win2.add(view2); } tab2 = Titanium.UI.createTab({ icon:'KS_nav_ui.png', title:'Tab 2', window:win2 }); tabGroup.addTab(tab1); tabGroup.addTab(tab2); return tabGroup; }; {code} Steps followed with allocated memory and # of objects: 1. Run the app (memory 3144MB - #Objects 60,139) and click on 'create tabGroup' button (mem 8053 - Obj 148,156) 2. Hit back button (mem 4457 - 91,059). Reference to MY_TABGROUP is still present and is still not GC 3. Click the GC button to set MY_TABGROUP to null (mem 4234 - Obj 86,654) 4. Click on create tabGroup button (mem 9007 - 172,396) 5. Hit back button (5408 - 115,292) Memory increase in size subsequently repeating the steps. Attaching also the log file. h2. Additional info Customer ticket: http://support-admin.appcelerator.com/display/APP-3558114
132TIMOB-8173iOS: Rejection for use of deprecated UDID propertyWe have had reports of two Apple rejections today for Titanium apps submitted for clients using an older 2.0 CI build and 1.8.2. The rejection is based on the use of deprecated UDID property. Was confirmed by a Titanium developer with at least one other native dev who got rejected: https://twitter.com/#!/steipete/status/182640647113687040 This seems to be a very recent occurrence, so little data is available at this time. This will require investigation and validation, along with a measured approach at dealing with moving totally over to the new UDID generation mechanism.2
133TIMOB-8185iOS: TextField loses focus if resizedh2. Problem TextField in a TableViewRow loses focus if it has been resized after being focused h2. Code and steps to reproduce {code:lang=javascript|title=app.js} var win = Ti.UI.createWindow({ title:'pippo', backgroundColor:'white' }); function addRow(addTextArea) { var row = Ti.UI.createTableViewRow({height:200}); var $tTF = Ti.UI.createTextField({ height: 30, top : 30, width: 100, borderStyle:Titanium.UI.INPUT_BORDERSTYLE_ROUNDED }); $tTF.addEventListener('focus',function(_e){ Ti.API.error("focus "+_e.source.height); Ti.API.error(_e); _e.source.animate({height: _e.source.height*2}); }); row.add($tTF); row.selectionStyle = Ti.UI.iPhone.TableViewCellSelectionStyle.NONE; row.className = 'control'; return row; } // create table view data object var data = []; for (var x=0;x<1;x++) { if (x==1){ data[x] = addRow(true); } else { data[x] = addRow(); } } var tableView = Ti.UI.createTableView({ data:data, style: Titanium.UI.iPhone.TableViewStyle.GROUPED }); win.addEventListener('focus', function() { Ti.API.info('window focus fired'); }); win.add(tableView); win.open(); {code} To reproduce: - Run the app and click the textField: textField is animated increasing in height. Result: focus on textField is lost. h2. Additional notes Ticket associated: http://support-admin.appcelerator.com/display/APP-995689/conversation/read_all5
134TIMOB-8186iOS: Feature request to add X.509 certificate authentication over SSL in HTTPClient connectionIt has been requested to add the functionality to send x.509 certificate through SSL to the server while establishing HTTPClient connection. So basically, during authentication process, client would be able to send a (.cer) file through HTTPS. Essentially, something like this: 1) Package .p12 files/ .cer files as part of Resources, and 2) Extract data from these files (an API from TiHTTPClient) and send it over to server.3
135TIMOB-8200Android: webViews has a white background when turning on hardware acceleration h6.Issue When using android:hardwareAccelerated="true" (most likely in android manifest), the transparency of the WebView is lost and replaced by plain white background. Not all devices seem affected by this issue. h6.Non affected devices Droid Razr 2.3.5 Samsung Galaxy Tab p1000, Froyo(2.2) h6.Affected device Asus Transformer TF101, Honeycomb(ver3.1) h6.Repro sequence {code:title=app.js} var win = Ti.UI.createWindow({ backgroundImage : 'KS_nav_ui.png', //'/images/guide_fond_notice.png', navBarHidden : true, exitOnClose : true, top : '0dp', left : '0dp', right : '0dp', bottom : '0dp' }); var webView = Ti.UI.createWebView({ backgroundColor : 'transparent', html : 'This WebView\'s Background Must Be transparent', top : '50dp', left : '470dp', right : '0dp', bottom : '50dp' }); win.add(webView); win.open(); {code} h6.Setting HW accelerated via Tiapp.xml {code:title=Tiapp.xml} <?xml version="1.0" encoding="UTF-8"?> <ti:app xmlns:ti="http://ti.appcelerator.org"> <property name="ti.android.runtime">v8</property> <deployment-targets> <target device="mobileweb">true</target> <target device="iphone">true</target> <target device="ipad">true</target> <target device="android">true</target> <target device="blackberry">false</target> </deployment-targets> <sdk-version>1.8.2</sdk-version> <id>com.appcelerator.com</id> <name>AcScreenConfs</name> <version>1.0</version> <publisher>egomez</publisher> <url>http://</url> <description>not specified</description> <copyright>2012 by egomez</copyright> <icon>appicon.png</icon> <persistent-wifi>false</persistent-wifi> <prerendered-icon>false</prerendered-icon> <statusbar-style>default</statusbar-style> <statusbar-hidden>false</statusbar-hidden> <fullscreen>false</fullscreen> <navbar-hidden>false</navbar-hidden> <analytics>true</analytics> <guid>95f32b4c-0c20-4f0e-86d5-3bc8ece20641</guid> <iphone> <orientations device="iphone"> <orientation>Ti.UI.PORTRAIT</orientation> </orientations> <orientations device="ipad"> <orientation>Ti.UI.PORTRAIT</orientation> <orientation>Ti.UI.UPSIDE_PORTRAIT</orientation> <orientation>Ti.UI.LANDSCAPE_LEFT</orientation> <orientation>Ti.UI.LANDSCAPE_RIGHT</orientation> </orientations> </iphone> <android xmlns:android="http://schemas.android.com/apk/res/android"> <tool-api-level>11</tool-api-level> <manifest> <supports-screens android:anyDensity="true" /> <uses-sdk android:minSdkVersion="11" android:targetSdkVersion="11"/> <application android:hardwareAccelerated="true"> <activity android:configChanges="keyboardHidden|orientation" android:name=".TestActivity" android:theme="@android:style/Theme.Holo.Wallpaper.NoTitleBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> </android> <modules/> </ti:app> {code} h6.Or via Manifest {code:title=platform/android/AndroidManifest.xml} <?xml version="1.0"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1" package="com.appcelerator.com" android:installLocation="preferExternal"> <tool-api-level>11</tool-api-level> <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="11"/> <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:smallScreens="false"/> <application android:hardwareAccelerated="true" android:debuggable="true" android:name="ActifryApplication"> <activity android:configChanges="keyboardHidden|orientation" android:screenOrientation="portrait" android:name=".ActifryActivity" android:theme="@style/Theme.Titanium"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <!-- TI_APPLICATION --> <activity android:configChanges="keyboardHidden|orientation" android:launchMode="singleTask" android:name="ti.modules.titanium.media.TiVideoActivity" android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/> <activity android:configChanges="keyboardHidden|orientation" android:name="org.appcelerator.titanium.TiActivity"/> <activity android:configChanges="keyboardHidden|orientation" android:name="org.appcelerator.titanium.TiTranslucentActivity" android:theme="@android:style/Theme.Translucent"/> <activity android:configChanges="keyboardHidden|orientation" android:name="org.appcelerator.titanium.TiModalActivity" android:theme="@android:style/Theme.Translucent"/> <activity android:configChanges="keyboardHidden|orientation" android:name="ti.modules.titanium.ui.TiTabActivity"/> <activity android:name="ti.modules.titanium.ui.android.TiPreferencesActivity"/> <service android:exported="false" android:name="org.appcelerator.titanium.analytics.TiAnalyticsService"/> </application> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.INTERNET"/> </manifest> {code}4
136TIMOB-8241Core: Define Java coding standardsDefine a document that outlines all Java coding standards any Java written for Appcelerator (internal or community contributions) should adhere to. This should represent more than syntax, but general design approaches and process flow. This document will be focused on language only. Platform Specific information will be contained inside another document.5
137TIMOB-8243Android: ScrollView - If a view is added to a scrollview, the view will not fill the screenSteps to reproduce: 1. Run the following code on Android: {code} //Create a Ti.UI.View with scroll view and do not put any content var win = Ti.UI.createWindow(); win.backgroundColor = 'white'; var label = Ti.UI.createLabel({ text: 'View Size is: ', top: 20, left: 10, height: Ti.UI.SIZE, width: Ti.UI.SIZE, color: 'black' }); var scrollView = Titanium.UI.createScrollView({ contentHeight:'auto', contentWidth:'auto', showVerticalScrollIndicator:true, showHorizontalScrollIndicator:true }); var view = Ti.UI.createView(); var view2 = Ti.UI.createView({ backgroundColor:'red' }) scrollView.add(view2); win.addEventListener('postlayout', function layoutHandler(e) { win.removeEventListener('postlayout', layoutHandler); label.text = 'ScrollView\'s height and width: ' + scrollView.size.height + 'x' + scrollView.size.width + '\n' + 'Screen\'s height and width: ' + win.size.height + 'x' + win.size.width; win.addEventListener('postlayout', layoutHandler); }); win.add(scrollView); win.add(view); view.add(label); win.open(); {code} Actual: A white view appears. Expected: A red view should fill the screen similarly to iOS. See attachments2
138TIMOB-8301Android: Unable to create mapviewThe user is having a tabbedview application. And he is trying to access mapview, by calling the Ti.map.createview. I dont have the complete code sample, but the mapview snippet, and the crash log. Here is the code {code} to setup tabs: app.tabs.stores = Ti.UI.createTab({ title:'Stores', icon:'/images/nav_icons/stores.png', tabIndex:nextTabIndex++ }); app.tabs.stores.window = gs.presenter.createStoreLocator(app.tabs.stores,{hideTabs:false}).window; tabGroup.addTab(app.tabs.stores); later, in the presenter: MapView = Ti.Map.createView({ regionFit:true, userLocation:false, visible:false }); mapView = MapView; mapView.left = 321; mapView.top = 45; // 44 (search) mapView.height = viewHeight; mapView.width = gs.ui.screenWidth; mapView.addEventListener('regionChanged', regionChanged); mapView.addEventListener('click', annotationClick); window.add(mapView); {code} i have attached the crash log.2
139TIMOB-8303iOS: Text Field/Area needs hasText methodh2. Problem TextField and TextArea hasText() method not functioning. h2. Test Case {code:lang=javascript|title=app.js} var win = Ti.UI.createWindow({ backgroundColor : 'white', exitOnClose : true, fullscreen : false, layout : 'vertical', title : 'hasText Demo' });   var textField = Ti.UI.createTextField({     color: '#336699',     backgroundColor:'#eee',     top: 10, left: 10,     width: 250, height: 60,     borderStyle: Ti.UI.INPUT_BORDERSTYLE_ROUNDED }); win.add(textField);   var textArea = Ti.UI.createTextArea({     borderStyle: Ti.UI.INPUT_BORDERSTYLE_ROUNDED,     backgroundColor:'#eee',     color: '#336699',     top: 10, left: 10,     width: 250, height: 200 }); win.add(textArea);     win.open();   textField.addEventListener('change', function(e){     Ti.API.info('hasText? ' + e.source.hasText()); });   textArea.addEventListener('change', function(e){     Ti.API.info('hasText? ' + e.source.hasText()); }); {code}1
140TIMOB-8306Android: Upgrade V8 to 3.9.24We should upgrade to a newer version of V8. One of the main new features that has been implemented is incremental GC. This also exposes some additional API that can help us better tune the GC. Targeting V8 version 3.9.24 (3.9 stable branch).3
141TIMOB-8308Android: Javascript array [] seems to have some inconsistence behavior compared to iOS*Code* Attached with this ticket. *Expected behavior* When you tap on the button, DDMS should show the following in the output: {code} [INFO] print_object > [object Object] [INFO] object data: [object Object] [INFO] object data.screen_name: bhushan,bhaskar,deore [INFO] object data.screen_name[0]: bhushan {code} *Actual behavior* What it actually prints out is the following: {code} INFO/TiAPI(4756): print_object > {screen_name=[Ljava.lang.Object;@40576ad0, idea_title=[Ljava.lang.Object;@40576b18} INFO/TiAPI(4756): object data: [object Object] INFO/TiAPI(4756): object data.screen_name: undefined {code} *Notes* -As you can see, it doesn't even print out 'object data.screen_name[0]', since the array itself seems to be 'undefined'. -The expected behavior is what I get from the iOS simulator's output. -Only tested on the iOS simulator and HTC Sensation 4G running 2.3.x. -Marked as a parity issue, not sure if this is correct, please edit the ticket as appropriate. -HD ticket: http://support-admin.appcelerator.com/display/APP-9272271
142TIMOB-8314iOS: Close event is not firing when closing a windowh4. Problem description I have a NavigationGroup, and two windows. Intermittently, when the second window is closed, the first window goes comatose (won't respond to any clicks). h4. Actual results the window is not throwing the close event when closing. h4. Expected results the window should throw the close event when closing h4. Test case 1. Create a mobile project 2. Add this three files {code:title=app.js|borderStyle=solid} var FirstWindow=Ti.UI.createWindow({ url:'MOMain.js', layout:'vertical', navBarHidden:false }); Ti.App.NavGroup=Ti.UI.iPhone.createNavigationGroup({window:FirstWindow}); var NavBase=Ti.UI.createWindow(); NavBase.add(Ti.App.NavGroup); NavBase.open(); // this opens the "root" window, which is FirstWindow, automatically {code} {code:title=MOMain.js|borderStyle=solid} var MainWin=Ti.UI.currentWindow; function OnFocus(evt) { if (evt.source == MainWin) { Ti.App.CurrentWindow=MainWin; } } MainWin.title='Here is something'; Ti.App.CurrentWindow=MainWin; MainWin.addEventListener('focus',OnFocus); function SetupButtonClick() { var SecondWin=Ti.UI.createWindow({ url:'MOSetup.js', layout:'vertical', navBarHidden:false }); Ti.App.NavGroup.open(SecondWin,{animated:true}); } var SetupButton=Ti.UI.createButton({width:200, height:100, title:'Hit Me'}); SetupButton.addEventListener('click',SetupButtonClick); MainWin.add(SetupButton); {code} {code:title=MOMain.js|borderStyle=solid} var Win2=Ti.UI.currentWindow; function HandleiPhoneCloseEvent() { if (Ti.App.DevelopmentMode) Ti.API.info('# Window HandleiPhoneCloseEvent fired'); Win2.removeEventListener('close',HandleiPhoneCloseEvent); Win2=null; // attempt to release the window's memory } Win2.title='Window 2'; Ti.App.CurrentWindow=Win2; Win2.addEventListener('close',HandleiPhoneCloseEvent); // catches the iPhone NavGroup back button close {code} 3. Run the app 4. Click on the "Hit Me" button 5. Click the navgroup's back button 6. Try to click on the "Hit Me" button again h4. Extra info This seems to be timing dependent, so you may have to repeat the 2 clicks several times. I can make it happen in under 30 seconds...usually within 5 seconds. My best reproduction comes by waiting 2.5 seconds before clicking the back button. If you have trouble reproducing this, vary the time between seeing the second window and clicking the back button (faster and then slower). After some investigation, I can see that the 'close' event of the second window never fires when the problem occurs (neither does the focus event of the first window). This seems to point to a serious flaw. In a larger app, the failure occurs 80% of the time. Our app is totally dead in the water because of this, and we need to release it soon. Can you please take a look into this? Please note that I've reduced this down about as far as possible, while still demonstrating the error. Removing any of the references to Ti.App or removing any of the event listeners hides the problem, but all of my apps are dependent on these.3
143TIMOB-8362Android: Ti.UI.createScrollView sizing incorrectly in a vertical layouth2.Problem Setting Ti.UI.createScrollView.height to Ti.UI.SIZE causes the scrollView to take up the entire screen. If navBarHidden:true is set in app.js, a scrollView whose contents are minor will now scroll. This did not occur in Android 2.2. h2.Steps to Reproduce # Make a project with the below app.js. # Run in Android 4.0 emulator You will see that most of the screen (excluding the custom navbar) is red. If you click and drag, you will see it scroll even though the components are very minor. One other point of interest, I added a label at the bottom of the window, but it is not visible since the scrollview wants to take up the entire parent. {code:title=Bar.java|borderStyle=solid} var win = Ti.UI.createWindow({ backgroundColor: '#7B6700', exitOnClose:true, layout:'vertical', navBarHidden:true }); var NavBarView = Ti.UI.createView({height: '25dp', top:0, backgroundColor: 'green', width:'100%'}); var View1 = Ti.UI.createScrollView({left:'3dp', right:'3dp', height: Ti.UI.SIZE, showVerticalScrollIndicator:true, scrollType:'vertical', layout:'vertical', backgroundColor: 'red', showHorizontalScrollIndicator:false, touchEnabled: true }); var button = Ti.UI.createButton({title: 'Click', width: '100dp', height: '50dp' }); button.addEventListener('click', ButtonClick); function ButtonClick(e) { Ti.API.info('View1 height: ' + View1.size.height); } Label1 = Ti.UI.createLabel({text:'Label 1'}); View1.add(button); win.add(NavBarView); win.add(View1); win.add(Label1); win.open(); {code}3
144TIMOB-8332Android: tableView textField focus is lost while typingh2. Problem description TableView textField loses focus when typing in. h2. Steps to reproduce Create a tableView and a tableViewRow with a textField. Click on the textField and start typing some text Result: after the first character, focus on the textField is lost. {code:lang=javascript|name=app.js} var win = Ti.UI.createWindow({ backgroundColor:'black' }); var data = []; var tableview; var row = Ti.UI.createTableViewRow({ clickName: 'row' }); var textfield = Titanium.UI.createTextField({ width: '80%', height: 80, color: '#000', returnKeyType: Titanium.UI.RETURNKEY_DONE, enableReturnKey: true, keyboardType: Titanium.UI.KEYBOARD_ASCII, autocorrect: false, hintText: 'Enter text Field', textAlign: 'left', clearOnEdit: false, borderStyle: Titanium.UI.INPUT_BORDERSTYLE_ROUNDED, clearButtonMode: Titanium.UI.INPUT_BUTTONMODE_ONFOCUS, leftButtonMode: Titanium.UI.INPUT_BUTTONMODE_ALWAYS }); textfield.font = { fontSize: '15sp', fontFamily: 'Arial' }; textfield.autocorrect = true; textfield.borderStyle = Titanium.UI.INPUT_BORDERSTYLE_NONE; row.add(textfield); data = [row]; tableview = Titanium.UI.createTableView({ data: data, rowBackgroundColor: 'white', }); win.add(tableview); win.open(); {code} h2. Additional notes Ticket associated: http://support-admin.appcelerator.com/display/APP-6827963
145TIMOB-8342Android: keyDispatchingTimedOut when trying to resume an app from background to foreground*Code* I personally would say majority of Titanium Android apps, but for this ticket, please try it with the KitchenSink app. *Expected behavior* When you put an app into the background, and bring it back into the foreground, it should work perfectly fine. *Actual behavior* The app seems to show a black background for 1-2 seconds and then restarts. *Steps to reproduce* I can reproduce this issue 3 out of 5 times, by doing the following: *1.* If you have the KitchenSink app open in memory from before, kill it. We want to make sure we start from a clean slate. *2.* Make sure you have your USB cable connected to your laptop and phone. *3.* Run the KitchenSink app, wait for it to load and press the home button (don't press the back button, but instead the home button!) *4.* Run a few other apps in the background, I ran 'Gmail', 'Contacts', 'Internet', 'Peep', 'Places', 'Stocks' and 'Market'. It's important that you press the home button and NOT the back button! (NOTE if it doesn't work for you the first time, try opening more or even less apps, it might make a difference, depending on the device's specs). *5.* Once you have some apps running in the background, make sure you are back on the main home screen. *6.* Press the power button (lock your screen, turn the screen off, but don't power the device off!) *7.* Unplug the USB cable. *8.* Unlock your phone. *9.* Press on the KitchenSink app icon. *10.* Expect to see a black background for a second or two and then it will restart the app. *11.* If you don't, repeat from step 1. *Notes* -Different apps behave differently. The KitchenSink app, for example, seems to show a black background for 1-2 seconds and then restart the whole app. Other apps, such as Mister (from Google Play), actually shows a black screen and never continues to do anything else. The Jiffy Lube app, restarts and has the loading screen image visible as the background border. -KitchenSink was packaged with a 2.0 CI build. -Mister on Google Play is packaged with a 1.9.0.v20120209110134 build. -Jiffy Lube on Google Play is packaged with the 1.8.2 build. -If it doesn't work the first time, please keep trying for a while. Sometimes it takes a few tries, before you can reproduce this issue. Also try to restart your device, so all other apps are unloaded from memory. Try to open a few more apps, or maybe even less apps, it should eventually be reproducible. -Only tested on a HTC Sensation 4G, running Android 2.3.x.1
146TIMOB-8368iOS: soft keyboard behavior during orientation change is now different across handheld devicesDescription: While writing bug TIMOB-8363 we checked the behavior of this iOS feature on a variety of devices and found new behavior but unique in all of them. For the 4.0.2 device, the keyboard is not rendered correctly during rotation (see TIMOB 8363) On 4.3.5 when starting with the soft keyboard on screen, on orientation change, the keyboard animates off-screen then is redrawn after the UI has handled the orientation change. This occurred on both portrait to landscape and landscape to portrait orientation changes. On iPod 5.1 the same behavior like on iPod 4.3.5, but this occurs only when making a portrait to landscape orientation change. For landscape to portrait orientation changes, the soft keyboard does not leave the screen during the orientation change, it simply rotates with the other UI elements. Steps to reproduce: 1) Using SDK 2.0.0.v20120328000206 build and install KS 2) Bring up the soft KB 3) Rotate the device Result: All devices show unique behavior, but in general there is a KB redraw. The older behavior was that the KB stayed on screen and rotated with the UI. Expected: The KB stays on screen and rotates with the UI. Notes: Does not occur with 1.8.21
147TIMOB-8383iOS: Feature to add a property to detect if keyboard is being displayed or notIt has been requested to add a new feature to check if soft keyboard on the device is displayed or not. 1
148TIMOB-8414Android: Debugger - On V8, JNIUtil error messages appear when debugging with breakpointsSteps to reproduce: 1. Unzip and import attachment 2. From https://wiki.appcelerator.org/display/tp/Debugger+Test+Plan, execute test case 1013 Actual: After step 9, the following error messages appear: {code} E/JNIUtil ( 398): !!! Unable to convert unknown Java object class 'org.appcelerator.kroll.KrollRuntime$1' to Js value !!! E/JNIUtil ( 398): !!! Unable to convert unknown Java object class 'org.appcelerator.kroll.KrollRuntime$1' to Js value !!! E/JNIUtil ( 398): !!! Unable to convert unknown Java object class 'org.appcelerator.kroll.KrollRuntime$1' to Js value !!! {code} Even though these error messages appear, it does not seem to affect the debugger i.e. the debugger does not terminate and I am still getting expected results from the debugger test plan. Expected: Error messages should not appear. Note: * The error messages do not appear in 1.8.2 * Only tested in v8. Did not test in rhino. * The error messages appear only when using breakpoints.1
149TIMOB-8417iOS: Textfield in a scrollview scrolls if bluetooth keyboard is connected to iPadh3. Code h1. Please test on the iPad device {noformat} var win = Ti.UI.createWindow({ backgroundColor:'white' }); var field = Ti.UI.createTextField({ hintText: 'password', color:'#666', width:'94%', left: '3%', top: 140, width: '50%', height: 45, borderRadius:0, borderStyle:Titanium.UI.INPUT_BORDERSTYLE_BEZEL, passwordMask: true }); var scroll = Ti.UI.createScrollView({ left: 11, top: 12, width: 433, height: 390, contentHeight:'auto', contentWidth: 'auto', }); scroll.add(field); win.add(scroll); win.open(); {noformat} h3. Expected Behavior Clicking on the textField should not scroll it up when a bluetooth keyboard is connected to the iPad. h3. Actual Behavior On connecting the keyboard and clicking on the textfield, the textfield scrolls up as if the soft keyboard is present.1
150TIMOB-8418iOS: AudioPlayer is failing for some mp3, even if are in a supported format/encoding.h4. Problem Description This doesn't seem to work for me, the mp3 plays fine via a web browser though. The code is correct so internally it doesn't like the file format. Is there a reason for this or something I can do (including encoding the audio differently) so that it's compatible. 90% of the audio files I encode all work, it's only a small number that don't and they are encoded the same way always. Replacing the audio file with something else works fine. This is the last stumbling block to release my app. h4. Actual Results One file it's working, one it's not. EVen if they are encoded in the same way. h4. Expected results Similar encoded mp3 files should play just fine h4. Test Case 1. Create a new mobile Project 2. Add this code {code} var win = Ti.UI.createWindow(); var vurl = "http://www.voxsci.com/turtle2.mp3"; Ti.API.info(vurl); var streamer = Titanium.Media.createAudioPlayer({ allowBackground: true, url:vurl, preload:true }); streamer.start(); Ti.API.info("Audio started"); win.open(); {code} 3. If you change the vurl to "http://www.voxsci.com/turtle1.mp3", it will work just fine. h4. Extra info I checked the files, they are similar: Mono, 44100hz, 32 bits float and they work in browser and audacity. 2
151TIMOB-9153Android: Deployment: Android Emulator intermittently fails to launch app after timed outEmulator launches and fails to load app with timed out log: [INFO] logfile = /Users/dhyde/Documents/Titanium Studio 2.0.0 Workspace/NewProject/build.log [INFO] Building NewProject for Android ... one moment [INFO] Titanium SDK version: 2.0.0 (03/28/12 18:32 7c5487f) [ERROR] Timed out waiting for emulator to be ready, you may need to close the emulator and try again Steps to Reproduce: 1. Create project, launch on emulator. Expected Result: App should launch. Actual Result: Intermittently app does not install. Timed out error.2
152TIMOB-8425iOS: Textfield in scrollview does not slide back to original position on blurh3. Code Test this code in landscape orientation {noformat} var win = Ti.UI.createWindow({ backgroundColor:'white' }); var formboxLeft = Ti.UI.createView({ backgroundImage:'bg-white-box--with-shadow.png', left: 20, top: 265, width: 460, height: 420, }); var field = Ti.UI.createTextField({ hintText: 'password', color:'#666', width:'94%', left: '3%', top: 140, width: '50%', height: 45, borderRadius:0, borderStyle:Titanium.UI.INPUT_BORDERSTYLE_BEZEL, passwordMask: true }); var scroll = Ti.UI.createScrollView({ left: 11, top: 12, width: 433, height: 390, contentHeight:'auto', contentWidth: 'auto', }); scroll.add(field); formboxLeft.add(scroll); win.add(formboxLeft); win.open(); {noformat} h3. Expected Behavior Clicking on the textfield should bring up the keyboard and on textfield blur (keyboard down), the textfield should scroll back to original position h3. Actual Behavior Textfield does not scroll back to original position and there is a gap that can be seen between the textfield and the border of the scrollview.1
153TIMOB-8431iOS: 4.3: KitchenSink: Base UI > Views > Map View: mapview annotation view does not appearWhen KitchenSink > UI > Views > Map View is run, the annotation view (white box with title and subtitle) is not displayed on mapview load. However, clicking the annotation pin will correctly display the annotation view. Otherwise, the annotation view correctly displays on mapview load on the iPad3 5.1 and iPad/iPhone Simulator 5.0. This is a regression, as it works on iPad/iPhone Simulator 4.3 using SDK 1.8.2. This is not directly related to https://jira.appcelerator.org/browse/TIMOB-5305, as the bug is fixed on the iPad 4.3 device and simulator. Steps to Reproduce: 1. Run KitchenSink > UI > Views > Map View on iOS. Expected Result: Annotation view should be visible. Actual Result: Annotation view not visible.1
154TIMOB-8437Android: TextField layout bug on tableth6.Issue When using the texfield on android tablet in the following way, the background of the textfield and its cursor becomes invisible. Modal property true should cause the issue. h6.Tested on Droid Razr 2.3.5 > non affected Asus Transformer Tf101 with honeycomb(3.1) > affected h6.Repro sequence {code} /** * @author Carlo Blanco Benitez */ var win = Ti.UI.createWindow({ backgroundImage:'guide_fond_notice.png',//backgroundImage attached navBarHidden:true, exitOnClose:true, //modal:true,//having modal enabled backgroundColor:'black', top:'0dp', left:'0dp', right:'0dp', bottom:'0dp' }); var wrapper = Ti.UI.createView({ top:'0dp', left:'0dp', right:'0dp', bottom:'0dp' }); win.add(wrapper); var textField = Ti.UI.createTextField({ color:'black', width:'100dp', height:'50dp', returnKeyType: Titanium.UI.RETURNKEY_SEARCH, autocorrect:false }); wrapper.add(textField); win.open(); {code} 3
155TIMOB-8439Android: Unable to get any results when pulling events by date rangeh6.Issue Exception is thrown as Android is unable to get any results when pulling events by date range h6.Tested on sdk-version: 2.1.0.v20120329000337 h6.Runtime engines Same thing happens with V8 and Rhino. h6.Device Galaxy Tab 7 Plus model GT-P6210 Android version 3.2 Kernel 2.6.36-P6210UEKJC-CL567728 se.infra@SEI-20 #3 h6.Repro sequence {code} // this sets the background color of the master UIView (when there are no windows/tab groups on it) Titanium.UI.setBackgroundColor('#000'); var win = Titanium.UI.createWindow({ title:'Calendar', backgroundColor:'#fff' }); win.open(); var startDate = new Date(); startDate.setFullYear(startDate.getFullYear()-1,0,1); Ti.API.info('startDate: '+startDate); var endDate = new Date(); endDate.setFullYear(endDate.getFullYear()+1,0,1); Ti.API.info('endDate: '+endDate); function showCalendars(calendars) { for (var i = 0; i < calendars.length; i++) { Ti.API.info(calendars[i].name); Ti.API.info(JSON.stringify(calendars[i])); } } Ti.API.info('ALL CALENDARS:'); showCalendars(Ti.Android.Calendar.allCalendars); Ti.API.info('SELECTABLE CALENDARS:'); showCalendars(Ti.Android.Calendar.selectableCalendars); var out = []; Ti.API.info('TRY TO GET EVENTS IN ALL CALENDARS:'); var calendars = Ti.Android.Calendar.allCalendars Ti.API.info(JSON.stringify(calendars)); for (var i=0; i < calendars.length; i++) { Ti.API.info(JSON.stringify(calendars[i])); try { var cal_events = calendars[i].getEventsBetweenDates(startDate,endDate); for (var j=0; j < cal_events.length; j++) { out.push(cal_events[j]); }; } catch(err) { Ti.API.error("ERROR "+err); } }; Ti.API.info('TRY TO GET EVENTS IN SELECTABLE CALENDARS:'); var calendars = Ti.Android.Calendar.selectableCalendars Ti.API.info(JSON.stringify(calendars)); for (var i=0; i < calendars.length; i++) { Ti.API.info(JSON.stringify(calendars[i])); try { var cal_events = calendars[i].getEventsBetweenDates(startDate,endDate); for (var j=0; j < cal_events.length; j++) { out.push(cal_events[j]); }; } catch(err) { Ti.API.error("ERROR "+err); } }; Ti.API.info('ALL THE EVENTS:'); Ti.API.info(JSON.stringify(out)); {code} h6.Console output {code} 03-30 10:49:38.935: I/TiApplication(23751): (main) [98,98] Titanium 2.1.0 (2012/03/29 00:04 ac3852d) 03-30 10:49:38.945: D/KeyguardViewMediator(2827): setHidden false 03-30 10:49:38.955: D/KeyguardViewMediator(2827): setHidden false 03-30 10:49:38.960: D/KeyguardViewMediator(2827): setHidden false 03-30 10:49:38.975: D/KeyguardViewMediator(2827): setHidden false 03-30 10:49:38.995: D/KeyguardViewMediator(2827): setHidden false 03-30 10:49:39.010: D/KeyguardViewMediator(2827): setHidden false 03-30 10:49:39.025: D/KeyguardViewMediator(2827): setHidden false 03-30 10:49:39.035: D/dalvikvm(23751): GC_CONCURRENT freed 281K, 6% free 6505K/6919K, paused 1ms+1ms 03-30 10:49:39.040: D/KeyguardViewMediator(2827): setHidden false 03-30 10:49:39.055: D/KeyguardViewMediator(2827): setHidden false 03-30 10:49:39.075: D/KeyguardViewMediator(2827): setHidden false 03-30 10:49:39.080: D/dalvikvm(23751): Trying to load lib /data/data/info.rborn.calendar/lib/libstlport_shared.so 0x4079b9e0 03-30 10:49:39.080: I/TiApplication(23751): (main) [146,244] Titanium Javascript runtime: v8 03-30 10:49:39.080: D/dalvikvm(23751): Added shared lib /data/data/info.rborn.calendar/lib/libstlport_shared.so 0x4079b9e0 03-30 10:49:39.080: D/dalvikvm(23751): No JNI_OnLoad found in /data/data/info.rborn.calendar/lib/libstlport_shared.so 0x4079b9e0, skipping init 03-30 10:49:39.080: D/dalvikvm(23751): Trying to load lib /data/data/info.rborn.calendar/lib/libkroll-v8.so 0x4079b9e0 03-30 10:49:39.090: D/KeyguardViewMediator(2827): setHidden false 03-30 10:49:39.090: I/TiRootActivity(23751): (main) [0,0] checkpoint, on root activity create, savedInstanceState: null 03-30 10:49:39.095: D/dalvikvm(23751): Added shared lib /data/data/info.rborn.calendar/lib/libkroll-v8.so 0x4079b9e0 03-30 10:49:39.105: D/KeyguardViewMediator(2827): setHidden false 03-30 10:49:39.120: D/KeyguardViewMediator(2827): setHidden false 03-30 10:49:39.140: D/KeyguardViewMediator(2827): setHidden false 03-30 10:49:39.140: D/KeyguardViewMediator(2827): setHidden false 03-30 10:49:39.140: I/LiveWallpaper(2895): Engine.onVisibilityChanged() - false 03-30 10:49:39.140: I/SurfaceFlinger(2698): id=1870 Removed com.android.launcher/com.android.launcher2.Launcher idx=2 Map Size=3 03-30 10:49:39.150: I/SurfaceFlinger(2698): id=1870 Removed com.android.launcher/com.android.launcher2.Launcher idx=-2 Map Size=3 03-30 10:49:39.390: E/TiApplication(23751): (KrollRuntimeThread) [298,298] APP PROXY: ti.modules.titanium.app.AppModule@407b5cd0 03-30 10:49:39.485: I/TiAPI(23751): startDate: Sat Jan 01 2011 10:49:39 GMT+0100 (CET) 03-30 10:49:39.485: I/TiAPI(23751): endDate: Tue Jan 01 2013 10:49:39 GMT+0100 (CET) 03-30 10:49:39.485: I/TiAPI(23751): ALL CALENDARS: 03-30 10:49:39.495: I/TiAPI(23751): My calendar 03-30 10:49:39.495: I/TiAPI(23751): {"hidden":false,"id":"1","selected":true,"name":"My calendar"} 03-30 10:49:39.495: I/TiAPI(23751): dan.tamas.tst@gmail.com 03-30 10:49:39.495: I/TiAPI(23751): {"hidden":false,"id":"2","selected":true,"name":"dan.tamas.tst@gmail.com"} 03-30 10:49:39.495: I/TiAPI(23751): dan tamas 03-30 10:49:39.500: I/TiAPI(23751): {"hidden":false,"id":"3","selected":true,"name":"dan tamas"} 03-30 10:49:39.500: I/TiAPI(23751): test 1 03-30 10:49:39.500: I/TiAPI(23751): {"hidden":false,"id":"4","selected":true,"name":"test 1"} 03-30 10:49:39.500: I/TiAPI(23751): test 1 03-30 10:49:39.500: I/TiAPI(23751): {"hidden":false,"id":"5","selected":true,"name":"test 1"} 03-30 10:49:39.500: I/TiAPI(23751): test 2 03-30 10:49:39.500: I/TiAPI(23751): {"hidden":false,"id":"6","selected":true,"name":"test 2"} 03-30 10:49:39.500: I/TiAPI(23751): SELECTABLE CALENDARS: 03-30 10:49:39.505: I/TiAPI(23751): My calendar 03-30 10:49:39.505: I/TiAPI(23751): {"hidden":false,"id":"1","selected":true,"name":"My calendar"} 03-30 10:49:39.505: I/TiAPI(23751): dan.tamas.tst@gmail.com 03-30 10:49:39.505: I/TiAPI(23751): {"hidden":false,"id":"2","selected":true,"name":"dan.tamas.tst@gmail.com"} 03-30 10:49:39.505: I/TiAPI(23751): dan tamas 03-30 10:49:39.505: I/TiAPI(23751): {"hidden":false,"id":"3","selected":true,"name":"dan tamas"} 03-30 10:49:39.505: I/TiAPI(23751): test 1 03-30 10:49:39.505: I/TiAPI(23751): {"hidden":false,"id":"4","selected":true,"name":"test 1"} 03-30 10:49:39.505: I/TiAPI(23751): test 1 03-30 10:49:39.505: I/TiAPI(23751): {"hidden":false,"id":"5","selected":true,"name":"test 1"} 03-30 10:49:39.505: I/TiAPI(23751): test 2 03-30 10:49:39.505: I/TiAPI(23751): {"hidden":false,"id":"6","selected":true,"name":"test 2"} 03-30 10:49:39.505: I/TiAPI(23751): TRY TO GET EVENTS IN ALL CALENDARS: 03-30 10:49:39.515: I/TiAPI(23751): [{"hidden":false,"id":"1","selected":true,"name":"My calendar"},{"hidden":false,"id":"2","selected":true,"name":"dan.tamas.tst@gmail.com"},{"hidden":false,"id":"3","selected":true,"name":"dan tamas"},{"hidden":false,"id":"4","selected":true,"name":"test 1"},{"hidden":false,"id":"5","selected":true,"name":"test 1"},{"hidden":false,"id":"6","selected":true,"name":"test 2"}] 03-30 10:49:39.515: I/TiAPI(23751): {"hidden":false,"id":"1","selected":true,"name":"My calendar"} 03-30 10:49:39.520: W/TiEvent(23751): (KrollRuntimeThread) [132,430] unable to get any results when pulling events by date range 03-30 10:49:39.520: I/TiAPI(23751): {"hidden":false,"id":"2","selected":true,"name":"dan.tamas.tst@gmail.com"} 03-30 10:49:39.525: W/TiEvent(23751): (KrollRuntimeThread) [4,434] unable to get any results when pulling events by date range 03-30 10:49:39.525: I/TiAPI(23751): {"hidden":false,"id":"3","selected":true,"name":"dan tamas"} 03-30 10:49:39.525: W/TiEvent(23751): (KrollRuntimeThread) [2,436] unable to get any results when pulling events by date range 03-30 10:49:39.525: I/TiAPI(23751): {"hidden":false,"id":"4","selected":true,"name":"test 1"} 03-30 10:49:39.530: W/TiEvent(23751): (KrollRuntimeThread) [3,439] unable to get any results when pulling events by date range 03-30 10:49:39.530: I/TiAPI(23751): {"hidden":false,"id":"5","selected":true,"name":"test 1"} 03-30 10:49:39.530: W/TiEvent(23751): (KrollRuntimeThread) [3,442] unable to get any results when pulling events by date range 03-30 10:49:39.535: I/TiAPI(23751): {"hidden":false,"id":"6","selected":true,"name":"test 2"} 03-30 10:49:39.535: W/TiEvent(23751): (KrollRuntimeThread) [3,445] unable to get any results when pulling events by date range 03-30 10:49:39.535: I/TiAPI(23751): TRY TO GET EVENTS IN SELECTABLE CALENDARS: 03-30 10:49:39.540: I/TiAPI(23751): [{"hidden":false,"id":"1","selected":true,"name":"My calendar"},{"hidden":false,"id":"2","selected":true,"name":"dan.tamas.tst@gmail.com"},{"hidden":false,"id":"3","selected":true,"name":"dan tamas"},{"hidden":false,"id":"4","selected":true,"name":"test 1"},{"hidden":false,"id":"5","selected":true,"name":"test 1"},{"hidden":false,"id":"6","selected":true,"name":"test 2"}] 03-30 10:49:39.540: I/TiAPI(23751): {"hidden":false,"id":"1","selected":true,"name":"My calendar"} 03-30 10:49:39.545: W/TiEvent(23751): (KrollRuntimeThread) [8,453] unable to get any results when pulling events by date range 03-30 10:49:39.545: I/TiAPI(23751): {"hidden":false,"id":"2","selected":true,"name":"dan.tamas.tst@gmail.com"} 03-30 10:49:39.545: W/TiEvent(23751): (KrollRuntimeThread) [3,456] unable to get any results when pulling events by date range 03-30 10:49:39.545: I/TiAPI(23751): {"hidden":false,"id":"3","selected":true,"name":"dan tamas"} 03-30 10:49:39.550: W/TiEvent(23751): (KrollRuntimeThread) [3,459] unable to get any results when pulling events by date range 03-30 10:49:39.550: I/TiAPI(23751): {"hidden":false,"id":"4","selected":true,"name":"test 1"} 03-30 10:49:39.550: W/TiEvent(23751): (KrollRuntimeThread) [3,462] unable to get any results when pulling events by date range 03-30 10:49:39.550: I/TiAPI(23751): {"hidden":false,"id":"5","selected":true,"name":"test 1"} 03-30 10:49:39.555: W/TiEvent(23751): (KrollRuntimeThread) [3,465] unable to get any results when pulling events by date range 03-30 10:49:39.555: I/TiAPI(23751): {"hidden":false,"id":"6","selected":true,"name":"test 2"} 03-30 10:49:39.560: W/TiEvent(23751): (KrollRuntimeThread) [2,467] unable to get any results when pulling events by date range 03-30 10:49:39.560: I/TiAPI(23751): ALL THE EVENTS: 03-30 10:49:39.560: I/TiAPI(23751): [] 03-30 10:49:39.590: D/dalvikvm(23751): GC_FOR_ALLOC freed 246K, 6% free 6610K/6983K, paused 13ms 03-30 10:49:39.590: I/dalvikvm-heap(23751): Grow heap (frag case) to 7.996MB for 1536016-byte allocation 03-30 10:49:39.620: D/dalvikvm(23751): GC_FOR_ALLOC freed <1K, 5% free 8109K/8519K, paused 12ms 03-30 10:49:39.620: W/CursorWrapperInner(23751): Cursor finalized without prior close() 03-30 10:49:39.645: W/CursorWrapperInner(23751): Cursor finalized without prior close() 03-30 10:49:39.645: D/dalvikvm(23751): GC_CONCURRENT freed 1K, 5% free 8108K/8519K, paused 1ms+1ms 03-30 10:49:39.645: W/CursorWrapperInner(23751): Cursor finalized without prior close() 03-30 10:49:39.645: W/CursorWrapperInner(23751): Cursor finalized without prior close() 03-30 10:49:39.670: D/dalvikvm(23751): GC_FOR_ALLOC freed 14K, 5% free 8094K/8519K, paused 12ms 03-30 10:49:39.670: I/dalvikvm-heap(23751): Grow heap (frag case) to 8.630MB for 682256-byte allocation 03-30 10:49:39.690: D/dalvikvm(23751): GC_FOR_ALLOC freed 0K, 6% free 8760K/9223K, paused 12ms 03-30 10:49:39.725: D/dalvikvm(23751): GC_CONCURRENT freed 0K, 6% free 8760K/9223K, paused 1ms+1ms 03-30 10:49:39.730: I/TiRootActivity(23751): (main) [0,0] checkpoint, on root activity resume. activity = info.rborn.calendar.CalendartestActivity@407f22c8 03-30 10:49:39.735: D/WindowManager(2827): addWindowToListInOrder() : current mSkipWidgetFocus='true' 03-30 10:49:39.740: I/SurfaceFlinger(2698): id=1872(1) createSurface 0x40514 for pid 23751 (1x1),2 flag=0, info.rborn.calendar/info.rborn.calendar.CalendartestActivity 03-30 10:49:39.745: D/KeyguardViewMediator(2827): setHidden false 03-30 10:49:39.750: I/WindowManager(2827): Putting input method here! 03-30 10:49:39.750: D/WindowManager(2827): w.mAttrs.token=ActivityRecord{40decca0 info.rborn.calendar/.CalendartestActivity} 03-30 10:49:39.750: D/WindowManager(2827): w.mToken=AppWindowToken{41ae2ef8 token=ActivityRecord{40decca0 info.rborn.calendar/.CalendartestActivity}} 03-30 10:49:39.750: D/WindowManager(2827): Desired input method target: Window{40ba9a60 info.rborn.calendar/info.rborn.calendar.CalendartestActivity paused=false} 03-30 10:49:39.750: D/WindowManager(2827): Current focus: Window{40ba9a60 info.rborn.calendar/info.rborn.calendar.CalendartestActivity paused=false} 03-30 10:49:39.750: D/WindowManager(2827): Last focus: Window{40ba9a60 info.rborn.calendar/info.rborn.calendar.CalendartestActivity paused=false} 03-30 10:49:39.750: D/WindowManager(2827): IM target client: com.android.internal.view.IInputMethodClient$Stub$Proxy@41040b20 03-30 10:49:39.750: D/WindowManager(2827): IM target client binder: android.os.BinderProxy@41066c90 03-30 10:49:39.750: D/WindowManager(2827): Requesting client binder: android.os.BinderProxy@41066c90 03-30 10:49:39.750: D/CLIPBOARD(4466): Hide Clipboard dialog at Starting input: finished by someone else... ! 03-30 10:49:39.750: W/CPUclock(2827): mDVFSUpperLock.release() 03-30 10:49:39.750: D/CLIPBOARD(2827): Hide Clipboard dialog inside hideSoftInput() ! 03-30 10:49:39.750: D/CLIPBOARD(2827): Hide Clipboard dialog inside windowGainedFocus() ! 03-30 10:49:39.750: D/WindowManager(2827): token=AppWindowToken{41ae2ef8 token=ActivityRecord{40decca0 info.rborn.calendar/.CalendartestActivity}} 03-30 10:49:39.750: I/WindowManager(2827): Placing input method @10 03-30 10:49:39.765: D/KeyguardViewMediator(2827): setHidden false 03-30 10:49:39.765: D/KeyguardViewMediator(2827): setHidden false 03-30 10:49:39.765: I/ActivityManager(2827): Displayed info.rborn.calendar/.CalendartestActivity: +1s156ms 03-30 10:49:39.765: D/CLIPBOARD(23751): Hide Clipboard dialog at Starting input: finished by someone else... ! 03-30 10:49:39.770: D/KeyguardViewMediator(2827): setHidden false 03-30 10:49:39.770: D/TabletStatusBar(2886): lights on {code}2
156TIMOB-8455Android: Email Dialog - Email View does not appear on Kindle FireDescription: While testing Email Dialog, I noticed that after picking an image email view does not appear. Does not occur on 1.8.2. Spets: 1. Run KitchenSink 2. Go to Base UI-Views-Email Dialog 3. Pick an image Expected result: Email view should appear Actual result: Email view is not shown1
157TIMOB-8459Android: KitchenSinkNook - Photo Gallery - After selecting an image from the photo gallery, it is not displayedSteps to reproduce: 1. Launch KS Nook on the Kindle Fire 2. Navigate to Miscellaneous > Photo Gallery 3. Choose a photo Actual result: A gray image view is displayed Expected result: The image is displayed in the image view *Note* works in 1.8.2 Log is attached1
158TIMOB-8465Android: Activities don't get correctly handled if first opening a Window and then a TabGroup h2. Problem description The app opens a window for login - then opens a tabGroup. Android activities are no longer handled correctly. h2. Steps to reproduce See location for the project in the comments. Attaching logs relative to successful and failing case. Successful scenario: The first window is not included in a tab group. Click on on "connect with facebook" - then click the 'buy' button and click the "facebook friends" button (window i snow included in a tabGroup). Facebook friends are displayed. Failure scenario: Click on login with buddy beers and use the credentials: - test case added below h2. Additional notes login window when you start the app is 'ui/login/start.js' ; tabgroup is in 'ui/common.js' ; facebook api are invoked in 'ui/send/person_via_faceboook.js' and in 'lib/webservice.js' 1
159TIMOB-8470Android: Picker in scrollView not workingh6.Issue Picker in scrollView not working. h6.Tested on Android Emulator 2.2 Droid Razr 2.3.5 h6.Runtime Engines Rhino / V8 h6.Steps to reproduce 1. Run code below 2. Click the picker h6.Expected behavior See fully operational Pickers whose options render on screen h6.Repro sequence {code} Titanium.UI.setBackgroundColor('#000'); var win1 = Titanium.UI.createWindow({ title:'Tab 1', backgroundColor:'#fff' }); var win5 = Titanium.UI.createScrollView({ contentHeight:'auto', left:15, right:5 ,layout:'vertical' }); var names = ['Joanie', 'Mickey', 'Jean-Pierre', 'Gustav', 'Raul', 'Mimi', 'Emily', 'Sandra', 'Carrie', 'Chachi']; var verbs = ['loves', 'likes', 'visits', 'loathes', 'waves to', 'babysits', 'accompanies', 'teaches', 'announces', 'supports', 'knows', 'high-fives']; var rows1 = []; for (var i = 0; i < names.length; i++) { rows1.push(Ti.UI.createPickerRow({title: names[i]})); } var rows2 = []; for (i = 0; i < verbs.length; i++) { rows2.push(Ti.UI.createPickerRow({title: verbs[i]})); } var rows3 = []; for (i = (names.length -1); i >=0; i--) { rows3.push(Ti.UI.createPickerRow({title: names[i]})); } var column1 = Ti.UI.createPickerColumn( { rows: rows1, font: {fontSize: "12"} }); var column2 = Ti.UI.createPickerColumn( { rows: rows2, font: {fontSize: "12"} }); var column3 = Ti.UI.createPickerColumn( { rows: rows3, font: {fontSize: "12"} }); var picker = Ti.UI.createPicker({ useSpinner: true, visibleItems: 7, type : Ti.UI.PICKER_TYPE_PLAIN, top: 20, height: '200', columns: [ column1, column2, column3 ] }); picker.addEventListener('change', function(e) { Ti.API.info(e.selectedValue[0] + " " + e.selectedValue[1] + " " + e.selectedValue[2]); }); win5.add(picker); win1.add(win5); win1.open(); {code} 1
160TIMOB-8484iOS: Ti.UI.Window not restoring correctly after a youtube-in-app view exits*Code* http://pastebin.com/NXYbpfRH *Expected behavior* When you run the app, watch the YouTube video, it should return without messing up any UI. *Actual behavior* Once the video has finished, it actually shows the status bar overlapping the window. *Steps to reproduce* 1) Click "Watch YouTube Video" 2) Click on webview to play Youtube video while holding device in PORTRAIT orientation 3) While video is loading, turn device to LANDSCAPE. You will notice that status bar moves to the PORTRAIT orientation. 4) While video is playing in LANDSCAPE, return device to PORTRAIT orientation (you will notice that statusbar is in proper position). 5) Return device to LANDSCAPE orientation, and end video by clicking "Done". 6) The Youtube player will close and the window will reopen with window's navbar underneath the status bar. *Notes* -Only happens on a device, I tried with an iPhone 3GS running 5.0.1. -HD ticket: http://support-admin.appcelerator.com/display/APP-3332373
161TIMOB-8492Android: Impossible to lock the app in Landscape modeh4. Problem Description Have been trying to setup a tab app to be locked in landscape mode via tiapp.xml (modifying the android manifest): {code} <android xmlns:android="http://schemas.android.com/apk/res/android"> <manifest> <activity android:name="org.appcelerator.titanium.TiActivity" android:configChanges="keyboardHidden" android:screenOrientation="landscape" /> <activity android:name="ti.modules.titanium.ui.TiTabActivity" android:configChanges="keyboardHidden" /> <activity android:name="ti.modules.titanium.ui.TiTabActivity" android:configChanges="keyboardHidden|orientation" android:screenOrientation="landscape" /> </manifest> </android> {code} h4. Actual Results The tabbed app doesn't show in landscape h4. Expected results The tabbed app showing in landscape mode. h4. Test Case. 1. Create a new mobile Project 2. Replace the default android manifest section in the tiapp.xml with this: {code} <android xmlns:android="http://schemas.android.com/apk/res/android"> <manifest> <activity android:name="org.appcelerator.titanium.TiActivity" android:configChanges="keyboardHidden" android:screenOrientation="landscape" /> <activity android:name="ti.modules.titanium.ui.TiTabActivity" android:configChanges="keyboardHidden" /> <activity android:name="ti.modules.titanium.ui.TiTabActivity" android:configChanges="keyboardHidden|orientation" android:screenOrientation="landscape" /> </manifest> </android> {code} 4. Run h4. HD Discussion http://support-admin.appcelerator.com/display/APP-6547532
162TIMOB-8513iOS: Tableview shifting after 1.8.2 updateh4. Problem Description I have a tableview in a window. If I open that window using tab1.open(theWindow), the tableview appears as it should. BUT if I close that window using tab1.close(theWindow) and open it again later using the same tab1.open(theWindow), the tableview quickly shifts up to it's position. It is almost like it is animating 20px when the window is opened. I am NOT using any animations. Sample code below h4. Actual Results After the first time, the tableview appears animated. h4. Expected results Tableview without animation h4. Test Case 1. Create new mobile project. 2. Paste this code {code} //create main window var window1 = Titanium.UI.createWindow({ navBarHidden:true,tabBarHidden:true }); //create and add button to open window 2 var btn = Ti.UI.createButton({height:100,width:100}); window1.add(btn); //create window 2 for tableview var window2 = Titanium.UI.createWindow({ navBarHidden:true,tabBarHidden:true }); //create back button to go back to main menu var backBtn = Titanium.UI.createButton({height:30,width:50,top:10,left:10}); //create search bar var search = Titanium.UI.createSearchBar({ showCancel:false }); //create data for tableview var theData = [ { title:"One", hasChild:true }, { title:"Two", hasChild:true }, { title:"Three", hasChild:true }, { title:"Four", hasChild:true }, { title:"Five", hasChild:true } ]; //create tableview var menu = Ti.UI.createTableView({ height:405, top:55, data:theData, search:search }); //add menu and back button to window 2 window2.add(menu); window2.add(backBtn); //Set up the Tab Group var tabGroup = Titanium.UI.createTabGroup(); var tab1 = Titanium.UI.createTab({ title:'window1', window: window1 }); //Add and open tabgroup tabGroup.addTab(tab1); tabGroup.open(); //button click events btn.addEventListener('click',function(){tab1.open(window2);}) backBtn.addEventListener('click',function(){tab1.close(window2);}) {code}2
163TIMOB-8621Android: Error creating Module projects with new installation of SDK r18 and Google APIs r8When creating an Android module project, the process ends in error: {code} [ERROR] Couldn't find the Google APIs r8 add-on directory {code} 1. Create a new module project using titanium, for example: {code} dhydeMBPSnowLeopard:~ dhyde$ "/usr/bin/python" "/Library/Application Support/Titanium/mobilesdk/osx/2.0.1.v20120407201726/titanium.py" "create" "--type=module" "--id=com.appcelerator.mymodule" "--name=MyModule" "--dir=/var/folders/Jt/Jte2czQvFoaxMh25z-WDKE+++TM/-Tmp-/module_temp8018343781039291630.tmp" "--platform=android" "--sdk=/Users/dhyde/Documents/android/android-sdk-macosx" {code} Expected Result: Module project should be created.1
164TIMOB-8515Android: runtime error in ti/window.jsA client has encounter a problem in the window.js file in the SDK. I have not been able to reproduce it. There is a "delete account" button than when pressed, it will fire a global app event. Ti.App.fireEvent(); This event will close all the open windows, except the "BaseWindow" (heavyweight window in declared in app.js), including the one where the button is. The button is in a lightweight window that sits on top of the BaseWindow. After the windows are closed, a lightweight window (login window) opens on top of the BaseWidow (in place of the previously closed one). And this is where they're seeing this runtime error. 3
165TIMOB-8549Android: Memory Managment Issue*Code* http://pastie.org/3732988 *Steps to reproduce* Run the app inside the emulator/device, load up ddms, watch the heap size increase. *Expected behavior* The code is creating and releasing Ti objects, so it should allocate and deallocate memory over time. *Actual behavior* It actually keeps building up and gradually increases the heap size, it doesn't seem to go down a lot, it mainly increases. *Notes* -You might have to run this for a few minutes, in order to replicate this behavior. -The app is opening a new window, and releases it. So you will see the window going back and forth, which is the expected behavior. It will automatically open/close the window over time. You should only have to observe the 'heap size' and 'allocated' in ddms. -Only tested on the emulator. -HD ticket: http://support-admin.appcelerator.com/display/APP-3416365
166TIMOB-8558iOS: Transport.py is not working in CI h4. Problem Description I've been running into issues with the 2.X CI builds and transport.py. Due to how we handle builds, I need to use transport.py for all submissions and ad hoc builds. Any of the 2.X or Master builds have this build issue. h4. Actual Results The build via transport.py is failing. h4. Expected Results The build via transport.py working just fine h4. Test Case 1. Create a new Titanium project targeting a 2.X CI build 2. Run the transport.py process as usual 3. Open in xcode and try to run in the simulator h4. Extra info When xcode tries to compile you will get the below error [TRACE] app property, ti.ui.defaultunit : system [INFO] wrote Resources/stylesheet.plist Traceback (most recent call last): File "titanium/iphone/compiler.py", line 7, in <module> import os, sys, re, shutil, time, run, sgmllib, codecs, tempfile File "/Users/benjamin/Dev/Projects/Ti/myTravel/test/build/iphone/titanium/iphone/run.py", line 2, in <module> from tools import ensure_dev_path ImportError: No module named tools Command /bin/sh failed with exit code 1 I tried this again today using the below build version. h4. HD Discussion http://support-admin.appcelerator.com/display/APP-522817 2
167TIMOB-8562BlackBerry: Adapt scons script (SConstruct) [build script for mobile_sdk] to build for blackberryNULL3
168TIMOB-8563BlackBerry: Support ability to create new blackberry project in Titanium StudioWork with the studio team to integrate project creation 2
169TIMOB-8564BlackBerry: Run and debug on device/simulator from Titanium Studio- Some testing/investigation required to figure out how this can be accomplished, can likely use help from RIM technical contact to mimic what's available in the QNX IDE - minimum: trap console logging7
170TIMOB-8565BlackBerry: Extend the ndk classes to create the shell application Extend the ndk classes to create our shell application that will contain the app.js and the kroll and v8 runtimes (equiv. android/titanium/.project) - learn what is needed to create the blackberry shell app to contain the app.js as resource - Create actual classes extending the classes in the ndk, they will form the titanium library - Do the minimum to get the app up and loading the js file, leave the rest stubbed out with TODOs - create file templates for the shell app - link with libV8 and Kroll2
171TIMOB-8566BlackBerry: Build v8 on the QNX ndk as static libPossibly create wrappers for the v83
172TIMOB-8567BlackBerry: Build blackberry native appBuild blackberry native app from shell application, v8 and Kroll from titanium (tie in with builder)10
173TIMOB-8568BlackBerry: Integrate with the cascades frameworkNULL3
174TIMOB-8569BlackBerry: Integrate unit testsneed more info from Vishal, drillbit vs module tests?20
175TIMOB-8570BlackBerry: Run on simulator and deviceminimum BB10 for demo5
176TIMOB-8572BlackBerry: Implement Analytics moduleNULL20
177TIMOB-8573BlackBerry: Implement BlackBerry specific componentsNULL3
178TIMOB-8574BlackBerry: Implement important Ti.API functionalityThis may be completed. It only looks like the following are required: * Titanium.API.debug * Titanium.API.error * Titanium.API.info * Titanium.API.log * Titanium.API.timestamp * Titanium.API.trace * Titanium.API.warn19
179TIMOB-8576BlackBerry: Implement important Titanium.Codec functionalityNULL2
180TIMOB-8577BlackBerry: Implement Contacts moduleNULL20
181TIMOB-8579BlackBerry: Implement Facebook moduleNULL8
182TIMOB-8580BlackBerry: Implement important Titanium.Filesystem functionality* Titanium.Filesystem * Titanium.Filesystem.applicationDataDirectory * Titanium.Filesystem.File * Titanium.Filesystem.File.append * Titanium.Filesystem.File.createDirectory * Titanium.Filesystem.File.deleteFile * Titanium.Filesystem.File.exists * Titanium.Filesystem.File.getNativePath * Titanium.Filesystem.File.nativePath * Titanium.Filesystem.File.read * Titanium.Filesystem.File.writable * Titanium.Filesystem.File.write * Titanium.Filesystem.getFile * Titanium.Filesystem.resourcesDirectory * Titanium.Filesystem.tempDirectory h3. Test code: Reading a file from the Resources dir {code} Ti.API.info('------------------------'); Ti.API.info('Testing resources directory reading app.js'); var app_js = Ti.Filesystem.getFile(Ti.Filesystem.resourcesDirectory, 'app.js'); var blob = app_js.read(); Ti.API.info('---------'); Ti.API.info(blob.text); {code} Creating, writing, and reading a file from the data dir {code} Ti.API.info('------------------------'); Ti.API.info('Testing data directory reading writing and reading'); var file = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, 'hello_world.txt'); if(!file.exists()) { Ti.API.info('file does not exist'); file.write('this is a test'); Ti.API.info('file exists? ' + file.exists()); } Ti.API.info('---------'); var blob = file.read(); Ti.API.info(blob.text); {code} Getting the directory listing from the data dir {code} Ti.API.info('------------------------'); Ti.API.info('Testing data directory get listing'); var directory = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory); var files = directory.getDirectoryListing(); for(var i = 0; i < files.length; i++) { Ti.API.info('====================='); var file = files[i]; Ti.API.info('filename: ' + file); var _file = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, file); Ti.API.info('isDirectory: ' + _file.isDirectory()); Ti.API.info('isFile: ' + _file.isFile()); } {code}17
183TIMOB-8582BlackBerry: Implement important Gesture functionalityImplement the Gesture module. h3. Acceptance Test {code} function orientationToString(orientation) { switch (orientation) { case Ti.UI.PORTRAIT: return 'portrait'; case Ti.UI.UPSIDE_PORTRAIT: return 'upside portrait'; case Ti.UI.LANDSCAPE_LEFT: return 'landscape left'; case Ti.UI.LANDSCAPE_RIGHT: return 'landscape right'; case Ti.UI.FACE_UP: return 'face up'; case Ti.UI.FACE_DOWN: return 'face down'; default: return 'unknown'; } } var win = Ti.UI.createWindow({ backgroundColor: 'red', layout: 'vertical' }); var labelA = Ti.UI.createLabel({ width: Ti.UI.FILL, text: 'e.orientation = N/A' }); win.add(labelA); var labelB = Ti.UI.createLabel({ width: Ti.UI.FILL, text: 'Gesture.orientation = N/A' }); win.add(labelB); var labelC = Ti.UI.createLabel({ width: Ti.UI.FILL, wrap: true, text: 'No shake yet.' }); win.add(labelC); function onShake(e) { Ti.API.info('Shake: {' + e.x + ', ' + e.y + ', ' + e.z + '}'); labelC.text = 'Shake!'; win.backgroundColor = 'yellow'; setTimeout(function() { labelC.text = 'No shake yet.'; win.backgroundColor = 'red'; }, 500); } var toggleShake = Ti.UI.createButton({ title: 'Toggle Shake' }); var shakeEnabled = false; toggleShake.addEventListener('click', function() { shakeEnabled ? Ti.Gesture.removeEventListener('shake', onShake) : Ti.Gesture.addEventListener('shake', onShake); shakeEnabled = !shakeEnabled; }); win.add(toggleShake); Ti.Gesture.addEventListener('orientationchange', function(e) { labelA.text = 'e.orientation = ' + orientationToString(e.orientation); labelB.text = 'Gesture.orientation = ' + orientationToString(Ti.Gesture.orientation); }); win.open(); {code} # Rotate the device and flip it around. The first two labels should be equal and display the current orientation. # Try shaking the device, nothing should happen. # Click the "Toggle Shake" button and shake again. The background should flash yellow. # Try clicking the "Toggle Shake" button and shake again. Nothing should happen.17
184TIMOB-8583BlackBerry: Implement important Titanium.Locale functionalityNULL19
185TIMOB-8585BlackBerry: Implement Media moduleNULL20
186TIMOB-8587BlackBerry: Implement Network module for AnvilNULL8
187TIMOB-8589BlackBerry: Implement important Titanium.Stream functionalityNULL8
188TIMOB-8591BlackBerry: Implement important Titanium.Utils functionalityNULL17
189TIMOB-8592BlackBerry: Implement important Titanium.XML functionalityNULL17
190TIMOB-8593BlackBerry: Implement important Titanium.Yahoo functionalityNULL15
191TIMOB-8594BlackBerry: Full support for builder scriptImplement all targets20
192TIMOB-8597BlackBerry: Get KitchenSink to workNULL30
193TIMOB-8598BlackBerry: Setup and test guideGuide for QE/developers to setup and test the Blackberry port of Titanium SDK using KitchenSink Should be placed on a separate page in this space: https://wiki.appcelerator.org/display/PEBKBRY/Home2
194TIMOB-8602BlackBerry: Integrate the final deliverable into the current build, testing and development infrastructureNULL20
195TIMOB-8610Android: Tab.open(windowName) doesn't open a new window inside the Tab containerIn android tab.open(windowName) doesn't open a new window inside the tab container. It works fine in iOS. h4. tab.open(windowName) works in iOS and h4. tab.add(windowName); h4. windowName.open(); h4. works fine in android I have commented it in the app.js file as well. Please find it attached. h4. Repo Steps 1. Run the attached app.js file. 2. Click the window 1 and you can see the new window is opening outside the tab container.2
196TIMOB-8653Tooling: Separate SDK from the PlatformThis task comprises a few high level tasks: * The SDK should live as it's own standalone component, with it's own git repository * The SDK and Platform should be able to have their own release cycles, and the SDK should be able to work with multiple versions of the Platform5
197TIMOB-8658Android: Switch search order of folders/environment variables in androidsdk.pyI accidentally updated my ANDROID_SDK environment variable to a bad value, and suddenly Studio was unable to find my Android platforms, even though I had a correct SDK specified in preferences. Digging into the code, I see that we pass a specific directory to search to avd.py, by androidsdk.py/find_sdk() defers to ANDROID_SDK before utilizing "supplied". It seems we should respect the passed-in directory first before defaulting to backup options like environment variables.2
198TIMOB-8662Tooling: Write a CLI specificationWrite a CLI specification that covers: * CLI workflow * Argument naming and value standards * Initial set of CLI commands * Initial set of CLI arguments * External CLI APIs (for CLI modules) The target list of commands should contain: * Validation of project (module+app) creation arguments per platform * Project creation - modules + apps * Project migration between Titanium SDK versions * Per-platform setup * Environment / project validation * Build project (APK, IPA, deployable web app in MobileWeb) * Publish (may be type of build) * Obfuscation/minification * Optional Lint * Emulator/Simulator launch * Deploy project (to a device, to an emulator) * Debugger / REPL Other requirements that were gathered: * Studio needs standardized logging and errpr message parsing * Standard interfaces to basic commands across platforms * Have a list of command capabilities / implementations per platform 5
199TIMOB-8665Android: INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES when installing different app with same app idWhen an android app is installed, and that app is already installed using a different deploy type (i.e., production vs. testing), or a different app is installed with the same app id, there is an error INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES logged to the console. I would expect the script to fail with a meaningful error message (and Titanium Studio to have an error prompt if necessary) indicating an app with the same app id and a different certificate is already installed on device, remove this app to continue installation. Steps to Reproduce (Scenario 1): 1. Create a new Android project. 2. Distribute for production and install to device. 3. Deploy again to device from studio. Steps to Reproduce (Scenario 2): 1. Create a new Android project. 2. Install to device in development mode. 3. Create another Android project with the same app id. 4. Deploy second app to device. Expected Result: Script fails with meaningful error message, studio prompts error if necessary. Actual Result: Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES] logs to console, difficult to know exactly what the problem is.3
200TIMOB-8680Core: Define Javascript coding standardsDefine a document that outlines all Javascript coding standards any javascript written for Appcelerator (internal or community contributions) should adhere to. This should represent more than syntax, but general design approaches and process flow. This document will be focused on language only. Platform Specific information will be contained inside another document. This is a collaboration ticket.5
201TIMOB-8681Core: Define C/C++ coding standardsDefine a document that outlines all C/C++ coding standards any C/C++ written for Appcelerator (internal or community contributions) should adhere to. This should represent more than syntax, but general design approaches and process flow. This document will be focused on language only. Platform Specific information will be contained inside another document.5
202TIMOB-8710Core: Research source code validation toolInvestigate the use of a validation tool for source code against our defined language standards. Do we need one per language? Can we use a single tool with plugins perhaps?1
203TIMOB-8714Android: 'focus' events are not correctly handled for windows in a tabGrouph2. Problem description 'Focus' events might not correctly handled when associated to a window set in tabGroup and with the url property h2. Steps to reproduce h3. Steps - Create a tabGroup with 2 windows. - Set the url property for each window and define 'focus' event listener in the two 'win1.js' and 'win2.js' files. - Don't set event listeners in the app.js Result: 'focus' event listeners ae not triggered on Android (on iOS works fine). h3. Code {code:lang=javascript} // app.js var tabGroup = Titanium.UI.createTabGroup(); var win1 = Titanium.UI.createWindow({ title:'Tab 1', backgroundColor:'#fff', url:'win1.js' }); var tab1 = Titanium.UI.createTab({ icon:'KS_nav_ui.png', title:'Win 1', window:win1 }); var win2 = Titanium.UI.createWindow({ title:'Tab 2', backgroundColor:'#fff', url:'win2.js' }); var tab2 = Titanium.UI.createTab({ icon:'KS_nav_ui.png', title:'Win 2', window:win2 }); tabGroup.addTab(tab1); tabGroup.addTab(tab2); tabGroup.open(); {code} {code:lang=javascript} // win1.js var win1 = Ti.UI.currentWindow; win1.addEventListener('focus',function(e){ alert('test win1'); }); {code} {code:lang=javascript} // win2.js var win2 = Ti.UI.currentWindow; win2.addEventListener('focus',function(e){ alert('test win2'); }); {code} h2. Additional notes: Customer ticket : http://support-admin.appcelerator.com/display/APP-221687/conversation/read_all1
204TIMOB-8718Core: Compare possible CLI technologiesIn order to select the appropriate tool for the new CLI, we need to perform a side-by-side evaluation for the following proposed technologies: * node.js (TIMOB-8640) * Python 2.7.x (TIMOB-8715) * Python 3.2.x (TIMOB-8715) * Ruby (no ticket, proposed) * Java + RHINO (no ticket, hat tip to cbarber for the suggestion) Advantages, disadvantages, etc. of each of these technologies is documented in their specific tickets and via meeting notes being compiled by Marshall. Note that one of the suggestions proposed in the node.js meeting was to create a pluggable {{git}}-like infrastructure, so that the command {{titanium xxx}} would call out to a {{titanium-xxx}} script, which could be in any scripting language (or a compiled tool). This evaluation may recommend this approach if we believe multiple technologies are appropriate for different tasks. These are the high level tests we should use in judging any solution: * Subprocess / Child process APIs ([ipc side-by-side comparison|https://gist.github.com/2583397]) ** A test that executes a short-lived process and collects it's results ** A test that executes a long-lived process and collects it's stdout / stderr output and reprints that output in real time * Logging APIs ([log side-by-side comparison|https://gist.github.com/2581199]) ** A test that creates a simple unified logger with a base string format and configures certain log levels as visible ** A test that associates multiple loggers with various system components * Compression (zip) APIs ([zip side-by-side comparison|https://gist.github.com/2572795]) ** A test that opens a ZIP file, scans the contents, and extracts one of the files for processing ** A test that creates a new ZIP file using a mix of normal files, deep paths, and symlinks * Javascript AST parsing / manipulation: *NOTE:* This is now part of a separate technology evaluation. See TIMOB-8947 for discussion relating to AST. We have been delivered the requirement for a single AST for the product, and it is assumed that CLI tooling will call out to this rather than have an AST. ** A test that parses a simple Javascript file, and reports back an AST ** A test that does minor manipulation of the AST, and transforms back to JS Each test should include performance metrics over many runs, and information about external module(s) used along with versions.3
205TIMOB-8721BlackBerry: Implement module APIThis is the api that will be available for 3rd party module extensions. This api also needs to be well documented. "The "Extending Titanium" set of guides might be a good starting point: http://docs.appcelerator.com/titanium/2.1/index.html#!/guide/Extending_Titanium_Mobile There will need to be a C/C++ API for module developers. You can look at the API documentation for Android and iOS to get an idea of what sort of native API we expose for extensions. Module developers should be able to create their own proxy and views. Need to also figure out how these external modules get compiled into the application. I am guess module developers will provide some sort of static/dynamic library that gets included into the application. For application developers they use the require() function to load these external modules. So you will need to add support into your require implementation to search for these external modules if it can't find any files in the applications resources folder. For external modules we use the module's ID string for the require lookup. Ex: require('com.my.module') We also support external CommonJS modules. The Titanium Cloud module is an example of this type of module. This document provides some details: https://wiki.appcelerator.org/display/guides/CommonJS+Modules+in+Titanium Basically this allows module developers to distribute JS only modules. This works by extending the require() search path to include these modules when the application developers adds them to their tiapp.xml <modules> section. So I hope that gives you a good starting line. Feel free to ask for detailed questions on each of these requirements. We should also loop in the module team and work closely with them on any requirements they require for creating modules for BB. -- Joshua Roesslein Platform Engineer Appcelerator, Inc. jroesslein@appcelerator.com"15
206TIMOB-8730Android: When invoking other intent from the app, the pause event is not being triggered h4. Problem Description If we call another app or activity in the android app, the pause event is not being fired. h4. Actual Results Event is not fired h4. Expected Results The event pause should be fired. h4. Test case 1. Create mobile project. 2. Paste this into the app.js {code} if(Ti.Platform.osname == 'iphone') { // WORKING FOR iPHONE // do nothing } else { // event listeners for android // NOT WORKING Ti.Android.currentActivity.addEventListener('create',function(){Ti.API.info('Create call')}); Ti.Android.currentActivity.addEventListener('destroy',function(){Ti.API.info('Destroy call')}); Ti.Android.currentActivity.addEventListener('pause',function(){Ti.API.info('Pause call')}); Ti.Android.currentActivity.addEventListener('resume',function(){Ti.API.info('Resume call')}); Ti.Android.currentActivity.addEventListener('start',function(){Ti.API.info('Start call')}); Ti.Android.currentActivity.addEventListener('stop',function(){Ti.API.info('Stop call')}); } Ti.Platform.openURL('tel://911'); {code}1
207TIMOB-8743Android: Intermittent 'force close' issue*Issue* -The app randomly 'force quits' when launched, I personally don't seem to be able to reproduce this (yet). -What one of the users reported back: "I launch and it's basically frozen...the small black "app name" bar appears at the top but nothing happens...now finally after minutes (3-5) got the error message "sorry! Activity APPNAME (in application APPNAME is not responding...force close...wait...report" -Attached are the log files. App source code can also be attached, if required. *Notes* -Name of the actual app has been removed and replaced with 'APPNAME'.2
208TIMOB-8745Android: Intermittent app 'freeze' issue*Issue* -The app randomly freezes when it's on the loading screen. -Comments: "User reported a hanging login (loading bar went to full green, but then nothing happened) directly after a force-close and relaunch. Log attached." -Attached is the log file. App source code can also be attached, if required. *Notes* -Name of the actual app has been removed and replaced.3
209TIMOB-8772Android: Alignment Issues on Android, layout appears broken8 Buttons are added to the window, and have a background image. When they are aligned together in a line, it appears broken. It looks continuous on iOS. I have attached images to explain this. Also have included the code sample. {code} var win = Titanium.UI.createWindow({ backgroundColor:'white', title:'window', barColor:'#ff7b01', top:0 }); var arr = ['5d', '1m', '3m', '6m', 'YTD', '1yr', '2yr', '4yr']; for(var i=0;i<arr.length;i++){ win.add(createDateButtons(i,12)); } function createDateButtons(_index, _btnWidth) { var imageColViewOn1 = Ti.UI.createButton({ title : arr[_index], width : _btnWidth + '%', height : 40, top : 14, left :(_btnWidth * _index ) + '%', /* 2.8% + the calculated width X index # */ font : { fontSize : 13, fontWeight : 'bold', fontFamily : 'Helvetica Neue' }, color : 'yellow', backgroundImage:'red.jpeg' }); return imageColViewOn1; }; win.open(); {code}2
210TIMOB-8775iOS: ScrollView does not scroll if contentHeight and contentWidth are not providedh3. Problem Scrollview in Release 2.0.x does not scroll if contentHeight and contentWidth are not provided. h3. Code Sample {noformat} var win = Ti.UI.createWindow({ backgroundColor:'white' }); var scrollView = Ti.UI.createScrollView({ top:10, left:5, layout: 'horizontal' }); var things = [ 'item1', 'item2', 'item3', 'item4', 'item5', 'item6' ]; for (var i = 0; i < things.length; i++) { var view = Ti.UI.createView({ height: 90, width: 140, top: 10, left: 10, backgroundColor: '#CCC' }); scrollView.add(view); }; win.add(scrollView); win.open(); {noformat}2
211TIMOB-8784BlackBerry: Add support for ACS Cloud moduleNULL20
212TIMOB-8785BlackBerry: Implement ACS CloudPush moduleNULL8
213TIMOB-8788BlackBerry: Implement foundationNULL20
214TIMOB-8800Android: Failure building with Java 1.7.0 (Java 7)We currently do not check to make sure the user has jdk 1.6.0 installed in our build scripts. We should add this feature since there are known issues with using jdk 1.7.0 (at least for windows). We need to determine the following requirements in this task, and then notify studio in regards to these new requirements. - Minimum/Maximum version of jdk required - Where to grab this particular version of sdk (from oracle?) - Narrow down if the jdk requirements affect ALL platforms (linux,osx, windows). We know there are issue with jdk 1.7.0 in windows, but this needs to be verified in other platforms - Mechanism for reporting this error from the build scripts (ideally studio would be able to take this error and prompt the user to resolve it accordingly in studio) After this ticket has been resolved, we should file a separate ticket on the studio side for them to take action (and probably sync up with them regarding the requirements). 2
215TIMOB-8809BlackBerry: Implement UI.2DMatrixThe 2D Matrix is an object for holding values for an affine transformation matrix. A 2D matrix is used to rotate, scale, translate, or skew the objects in a two-dimensional space. A 2D affine transformation can be represented by a 3 by 3 matrix: a b 0 c d 0 tx ty 1 The third column is constant (0,0,1). In iOS, this maps to CGAffineTransform, but is rather primitive in 2D and 3D graphics. If using OpenGL, consider http://stackoverflow.com/questions/6971898/2d-matrix-to-3d-matrix17
216TIMOB-8810BlackBerry: Implement UI.ActivityIndicator - Part1NULL5
217TIMOB-8811BlackBerry: Implement UI module root methods and propertiesNULL8
218TIMOB-8812BlackBerry: Implement important Titanium.UI.Clipboard functionalityImplement the methods for accessing and modifying data within the clipboard. h3. Acceptance Test {code:javascript} // Custom application MIME types for clipboard data. const kTypeText = 'application/x-text', kTypeBlob = 'application/x-blob'; var win = Ti.UI.createWindow({ backgroundColor: 'red', layout: 'vertical' }); // Displays the current "plain text" in the clipboard. var textLabel = Ti.UI.createLabel({ text: Ti.UI.Clipboard.getText() || "No text." }); win.add(textLabel); // Displays the current custom text in the clipboard. var customTextLabel = Ti.UI.createLabel({ text: (Ti.UI.Clipboard.getData(kTypeText) || {text: 'No custom text.'}).text }); win.add(customTextLabel); // Displays the current custom blob data in the clipboard. var customBlobLabel = Ti.UI.createLabel({ text: (Ti.UI.Clipboard.getData(kTypeBlob) || {text: 'No custom blob.'}).text }); win.add(customBlobLabel); // Clears all data in clipboard. var clearDataButton = Ti.UI.createButton({ title: 'Clear Data' }); clearDataButton.addEventListener('click', function() { Ti.UI.Clipboard.clearData(); }); win.add(clearDataButton); // Paste some text into the clipboard. var setTextButton = Ti.UI.createButton({ title: 'Set Text' }); setTextButton.addEventListener('click', function() { Ti.UI.Clipboard.setText('Text Inserted!'); }); win.add(setTextButton); // Paste custom application data into the clipboard. var setCustomDataButton = Ti.UI.createButton({ title: 'Set Custom Data' }); setCustomDataButton.addEventListener('click', function() { Ti.UI.Clipboard.setData(kTypeText, 'Custom Text!'); var buffer = Ti.createBuffer({length: 16}); 'Custom Blob!'.split('').forEach(function(char, index) { buffer.fill(char.charCodeAt(0), index, 1); }); Ti.UI.Clipboard.setData(kTypeBlob, buffer.toBlob()); }); win.add(setCustomDataButton); win.open(); {code} # The three labels should display (in order from top to bottom)... #* No text. #* No custom text. #* No custom blob. # Click "Set Text" then restart the app. The first label should read "Text Inserted!" now. # Close the app and open another app on the device (ex: browser). Copy some text into the clipboard. # Relaunch the test case app and the first label should now contained the text you copied. # Click "Set Custom Data" then restart the app. # The second label should read "Custom Text!" and the third label "Custom Blob!". # Click "Clear Data" and restart the app. The labels should be back to their initial values (step 1).15
219TIMOB-8813BlackBerry: Implement UI.AlertDialogDepends on Cascades R6 An alert dialog is a modal view that includes an optional title, a message and buttons, positioned in the middle of the display. In iOS: https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIAlertView_Class/UIAlertView/UIAlertView.html3
220TIMOB-8815BlackBerry: Implement UI.Button part1NULL8
221TIMOB-8820BlackBerry: Implement UI.ImageView - Part 1NULL8
222TIMOB-8821BlackBerry: Implement UI.Label - part2NULL10
223TIMOB-8824BlackBerry: Implement important Titanium.UI.Notification functionalityUse the implementation matrix to see what can be implemented (look for elements supported in Cascades): https://docs.google.com/a/macadamian.com/spreadsheet/ccc?key=0Ajs-e76-B0yIdG1oLVVleVVxaGRYd3lWWXd0czhqUFE15
224TIMOB-8825BlackBerry: Implement UI.OptionDialog part1NULL5
225TIMOB-8826BlackBerry: Implement UI.PickerNULL10
226TIMOB-8830BlackBerry: Implement UI.ProgressBar part1NULL5
227TIMOB-8831BlackBerry: Implement important Titanium.UI.ScrollableView functionalityAs a developer, I want a view that allows displaying a set of child views that can be navigated through by using swipe gestures. The existing Titanium API for this view is Ti.UI.ScrollableView. While Cascades does not provide a built-in control for this type of view, it does appear possible to implement our own custom control.17
228TIMOB-8832BlackBerry: Implement important ScrollView functionalityAs a developer, I want a view that provides a viewport of a content view that can be scrolled using gestures both horizontally and vertically. The existing Titanium API for this feature is Ti.UI.ScrollView. Cascades does provide a control (ScrollView) which should meet the requirements for this view.17
229TIMOB-8833BlackBerry: Implement important Titanium.UI.SearchBar functionalityA specialized text field for entering search text. The SearchBar object is closely modeled on an iOS native search bar. As such, not all features are supported on other platforms. In iOS, a direct mapping of UISearchBar https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UISearchBar_Class/Reference/Reference.html15
230TIMOB-8834BlackBerry: Implement UI.SliderNULL2
231TIMOB-8835BlackBerry: Implement UI.Switch part1NULL5
232TIMOB-8836BlackBerry: Implement UI.Tab elements needed for KitchenSinkA tab instance for a TabGroup<http://docs.appcelerator.com/titanium/2.0/#%21/api/Titanium.UI.TabGroup>. A TabGroup tab instance. Each tab includes a button and one or more windows, which holds the "contents" of the tab. Users can select a tab by clicking on the tab button. In iOS, this actually is more of a combination of UITabBarItem and UINavigationController meant to go into a tab group. Android does not have a navigationController concept, so it depends on what Blackberry provides. https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UITabBarItem_Class/Reference/Reference.html#//apple_ref/doc/c_ref/UITabBarItem<https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UITabBarItem_Class/Reference/Reference.html%23//apple_ref/doc/c_ref/UITabBarItem> https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UINavigationController_Class/Reference/Reference.html#//apple_ref/doc/c_ref/UINavigationController<https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UINavigationController_Class/Reference/Reference.html%23//apple_ref/doc/c_ref/UINavigationController> 5
233TIMOB-8837BlackBerry: Implement UI.TabGroup elements needed for KitchenSinkNULL12
234TIMOB-8838BlackBerry: Implement UI.TableView - Part 1NULL10
235TIMOB-8839BlackBerry: Implement Simple TableViewRowsh3. Feature Implement TableViewRow proxies which support the simple row style. For simple rows (title, leftImage, etc) can probably use the Cascades StandardListItem. This is already implemented for using plain objects for the data array. Developers should also be able to listen for click and swipe events on rows. h3. Acceptance Test 1. Download the test case (tableview-test.zip) which includes the resources. 2. Create a project with the resources and run the app. 3. A list of items should appear with title text and a left image. 4. After a few seconds the last item should change to a pear. 5. Try clicking various rows. The text should change to "Click!" for a few seconds. The text should revert back to its original value. 19
236TIMOB-8840BlackBerry: Implement important Titanium.UI.TableViewSection functionalityA TableView section object. Usually contains TableViewRows In iOS, this is an abstract non-iOS class used to group rows into sections. There is no native analog.17
237TIMOB-8841BlackBerry: Implement important Titanium.UI.TextArea functionalityNULL17
238TIMOB-8842BlackBerry: Implement UI.TextField - Part 1NULL8
239TIMOB-8843BlackBerry: Implement UI.View based on R4Every UI control in Titanium extends the View and as such inherit methods from it. This implementation is missing from the current framework. It needs to be implemented asap so as to minimize the rework to be done in existing controls at the time this is implemented. To facilitate this change, we will likely include a container for all controls that we have, so the View methods to act upon.30
240TIMOB-8844BlackBerry: Implement UI.WebViewNULL5
241TIMOB-8851Core: Write a specification for the new Unit Test HarnessWe need to write a specification for these components of our new Unit Test Harness: * CLI interface * Unit test APIs that cover basic assertions, and UI testing * Test Results output (JSON) for collection by CI This task is evolving with data found from prototyping and integration.5
242TIMOB-8852Core: Integrate Drillbit into the CI LoopNULL5
243TIMOB-8870BlackBerry: Integrate Cascades R4Condition: Cascades R4 needs to be available - tentative date April 30th 1) resolve conflicts, pay special attention to things that have already been implemented in Titanium.API 2) investigate if there is anything new added to controls that we already implemented 3) if any, implement new additions to controls that we already implemented10
244TIMOB-8897BlackBerry: Implement important Titanium.Blob functionality* Titanium.Blob * Titanium.Blob.text * Titanium.Blob.toString Implement basic Blob functionality: accessing data, getting size, appending, convert to string. Blobs are primarily used to wrap native data structures or sources (ex: file descriptor, image, buffers). The goal of this ticket is just implement the proxy front facing APIs. Internally it should be architected to support wrapping various data sources. For the initial implementation support "buffer" based blobs would be a good first step. Blobs are not creatable, but returns by various API methods in Titanium. For testing this ticket implement the Buffer.toBlob() method. This should return a Blob which should allocate a buffer and copy the data over. Blob streams and to image conversions will not be implemented at this time. Separate tickets for those will be created. h3. Acceptance Test Look into using the test in Anvil for Blobs. The test is currently very small, so try to improve it. Anvil may not run right now on BlackBerry, but we can just copy the test into an application for now.17
245TIMOB-8925Blackberry: Add support for debugging titanium apps in studioNULL8
246TIMOB-8926Blackberry: Implement proper packaging of blackberry mobile sdkAdd building of libtibb.ca in the scons script and package it properly in the resulting zip file, also remove any unnecessary files from the zip5
247TIMOB-8983Blackberry: Add formatting check in git pre-commit hookNULL3
248TIMOB-8996BlackBerry: Complete remaining issues from code reviewSee pull request: #18 1. void TiUIBase::setTiMappingProperties(const TI_PROPERTY* prop, int propertyCount) prop should be props since it's a pointer to an array of prop objects -- 2. TiUIBase::setParametersFromObject(Local obj) Local propValue; + Handle propString; + TiObject* foundProp; 3 last lines, It's cleaner to declare variables inside the smallest scope they are to be used in and also helps prevent referencing them outside of their scope. In this case the declarations should be inside the for -- 3. int NativeContainerObject::initialize() add protection agains multiple invocations -- 4. if((args.Length()!=2)||(!args[0]->IsString())||(!args[1]->IsFunction())) This line is definitely worth a comment. How come args[0] needs to be a string and args[1] needs to be a function? reminds me of perl :S -- 5. blackberry/tibb/TiUIObject.cpp • createXXXX_ methods out of 14 lines of code in the functions, only 1 really differs. It'd be nice to have a way of abstrating that to remove code duplication which would be a maintenance nightmare as i also forsee many many such functions being created for all the UI controls we need to implement Similarly the associtated classes look very bare and very much alike, is there actual value in having all these look alike classes? Maybe the actual question is can we avoid them? -- 6. VALUE_MODIFY TiPropertyMapObject::onValueChange(Handle oldValue, Handle newValue) the 3 lines inside the the ifs are the same in all cases, they should be rolled into a helper function. -- 7. we should review the logical separation of classes with regards to cascades awareness, separation into folders -- 8. review error handling strategy - run it by appcelerator -- 9. class TiEventContainer please add spaces around the = sign for consistency with the rest of the code.
The formatter doesn't enforce it here. There is at least another instance of that in TiEvent.h -- 10. blackberry/tibb/TiUIBase.h description comment references TiCascadesApp when it should be TiUIBase -- 11. embed class TiInternalEventListener inside TiV8EventContainer? To reenforce it's internalness5
249TIMOB-9102iOS: getVisible() / getEnabled() functions could return null valueh2. Problem description Boolean functions like getVisible() or getEnabled() can return null value h2. Code sample {code} var win = Ti.UI.createWindow({ exitOnClose:true }); var view = Ti.UI.createView({ top:0, left:0, width: 10, height:10 }); var button = Ti.UI.createButton({ title:'Click Me!' }); button.addEventListener('click', function(e) { alert(view.getVisible()); view.setVisible(!view.getVisible()); }); win.add(button); win.add(view); win.open(); {code} Result: After running the sample code, click on the button to execute view.getVisible(), which return value 'null'. Expected result: If the property was never defined by the user, then the default value should be returned. 5
250TIMOB-9028CLI: "build" command for Android appsPort the Python-based Android builder.py to Node.js. Portions of this has already been completed. h3. Build Process * Validate command line arguments and tiapp.xml settings (TIMOB-14973) * fire "build.pre.construct" event * create Builder object * fire "build.pre.compile" event * Detect if need to force rebuild (TIMOB-14974) * Init the build/android directory and files (TIMOB-14976) * if not --build-only ** make sure adb server is running (adb lib does this for us) ** wait for the emulator/device to boot ** detect if app is already installed (adb lib does this for us) * Compile resources (TIMOB-14977) * determine Google APIs are required (true unless not build only and building for emulator running non-Google API AVD) * if building for emulator and using Ti.Map.MapView, make sure the emulator is running Google APIs (TIMOB-5438 Compiler Warning When Using Maps with Non-Google APIs SDK) (TIMOB-6860 Tooling: Android build process requires "Google APIs" even if "Ti.Map.createView" only occurs in comments) * generate build/android/bin/assets/index.json with contents of build/android/bin/assets * generate jss stylesheet => build/android/gen/<split app id>/ApplicationStylesheet.java * generate aidl * process build/android/res/*.xml for all i18n strings ** support app.xml to localize app name (TIMOB-2824 Android: App name localization) * handle splash screen * generate build/android/res/values/theme.xml * Create android.manifest (TIMOB-14978) * remove duplicate res in xml files??? * Build Java files and run dexer (TIMOB-14979) * if not --build-only and not package build, push deploy.json to emulator/device ** wait for sdcard *** gracefully handle timeouts (TIMOB-11827 Android: Installing an app to Android with 4.2 version takes long time) * Package and sign app (TIMOB-14980) * fire "build.post.compile" event * fire "build.finalize" event ---- h3. Hooks * Package Hook (TIMOB-14981) * Run Hook (TIMOB-14982) ---- h3. Misc * logcat * wait for emulator * delete unused support/android/templates/AppUserData.java * when subprocessing Java-based tools (android, etc), override "_JAVA_OPTIONS" environment variable (TIMOB-14322 CLI: Setting _JAVA_OPTIONS global variable breaks building of project) * convert default "dark" splash screen to a red-based one (TIMOB-4517 Android: default.png file is a gray image, should be the red default image) * TIMOB-11120 Android: Expose a way for users to exclude js files from being encrypted * TIMOB-339 Android: Missing Icons * TIMOB-13311 Android: CLI: possibility to build apk for beta release (like ios adhoc) (should be resolved with build profiles) * remove dependency on old Android SDKs (TIMOB-13983 Android: Titanium should use the latest stable Android SDK and NDK and not depend on 2.2 API 8)8
251TIMOB-9037CLI: Implement "export" commandExports a project to a standalone project without any dependencies on Titanium. The arguments will be similar to the build command.34
252TIMOB-9092BlackBerry: Implement UI.ActivityIndicator - Part2Implement the rest based on TIMOB-8810 To be implemented: Properties color : String font : Font message : String messageid : String style : Number Methods getColor( ) getFont( ) getMessage( ) getMessageid( ) getStyle( ) setColor( String color ) setFont( Font font ) setMessage( String message ) setMessageid( String messageid ) setStyle( Number style ) 12
253TIMOB-9111iOS: Ti.Utils.base64encode result is different between iOS and Androidh3. Problem The result of Ti.Utils.base64encode is different between iOS and Android. On iOS there are newline characters included when the string is long enough, on Android the newline characters are stripped out (which is the correct way to do base64 UTF8 encoding). Please see the attached screenshot explaining the issue. h3. Sample Code {noformat} (function() { var win = Ti.UI.createWindow({backgroundColor:'white'}); win.open(); var shortString = 'ABCDEFGHIJ1234567890ABCDEFGHIJ12|psndemo2|abcd:1'; var longString = 'ABCDEFGHIJ1234567890ABCDEFGHIJ12|psndemo2|abcd:12345678901234567890'; var tiBase64ShortResult = Ti.Utils.base64encode(shortString); var tiBase64LongResult = Ti.Utils.base64encode(longString); tiBase64ShortResult = String(tiBase64ShortResult); tiBase64LongResult = String(tiBase64LongResult); // BUG #2: Run this code in iOS and Android and compare the results // On iOS we get newline characters. On Android the newline characters are stripped out. // The correct behavior for UTF8 base64 encoding is to strip out the newline characters. // Android's implementation is correct. tiBase64ShortResult = tiBase64ShortResult.replace(/\r\n/g,"***NEWLINE***"); tiBase64LongResult = tiBase64LongResult.replace(/\r\n/g,"***NEWLINE***"); var alertDialog = Titanium.UI.createAlertDialog( { title: 'Result', message: 'short: ' + tiBase64ShortResult + '\nlong: ' + tiBase64LongResult, buttonNames: ['OK','Cancel'] }); alertDialog.show(); })(); {noformat}5
254TIMOB-9139Android: Tooling: How to set the deploytype h4. Problem Description When you do a deployment for distribution, you will think that the deploytype in analytics will switch to production. But it's not happening with some projects. A customer is not getting analytics from his app, and he reported it, the people in the Cloud replied that he didn't set the app to be in prod: The second issue, for the other app GUID 473b9203-836a-4d48-ac13-2993873efa2c, the problem is that the user is using deploytype:test, and analytics only shows up for deploytype:production. When I asked the client to do for production (i.e., deploy it to the Market), he already did that, as the attached image shows. h4. Actual Results App is not set for production in the deploytype. h4. Expected results If you build an app for distribution in the market, the deploytype should be production. h4. Extra info See attached image. 3
255TIMOB-9142BlackBerry: Implement BB animationsIn matching what's currently available on other platform, look for 2Dmetric, 3Dmetric and other references to animation17
256TIMOB-9143BlackBerry: Implement BB Application Menu (Crosscut Menu)On BB10 devices swiping from the top of the screen will display a menu bar of action items it is used to control not often use actions that apply (crosscut) across the entire app. See https://developer.blackberry.com/cascades/reference/bb__Application.html#function-swipedown https://developer.blackberry.com/cascades/documentation/ui/navigation/menus.html Look at NativeWindowObject.cpp to see how to do ActionItems2
257TIMOB-9144BlackBerry: Implement BB pushregisterForPushNotifications() for starting point BB push should be available after R6 release early in July. To see an overview of the BB10 push system see http://developer.blackberry.com/cascades/documentation/device_comm/push/index.html Java Based Server Side SDK http://developer.blackberry.com/devzone/develop/platform_services/push_overview.html To enable ASC some server side work is require. Make sure to give the ASC/360 teams early heads before working on this task. 8
258TIMOB-9158Blackberry: Update the tibbapp project to work with the R4 release of Cascades- remove extra libs from common.mk - adjust paths to R4 ndk for default detection in blackberryndk.py - And other things that might not work3
259TIMOB-9164Blackberry: [Studio integration] regenerate the bar-descriptor file at packaging timethe bar-descriptor file needs to be updated everytime we package to pick up potential changes to the tiapp.xml file8
260TIMOB-9202BlackBerry: Implement important Titanium.UI.OptionDialog functionalityFor now used native DropDown component for OptionDialog. In future when modal dialog will be supported by cascades, we need to switch to something more similar thing for OptionDialog, as already in Android and iPhone.15
261TIMOB-9203BlackBerry: Handle JavaScript exceptions in runtimeCurrently the Titanium runtime haults JS execution prints information to the stdout during an exception and then the Cascades message loop is entered. This should be changed to shutdown the app and return an error code. Pull request: https://github.com/Macadamian/titanium_mobile/pull/66 3
262TIMOB-9204BlackBerry: Bring API doc up to dateUpdating API doc is now part of the patch cycle. However, some components added in the past have not been reflected in API doc: - ImageView - TextField - ActivityIndicator (maybe, check it out) This task is to add past work to the API doc.2
263TIMOB-9219BlackBerry: Refactoring event handler implementationAdd event handler embedded class for each native controllers, which will be responsible for handling QT cascade events.5
264TIMOB-9286Android: Animation code reviewThe current state of Android animation APIs and its limitations/bugs needs a review to address various animation issues.5
265TIMOB-9291BlackBerry: Generate moc files during the buildNULL5
266TIMOB-9293BlackBerry: Create string table for Titanium error messagesError messages during runtime are, in most cases, not returning a readable message. A centralized string table should be created with properly formatted messages to help users with debugging.10
267TIMOB-9306Blackberry: add a universal logging mechanism for tibbNeed to add a universal logger to the framework. May use exceptions and stop the app in debug mode and only log in release mode. Also go over all existing qDebug and printf to update them to use the new logger. The logger will also need to do some locking to ensure that logging from concurrent threads doesn't result in logs cut and merged in the middle.5
268TIMOB-9309BlackBerry: Convert argparse to optparseThe argparse module was introduced in python 2.7 but we need to support 2.6 so we need to use optparse instead. It's fairly similar except it doesn't support sub-parsers.7
269TIMOB-9369BlackBerry: bring in the latest Appcelerator code into BB branchNULL3
270TIMOB-9378BlackBerry: Add script to create and install debug token[Tatyana] A note to myself: this task is a necessary step to be able to deploy an app to a device. This could be added to the devicemanagement.py script. {noformat} blackberry/devicemanagement.py createDebugToken --store-pass <password> --csj-pin <csj-pin> --csj-file <csj-file> (--device-pin <device-pin> | --device-pin-list <device-pin-list>) --debug-token-bar-file <debug-token-bar-file> --device <device> --device-password <password> <password> password for keystore and device <csj-pin> PIN associated with CSJ file <csj-file> input CSJ file for registration <device-pin> device PIN in hex without the '0x' (e.g. 50F2D211) <device-pin-list> file containing a list of device PINs <debug-token-bar-file> debug token file <device> hostname or the IP address of the target device or simulator {noformat} This is an example of what the script should do: {noformat} blackberry-debugtokenrequest -register -storepass 123456 -csjpin 729759 client-RDK-584232624.csj client-PBDT-584232624.csj blackberry-debugtokenrequest -storepass 123456 -devicepin 29AFDEBD dt.bar blackberry-deploy -installDebugToken dt.bar 169.254.0.1 -password 1234 {noformat}2
271TIMOB-9398Blackberry: Get standard JS keywords to work in V8things like the following don't currently work in V8: var v = new String('bla bla'); // v is undefined after executing that line var i = parseInt('5'); // TypeError: parseInt not a member of #error These are just 2 examples, many more likely have the same behavior. 5
272TIMOB-9403Android: Map - Add centerOffset property to Ti.Map.AnnotationThis is the parity ticket for Android to see if such functionality can be ported over. ------ Add centerOffset property to a custom annotation to be able to set a x & y offset to the image of the annotation. Right now the center of the annotation is the center of the image size. This makes that some images appear not to be in their proper place at certain zoom levels. Reference to official documentation: http://developer.apple.com/library/ios/#documentation/MapKit/Reference/MKAnnotationView_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40008207 I have already coded the feature and I open this ticket in order to get the pull request accepted.2
273TIMOB-9454BlackBerry: Complete Layout Handling of UI ViewPart of this task need to clean left and top properties from inherited classes that don't need to override the default implementation. One such occurence is in NativeListViewObject5
274TIMOB-9481iOS: cancelLocalNotification on iOS is brokenIn 'bg.js' of kitchensink, notifications cannot be cancelled using 'id' passed as userinfo dictionary to the notification. {panel:title=bg.js} {code} var notification = Ti.App.iOS.scheduleLocalNotification({ alertBody:"Kitchen Sink was put in background", alertAction:"Re-Launch!", userInfo:{id:"1"}, sound:"pop.caf", date:new Date(new Date().getTime() + 3000) // 3 seconds after backgrounding }); // we cancel our notification if we don't want it to continue // notification.cancel(); //this works!!!! Ti.App.iOS.cancelLocalNotification("1");// this does not work. {code} This is fixed by Pedro and the fix is available here. https://gist.github.com/48a765c50f64aa7c47ed3
275TIMOB-9539BlackBerry: Implement include()Needed for unit tests and Kitchen Sink19
276TIMOB-9542BlackBerry: Implement important Titanium.Buffer functionalityNULL15
277TIMOB-9543BlackBerry: Implement Ti.BufferStreamNULL3
278TIMOB-9552Android: Emulator: Not recognized by adb, unable to install to Emulator.When Android emulator deployed, adb fails to recognize the emulator. This is intermittent issue, it effect all emulator versions. This is not an regression it occurred in 2.0.2 Step to reproduce: 1) Create default project. 2) Right Click, Select "Run As", Select "Run Configurations..." 3) Select "Titanium Android Emulator" 4) Select platform Android API: "Google API Android 4.0.3" 5) Apply and Run. Expected Result: adb should recognized the emulator or if this occur then studio should be provide error correction to handle the error properly. Actual Result: adb doesn't recognize the emulator. Studio fails to notified to developer of the failure and App never installed. 13
279TIMOB-9604BlackBerry: Implement important Titanium.UI.TabGroup functionalityUse the implementation matrix to see what's remaining (these are things that are not implemented but supported in Cascades): https://docs.google.com/a/macadamian.com/spreadsheet/ccc?key=0Ajs-e76-B0yIdG1oLVVleVVxaGRYd3lWWXd0czhqUFE Add at least: * Titanium.UI.TabGroup.enabled * Titanium.UI.TabGroup.touchEnabled21
280TIMOB-9605BlackBerry: Implement important Titanium.UI.Window functionalityUse the implementation matrix to see what's remaining: https://docs.google.com/a/macadamian.com/spreadsheet/ccc?key=0Ajs-e76-B0yIdG1oLVVleVVxaGRYd3lWWXd0czhqUFE Implement at least: * Titanium.UI.Window.modal (sheets/dialogs in Cascades?) * Titanium.UI.Window.setKeepScreenOn21
281TIMOB-9658BlackBerry: Add JavaScript bootstrapping to frameworkSome of the Titanium implementation can be done using JavaScript so we need to provide a way to run our own bootstrapping .js files before we load app.js. There is possibly a lot of JavaScript code we can reuse from the android directory. The method I suggest is to package the .js files into the .bar file. The files should be put into a new folder called "framework" that is next to, not inside, the "assets" folder. The "assets" and "framework" folders should be separate so we don't have conflicts. The only complication would be that the require() and include() functions might need a flag to know whether the app has been bootstrapped or not (ie read from "framework" if bootstrapping and "assets" if not). A flag may not be sufficient if things are done asynchronously so the other solution would be to check if the file calling the require/include is in "framework" or "assets" and make sure to load the file from the same directory. There should be one file called boostrap.js that will include/require the other files, as needed.5
282TIMOB-9665Blackberry: fix property enumeration on JS object created by the frameworkcalling toString() on an object created by the Ti framework fails. We think that the property enumeration doesn't enumerate the inherited properties. 1
283TIMOB-9682Android: Packaging:No warning displayed for default system value of 'ti.ui.defaultunit'.It is not a regression.It exists as far as 1.8.2 While packaging the app,when the value of ti.ui.defaultunit is 'abc' - Expected - Display warning during packaging, use default system value Actual - No warnings are displayed while packaging. Logs generated while packaging are attached with the bug.3
284TIMOB-9685Blackberry: Resolve and clean TODOs and FIXMEs in the codeNULL8
285TIMOB-9788BlackBerry: Implement important Titanium.UI.Picker functionalityNeed to implement plain picker using BB drop down control. Use the implementation matrix to see what's remaining (these are things that are not implemented but supported in Cascades): https://docs.google.com/a/macadamian.com/spreadsheet/ccc?key=0Ajs-e76-B0yIdG1oLVVleVVxaGRYd3lWWXd0czhqUFE17
286TIMOB-9830BlackBerry: Support UI Controller property which value is another controllerNULL5
287TIMOB-9840BlackBerry: Integrate Anvil unit test framework and get tests to run- Implement platform specific file in anvil/driver/platforms (closest match likely to be android.js) - minor updates to anvil/driver/driver.js to add BB as a known platform - select a socket port for BB in anvil/driver/config.js created from a copy of exampleConfig.js - Identify necessary Ti API calls needed for the harness app and implement them - Figure out the communication between driver and harness7
288TIMOB-9859Android: increase AVD storage size to reduce [FAILED_INSUFFICIENT_STORAGE] errorsh2. Expected results: I should be able to build and install more than a few Ti apps to an Android emulator. h2. Actual results: Due to defaults defined in builder.py, I can fit only a couple of Ti apps before the emulator runs out of storage space. This results in a [FAILED_INSUFFICIENT_STORAGE] error. I can delete other apps to free space. However, if I need to work on multiple apps, I end up having to delete/install frequently. h2. Fix In builder.py (in my version, line 491) increase the partition size value. Current value is 128 (MB). I suggest at least 1024. 1
289TIMOB-9897Blackberry: address comments from Martin's reviewNULL3
290TIMOB-9916BlackBerry: Upgrade Cascades to R6NULL3
291TIMOB-9930Android: Packaging: With a non-existing module added to the project in the tiapp.xml,app packages without error and gets installed on deviceThis is not a regression. IT exists as far as 1.8.2. Adding a module to the project in the tiapp.xml which does not exist such as <module version="1.0">not.there</module> should prevent the app from getting packaged but it is not. App gets successfully packaged and gets installed on android device.It runs on emulator also without error/warnings. If I try to install it directly on simulaor or iOS/android device, it gives appropriate error for module not found like: For iOS simulator and device error is: [ERROR] Could not find the following required iOS modules: [ERROR] id: not.there version: 1.0 For android device, error is: [ERROR] Failed installing com.appcelerator.timob9090: pkg: /data/local/tmp/app.apk Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES] Steps to reproduce 1. Create a new app in TiStudio 2. Add a module to the project in the tiapp.xml which does not exist such as <module version="1.0">not.there</module> 3. Package the app/run on android emulator Actual result: The app gets packaged/runs on emulator without error. Expected result: The app should fail packaging with appropriate error result like [ERROR] Could not find the following required iOS modules: [ERROR] id: not.there version: 1.0 And give error for emulator also like(as we get in case of device) [ERROR] Failed installing com.appcelerator.timob9090: pkg: /data/local/tmp/app.apk Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]3
292TIMOB-9933BlackBerry: make sure that TiObjects get to the destruction stateNULL2
293TIMOB-9950BlackBerry: Fix/implement relative include/requireCurrently, include()'s method of doing relative files only works if all done in successive order. It does not work for windows with a url (not implemented) or if include is used in a function of a file in a subdir. Also, require() does not have any method right now. My proposal is to store the filepath in each TiObject so it can be retrieved later when needed. Also, we need to make sure that require() properly handles a "native Titanium module" by its ID (eg com.example.module).2
294TIMOB-9953BlackBerry: Fix logging/exception tags and exception outputCurrently, when we throw an exception while a file is being loaded by include or require, both files are shown in the message (eg "file1.js line 2: file2.js line 5: Missing argument"). We need to make changes so the following is true: # the exception has the [ERROR] tag # only the filename containing the actual error is shown ** might need to get rid of some TryCatch's ** might need to use Message::GetScriptResourceName # the filename shows the full path (minus the .../assets/) # an exception thrown from an event handler shows the filename and crashes the app (eg calling Ti.API.debug() with no params in a button handler) Also need to clean/split up TiRootObject::executeScript and implement Ti.API.log in .js.2
295TIMOB-9971BlackBerry: Complete 'remove' method in UI ViewImplement 'remove' method for removing child controls from a container.3
296TIMOB-9972BlackBerry: Implement UI.Tab.open and .setWindow, needed for KitchenSinkTo get this to work in KS, we need TIMOB-9879 and whatever else to fix the click event for TableView, but the Tab.open and setWindow can still be implemented separately. Take a look at android/modules/ui/src/js/tab.js for .open(), but currently we can't use the bootstrapping to extend the API because we create different objects instead of using the prototype.7
297TIMOB-10025BlackBerry: Sync with Appcelerator branchNULL3
298TIMOB-10059BlackBerry: Revisit UI.AlertDialog implementation based on R6Depends on Cascades R6 An alert dialog is a modal view that includes an optional title, a message and buttons, positioned in the middle of the display. In iOS: https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIAlertView_Class/UIAlertView/UIAlertView.html2
299TIMOB-10224Blackberry: Implement startLayout, finishLayout, updateLayout methodsNULL3
300TIMOB-10233BlackBerry: Sync with Appcelerator branch (Sprint 11)NULL2
301TIMOB-10257BlackBerry: Implement Titanium.IOStreamIOStream is the interface that all stream types implement. Methods: 5 Sub Classes: 43
302TIMOB-10264Blackberry: adjust UI controls based on R8This umbrella task is to address functional delta in controls that were previously implemented using R4 release of Cascades. It could either mean implementing new functionality now available in R6, or redoing something that no longer works or was implemented as a workaround. Refer to the implementation matrix to see what elements need to be implemented2
303TIMOB-10266BlackBerry: Complete Ti.UI.View methods / properties / eventsComplete UI View methods / properties / events NOT required by Kitchen Sink Add at least: * Titanium.UI.View.animate * Titanium.UI.View.append * Titanium.UI.View.backgroundGradient * Titanium.UI.View.borderColor * Titanium.UI.View.borderRadius * Titanium.UI.View.borderWidth * Titanium.UI.View.control * Titanium.UI.View.currentIndex * Titanium.UI.View.currentY * Titanium.UI.View.fireEvent * Titanium.UI.View.id * Titanium.UI.View.layout * Titanium.UI.View.on * Titanium.UI.View.refreshRssTable * Titanium.UI.View.reset * Titanium.UI.View.scrollView * Titanium.UI.View.showArticle * Titanium.UI.View.shuffle * Titanium.UI.View.state * Titanium.UI.View.titleId * Titanium.UI.View.toggle * Titanium.UI.View.toImage * Titanium.UI.View.touchEnabled * Titanium.UI.View.updateHandheldNav * Titanium.UI.View.updateSubNav * Titanium.UI.View.videoId 21
304TIMOB-10269BlackBerry: Implement Ti.UI.View setLayout / getLayoutNULL4
305TIMOB-10270BlackBerry: Implement getWidth, getHeight in R6 UI ViewNULL2
306TIMOB-10271BlackBerry: Implement getZIndex on R6 UI ViewNULL2
307TIMOB-10272BlackBerry: Finish size and position methods / properties on R6 UI ViewImplement: getHeight getWidth getBottom setBottom getRight setRight getSize setSize3
308TIMOB-10275BlackBerry: Implement important Titanium.Network functionalityImplement at least: * Titanium.Network.httpURLFormatter * Titanium.Network.networkType * Titanium.Network.online * Titanium.Network.registerForPushNotifications21
309TIMOB-10299Blackberry: Update API doc to state what is NOT implementedThis activity should be done at the "feature complete" stage of the project3
310TIMOB-10305Blackberry: Support overriding the default UI unit via tiapp.xmlOn Android and iOS, the default unit can be overriden on a per-application level by setting the ti.ui.defaultunit property in tiapp.xml. For example, to use DIPs as the default on all platforms, set defaultunit to dip: <property name="ti.ui.defaultunit" type="string">dip</property> The value for ti.ui.defaultunit can be any of the unit specifiers defined above, or system to specify that the platform's default unit should be used.5
311TIMOB-10307BlackBerry: Add support of javascript implementation of parts of the Ti APIUnmbrella task to link to all the bug and issue of the current framework that prevent easy extension of the api using js. Will also need to be figured out: inheritance between native objects and js objects8
312TIMOB-10345Blackberry: Implement applyProperties({}) method on Ti.UI objects to take a list of json properties as is done at create time.NULL8
313TIMOB-10371Blackberry: Imageview parity for scaling behaviorAs part of TIMOB-3749 scaling behavior of imageViews was changed. If either width or height of image view are set to follow SIZE behavior('auto',Ti.UI.SIZE,undefined) then the image is scaled with aspect ratio intact. Otherwise the image is scaled ignoring aspect ratio. Test code below {code} var win = Ti.UI.createWindow({ backgroundColor:'#fff', layout:'vertical' }); var image = Ti.UI.createImageView({ image: "http://www.catravelservices.com/management/hotels/pictures/Mawamba_lodge_nature.jpg", backgroundColor : "red" }); var label = Ti.UI.createLabel({ text:'Results Here' }) var updateLabel = function(){ var size = image.size; label.text = 'ImageView size is '+size.width+'x'+size.height; } var controlsContainer = Ti.UI.createView({ height:Ti.UI.SIZE }) var widthControls = Ti.UI.createView({ width:'50%', layout:'vertical', left:0, height:Ti.UI.SIZE }) var heightControls = Ti.UI.createView({ width:'50%', layout:'vertical', right:0, height:Ti.UI.SIZE }) controlsContainer.add(widthControls); controlsContainer.add(heightControls); var b1 = Ti.UI.createButton({title:'WIDTH=SIZE'}) var b2 = Ti.UI.createButton({title:'WIDTH=165'}) var b3 = Ti.UI.createButton({title:'WIDTH=250'}) var b4 = Ti.UI.createButton({title:'HEIGHT=SIZE'}) var b5 = Ti.UI.createButton({title:'HEIGHT=50'}) var b6 = Ti.UI.createButton({title:'HEIGHT=165'}) b1.addEventListener('click',function(e){ image.width=Ti.UI.SIZE; setTimeout(updateLabel,500); }) b2.addEventListener('click',function(e){ image.width=165; setTimeout(updateLabel,500); }) b3.addEventListener('click',function(e){ image.width=250; setTimeout(updateLabel,500); }) b4.addEventListener('click',function(e){ image.height=Ti.UI.SIZE; setTimeout(updateLabel,500); }) b5.addEventListener('click',function(e){ image.height=50; setTimeout(updateLabel,500); }) b6.addEventListener('click',function(e){ image.height=165; setTimeout(updateLabel,500); }) win.add(image); widthControls.add(b1); widthControls.add(b2); widthControls.add(b3); heightControls.add(b4); heightControls.add(b5); heightControls.add(b6); win.add(controlsContainer); win.add(label) win.open(); {code}8
314TIMOB-10442BlackBerry: Anvil: Make list of anvil tests that can be run for BlackBerryNULL1
315TIMOB-10534Tooling: Android emulator silently failsWhen I try to run the android emulator I see the following in the Debug output: {noformat} [DEBUG] C:\SDK\tools\emulator.exe -avd titanium_6_WVGA854 -port 5560 -sdcard "C:\Users\qatester\.titanium\titanium_6_WVGA854.sdcard" -logcat *:d,*,TiAPI:V -no-boot-anim -partition-size 128 armeabi-v7a [DEBUG] signal caught: 3 [DEBUG] calling emulator kill on 3872 {noformat} A bit of poking around finds that the emulator does not launch when the armeabi-v7a argument is attached. {noformat} Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved. C:\Users\qatester>C:\SDK\tools\emulator.exe -avd titanium_6_WVGA854 -port 5560 - sdcard "C:\Users\qatester\.titanium\titanium_6_WVGA854.sdcard" -logcat *:d,*,TiA PI:V -no-boot-anim -partition-size 128 armeabi-v7a C:\Users\qatester>invalid command-line parameter: armeabi-v7a. Hint: use '@foo' to launch a virtual device named 'foo'. please use -help for more information {noformat} I think this has something to do with the x86 emulators I had tested against, but can not figure out how to undo that change. Steps to reproduce: 1. Create an Android project. 2. Run the project in the emulator. Expected results: The app should run in the emulator or should throw a relevant error. Actual results: The debug shows the above message before flipping the view to waiting for the emulator to be ready which finally times out.8
316TIMOB-10468Blackberry: Merge Appcelerator's KS branch with our branchNULL2
317TIMOB-10713BlackBerry: Anvil: Add ability to run on deviceNULL2
318TIMOB-10717Blackberry: Implement Titanium.UI.TextField value propertyCreate TextField. Try to set Value or get value during some action (for example button click event). for getValue() - undefined is returned. for setValue() - doesn't set the textfield value. 1
319TIMOB-10748Blackberry: AlertDialog inherits from View rather than ProxyAlertDialog inherits from the wrong parent. To change this, the properties of UI.AlertDialog need to be moved to TIProxy otherwise the properties don't work on AlertDialog and this is why it is currently this way. This will be the case for all UI objects that should extend Proxy directly instead of View.19
320TIMOB-10763CLI: Android: "run" hook for Android appsNULL3
321TIMOB-10778BlackBerry: Sync with Appcelerator branch (Sprint 13)NULL2
322TIMOB-10800iOS: TableView scrolls back to focused text field on scroll end*Code* http://pastie.org/4674079 *Expected Behaviour* The user should be able to scroll through the table without being taken back to focused textField. The textField should stay focused. *Actual Behaviour* TableView of textFields scrolls back to focussed text field on scroll end. *Notes* - Tested on iOS 5.1 - To Replicate the issue, click on textField in row 6 then once the textfield gains focus scroll down the table, as soon the scrolling ends it will take you back to row 6.13
323TIMOB-10814Blackberry: Fix Anvil issue caused by syncNULL2
324TIMOB-10820Blackberry: Upgrade to R8NULL8
325TIMOB-11373Android Device Debugging: console window fails to display console output after port forwardTitanium Studio Console output fail to display output results. Steps to Reproduce: 1. Create default project, add sample code: {code} Ti.API.info('INFO LOGGED'); {code} 2. Run 'debug' on Android Device. Port forward message should appear on console. 3. Launch app from device. Actual Result: Titanium Studio console log fail to display the console output Expected Result: Titanium Studio console log display the console output as DDMS or Catlog. 13
326TIMOB-10849Blackberry: Implement important Ti.UI.Label functionalityImplement at least: * Titanium.UI.Label.opacity * Titanium.UI.Label.touchEnabled * Titanium.UI.Label.url21
327TIMOB-10869Blackberry: Implement important Titanium.UI methodsUse the implementation matrix to see what's remaining (these are things that are not implemented but supported in Cascades): https://docs.google.com/a/macadamian.com/spreadsheet/ccc?key=0Ajs-e76-B0yIdG1oLVVleVVxaGRYd3lWWXd0czhqUFE2
328TIMOB-10870BlackBerry: Implement important Titanium.UI.ActivityIndicator functionalityUse the implementation matrix to see what's remaining (these are things that are not implemented but supported in Cascades): https://docs.google.com/a/macadamian.com/spreadsheet/ccc?key=0Ajs-e76-B0yIdG1oLVVleVVxaGRYd3lWWXd0czhqUFE Add at least: * Titanium.UI.ActivityIndicator.style (does not appear to be applicable in Cascades)21
329TIMOB-10872BlackBerry: Implement important Titanium.UI.TextField functionalityUse the implementation matrix to see what's remaining (these are things that are not implemented but supported in Cascades): https://docs.google.com/a/macadamian.com/spreadsheet/ccc?key=0Ajs-e76-B0yIdG1oLVVleVVxaGRYd3lWWXd0czhqUFE Implement at least: * Titanium.UI.TextField.blur * Titanium.UI.TextField.focus * Titanium.UI.TextField.keyboardType21
330TIMOB-10873BlackBerry: Implement important Titanium.UI.ImageView functionalityUse the implementation matrix to see what's remaining (these are things that are not implemented but supported in Cascades): https://docs.google.com/a/macadamian.com/spreadsheet/ccc?key=0Ajs-e76-B0yIdG1oLVVleVVxaGRYd3lWWXd0czhqUFE19
331TIMOB-10875Blackberry: Implement important Titanium.UI.ProgressBar functionalityUse the implementation matrix to see what's remaining (these are things that are not implemented but supported in Cascades): https://docs.google.com/a/macadamian.com/spreadsheet/ccc?key=0Ajs-e76-B0yIdG1oLVVleVVxaGRYd3lWWXd0czhqUFE15
332TIMOB-10876Blackberry: Implement important Titanium.UI.Slider functionalityUse the implementation matrix to see what's remaining (these are things that are not implemented but supported in Cascades): https://docs.google.com/a/macadamian.com/spreadsheet/ccc?key=0Ajs-e76-B0yIdG1oLVVleVVxaGRYd3lWWXd0czhqUFE15
333TIMOB-10877Blackberry: Implement important Titanium.UI.Switch functionalityUse the implementation matrix to see what's remaining (these are things that are not implemented but supported in Cascades): https://docs.google.com/a/macadamian.com/spreadsheet/ccc?key=0Ajs-e76-B0yIdG1oLVVleVVxaGRYd3lWWXd0czhqUFE15
334TIMOB-10878Blackberry: Implement important UI.TableView functionalityUse the implementation matrix to see what's remaining (these are things that are not implemented but supported in Cascades): https://docs.google.com/a/macadamian.com/spreadsheet/ccc?key=0Ajs-e76-B0yIdG1oLVVleVVxaGRYd3lWWXd0czhqUFE Implement at least: * Titanium.UI.TableView.addEventListener * Titanium.UI.TableView.appendRow * Titanium.UI.TableView.setData21
335TIMOB-10919Windows: Implement UI.PickerRow "title" and "setTitle"NULL3
336TIMOB-11093iOS: Update jscore to 538.11.1 versionTicket for tracking the update of JSCore to the version shipping with a later version of iOS. Document is here: https://wiki.appcelerator.org/display/pe/iOS+-+Updating+JSCore. We can pick a version based on a tag from https://trac.webkit.org/browser/tags?order=name. Some versions we have been able to ascertain, but it is unclear why we wouldn't just pick the latest stable version. iOS 8.X: https://trac.webkit.org/browser/tags/Safari-600.1.4 iOS 8.1.0: AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B411 Safari/600.1.4 iOS 8.0.2: AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12A405 Safari/600.1.4 iOS 8.0.0: AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12A365 Safari/600.1.4 iOS: 7.1: https://trac.webkit.org/browser/tags/Safari-537.51.2 7.1: AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D167 Safari/9537.53 iOS 6.1.3: http://www.opensource.apple.com/release/ios-613/ 34
337TIMOB-11172iOS: Debugger: breakpoint at unassigned variable declaration skippedBreakpoints at unassigned variable declarations are skipped. For example: {code} var deadVar1; // breakpoint Ti.API.info('Global Variables Defined!'); (function(){ var deadVar2; // breakpoint Ti.API.info('Anonymous Function Called!'); })(); alert('App Exited!'); {code} Running this code in debug mode will skip all breakpoints. This does not occur in Android, this is a parity issue. Steps to Reproduce: 1. Run code in debug (manually insert breakpoints as per code comments): {code} var deadVar1; // breakpoint Ti.API.info('Global Variables Defined!'); (function(){ var deadVar2; // breakpoint Ti.API.info('Anonymous Function Called!'); })(); alert('App Exited!'); {code} Actual Result: App exits without hitting any breakpoints. Expected Result: The first breakpoint should be hit and pressing 'Resume' should hit the next breakpoint. Here is the expected console log for the sample code: {code} [INFO] Global Variables Defined! [INFO] Anonymous Function Called! {code}1
338TIMOB-11188iOS: Debugger: breakpoints ignored if app is only primitive assignment statementsBreakpoints ignored if the app is only comprised of primitive assignment statements. This is not a regression. This does not occur on Android. This is a parity issue. This is basic functionality. Steps to Reproduce: 1. Run code in debug (manually insert breakpoints as per code comments): {code} var a = 1; // breakpoint var b = 2; // breakpoint var c = 3; // breakpoint var d = 4; // breakpoint var e = 5; // breakpoint var f = 6; // breakpoint {code} Actual Result: All breakpoints ignored. Expected Result: All breakpoints should be hit (as 'Resume' is pressed).1
339TIMOB-11628Correct spacing and grammar in Android NDK console warning.When packaging an Android module and you forget to make a link to the NDK, it provides a warning, but the warning is missing a space and a period. "Check your modules' build properties)You may need to install"3
340TIMOB-14008Android: layout vertical and zIndex problem*Expected result* The red view should be located on the black view. *Actual result* The black view is missing. *Note* Works on iOS (both the red view and black view show), but not Android. *Test case* {code:javascript}var win = Ti.UI.createWindow({ backgroundColor : '#fff', navBarHidden : true, exitOnClose : true }); var view = Ti.UI.createView({ layout : 'vertical' }); view.add(Ti.UI.createView({ width : 200, height : 50, backgroundColor : 'red', zIndex : 1 })); view.add(Ti.UI.createView({ height : 50, backgroundColor : 'black', top : -15 })); win.add(view) win.open(); {code}8
341TIMOB-11603Android: invalid android path in bash profile results in project creation error, improve error messageFailed to build a project for Android in Titanium Studio due to incorrect path to android SDK in a bash profile. *It happens only in 3.0.0.version of Studio.* It creates projects in Studio 2.1.2 Test steps: 1.Go to Titanium Studio > Preferences > Titanium 2. Browse and set Android SDK Home 3. Browse and set Android NDK Home Note the difference with a bash profile. export ANDROID_SDK=/myname/Documents/android-sdk-macosx export ANDROID_NDK=/myname/Documents/android-ndk-r8 4. Create a project for Android. Actual result: Fail to create a project. Failed to locate android-8 and android 2.2 Expected result: A project should be created successfully. 3
342TIMOB-11637Ti.Network.HTTPClient needs to be implementedNULL21
343TIMOB-11769CLI: colors, lines, and messages ill-formatted with CLI enabledConsole: colors, lines, and messages ill-formatted with CLI enabled (see screenshots). Steps to Reproduce: 1. Run code: {code} /* console */ if(Ti.Platform.osname != 'android') // TIMOB-11294 - Android: console: log functions fail in commonjs require { console.log('console LOG'); console.log(['console LOG', 'ARG1', 'ARG2']); console.debug('console DEBUG'); console.debug(['console DEBUG', 'ARG1', 'ARG2']); console.info('console INFO'); console.info(['console INFO', 'ARG1', 'ARG2']); console.warn('console WARN'); console.warn(['console WARN', 'ARG1', 'ARG2']); console.error('console ERROR'); console.error(['console ERROR', 'ARG1', 'ARG2']); } else { Ti.API.info('TIMOB-11294 - Android: console: log functions fail in commonjs require'); } /* Ti.API */ Ti.API.trace('Ti.API TRACE'); Ti.API.trace(['Ti.API TRACE', 'ARG1', 'ARG2']); Ti.API.debug('Ti.API DEBUG'); Ti.API.debug(['Ti.API DEBUG', 'ARG1', 'ARG2']); Ti.API.info('Ti.API INFO'); Ti.API.info(['Ti.API INFO', 'ARG1', 'ARG2']); Ti.API.warn('Ti.API WARN'); Ti.API.warn(['Ti.API WARN', 'ARG1', 'ARG2']); Ti.API.error('Ti.API ERROR'); Ti.API.error(['Ti.API ERROR', 'ARG1', 'ARG2']); /* Ti.API.log */ Ti.API.log('TRACE', 'Ti.API.log TRACE'); Ti.API.log('TRACE', ['Ti.API.log TRACE', 'ARG1', 'ARG2']); Ti.API.log('DEBUG', 'Ti.API.log DEBUG'); Ti.API.log('DEBUG', ['Ti.API.log DEBUG', 'ARG1', 'ARG2']); Ti.API.log('INFO', 'Ti.API.log INFO'); Ti.API.log('INFO', ['Ti.API.log INFO', 'ARG1', 'ARG2']); Ti.API.log('WARN', 'Ti.API.log WARN'); Ti.API.log('WARN', ['Ti.API.log WARN', 'ARG1', 'ARG2']); Ti.API.log('ERROR', 'Ti.API.log ERROR'); Ti.API.log('ERROR', ['Ti.API.log ERROR', 'ARG1', 'ARG2']); Ti.API.log('LOG', 'Ti.API.log LOG'); Ti.API.log('LOG', ['Ti.API.log LOG', 'ARG1', 'ARG2']); /* Ti.iOS.API */ if(Ti.Platform.osname == 'iphone' || Ti.Platform.osname == 'ipad') { Ti.API.timestamp('Ti.API TIMESTAMP'); Ti.API.timestamp(['Ti.API TIMESTAMP', 'ARG1', 'ARG2']); } {code} Actual Result: colors, line formatting misaligned, and some messages do not display at all. Expected Result: colors, lines, and messages should appear and be properly formatted8
344TIMOB-11686BlackBerry: InvocationsAs a BlackBerry developer, I want the ability to integrate with other applications on the platform in order to provide better multitasking for the user.3
345TIMOB-11700Android: Make generated projects importable into EclipseWhen we build an android projects using our build scripts, it would be nice if we could directly import that project into eclipse and run it from there to debug. We will need to create things like .project to make this an eclipse project.3
346TIMOB-12646iOS: TableViewRow selection causes child view's backgroundColor to disappearPlatform: iOS Device: iOS Simulator 6.0 & iPod Touch (4th gen, software version 6.0.1) Repro: 1. Create a TableView 2. Create a TableViewRow 3. Create a View with a backgroundColor 4. Add the view to the row 5. Add the row to the table 6. Tap and hold on the row Result: The row's selectedBackgroundColor becomes visible and the view's backgroundColor becomes transparent Expected: The row's selectedBackgroundColor becomes visible and the view's backgroundColor remains visible Additional Notes: 1. If the view inside of the row has children, they are still displayed. Only the view's backgroundColor is affected. 2. Setting the row's selectionStyle to NONE prevents the backgroundColor of the view from disappearing.8
347TIMOB-11867CLI: Alloy: Mobile Packaging FailedSteps To Reproduce: 1. Create Alloy project 2. Package to Mobile Web Project Actual: Failed to package appears Expected: Mobile Package must occur without error8
348TIMOB-11932BlackBerry: Implement important Titanium.Media functionalityNULL17
349TIMOB-11943Android: blur event not called when keyboard is hiddenh1. Problem description When a TextArea is focused, and the user clicks the back button to hide the soft keyboard, the blur event is not fired. It is not also possible to use the 'android:back' event, as it is not fired when hiding the keyboard. h1. Steps to reproduce - Use the following code to test the bug. - Click on the black window to open a second one with a TextArea - Click on it to show the keyboard - Hit the back button: the 'blur' and 'android:back' events are not fired when keyboard is being hidden {code} // Create a window var root = Ti.UI.createWindow({ backgroundColor : 'black', modal: true }); root.addEventListener('click', function() { var win = Ti.UI.createWindow({ backgroundColor : 'white', modal: true }); var toolbar = Titanium.UI.createTextArea({ height: 37, width: 200, font: {fontSize:16,fontFamily:'ARIAL', fontWeight:'solid'}, color: '#000', borderWidth: 1, borderColor: '#828281', borderRadius: 12, suppressReturn: false, scrollable: false }); toolbar.addEventListener('blur', function() { alert('blurrrred'); }); win.addEventListener('android:back', function() { alert('baaaack'); }); win.add(toolbar); win.open(); }) root.open(); {code}5
350TIMOB-12246Android: Auto correct set to false on TextField with KEYBOARD_DECIMAL_PAD doesn't allow decimal pointh2.Problem When the keyboardType propery of a TextField is set to Ti.UI.KEYBOARD_DECIMAL_PAD and autocorrect is set to false, the decimal point is not allowed to be entered into the textfield. This leaves no way to enter dollar amounts without using the default keyboard, which allows any character, and is therefore not appropriate. h2.Expected Behavior autocorrect should not be interfering with numbers in the text field. h2.Actual Behavior When auto correct is set to false The "numbers and punctuation" keyboard appears, but clicking on the decimal point has no effect. h2.Testcase {panel:title=app.js} {code} var win = Ti.UI.createWindow({ backgroundColor : 'white' }); var textField = Ti.UI.createTextField({ borderStyle : Ti.UI.INPUT_BORDERSTYLE_ROUNDED, color : '#336699', keyboardType : Ti.UI.KEYBOARD_DECIMAL_PAD, returnKeyType : Ti.UI.RETURNKEY_DEFAULT, autocorrect : false, textAlign : 'right', width : '50%' }); win.add(textField); win.open(); {code} {panel}3
351TIMOB-13401iOS 6: insertRowBefore uses animation with animated set to false and animationStyle set to none*Description* insertRowBefore uses a fade animation although animated is set to false and animationStyle is set to NONE (see code sample) *Expected result* row is simply inserted without an animation *current result* row is inserted with fade animation *additional notes* might also apply to insertRowAfter and appendRow and deleteRow (not tested) *sample* {code} /* * Single Window Application Template: * A basic starting point for your application. Mostly a blank canvas. * * In app.js, we generally take care of a few things: * - Bootstrap the application with any data we need * - Check for dependencies like device type, platform version or network connection * - Require and open our top-level UI component * */ //bootstrap and check dependencies if (Ti.version < 1.8) { alert('Sorry - this application template requires Titanium Mobile SDK 1.8 or later'); } // This is a single context application with mutliple windows in a stack (function() { //determine platform and form factor and render approproate components var win = Ti.UI.createWindow({ width : Ti.UI.FILL, height : Ti.UI.FILL, }); var tv = Ti.UI.createTableView({ width : Ti.UI.FILL, height : Ti.UI.FILL, }); var rows = []; for (var i = 0; i < 50; i++) { rows.push(Ti.UI.createTableViewRow({ title : 'Row ' + i })); } var row = Ti.UI.createTableViewRow({ title : 'Insert Row Before 0' }); row.addEventListener('click', function() { tv.insertRowBefore(0, { title : 'Row inserted before 0' }); }); rows.push(row); var row = Ti.UI.createTableViewRow({ title : 'Insert Row Before 1' }); row.addEventListener('click', function() { tv.insertRowBefore(1, { title : 'Row inserted before 1 w/o anim' }, { animationStyle : Ti.UI.iPhone.RowAnimationStyle.NONE }); }); rows.push(row); var row = Ti.UI.createTableViewRow({ title : 'Insert Row Before this' }); row.addEventListener('click', function(e) { tv.insertRowBefore(e.index, { title : 'Row inserted before 0' }); }); rows.push(row); var row = Ti.UI.createTableViewRow({ title : 'Insert Row Before this' }); row.addEventListener('click', function(e) { tv.insertRowBefore(e.index, { title : 'Row inserted before w/o anim' }, { animationStyle : Ti.UI.iPhone.RowAnimationStyle.NONE, animated : false, }); }); rows.push(row); tv.data = rows; win.add(tv); win.open(); })(); {code}5
352TIMOB-12034CLI: Building for android with '-b' -build only flag starts the daemon & waits for the device after building the appSteps to reproduce: 1.Launch CLI by typing 'titanium' in the terminal. 2.Run 'ti build -p android -b -d <project-dir> --log-level trace -s 3.0.0.v20121211130203'. Actual results: 1.The app builds but it starts the deamon & waits for the device. Expected results: 1.The app should build but the deamon should not start & not wait for the android device as we have specified the '-b' i.e build only flag. Trace output: {code} LChoudharyMBP:~ lokeshchoudhary$ ti build -p android -b true -d /Users/lokeshchoudhary/Desktop/test/test --log-level trace -s 3.0.0.v20121211130203 Titanium Command-Line Interface, CLI version 3.0.21, Titanium SDK version 3.0.0.v20121211130203 Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved. Please report bugs to http://jira.appcelerator.org/ Android SDK path: /Users/lokeshchoudhary/Desktop/android-sdk-macosx [DEBUG] No project level plugins to load [DEBUG] Loaded plugin hooks: [DEBUG] /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121211130203/cli/hooks/plugins.js [DEBUG] /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121211130203/android/cli/hooks/install.js [DEBUG] /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121211130203/android/cli/hooks/run.js [INFO] logfile = /Users/lokeshchoudhary/Desktop/test/test/build.log [DEBUG] /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/builder.py build test /Users/lokeshchoudhary/Desktop/android-sdk-macosx /Users/lokeshchoudhary/Desktop/test/test com.app.test [INFO] Titanium SDK version: 3.0.0 (12/07/12 12:02 fc56f4c) [DEBUG] com.app.test installed? False [DEBUG] Detecting modules in /Users/lokeshchoudhary/Desktop/test/test/modules [DEBUG] Detecting modules in /Users/lokeshchoudhary/Library/Application Support/Titanium/modules [DEBUG] Detected module for android: ti.cloudpush 2.0.7 @ /Users/lokeshchoudhary/Library/Application Support/Titanium/modules/android/ti.cloudpush/2.0.7 [DEBUG] Detected module for android: ti.brightcove 2.0.1 @ /Users/lokeshchoudhary/Library/Application Support/Titanium/modules/android/ti.brightcove/2.0.1 [DEBUG] Detected module for commonjs: ti.cloud 2.3.0 @ /Users/lokeshchoudhary/Library/Application Support/Titanium/modules/commonjs/ti.cloud/2.3.0 [DEBUG] Detected module for iphone: com.soasta.touchtest 1.0 @ /Users/lokeshchoudhary/Library/Application Support/Titanium/modules/iphone/com.soasta.touchtest/1.0 [INFO] Copying CommonJS modules... [INFO] Copying project resources.. [INFO] Tiapp.xml unchanged, skipping class generation [DEBUG] detected module analytics, path = /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/modules/titanium-analytics.jar [DEBUG] detected module android, path = /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/modules/titanium-android.jar [DEBUG] adding required library: jaxen-1.1.1.jar [DEBUG] adding required library: ti-commons-codec-1.3.jar [DEBUG] adding required library: kroll-common.jar [DEBUG] adding required library: titanium.jar [DEBUG] detected module app, path = /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/modules/titanium-app.jar [DEBUG] detected module ui, path = /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/modules/titanium-ui.jar [DEBUG] adding required library: android-support-v4.jar [DEBUG] detected module filesystem, path = /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/modules/titanium-filesystem.jar [DEBUG] detected module media, path = /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/modules/titanium-media.jar [DEBUG] detected module locale, path = /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/modules/titanium-locale.jar [INFO] Compiling Javascript Resources ... [DEBUG] Processing Android resource drawables [DEBUG] found drawable-long-land-hdpi splash screen at /Users/lokeshchoudhary/Desktop/test/test/Resources/android/images/res-long-land-hdpi/default.png [DEBUG] found drawable-long-land-ldpi splash screen at /Users/lokeshchoudhary/Desktop/test/test/Resources/android/images/res-long-land-ldpi/default.png [DEBUG] found drawable-long-port-hdpi splash screen at /Users/lokeshchoudhary/Desktop/test/test/Resources/android/images/res-long-port-hdpi/default.png [DEBUG] found drawable-long-port-ldpi splash screen at /Users/lokeshchoudhary/Desktop/test/test/Resources/android/images/res-long-port-ldpi/default.png [DEBUG] found drawable-notlong-land-hdpi splash screen at /Users/lokeshchoudhary/Desktop/test/test/Resources/android/images/res-notlong-land-hdpi/default.png [DEBUG] found drawable-notlong-land-ldpi splash screen at /Users/lokeshchoudhary/Desktop/test/test/Resources/android/images/res-notlong-land-ldpi/default.png [DEBUG] found drawable-notlong-land-mdpi splash screen at /Users/lokeshchoudhary/Desktop/test/test/Resources/android/images/res-notlong-land-mdpi/default.png [DEBUG] found drawable-notlong-port-hdpi splash screen at /Users/lokeshchoudhary/Desktop/test/test/Resources/android/images/res-notlong-port-hdpi/default.png [DEBUG] found drawable-notlong-port-ldpi splash screen at /Users/lokeshchoudhary/Desktop/test/test/Resources/android/images/res-notlong-port-ldpi/default.png [DEBUG] found drawable-notlong-port-mdpi splash screen at /Users/lokeshchoudhary/Desktop/test/test/Resources/android/images/res-notlong-port-mdpi/default.png [DEBUG] /Users/lokeshchoudhary/Desktop/android-sdk-macosx/platform-tools/aapt package -f -M AndroidManifest.xml -A /Users/lokeshchoudhary/Desktop/test/test/build/android/bin/assets -S res -I /Users/lokeshchoudhary/Desktop/android-sdk-macosx/platforms/android-8/android.jar -I "/Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/titanium.jar" -F /Users/lokeshchoudhary/Desktop/test/test/build/android/bin/app.ap_ [DEBUG] creating unsigned apk: /Users/lokeshchoudhary/Desktop/test/test/build/android/bin/app-unsigned.apk [DEBUG] from resource zip => assets/Resources/KS_nav_ui.png [DEBUG] from resource zip => assets/Resources/KS_nav_views.png [DEBUG] from resource zip => assets/Resources/app.js [DEBUG] from resource zip => assets/Resources/appicon.png [DEBUG] from resource zip => assets/Resources/default.png [DEBUG] from resource zip => assets/app.json [DEBUG] from resource zip => assets/index.json [DEBUG] from resource zip => assets/tiapp.xml [DEBUG] from resource zip => res/drawable/appicon.png [DEBUG] from resource zip => res/drawable/background.png [DEBUG] from resource zip => res/layout/titanium_tabgroup.xml [DEBUG] from resource zip => AndroidManifest.xml [DEBUG] from resource zip => resources.arsc [DEBUG] from resource zip => res/drawable-long-land-hdpi/background.png [DEBUG] from resource zip => res/drawable-long-land-ldpi/background.png [DEBUG] from resource zip => res/drawable-long-port-hdpi/background.png [DEBUG] from resource zip => res/drawable-long-port-ldpi/background.png [DEBUG] from resource zip => res/drawable-notlong-land-hdpi/background.png [DEBUG] from resource zip => res/drawable-notlong-land-ldpi/background.png [DEBUG] from resource zip => res/drawable-notlong-land-mdpi/background.png [DEBUG] from resource zip => res/drawable-notlong-port-hdpi/background.png [DEBUG] from resource zip => res/drawable-notlong-port-ldpi/background.png [DEBUG] from resource zip => res/drawable-notlong-port-mdpi/background.png [DEBUG] from JAR /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/modules/titanium-ui.jar => ti/modules/titanium/ui/widget/webview/binding.js [DEBUG] from JAR /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/modules/titanium-ui.jar => ti/modules/titanium/ui/widget/webview/binding.min.js [DEBUG] from JAR /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/modules/titanium-ui.jar => ti/modules/titanium/ui/widget/webview/json2.js [DEBUG] from JAR /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/modules/titanium-ui.jar => ti/modules/titanium/ui/widget/webview/polling.js [DEBUG] from JAR /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/modules/titanium-ui.jar => ti/modules/titanium/ui/widget/webview/polling.min.js [DEBUG] from JAR /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/titanium.jar => org/appcelerator/titanium/build.properties [DEBUG] from JAR /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/titanium.jar => org/appcelerator/titanium/res/drawable/background.png [DEBUG] from JAR /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/titanium.jar => org/appcelerator/titanium/res/drawable/btn_check_buttonless_on.png [DEBUG] from JAR /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/titanium.jar => org/appcelerator/titanium/res/drawable/btn_check_buttonless_on_18.png [DEBUG] from JAR /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/titanium.jar => org/appcelerator/titanium/res/drawable/btn_check_buttonless_on_48.png [DEBUG] from JAR /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/titanium.jar => org/appcelerator/titanium/res/drawable/btn_check_buttonless_on_64.png [DEBUG] from JAR /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/titanium.jar => org/appcelerator/titanium/res/drawable/btn_more.png [DEBUG] from JAR /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/titanium.jar => org/appcelerator/titanium/res/drawable/btn_more_18.png [DEBUG] from JAR /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/titanium.jar => org/appcelerator/titanium/res/drawable/btn_more_48.png [DEBUG] from JAR /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/titanium.jar => org/appcelerator/titanium/res/drawable/btn_more_64.png [DEBUG] from JAR /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/titanium.jar => org/appcelerator/titanium/res/drawable/btn_picker_normal.9.png [DEBUG] from JAR /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/titanium.jar => org/appcelerator/titanium/res/drawable/btn_picker_pressed.9.png [DEBUG] from JAR /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/titanium.jar => org/appcelerator/titanium/res/drawable/btn_picker_selected.9.png [DEBUG] from JAR /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/titanium.jar => org/appcelerator/titanium/res/drawable/default_icon.png [DEBUG] from JAR /Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/titanium.jar => org/appcelerator/titanium/res/drawable/photoDefault.png [DEBUG] installing native SDK libs [DEBUG] keytool -v -list -keystore "/Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/dev_keystore" -storepass ******* -alias tidev [DEBUG] jarsigner -sigalg MD5withRSA -digestalg SHA1 -storepass ******* -keystore "/Users/lokeshchoudhary/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121207120202/android/dev_keystore" -signedjar /Users/lokeshchoudhary/Desktop/test/test/build/android/bin/app.apk /Users/lokeshchoudhary/Desktop/test/test/build/android/bin/app-unsigned.apk tidev [DEBUG] /Users/lokeshchoudhary/Desktop/android-sdk-macosx/tools/zipalign -v 4 /Users/lokeshchoudhary/Desktop/test/test/build/android/bin/app.apk /Users/lokeshchoudhary/Desktop/test/test/build/android/bin/app.apkz [INFO] Project built successfully in 7s 903ms * daemon not running. starting it now on port 5037 * * daemon started successfully * - waiting for device - {code}3
353TIMOB-13392Android: Implement Scrollable TabsAs seen in the [documentation|http://developer.android.com/design/patterns/actionbar.html] [(another place)|http://developer.android.com/design/building-blocks/tabs.html], there's a new subtype of tab bar in the Android, called Scrollable Tabs.13
354TIMOB-12848Android: Using the camera on certain devices causes the app to crashCall Ti.Media.showCamera and the camera opens up fine, takes the picture fine, then click ok, and the app crashes before reaching the success function. The picture does manage to get saved into the photo gallery. Sample code. Paste this into a new Android application. {code} var win = Titanium.UI.createWindow(); var imageView = Ti.UI.createImageView({height: Ti.UI.FILL, width: Ti.UI.Fill}); win.add(imageView); Titanium.Media.showCamera({ success:function(event) { Ti.API.info('#### Camera Success'); var cropRect = event.cropRect; var image = event.media; Ti.API.info(image.length); var filename = Titanium.Filesystem.tempDirectory + "/"+ 'camera_photo' + new Date().getTime() + ".png"; Ti.API.info(filename); var f = Titanium.Filesystem.getFile(filename); Ti.API.info(f.nativePath); if (f.exists()) { Ti.API.info('The file exist , trying to delete it before using it :' + f.deleteFile()); f = Titanium.Filesystem.getFile(filename); } f.write(image); alert('Camera Success! The file size is '+f.size+' bytes.\n Now trying to assign it to an image on the screen (this may fail for hi res images)') imageView.image = f.nativePath; }, cancel:function() { Ti.API.info('#### Camera Cancel'); }, error:function(error) { // create alert Ti.API.info('#### Camera Error'); var a = Titanium.UI.createAlertDialog({title:'Camera'}); // set message if (error.code == Titanium.Media.NO_CAMERA) { a.setMessage('Device does not have video recording capabilities'); } else { a.setMessage('Unexpected error: ' + error.code); } // show alert a.show(); }, allowEditing:true }); win.open(); {code}13
355TIMOB-12116BlackBerry: Implement Titanium.DatabaseNeed to implement at least: * Titanium.Database * Titanium.Database.DB ** Titanium.Database.DB.close ** Titanium.Database.DB.execute ** Titanium.Database.DB.lastInsertRowId ** Titanium.Database.DB.remove * Titanium.Database.install * Titanium.Database.open * Titanium.Database.ResultSet ** Titanium.Database.ResultSet.close ** Titanium.Database.ResultSet.fieldByName ** Titanium.Database.ResultSet.getRowCount ** Titanium.Database.ResultSet.isValidRow ** Titanium.Database.ResultSet.next21
356TIMOB-13398iOS: support ellipsize property of Ti.UI.Label (parity)Android and mobileweb support the ellipsize property of Ti.UI.Label. Please add support for this property under iOS as well.5
357TIMOB-12169CLI: Project compilation - no build.log is being createdBuilding a mobile project to iOS device or simulator wont create build.log if CLI is enabled. Occurs in 3.0.0 and 3.1.0 Test steps: 1. Create a project in Titanium Studio 2. Run it as iOS simulator or build it to device 3. Check project's build folder for build.log Actual result: No build.log Expected result: build.log should be created in both scenarios (success or failure) 13
358TIMOB-12457iOS: Ti.Locale.currentLocale and currentCountry issuesh6.Ti.Locale issue Ti.Locale is NOT working as expected after reading the doc. h6.Expected currentLocale and getCurrentLocale() to work like language i.e. http://docs.appcelerator.com/titanium/latest/#!/api/Titanium.Locale-method-getCurrentLocale h6.Repro sequence {code} Ti.API.error("locale: " + Ti.Locale.currentLocale); Ti.API.error("country: " + Ti.Locale.currentCountry); Ti.API.error("language: " + Ti.Locale.currentLanguage); Ti.API.error("locale: " + Ti.Locale.getCurrentLocale()); Ti.API.error("country: " + Ti.Locale.getCurrentCountry()); Ti.API.error("language: " + Ti.Locale.getCurrentLanguage()); {code} h6.returns {code} [ERROR] locale: undefined [ERROR] country: undefined [ERROR] language: fr [ERROR] locale: fr-BE [ERROR] country: BE [ERROR] language: fr {code} h6.yet another console output {code} [ERROR] :  locale: undefined [ERROR] :  country: undefined [ERROR] :  language: en [ERROR] :  locale: en-US [ERROR] :  country: US [ERROR] :  language: en {code} I am not competent enough in objective-C and mobile SDK knowledge but the implementation of locale module here looks fishy to me (I would expect implementations for currentLocale and currentCountry). I tested w/ SDKs 1.8.2, 2.1.2.GA and 3.0.0.GA on Mac OSX for iOS.2
359TIMOB-12223BlackBerry: Implement Titanium.UI.WebViewAdd at least: * Titanium.UI.WebView.addEventListener * Titanium.UI.WebView.evalJS * Titanium.UI.WebView.html * Titanium.UI.WebView.onCreateWindow * Titanium.UI.WebView.remove * Titanium.UI.WebView.url21
360TIMOB-12225BlackBerry: Implement important Titanium.Facebook functionalityNULL17
361TIMOB-12226BlackBerry: Implement important Titanium.Media.AudioPlayer functionalityNULL15
362TIMOB-12227BlackBerry: Implement important Titanium.Media.Item functionalityNULL15
363TIMOB-12228BlackBerry: Implement important Titanium.Media.MusicPlayer functionalityNULL15
364TIMOB-12230BlackBerry: Implement important Titanium.Media.VideoPlayer functionalityNULL15
365TIMOB-12233BlackBerry: Implement important Titanium.Accelerometer functionalityh3. Acceptance Test {code} var win = Ti.UI.createWindow({ layout: 'vertical' }); var enableAccelerometer = Ti.UI.createButton({ title: 'Toggle Accelerometer' }); win.add(enableAccelerometer); var labels = ['x', 'y', 'z'].map(function(coord) { var label = Ti.UI.createLabel({text: coord + ': N/A'}); win.add(label); return label; }); function onUpdate(e) { labels[0].text = e.x; labels[1].text = e.y; labels[2].text = e.z; } var accelerometerEnabled = false; enableAccelerometer.addEventListener('click', function() { accelerometerEnabled ? Ti.Accelerometer.removeEventListener('update', onUpdate) : Ti.Accelerometer.addEventListener('update', onUpdate); accelerometerEnabled = !accelerometerEnabled; }); win.open(); {code} # Try moving the device around. No updates should be displayed. # Click "Toggle Accelerometer". Move device and you should now see updates (x, y, z values). # Click the toggle button again and the updates should stop. Repeat and verify. 15
366TIMOB-12235BlackBerry: Implement important Titanium.Contacts functionalityNULL15
367TIMOB-12236BlackBerry: Implement important Titanium.Analytics functionalityNULL15
368TIMOB-12237BlackBerry: Implement important Titanium.Map functionalityNeed to implement at least: * Titanium.Map.createAnnotation * Titanium.Map.createView * Titanium.Map.STANDARD_TYPE21
369TIMOB-12238BlackBerry: Implement important Titanium.Map.Annotation functionalityNeed to implement at least: * Titanium.Map.ANNOTATION_GREEN * Titanium.Map.ANNOTATION_PURPLE * Titanium.Map.ANNOTATION_RED21
370TIMOB-12239BlackBerry: Implement important Titanium.Map.View functionalityNeed to implement at least: * Titanium.Map.View.add * Titanium.Map.View.addAnnotation * Titanium.Map.View.addEventListener * Titanium.Map.View.removeAnnotation * Titanium.Map.View.setLocation21
371TIMOB-12280Log messages lost when logging commands are placed in a loopWhile testing TISTUD-3120 I ran into the issue where log output in a for loop did not appear (see screenshot). I can only reproduce this issue in 3.0.2 not 3.1.0 or 3.0.1 using the attached app.js file in a standard titanium project. This is a regression. Steps to reproduce: 1. Open the Titanium project. 2. Run in Simulator. Expected results: All console output should be shown filtered based on settings. Actual results: Console output missing lines from the looped log calls.8
372TIMOB-12372Android: Layout resources in res/layout/filename.xml no longer workh4. Description Android layout resources no longer work as they did in 2.1.4GA. h4. Code to reproduce To customize the tab group in Android so that it is hidden, we used to be able to add a file in /platform/android/res/layout/titanium_tabgroup.xml. Code inside titanium_tabgroup.xml: {code} <?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="0dp"> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="0dp" android:layout_weight="1"/> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="0"/> </LinearLayout> </TabHost> {code} app.js {code} // create base UI tab and root window // var win1 = Titanium.UI.createWindow({ title:'Tab 1', backgroundColor:'#fff' }); var tab1 = Titanium.UI.createTab({ icon:'KS_nav_views.png', title:'Tab 1', window:win1 }); var label1 = Titanium.UI.createLabel({ color:'#999', text:'I am Window 1', font:{fontSize:20,fontFamily:'Helvetica Neue'}, textAlign:'center', width:'auto' }); win1.add(label1); // // create controls tab and root window // var win2 = Titanium.UI.createWindow({ title:'Tab 2', backgroundColor:'#fff' }); var tab2 = Titanium.UI.createTab({ icon:'KS_nav_ui.png', title:'Tab 2', window:win2 }); var label2 = Titanium.UI.createLabel({ color:'#999', text:'I am Window 2', font:{fontSize:20,fontFamily:'Helvetica Neue'}, textAlign:'center', width:'auto' }); win2.add(label2); // // add tabs // tabGroup.addTab(tab1); tabGroup.addTab(tab2); // open tab group tabGroup.open(); {code} This no longer works in 3.0GA.3
373TIMOB-12409BlackBerry: Implement important Titanium.Platform functionalityImplement at least: * Titanium.Platform.createUUID * Titanium.Platform.openURL21
374TIMOB-12410BlackBerry: Implement important Titanium.App functionalityImplement at least: * Titanium.App.deployType * Titanium.App.getArguments * Titanium.App.guid * Titanium.App.id21
375TIMOB-12411Android: Ti.Android.getCurrentActivity() fails with an exceptionh1. Problem description Calling Ti.Android.getCurrentActivity() always fails with an exception in the logs. {code} E/TiJSError( 1288): (main) [2,1195] - Message: Uncaught TypeError: Object #<Android> has no method 'getCurrentActivity' {code} h1. Steps to reproduce Use this simple app to test: {code} Titanium.UI.setBackgroundColor('#000'); var win1 = Titanium.UI.createWindow({ backgroundColor:'#fff', fullscreen: true }); win1.open(); Titanium.API.info("Activity: " + Titanium.Android.getCurrentActivity()); {code} Changing from getCurrentActivity() to currentActivity (direct access to the property) works fine.3
376TIMOB-12516BlackBerry: Implement important Titanium.UI.Toolbar functionalityNULL15
377TIMOB-12600CLI: building for Android device while the emulator is open generates a wrong Error Messageh6. Problem Building for Android device from CLI, while the Android emulator open, generates an Error Message at the end. However the app is actually correctly installed. h6. Steps to reproduce 1. Be sure to have the Android Emulator open 2. Attach a device and build a project for the device from CLI: $ ti build -p android -T device Result: application is correctly installed on the device, however from console there is an Error message in the end. {code} [INFO] Application installed. Launch from drawer on Home Screen [INFO] Launching appliation on device. error: more than one device and emulator [ERROR] Project failed to build after 13s 197ms {code} (also note the typo: "appliation" in the [INFO] line)2
378TIMOB-12604Android: Closing the emulator, 'Emulator has exited' log in not printed on console.Android: Closing the emulator, 'Emulator has exited' log in not printed on console. Its not a regression. Steps to reproduce: 1. Run a application in android emulator. 2. Close the emulator. Actual: no new log occur on console. Expected: 'Emulator has exited' should occur on console. 2
379TIMOB-12661CLI: Support adb's -s option for pointing a build to a specific emulator or deviceIt would be extremely helpful, and give the CLI more power with Android, if developers were able to specify specifically which device or emulator for which they would like to build. Right now the build process allows us to specify and avd id which would let you pick an emulator, but even that is not ideal as you don't really have a way of knowing an emulator's id from the *android list avd* as it isn't listed. Ideally, I should be able to call *adb devices*, see my listing of emulators and devices, than be able to pass that serial number to the *titanium build* command as an option, directing the build process to that specific emulator or device. The build process _tries_ to be intelligent about this, but more often than not I get errors like: * It fails if there is a connected device AND an emulator open * Even with an emulator already it open, it often attempts to load an entirely different one * Tries to use emulators not compatible with the app (like a non-Google API emulator with an app that uses maps) Allowing a command like the following would make it really easy for developers to have multiple open emulators and connected devices and still get expected behavior: {code} titanium build -p android -s EMULATOR_OR_DEVICE_SERIAL {code} Obviously I leave the choice of the option flag to the implementor. "-s" would correspond to the adb command, but this is already in use for *titanium build* for specifying the target Titanium SDK. 3
380TIMOB-12764Windows: Android SDKs not recognized without moving themThis is a regression. Works correctly in TISTUD 2.1.2. Windows: Android SDKs not recognized in Preferences. Steps to Reproduce: 1. Open Titanium Studio. 2. Open Preferences > Titanium Studio > Titanium. 3. Clear Android SDK Path and Apply. 4. Browse to Android SDK to select path. Actual Result: Android SDKs not recognized. Expected Result: Android SDKs recognized.8
381TIMOB-12765Backport: Windows: Android SDKs not recognized without moving themThis is a regression. Works correctly in TISTUD 2.1.2. Windows: Android SDKs not recognized in Preferences. Steps to Reproduce: 1. Open Titanium Studio. 2. Open Preferences > Titanium Studio > Titanium. 3. Clear Android SDK Path and Apply. 4. Browse to Android SDK to select path. Actual Result: Android SDKs not recognized. Expected Result: Android SDKs recognized.8
382TIMOB-12960TiAPI: Cannot add a whitespace at the end of string in i18n strings.xmlUse the following xml in the i18n en strings.xml file: {code} <string name="share">There should be space </string> <string name="share2"> of that thing.</string> {code} And use the following in app js: {code} var win = Ti.UI.createWindow({ layout: "vertical" }); // build a string from the strings file that has built-in space. var s = L("share") + "!on each side!" + L("share2"); alert(s); {code} The result is different in 3.0 vs 2.1.3. In 3.0, it seems all whitespaces from strings from the language file are trimmed. The same behavior is seen in Android also. 1
383TIMOB-13190BlackBerry: support project creation with multiple deployment targetsDescription: 1.Create a default app with templates in the studio & select other deploy targets along with blackberry 2.Now open the resources folder of the created app in studio Actual Result: 1.The 'blackberry' folder does not get created in the resources folder as 'android','iphone','mobileweb' 2.due to this running the app gives errors: {code} [INFO] Running retCode = builder.run(ipAddress, devicePassword, debugToken, storePass, outputDir) File "/Users/lokeshchoudhary/Desktop/bb-mobilesdk-osx/mobilesdk/osx/3.1.0.v20130204182020/blackberry/builder.py", line 78, in run resources = os.listdir(self.blackberryResources) OSError: [Errno 2] No such file or directory: '/Users/lokeshchoudhary/Desktop/Titanium BB Workspace/default_123/Resources/blackberry'[INFO] Running retCode = builder.run(ipAddress, devicePassword, debugToken, storePass, outputDir) File "/Users/lokeshchoudhary/Desktop/bb-mobilesdk-osx/mobilesdk/osx/3.1.0.v20130204182020/blackberry/builder.py", line 78, in run resources = os.listdir(self.blackberryResources) OSError: [Errno 2] No such file or directory: '/Users/lokeshchoudhary/Desktop/Titanium BB Workspace/default_123/Resources/blackberry' {code} NOTE : If we create a default app with only blackberry as target then the 'blackberry' folder is getting created Expected Result: 1.The 'blackberry' folder gets created along with other targets 5
384TIMOB-13254Windows: Implement Ti.UI.WebViewImplement TI.UI.WebView functionality. This may require some other functionality to be implemented first.21
385TIMOB-13364Android: TextArea maxLength not working in AndroidAccording to the docs, TextArea supports maxLength property from SDK 3.0. However, maxLength does not work in Android. In TiUIText.java, the code that reads the maxLength is: if (d.containsKey(TiC.PROPERTY_MAX_LENGTH) && field) { maxLength = TiConvert.toInt(d, TiC.PROPERTY_MAX_LENGTH); } TextArea has "field" boolean set to false, so maxLength is always ignored. Steps to reproduce. Create simple App.js: {code} var win = Ti.UI.createWindow({ backgroundColor: 'white' }); var textArea = Ti.UI.createTextArea({ borderWidth: 2, borderColor: '#bbb', borderRadius: 5, color: '#888', textAlign: 'left', maxLength: 10, top: 60, width: 300, height : 150 }); win.add(textArea); win.open(); {code} Launch app and start writing in the text area. You can enter more than 10 chars, despite maxLength is set to 10. Tested with SDK 3.0.0.GA in Android 2.3.3 and Android 4.13
386TIMOB-13520Android Emulator: improve error message from missing ia32-libs dependency on linuxThe first android emulator run experience of a linux user on a clean system is: {code} Titanium Command-Line Interface, CLI version 3.1.0-cr, Titanium SDK version 3.0.2.GA Copyright (c) 2012-2013, Appcelerator, Inc. All Rights Reserved. Please report bugs to http://jira.appcelerator.org/ [INFO] logfile = /home/linux/Desktop/Titanium_Studio/Titanium_Studio_RC/Work_Space/MyProject/build.log [ERROR] :  Project failed to build after 275ms [INFO] Building MyProject for Android ... one moment [INFO] Titanium SDK version: 3.0.2 (02/15/13 19:02 5a77fe7) [ERROR] Exception occured while building Android project: [ERROR] Traceback (most recent call last): [ERROR] File "/home/linux/.titanium/mobilesdk/linux/3.0.2.GA/android/builder.py", line 2392, in <module> [ERROR] builder.build_and_run(False, avd_id, debugger_host=debugger_host) [ERROR] File "/home/linux/.titanium/mobilesdk/linux/3.0.2.GA/android/builder.py", line 1984, in build_and_run [ERROR] self.wait_for_device('e') [ERROR] File "/home/linux/.titanium/mobilesdk/linux/3.0.2.GA/android/builder.py", line 450, in wait_for_device [ERROR] devices = self.sdk.list_devices() [ERROR] File "/home/linux/.titanium/mobilesdk/linux/3.0.2.GA/android/androidsdk.py", line 264, in list_devices [ERROR] (out, err) = subprocess.Popen([adb, 'devices'], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() [ERROR] File "/usr/lib/python2.7/subprocess.py", line 679, in __init__ [ERROR] errread, errwrite) [ERROR] File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child [ERROR] raise child_exception [ERROR] OSError: [Errno 2] No such file or directory [ERROR] :  Project failed to build after 584ms {code} It seems a bit cryptic. Please improve error message if possible.8
387TIMOB-13545Android: ImageView: Remote image with "@" character doesn't display*Problem description* If you set an image with a "@" in the path, the image won't be loaded. This is because getCleanUri thinking it's a domain address. Therefore the test on the hash will return false. So the image is downloaded but not drawn. *Repro notes* Paste the @2x URL in the browser to verify the URL is valid. Uncomment cd-mini-graphic image to verify it working for standard images. Only the URL with @2x doesn't work. Works on iOS, not on Android. *Test case* {code} var win = Ti.UI.createWindow({ backgroundColor : 'white' }); var image = Ti.UI.createImageView({ bottom : 0, width : 200, height : 200, backgroundColor : 'red', image : 'http://dl.dropboxusercontent.com/u/255893/appcelerator@2x.png' //image : 'http://www.appcelerator.com.s3.amazonaws.com/web/home/platform/cd-mini-graphic.png' }); win.add(image); win.open(); {code}5
388TIMOB-13582CLI: Launching emulator without specifying skin will use HVGA and will fail if chosen AVD does not support HVGAIf you pass in an AVD ID without Skin, HVGA is used as default and passed with the emulator command. If the AVD you chose does not support HVGA, the launch will fail with: {code} [ERROR]Emulator process exited with code 1 {code} The behavior I was expecting was for the default skin listed with the AVD would be used. You can see the set default in the output of "android list". Steps to reproduce: 1) Run command "android list" in the terminal to see available AVDs 2) Make a note of an AVD ID that does not support HVGA Skin 3) Create a new project 4) Run command ti build -p android -I <AVD ID from step 2> Result: HVGA Skin is chosen as Default, and will fail if AVD ID does not support that skin. Expected: AVD launches with AVD default skin if no skin passed in.5
389TIMOB-14762CLI: Toast says android build succeeded when build failedIf a build fails, TiStudio still says it succeeded, console says (correctly) build failed. See screenshot. The problem is if the build callback receives an error, it says there was an error, but doesn't exit with a non-zero exit code.5
390TIMOB-13656CLI needs to support the ability to specify different login endpointsDifferent environments will have different login endpints: test, dev, pre-prod, enterprise, vpc. To accommodate these different environments, the cli will have to make the login endpoint configurable - currently it is hard-coded to api.appcelerator.net. This can be configured via the config file or via a parameter This is preventing Studio from working properly against the enterprise cluster, ie unable to login means users can't create projects. As a work-around, users would have to have the same username/password on all api.appcelerator.net type servers8
391TIMOB-13862CLI: tiapp.xml sdk-version not honored if selected sdk has same base digitsIf the tiapp.xml is set to 3.1.1.v20130514180723, but the CLI is set to 3.1.1.v20130513120107, since both start with 3.1.1, the CLI thinks they are the same version which is wrong.3
392TIMOB-13890iOS: Accessibility: Accessibility does not work on Slider ControliOS: Accessibility: Accessibility does not work on Slider Control This is not a regression. Issue also exist on SDK 3.1.0. Steps: 1) Run Acceptance Access_1109 on Accessibility module. 2) Touch the second slider (with LVH defined in sequence) Actual Result: Device just reads "50.0". Expected Result: Device should read aloud LVH(This is slider2 label , This is slider2 value , This is slider2 hint) followed by 'seek control'value(android) and value adjustable {code} var win = Ti.UI.createWindow({ title : 'Welcome', backgroundColor: "#fff"}); var slider1 = Titanium.UI.createSlider({ top: 50, min: 0, max: 100, width: '100%', value: 50 }); var label1 = Ti.UI.createLabel({ text: slider1.value, width: '100%', height: 'auto', top: 30, left: 0, textAlign: Ti.UI.TEXT_ALIGNMENT_CENTER }); slider1.addEventListener('change', function(e) { label1.text = String.format("%3.1f", e.value); }); var slider2 = Titanium.UI.createSlider({ top: 150, min: 0, max: 100, width: '100%', value: 50, accessibilityLabel: "This is slider2 label", accessibilityValue: 'This is slider2 value', accessibilityHint: "This is slider2 hint" }); var label2 = Ti.UI.createLabel({ text: slider2.value, width: '100%', height: 'auto', top: 130, left: 0, textAlign: Ti.UI.TEXT_ALIGNMENT_CENTER }); slider2.addEventListener('change', function(e) { label2.text = String.format("%3.1f", e.value); }); var slider3 = Titanium.UI.createSlider({ bottom: 130, min: 0, max: 100, width: '100%', value: 50, accessibilityHint: "This is slider3 hint ", accessibilityLabel: "This is slider3 label", accessibilityValue: 'This is slider3 value', }); var label3 = Ti.UI.createLabel({ text: slider3.value, width: '100%', height: 'auto', bottom: 150, left: 0, textAlign: Ti.UI.TEXT_ALIGNMENT_CENTER }); slider3.addEventListener('change', function(e) { label3.text = String.format("%3.1f", e.value); }); var slider4 = Titanium.UI.createSlider({ bottom: 30, min: 0, max: 100, width: '100%', value: 50, accessibilityLabel: "This is slider4 label", accessibilityValue: 'This is slider4 value', accessibilityHint: "This is slider4 hint", accessibilityHidden: true }); var label4 = Ti.UI.createLabel({ text: slider4.value, width: '100%', height: 'auto', bottom: 50, left: 0, textAlign: Ti.UI.TEXT_ALIGNMENT_CENTER }); slider4.addEventListener('change', function(e) { label4.text = String.format("%3.1f", e.value); }); win.add(slider1); win.add(slider2); win.add(slider3); win.add(slider4); win.add(label1); win.add(label2); win.add(label3); win.add(label4); win.open(); {code}3
393TIMOB-13892iOS: Accessibility - Label.accessibilityLabel does not work properly inside a ScrollView properlyLabel.accessibilityLabel does not work properly inside a ScrollView properly i.e. the device's VoiceOver will not read the label. This is not a regression. Issue also exist on SDK 3.1.0 *Steps:* 1. Create a Titanium app with the following app.js code: {code} var _window = Ti.UI.createWindow({ backgroundColor: 'white' }); var scroll1 = Ti.UI.createScrollView({ backgroundColor : 'red', accessibilityLabel : 'This is ScrollView1', accessibilityValue : 'Value1', accessibilityHint : 'hint 1', height : 200, top : 0 }); var label1 = Ti.UI.createLabel({ text : 'Label Text', accessibilityLabel : 'Label on first Scrollview' }); scroll1.add(label1); _window.add(scroll1); _window.open(); {code} 2. Install app to device. Make sure VoiceOver is on: Settings > General > Accessibility > VoiceOver > On 3. Double-press on app to launch app 4. Double-press on the label *Actual:* "Label on first Scrollview" is not read out. *Expected:* "Label on first Scrollview" should be read out. 8
394TIMOB-13914Android: 'longpress' event is not working in ListView'longpress' event is not working in listView. Here is the test case: {code} var win = Ti.UI.createWindow({backgroundColor: 'white'}); var plainTemplate = { childTemplates: [ { type: 'Ti.UI.Label', // Use a label bindId: 'rowtitle', // Bind ID for this label properties: { // Sets the Label.left property left: '10dp' } }, { type: 'Ti.UI.ImageView', // Use an image view bindId: 'pic', // Bind ID for this image view properties: { // Sets the ImageView.image property image: 'KS_nav_ui.png' } }, { type: 'Ti.UI.Button', // Use a button bindId: 'button', // Bind ID for this button properties: { // Sets several button properties width: '80dp', height: '30dp', right: '10dp', title: 'press me' } } ] }; function report(e) { Ti.API.info(e.type); } var listView = Ti.UI.createListView({ // Maps the plainTemplate object to the 'plain' style name templates: { 'plain': plainTemplate }, // Use the plain template, that is, the plainTemplate object defined earlier // for all data list items in this list view defaultItemTemplate: 'plain' }); var data = []; for (var i = 0; i < 3; i++) { data.push({ // Maps to the rowtitle component in the template // Sets the text property of the Label component rowtitle : { text: 'Row ' + (i + 1) }, // Sets the regular list data properties properties : { itemId: 'row' + (i + 1), accessoryType: Ti.UI.LIST_ACCESSORY_TYPE_NONE } }); } listView.addEventListener('longpress', function(e){ alert("longpress fired!!!"); }); win.add(listView); win.open(); {code}5
395TIMOB-13922Android: KitchenSink: text does not size to fit in buttonsPlease see screenshots for references. Test steps: 1. Install and run KS>Base UI>Window Layout or 2. KS> Base UI> Window(Standalone) and press any of the buttons Actual result: Text of the button is being cut off. Expected: Text should fit inside the button3
396TIMOB-13974Android: KS takes a long time to package - I've seen nine minutes, others report longer in some casesh5. Description: While verifying some JIRA tickets I was packaging KS (from 3.1.X branch). Hieu reported having this take a long time, so I monitored the process. The console ticked slowly away, and it took 9 minutes and 30 seconds to finish the task. This was from clean. h5. Steps to reproduce: 1) Pull KS from 3_1_X branch 2) Import into Studio 3) Package for distribution 4) Monitor the duration of the task h5. Result: It took 9:30 in my first test and others have reported longer. h5. Expected Result: Much quicker packaging process. h5. Notes: I'll be checking to see if this is a regression and will add it here.3
397TIMOB-13986iOS: backgroundImage of view from remote URL not loading*Problem* The backgroundImage of the view from a remote URL is not loading on iOS. It works fine on Android. *Test case* {code:javascript} var win = Ti.UI.createWindow({ backgroundColor : "#FFF" }); var view = Ti.UI.createView({ backgroundImage : 'http://dl.dropboxusercontent.com/u/72783403/AtoZ/1.png' }); win.add(view); win.open(); {code}3
398TIMOB-14003Android: showDatePickerDialog and showTimePickerDialog can't be cancelledThe callback of showDatePickerDialog and showTimePickerDialog always return with the cancel property set to false. It doesn't matter if you press the back button or press outside the modal dialog, cancel gets never true. Furthermore, if you click on the Set/Ok/Done/Ready button, the callback is called twice. Note that in the picker dialog, we have only a single button "Set", so no Cancel button. This is fine as you should be able to cancel dialog with the back button. Clicking the back button fires wrongly a success (cancel=false) event. {code:title=Example code|borderStyle=solid} var picker = Ti.UI.createPicker( { type : Ti.UI.PICKER_TYPE_TIME }); picker.showDatePickerDialog({ callback: function(e) { if (e.cancel) { Ti.API.info('user canceled dialog'); } else { Ti.API.info('user selected date: ' + e.value); } } }); {code} Problem does not occur on older Android devices, like Android 2.3. See https://github.com/markruys/titanium-test-picker for a working project to reproduce.5
399TIMOB-13999LiveView: App not updating upon editing localization filesSteps to reproduce: # Create a new SingleWindow application from a template # Start the project under LiveView (in this case, iOS simulator) # Edit the files in i18n. Note that saving those files doesn't restart the app. Expected behavior Editing a *.xml file in the i18n folder would refresh the application.13
400TIMOB-14123Android: Add support for creating video thumbnailsh2. Problem Unable to create a thumbnail of a video on Android using Titanium SDK 3.1.0.GA. Titanium.Media.VideoPlayer.thumbnailImageAtTime(Number time, Number option) and Titanium.Media.VideoPlayer.requestThumbnailImagesAtTimes(Number[] times, Number option, Callback<ThumbnailResponse> callback) appear to be the only methods available to achieve this, but they are not supported for Android, only on iOS. Would like to see similar functionality to get a thumbnail from a video. It appears to be supported by the Android APIs per http://developer.android.com/reference/android/provider/MediaStore.Video.Thumbnails.html h2. Test case N/A - not currently supported h2. Logs N/A - not currently supported h2. Discussions Q/A: http://developer.appcelerator.com/question/152946/video-thumbnails-on-android 8
401TIMOB-14194TiAPI: Problem with floating point numbers in Titanium*Problem* The output of floating point values in Titanium differ from browser JavaScript parsers such as [jsbin.com|http://www.jsbin.com/]. For example, Ti.API.info(94.1) displays 94.0999999 On jsbin.com the output of alert(94.1) is 94.1 *Note* Since I have to input floating number for some modules, I must use floating number solution. I can't use a string method. I have also tried parseFloat(x.toFixed(1)), Math.round(x*10)/10 etc. The output was the same. *Test case* {code:javascript} var win = Ti.UI.createWindow({ backgroundColor : "#FFF" }); for (var i = 0; i < 50; i++) Ti.API.info(94.1); win.open(); {code} *Extended test case* {code:javascript} var win = Ti.UI.createWindow({ backgroundColor : "#FFF" }); for (var i = 0; i < 1000; i++) Ti.API.info(i + 0.1); for (var i = 0; i < 1000; i++) Ti.API.info(i + 0.2); for (var i = 0; i < 1000; i++) Ti.API.info(i + 0.3); for (var i = 0; i < 1000; i++) Ti.API.info(i + 0.4); for (var i = 0; i < 1000; i++) Ti.API.info(i + 0.5); for (var i = 0; i < 1000; i++) Ti.API.info(i + 0.6); for (var i = 0; i < 1000; i++) Ti.API.info(i + 0.7); for (var i = 0; i < 1000; i++) Ti.API.info(i + 0.8); for (var i = 0; i < 1000; i++) Ti.API.info(i + 0.9); win.open(); {code} *Log - Unusual Titanium values* {code} [INFO] : 64.09999999999999 [INFO] : 65.09999999999999 [INFO] : 66.09999999999999 [INFO] : 67.09999999999999 [INFO] : 68.09999999999999 [INFO] : 69.09999999999999 ... [INFO] : 70.09999999999999 [INFO] : 71.09999999999999 [INFO] : 72.09999999999999 [INFO] : 73.09999999999999 [INFO] : 74.09999999999999 [INFO] : 75.09999999999999 [INFO] : 76.09999999999999 [INFO] : 77.09999999999999 [INFO] : 78.09999999999999 [INFO] : 79.09999999999999 [INFO] : 80.09999999999999 [INFO] : 81.09999999999999 [INFO] : 82.09999999999999 [INFO] : 83.09999999999999 [INFO] : 84.09999999999999 [INFO] : 85.09999999999999 [INFO] : 86.09999999999999 [INFO] : 87.09999999999999 [INFO] : 88.09999999999999 [INFO] : 89.09999999999999 [INFO] : 90.09999999999999 [INFO] : 91.09999999999999 [INFO] : 92.09999999999999 [INFO] : 93.09999999999999 [INFO] : 94.09999999999999 [INFO] : 95.09999999999999 [INFO] : 96.09999999999999 [INFO] : 97.09999999999999 [INFO] : 98.09999999999999 [INFO] : 99.09999999999999 ... [INFO] : 8.199999999999999 [INFO] : 9.199999999999999 ... [INFO] : 8.300000000000001 [INFO] : 9.300000000000001 ... [INFO] : 64.40000000000001 [INFO] : 65.40000000000001 [INFO] : 66.40000000000001 [INFO] : 67.40000000000001 [INFO] : 68.40000000000001 [INFO] : 69.40000000000001 [INFO] : 70.40000000000001 [INFO] : 71.40000000000001 [INFO] : 72.40000000000001 [INFO] : 73.40000000000001 [INFO] : 74.40000000000001 [INFO] : 75.40000000000001 [INFO] : 76.40000000000001 [INFO] : 77.40000000000001 [INFO] : 78.40000000000001 [INFO] : 79.40000000000001 [INFO] : 80.40000000000001 [INFO] : 81.40000000000001 [INFO] : 82.40000000000001 [INFO] : 83.40000000000001 [INFO] : 84.40000000000001 [INFO] : 85.40000000000001 [INFO] : 86.40000000000001 [INFO] : 87.40000000000001 [INFO] : 88.40000000000001 [INFO] : 89.40000000000001 [INFO] : 90.40000000000001 [INFO] : 91.40000000000001 [INFO] : 92.40000000000001 [INFO] : 93.40000000000001 [INFO] : 94.40000000000001 [INFO] : 95.40000000000001 [INFO] : 96.40000000000001 [INFO] : 97.40000000000001 [INFO] : 98.40000000000001 [INFO] : 99.40000000000001 ... [INFO] : 64.59999999999999 [INFO] : 65.59999999999999 [INFO] : 66.59999999999999 [INFO] : 67.59999999999999 [INFO] : 68.59999999999999 [INFO] : 69.59999999999999 [INFO] : 70.59999999999999 [INFO] : 71.59999999999999 [INFO] : 72.59999999999999 [INFO] : 73.59999999999999 [INFO] : 74.59999999999999 [INFO] : 75.59999999999999 [INFO] : 76.59999999999999 [INFO] : 77.59999999999999 [INFO] : 78.59999999999999 [INFO] : 79.59999999999999 [INFO] : 80.59999999999999 [INFO] : 81.59999999999999 [INFO] : 82.59999999999999 [INFO] : 83.59999999999999 [INFO] : 84.59999999999999 [INFO] : 85.59999999999999 [INFO] : 86.59999999999999 [INFO] : 87.59999999999999 [INFO] : 88.59999999999999 [INFO] : 89.59999999999999 [INFO] : 90.59999999999999 [INFO] : 91.59999999999999 [INFO] : 92.59999999999999 [INFO] : 93.59999999999999 [INFO] : 94.59999999999999 [INFO] : 95.59999999999999 [INFO] : 96.59999999999999 [INFO] : 97.59999999999999 [INFO] : 98.59999999999999 [INFO] : 99.59999999999999 ... [INFO] : 8.800000000000001 [INFO] : 9.800000000000001 ... [INFO] : 64.90000000000001 [INFO] : 65.90000000000001 [INFO] : 66.90000000000001 [INFO] : 67.90000000000001 [INFO] : 68.90000000000001 [INFO] : 69.90000000000001 [INFO] : 70.90000000000001 [INFO] : 71.90000000000001 [INFO] : 72.90000000000001 [INFO] : 73.90000000000001 [INFO] : 74.90000000000001 [INFO] : 75.90000000000001 [INFO] : 76.90000000000001 [INFO] : 77.90000000000001 [INFO] : 78.90000000000001 [INFO] : 79.90000000000001 [INFO] : 80.90000000000001 [INFO] : 81.90000000000001 [INFO] : 82.90000000000001 [INFO] : 83.90000000000001 [INFO] : 84.90000000000001 [INFO] : 85.90000000000001 [INFO] : 86.90000000000001 [INFO] : 87.90000000000001 [INFO] : 88.90000000000001 [INFO] : 89.90000000000001 [INFO] : 90.90000000000001 [INFO] : 91.90000000000001 [INFO] : 92.90000000000001 [INFO] : 93.90000000000001 [INFO] : 94.90000000000001 [INFO] : 95.90000000000001 [INFO] : 96.90000000000001 [INFO] : 97.90000000000001 [INFO] : 98.90000000000001 [INFO] : 99.90000000000001 {code}5
402TIMOB-14178Android: Real Switch on AndroidIt would be nice to have a Real Android Switch when developing for Android 14 and above. The one supplied with Titanium now is not very nice.5
403TIMOB-14242Android: x86 libs not included in production APKI was going to upload my app to the Google play store when I saw that x86 native SDK libraries were not included in the APK (libkroll-v8.so, libtiverify.so, libtiprofiler.so, libstlport_shared.so). I noticed these lines in builder.py (lines from 1696): {quote} if abi == 'x86' and ((not os.path.exists(lib_source_dir)) or self.deploy_type == 'production'): # x86 only in non-production builds for now. continue {quote} and removing them did the trick. It is normal behaviour not to including that libraries in production releases or it is a mistake? And if it is normal what is the reason? Way to reproduce: - Use the feature "Distribute - Android App Store" - Open the created APK with some zip reader - Navigate in lib/x86 - No native libraries included3
404TIMOB-14241Android: TextArea.maxLength doesn't work*Problem* TextArea.maxLength not working in android, works perfectly fine on iOS *Steps to Reproduce* 1. run code provided on iOS (notice the maxLength is working, limits characters to 20) 2. run code provided on android (unlimited characters can be entered) {code} var win = Ti.UI.createWindow({ title : "Test", backgroundColor : 'gray' }); var view = Ti.UI.createView({ height : 200, top : 5, left : 5, right : 5, layout : 'vertical' }); var textFieldTwitter = Ti.UI.createTextArea({ left : 0, right : 0, height : 200, value : "Testing1", maxLength : 20 }); var tweetMax = 140; var viewTexteRestant = Ti.UI.createLabel({ text : 'Caractères restants : ' + (tweetMax - textFieldTwitter.value.length), height : Ti.UI.SIZE, width : Ti.UI.SIZE, top : 20, backgroundColor : "red" }); textFieldTwitter.addEventListener('change', function(e) { Ti.API.info(tweetMax - textFieldTwitter.value.length); viewTexteRestant.text = 'Caractères restants : ' + (tweetMax - textFieldTwitter.value.length); }); view.add(textFieldTwitter); view.add(viewTexteRestant); win.open(); win.add(view); {code} see : http://developer.appcelerator.com/question/153431/maxlength-in-textarea-doesnt-work3
405TIMOB-14262LiveView: Does not trigger code errors*Steps to reproduce* 1. Create a default application 2. Enable LiveView in Run Configurations 3. Run on iOS simulator 4. Replace "win1.add(label1);" into "win1.add(mylabel);" 5. Save app.js *Actual Result* LiveView error is not triggered *Expected Result* LiveView error is triggered 13
406TIMOB-14267LiveView - Running multiple instances of the application on iOS and Android, iOS instances lose connection to LiveView ServerWhen trying to run multiple instances of the application with Liveview enabled across multiple devices/platform notice that Android will continue to update, however iOS instances lose the connection and do not continue to update. (have validated this against iOS on Device and iOS on Simulator). See attached video for further clarification. steps to reproduce: 1) enable an existing application (simple screen) for LiveView 2) run android and iOS builds (emulator/simulator) 3) make a change to the code Expected Behavior: Both instances of the application should update continuously Actual Behavior: Android will continue to update, however iOS will stop updating after it updates once. Simulator or Device will need to restart to show updates. 8
407TIMOB-14285Android: applyProperties() does not apply custom properties to proxyh2. problem When using {{applyProperties()}} to add a number of properties to a Titanium proxy object, custom properties are not added on Android. On iOS and Mobileweb all properties, including custom ones, are added with the {{applyProperties()}} call. Android leaves the custom properties as {{undefined}}. h2. expected Android should behave like other supported platforms and attach custom properties to the Titanium proxy object when they are added via {{applyProperties()}}. h2. test case {code:javascript} var win = Ti.UI.createWindow({ backgroundColor: '#fff', fullscreen: false, exitOnClose: true }); win.open(); win.applyProperties({ customString: 'Ti.UI.Window', customArray: ['class1','class2','class3'], customObject: { x: 1, y: 2, z: 3 }, navBarHidden: true, backgroundGradient: { type: 'linear', startPoint: { x: '0%', y: '50%' }, endPoint: { x: '100%', y: '50%' }, colors: [ { color: 'red', offset: 0.0}, { color: 'blue', offset: 0.25 }, { color: 'red', offset: 1.0 } ], } }); Ti.API.info('customString: ' + JSON.stringify(win.customString)); Ti.API.info('customArray: ' + JSON.stringify(win.customArray)); Ti.API.info('customObject: ' + JSON.stringify(win.customObject)); Ti.API.info('navBarHidden: ' + JSON.stringify(win.navBarHidden)); Ti.API.info('backgroundGradient: ' + JSON.stringify(win.backgroundGradient)); {code} h2. output iOS does not show the {{backgroundGradient}} after the {{applyProperties()}} call, but this is a peripheral issue not associated with this ticket. h4. iOS 6.1 iPhone sim {code} [INFO] customString: "Ti.UI.Window" [INFO] customArray: ["class1","class2","class3"] [INFO] customObject: {"x":1,"y":2,"z":3} [INFO] navBarHidden: true [INFO] backgroundGradient: {} {code} h4. Android 2.3.3 HVGA emulator {code} I/TiAPI ( 517): customString: undefined I/TiAPI ( 517): customArray: undefined I/TiAPI ( 517): customObject: undefined I/TiAPI ( 517): navBarHidden: true I/TiAPI ( 517): backgroundGradient: {"endPoint":{"y":"50%","x":"100%"},"type":"linear","colors":[{"offset":0,"color":"red"},{"offset":0.25,"color":"blue"},{"offset":1,"color":"red"}],"startPoint":{"y":"50%","x":"0%"}} {code} h4. mobileweb + chrome {code} [INFO] customString: "Ti.UI.Window" [INFO] customArray: ["class1","class2","class3"] [INFO] customObject: {"x":1,"y":2,"z":3} [INFO] navBarHidden: true [INFO] backgroundGradient: {"type":"linear","startPoint":{"x":"0%","y":"50%"},"endPoint":{"x":"100%","y":"50%"},"colors":[{"color":"red","offset":0},{"color":"blue","offset":0.25},{"color":"red","offset":1}]} {code}8
408TIMOB-14382Enable Media.openPhotoGallery to select multiple media items instead of 1 at a time.In relation to this Q&A thread: http://developer.appcelerator.com/question/153838/select-multiple-images-using-photo-gallery-picker-android-and-ios Would it be possible to add a property/the functionality to Media.openPhotoGallery() to enable the selection of multiple media items? Maybe something like: itemLimit, which defaults to 1, but by setting to a greater value enables multiple selection functionality?3
409TIMOB-14393Android: JS proxies are prematurely cleaned up when dalvik gc is triggered Originally from https://jira.appcelerator.org/browse/TIMOB-13664: The problem is about Javascript scope for Titanium objects. In the logs, the problem was clearly after a garbage collect, so, first of all, we created a small module called "androidgc" which simply launch Android garbage collector (not the V8 GC). You can find this module here : https://github.com/ChrOnOs83/TiModuleAndroidGC Then, we decided to use your files and made it as simple as possible. We finally got a unique app.js file with this content : {code} function createView(){ var view = Ti.UI.createView({backgroundColor: 'white'}); var gc = Ti.UI.createButton({top: '10dp',title: "First, click here many time quickly (cause GC)"}); var btn = Ti.UI.createButton({title: "Next, click here"}); var label = Ti.UI.createLabel({text: 'Hello World', bottom: '10dp'}); view.add(btn); view.add(gc); btn.addEventListener('click', function(){ view.add(label); }); var androidgc = require('ti.nartex.androidgc'); gc.addEventListener('click', function(){ androidgc.gc(); }); return view; } var win = Ti.UI.createWindow({}); win.open(); var view = createView(); win.add(view); {code} When you run this code on your Android Device, you should press many times on the "GC" button, because garbage collector may not clean your ressources each time... If GC has be done correctly, the second button press will fail, because the label is not here anymore. If you add the label to the view, and then change its title, no problem If you create the label in the event listener, no problem *If you makes a reference to a global variable (without the _var_ keyword for example), it works* If you put the function in a CommonJS module, the same rules apply. So... Titanium objects created in a function (all the Ti.something) may be killed by garbage collector at any time if they are not attached to a view/window, or declared as global var. It breaks the Javascript scope pattern... 34
410TIMOB-14425LiveView: iOS simulator is no longer updated once Android emulator is terminated when both are run with LiveView1. Create a mobile project (e.g. the default two-tab classic project); 2. Run iPhone simulator with LiveView; 3. Run Android emulator with LiveView; 4. Updating app.js and confirm LiveView is working for both; 5. Exit Android emulator; 6. Updating app.js. Expected result: iPhone simulator will continue to update the app. Actual result: iPhone simulator no longer updates. Here is the end of the log: {code} [LiveView] Client disconnected [LiveView] Client connected [LiveView] Client disconnected [LiveView] Reload Triggered -REASON: File Changed -FILE: /Users/mxia/Documents/Appcelerator_Studio_Workspace/testLiveView/Resources/app.js [LiveView] Reload Triggered -REASON: File Changed -FILE: /Users/mxia/Documents/Appcelerator_Studio_Workspace/testLiveView/Resources/app.js [LiveView] Reload Triggered -REASON: File Changed -FILE: /Users/mxia/Documents/Appcelerator_Studio_Workspace/testLiveView/Resources/app.js {code} It appears the LiveView server got disconnected when Android emulator exited, but it didn't try to re-launch the server, and future reload events, although fired, could not update the app. 8
411TIMOB-15247iOS: Ti.Blob.imageAsResized always returns a png imageThis is the same issue as [TIMODOPEN-228|https://jira.appcelerator.org/browse/TIMODOPEN-228] but for Ti.Blob (core). On iOS, all images created by Ti.Blob.imageAsResized are of type png (mime-type "image/png") instead of jpeg. As a result resized images are much bigger (in terms of bytes) than what they're supposed to be had they been jpegs. This seems to be related to the handling of alpha channel, according to [TIMODOPEN-228|https://jira.appcelerator.org/browse/TIMODOPEN-228] It works fine on android (Ti.Blob.imageAsResized returns jpegs).1
412TIMOB-14494iOS: Ti.Map should handle touch events on the view not just annotationsTouch events are currently only fired on Map Annotations and not else where on the map view. Implement touch events on the Map View.8
413TIMOB-14496Android: setHeaderView for Titanium.UI.TableViewSectionCurrently, it is only possible to set the *headerView* of a TableViewSection at creation-time in Android. It would be great to use the *setHeaderView* method for Android too. In the Docs there is no note that this method is not available in Android: [http://docs.appcelerator.com/titanium/latest/#!/api/Titanium.UI.TableViewSection-method-setHeaderView]. There is only a hint at the *headerView* property description (_"On Android, must be set at creation."_): [http://docs.appcelerator.com/titanium/latest/#!/api/Titanium.UI.TableViewSection-property-headerView] Q&A: [http://developer.appcelerator.com/question/154498/alloy-how-to-set-controller-as-headerview-to-tableviewsection-in-android] 3
414TIMOB-14544iOS: keyboardFrameChanged before keyboard is shownkeyboardFrameChanged event doesn't do much good as it is fired after the keyboard has already been displayed. to create responsive layouts with different keyboard sizes we need to know keyboard size BEFORE the keyboard is displayed. iphone/Classes/AppModule.m line 386-407 could be changed to something like this {code:objc} -(void)startup { WARN_IF_BACKGROUND_THREAD_OBJ; //NSNotificationCenter is not threadsafe! NSNotificationCenter * nc = [NSNotificationCenter defaultCenter]; [nc addObserver:self selector:@selector(willShutdown:) name:kTiWillShutdownNotification object:nil]; [nc addObserver:self selector:@selector(willShutdownContext:) name:kTiContextShutdownNotification object:nil]; #if __IPHONE_OS_VERSION_MIN_ALLOWED >= __IPHONE_5_0 if ([TiUtils isIOS5OrGreater]) { [nc addObserver:self selector:@selector(keyboardFrameChanged:) name:UIKeyboardWillChangeFrameNotification object:nil]; } #else [nc addObserver:self selector:@selector(keyboardFrameChanged:) name:UIKeyboardWillShowNotification object:nil]; [nc addObserver:self selector:@selector(keyboardFrameChanged:) name:UIKeyboardWillHideNotification object:nil]; [nc addObserver:self selector:@selector(timeChanged:) name:UIApplicationSignificantTimeChangeNotification object:nil]; #endif [super startup]; } {code} Either that or provide access to both Will and Did. e.x. {code:javascript} Ti.App.addEventListener('keyboardFrameChanged', function(e){ var val = Ti.Platform.displayCaps.platformHeight - e.keyboardFrame.y; $.container.animate({bottom:val, duration:300}, function() { Ti.API.log("handleAnimateEnd"); }); }); {code}8
415TIMOB-14582LiveView: Create Error/Warning Screencreate window to display liveview errors/warnings. examples: error connecting to server, parse error, etc..8
416TIMOB-14637Android: Fix Titanium Build Script in order to support Genymotion Android EmulatorGenymotion is an enhanced android emulator that leverages x86 emulation with builtin HAXM-like optimizations and Google APIs. In order to have an simulator with a performance like the iOS Simulator we need to setup a x86 android emulation with Intel HAXM support. The problem is that by using the native AVD on Android SDK you can do this setup BUT without the Google APIs, namely the GMaps API, which makes testing apps depending on those APIs, impossible on this high performance simulation. Although it is possible to add Google APIs to a standard x86 AVD, the process is very complex and involves copying the libraries from other non-x86 AVDs and rebuilding a system image which takes a lot of time and effort for each simulator setup you want to have. So Genymotion does it all under the hood and allows us to select between several android models and even simulate external sensors and GPS location, much like the Apple Simulator does. The standard Titanium build script has some problems that causes the Simulator session not to be recognized as a valid deployment target (using titanium build -p android -T device), even though adb successfully recognizes the simulation under adb devices. In order to fix this I have found some hints on a russian weblog and changed it a bit for working on my Mac. I have successfully run my Titanium app on Genymotion using Titanium CLI by doing the following: http://reinraus.ru/wordpress/nastraivaem-titanium-studio-dlya-zapuska-prilozhenij-v-android-x86/ It is written in Russian, so please use the Google Translate tool, he has made 3 changes on the build script. The tutorial is for windows, so if you're running Titanium on a Mac or Windows, just change the first patch from: {code} dev_id, dev_type=output.split("\r\n")[1].split("\t") {code} to: {code} dev_id, dev_type=output.split("\n")[1].split("\t") {code} It seems there is still a tiny problem with Logcat on the end, but the app successfully run on Genymotion after this patch.3
417TIMOB-14652CLI: When selected SDK is not 3.0.0 or 3.0.2 and building for 3.0.0 and 3.0.2, verify Node.js version is 0.8.xIf the CLI's selected Ti SDK is 3.1.0.GA and the tiapp.xml is set to 3.0.0.GA or 3.0.2.GA, then those SDKs require Node.js 0.8.x. Today we allow those builds to fail. The build should be smarter to detect those SDKs and if Node.js is not 0.8 and fail gracefully.2
418TIMOB-14743BlackBerry: 'java' processes belonging to 'Appcelerator Studio' might kill the CPUh5. Problem description After installing the BlackBerry tools and using Appcelerator Studio for building BlackBerry apps, I've experienced intermittent issues, leading to a sluggish and clumsy experience and eventually to completely freezing the system (forcing a hard restart). From the Activity Monitor, a number of java processes were occupying most of the machine CPU. All those processes were belonging to Appcelerator Studio Process Group. It seems those processes are related to BlackBerry development and have been experienced so far only when building projects on BlackBerry. Attached screenshots of my Activity Monitor and detail of a single process. h5. Notes Another similar issue occurred in the past: https://jira.appcelerator.org/browse/TISTUD-35148
419TIMOB-14699LiveView: Create Unit Test SuiteNULL20
420TIMOB-14701CLI: Android: For emulator builds, check that emulator has sufficient spaceSee if there's a way to check how much space is free in an AVD before install the app. We probably will need to build the app first to get the APK file size.2
421TIMOB-14740Android: Automatically generate ProGuard configuration fileHi, Create a sample Android module and build it. Then follow this step by step. 1. Extract the contents of the zip file inside the dist folder. 2. Extract the JAR file obtained from the zip file. 3. Use JAD (Decompile tool) to decompile the any *.class file. You will observe that the entire source code is displayed. There is no obfuscation. I think Appcelerator must provide an obfuscation procedure during the build process. If any such process is present (using ProGuard for example), then can you please let us know. If no such process exists then it will be a great idea to add this feature. This will increase the security and also reduce the module size.21
422TIMOB-14735iOS: Accessibility: ButtonBar: Accessibility does not work on Button Bar iOS: Accessibility: ButtonBar: Accessibility does not work on Button Bar. The Label, Value or Hint are not voiced over. This is not a regression. It occurs since sdk 3.0.0.GA. Steps to reproduce: 1. Run the app as Accessibility Acceptance Access_1102 iOS Only under Accessibility module. 2. Touch the first Buttonbar (with LVH defined in sequence) Actual: if 'red' is touched then 'red button 2 of 3" is spoken. The Label, Value or Hint are not voiced over. Expected: 2. The device reads aloud: buttontext, tab, (button number) of (total number of buttonson buttonbar) [eg. 2 of 3] followed by ""Buttonbar1"", ""Value1"", ""Hint1"" 3
423TIMOB-14780iOS: Ti.UI.orientationModeFilter to app-wide block orientationsNote: While this spec is for iOS only, consideration in the design should include Android. On iOS, not all view controllers are under Titanium control (e.g., Mail composer, Activities). Because of issues (especially in 5.x and before), we did not control their orientation. But with iOS 6, native applications can control them. We should provide a means similar. Ti.UI.orientationModeFilter is an array of orientations allowed with the following pseudocode: On startup, the info.plist is checked. If no such orientation limits are mentioned, the default for the device (all but upside down for iPod/iPhone, all orientations for iPad) is used. This property can be changed. Whenever the OS requests the window's orientation, Titanium reports to the OS the orientationModes as such: # The orientation flags are set to all orientations. # If the Ti.UI.orientationModeFilter is valid, change the orientations to that. # If the window's orientationModes are set, bitwise AND it with the orientation flags. # if the result is 0, replace the orientation flags with the windows orientationModes, and warn about the edge case. # Return orientation flags. The behavior of the Ti.UI.orientationModeFilter changed at any time after startup is undefined. There is no guarantee that changes made to it will propagate to existing windows.8
424TIMOB-14784CLI: Create ADB LibraryWe need an ADB library that provides the following functions: * devices * start-server * kill-server * install ** allow installation to a specific device/emulator (TIMOB-12600 CLI: building for Android device while the emulator open generates a wrong Error Message) ** gracefully handle FAILED_INSUFFICIENT_STORAGE errors (TIMOB-14701 CLI: Android: For emulator builds, check that emulator has sufficient space) *** if insufficient storage space, display instructions on how to resolve (TIMOB-9859 Android: increase AVD storage size to reduce \[FAILED_INSUFFICIENT_STORAGE\] errors) * shell * push * forward * start app (TIMOB-13105 CLI: Add build support for building android apps on emulator without starting the app) * kill running app20
425TIMOB-14785CLI: Create Android Emulator LibraryWe need an Android emulator library that provides the following functions: * create AVD ** improve emulator naming convention (TIMOB-1872 Android: Fix AVD naming scheme) * launch emulator ** make sure adb server is running ** if the emulator we want is already running, return ** if avd does not exist, create it ** if skin is not specified, select a valid skin for the AVD's Android SDK (TIMOB-13582 CLI: Launching emulator without specifying skin will use HVGA and will fail if chosen AVD does not support HVGA) ** custom launch params (TIMOB-2646 Android: Feature Request: Customized launch params) ** gracefully handle when emulator doesn't start in timely manner (TIMOB-9153 Android: Deployment: Android Emulator intermittently fails to launch app after timed out) ** NOTE: do not launch a useless emulator, especially on Windows (TIMOB-4730 Android 3.2 Simulator behavior on windows is very poor (not launched at all or useless emulator launched)) ** pipe emulator output to logger (TIMOB-13381 Android Emulator: process launches in new terminal on Windows) ** fire callback when emulator has booted ** fire callback when sdcard is ready ** fire callback when emulator is quit (TIMOB-12604 Android: Closing the emulator, 'Emulator has exited' log in not printed on console) ** NOTE: be careful when running multiple x86 instances as to avoid "Starting emulator for AVD 'titanium_10_800x1280_armeabi-v7a' \ emulator: The memory needed by this VM exceeds the driver limit. \ HAX is not working and emulator runs in emulation mode" errors * kill emulator ** NOTE: make sure emulator is properly killed on Windows (TIMOB-7468 Android: tooling - Rhino/V8 - On windows systems during emulator build, console reports error attempting to kill emulator process) * NOTE: make sure to support directories with &, especially on Windows (TIMOB-2527 Android: App launch/build problem if ampersand in home folder name)20
426TIMOB-14786CLI: Create Genymotion LibraryWe need an Genymotion library that provides the following functions: * detect Genymotion (TIMOB-14637 Android: Fix Titanium Build Script in order to support Genymotion Android Emulator) * launch emulator20
427TIMOB-14787CLI: Improve detection of Android SDK and SDK Home locationsThe Android environment detection library needs a few additional features for the build command to properly validate the development environment. * detect Android SDK ** detect abd location (TIMOB-2760 need to be able to ref adb from either /tools or /platform-tools subdir) ** detect proguard availability (TIMOB-2782 Android: Generate / Run a Proguard configuration based on API usage) ** search configured Android SDK path first, then try ANDROID_SDK environment variable (TIMOB-8658 Android: Switch search order of folders/environment variables in androidsdk.py) ** if 64-bit Linux *** check if ia32-libs package is installed (dpkg-query -l ia32-libs) (TIMOB-13520 Android Emulator: improve error message from missing ia32-libs dependency on linux) *** check if /usr/lib/libGL.so exists *** check if i386 architecture set in dpkg * detect Android SDK Home (ANDROID_SDK_HOME) 13
428TIMOB-14799iOS: Prevent clearing TextField after password field had focus*Problem* On iOS textfields are cleared by default after some password field had the focus. Is this something that could be prevented. I looked at the docs for textfields, but either I cannot find it or it just isn't there. *Example code to reproduce* {code:javascript} var win = Ti.UI.createWindow({ backgroundColor : 'white' }); var tf1 = Ti.UI.createTextField({ value : "textfield1", passwordMask : true, top : 10, width : 200 }); win.add(tf1); var tf2 = Ti.UI.createTextField({ value : "textfield2", top : 80, width: 200 }); win.add(tf2); win.open(); {code} *Steps to reproduce* 1. click in the password field 2. click in the "normal" textfield 3. press backspace *Expected result* The last character of the textfield is deleted *Actual result* The entire contents of the textfield is now cleared instead of only the last character.3
429TIMOB-14806ProjectTemplate: values used as comparison to determine device form factor are wrongh5. Problem description In Appcelerator Studio template samples for classic projects, the values used as comparison to determine if the device is a tablet or a handheld are outdated and could lead to a wrong detection. h5. Steps to reproduce Create a new Single Window Project and open app.js. Check line: {code} var isTablet = osname === 'ipad' || (osname === 'android' && (width > 899 || height > 899)); {code} A Google Galaxy Nexus device (for example) has those values: {code} height: 1184 width: 720 {code} As a result, it is being detected as a 'tablet' while is a 'handheld' device.5
430TIMOB-14836LiveView: when device and machine are not on the same network, no graceful error message is displayedh5. Problem description In order to work, LiveView development machine and device must be on the same network. When this is not happening, there is no graceful error message to inform the user. On Android a Runtime error is displayed and on iOS the app is stuck at the splashscreen.5
431TIMOB-15732CLI: Changelog (release notes) shows 3.1.1 as latest entry for the 3.1.2 releaseh5. Description: When studio prompts users to install CLI 3.1.2, the changelog is displayed. Currently the changelog is only listing 3.1.1 as the latest entry. This might cause confusion. h5. Steps to reproduce: 1) Remove CLI with "sudo npm -g remove titanium" OR if you have a version earlier than 3.1.2, skip this step. 2) Launch studio and "check for appcelerator updates" 3) Examine the "release notes" (changelog) displayed h5. Result: The latest entry is 3.1.1 h5. Expected Result: The latest entry is 3.1.2 and describes the fixes made.1
432TIMOB-14899Tooling: Include Google Maps V2 metadata into timodule.xml so can be added to the manifest with the correct app id.h6.Feature Request To add ability to have the application name automatically updated in the timodule.xml file when building an application. h6.Rationale Forgive me if I'm missing something obvious. The problem is that if they use the included module they have to assume it will be upgraded and replaced when a new Titanium SDK is released. Since the module will be replaced they cannot use the timodule.xml file to add the app id to the required permissions for the maps module. We have to add the permissions below to the tiapp.xml file. {code} <uses-permission android:name="${tiapp.properties['id']}.permission.MAPS_RECEIVE"/> <permission android:name="${tiapp.properties['id']}.permission.MAPS_RECEIVE" android:protectionLevel="signature"/> {code} When we add them like that to the tiapp.xml file we get errors like: {code} [TRACE] Writing out AndroidManifest.xml [DEBUG] /Users/egomez/android-sdks/build-tools/17.0.0/aapt package -m -J "/Users/egomez/Documents/Titanium Studio Workspace/TravisTestApp/build/android/gen" -M "/Users/egomez/Documents/Titanium Studio Workspace/TravisTestApp/build/android/AndroidManifest.xml" -S "/Users/egomez/Documents/Titanium Studio Workspace/TravisTestApp/build/android/res" -I /Users/egomez/android-sdks/platforms/android-10/android.jar [ERROR] /Users/egomez/Documents/Titanium Studio Workspace/TravisTestApp/build/android/AndroidManifest.xml:4: Tag <permission> attribute name has invalid character '$'. [ERROR] /Users/egomez/Documents/Titanium Studio Workspace/TravisTestApp/build/android/AndroidManifest.xml:39: Tag <uses-permission> attribute name has invalid character '$'. [ERROR] Error generating R.java from manifest {code} h6.Steps to reproduce Do a project clean, and build the android app and the map did not load. We then checked the generated AndroidManifest.xml file and looked for the required permissions that are outlined in the index.html file of the maps module. In the AndroidManifest file I found that the following permissions were present: {code} <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> {code} The other 4 were not present in the manifest file and they need to be included for the Maps Module to work. Client would like to propose that the following be included in the timodule.xml that is included with the maps module that way they are automatically added to the manifest with the correct app id. The 4 which should be added to timodule.xml are: {code} <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> <uses-permission android:name="${tiapp.properties['id']}.permission.MAPS_RECEIVE"/> <permission android:name="${tiapp.properties['id']}.permission.MAPS_RECEIVE" android:protectionLevel="signature"/> <uses-feature android:glEsVersion="0x00020000" android:required="true"/> {code} h6.Additional info Client also tested this by modifying the timodule.xml file for the module in the following directory: - "/Library/Application Support/Titanium/Modules/android/ti.map/2.1.1/" When they just added those 4 lines the maps module started working properly. Also can be confirmed that the 4 missing permissions/features are now present in the AndroidManifest.xml file.3
433TIMOB-14963Android: Ti.Map and Ti.Cloudpush return "already added: Lcom/google/android/gms/games/achievement/Achievement"I'm trying to add Push to my app (iOS/Android) but I'm getting the following error message when I compile the android version: {code} [ERROR] UNEXPECTED TOP-LEVEL EXCEPTION: [ERROR] java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/games/achievement/Achievement; [ERROR] at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123) [ERROR] at com.android.dx.dex.file.DexFile.add(DexFile.java:163) [ERROR] at com.android.dx.command.dexer.Main.processClass(Main.java:490) [ERROR] at com.android.dx.command.dexer.Main.processFileBytes(Main.java:459) [ERROR] at com.android.dx.command.dexer.Main.access$400(Main.java:67) [ERROR] at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:398) [ERROR] at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:245) [ERROR] System Error while compiling Android classes.dex [ERROR] at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:131) [ERROR] at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:109) [ERROR] at com.android.dx.command.dexer.Main.processOne(Main.java:422) [ERROR] at com.android.dx.command.dexer.Main.processAllFiles(Main.java:333) [ERROR] at com.android.dx.command.dexer.Main.run(Main.java:209) [ERROR] at com.android.dx.command.dexer.Main.main(Main.java:174) [ERROR] at com.android.dx.command.Main.main(Main.java:91) [ERROR] 1 error; aborting {code} Modules added: {code} <modules> <module platform="android">ti.cloudpush</module> <module platform="android">com.acktie.mobile.android.qr</module> <module platform="commonjs">ti.cloud</module> <module platform="iphone">com.acktie.mobile.ios.qr</module> <module platform="android">facebook</module> <module platform="android">ti.map</module> <module platform="iphone">facebook</module> </modules> {code} other users confirm that ti.cloudpush and ti.map inside the same project will cause this error for them too. Thread: http://developer.appcelerator.com/question/155815/already-added-lcomgoogleandroidgmsgamesachievementachievement3
434TIMOB-14931MobileWeb: <allow-touch> option not properly toggling touch events for Ti.UI and ScrollableViewThe <allow-touch> flag needs to override the touch detection, but we forgot to add this to titanium/Ti/UI/ScrollableView.js and titanium/Ti/UI.js. We simply need to change both instances of {code} useTouch = 'ontouchstart' in global, {code} to {code} useTouch = has('touch'), {code}2
435TIMOB-14933CLI: Builds where tiapp.xml sdk-version differs from selected SDK fail to properly fork in WindowsThe CLI tries to strip the first argument if it's the actual "node" executable before parsing the args. The problem is on Windows the node executable can sometimes contain the .exe and the following line of code fails: {code} // cli.js (line 218) args[0].slice(-4) === 'node' && args.shift(); {code} This line needs to look like this: {code} args[0].replace(/\\/g, '/').split('/').pop() == process.execPath.replace(/\\/g, '/').split('/').pop().replace(/\.exe$/, '') && args.shift(); {code}1
436TIMOB-15253Android: singleTask launchMode with HeavyWeight window hangs after 1st launchWhen launching your app with it's main activity set to {{android:launchMode="singleTask"}} and it's main window a HeavyWeight one, it will hang on the second and every following launch. This bug blocks me from allowing users to open my app by using an URL scheme on a webpage or in a email message, send to them when they lost their password, received an invite to play a game etc. h1. Why use launchMode? By default, when launching your app via another app, e.g. using an URL scheme in the browser, your apps main activity will be stacked onto the current app's task. If your app was already running in the background, you will have 2 instances of the app running. Android has a [launchMode|http://developer.android.com/guide/topics/manifest/activity-element.html#lmode] attribute that allows you to instruct the OS to always open the activity as the root of a new task, using {{singleTask}} as value. This works fine, but not when the app's main window is HeavyWeight, for example a {{Ti.UI.TabGroup}} or a {{Ti.UI.Window}} with {{modal:false}}. h1. To reproduce # Create a new project: {{titanium create -p android -n test}} # Build (only) to generate manifest: {{titanium build -b -p android}} # Open the generated {{build/android/AndroidManifest.xml}} and copy the first {{<activity>}} tree to the {{tiapp.xml}} under {{ti:app/android/manifest/application}}. You will need to create the empty {{<manifest>}} and {{<application>}} elements yourself. # Add {{android:launchMode="singleTask"}} to the {{<activity>}} element and save {{tiapp.xml}}. # Build the app to the device: {{titanium build -p android -T device}} # Open the updated {{AndroidManifest.xml}} to confirm the only effective change is the newly added attribute. # Seeing the app properly launched on the device, move it to the background by clicking the device's home button. # Lookup the app on the device and launch it again. You'll see a black screen with a titlebar ({{test}}) only. # Now replace the app's {{app.js}} with a lightweight window instead of the default heavyweight tabgroup: {code} Ti.UI.createWindow({backgroundColor:'white'}).open(); {code} # Repeat steps 5-8 and this time, the app will properly launch.8
437TIMOB-14973Android Build: Validate command line arguments and tiapp.xml settings* validate command line options ** --alias ** --android-sdk ** --avd-abi ** --avd-id ** --avd-name NEW! ** --avd-skin ** --device NEW! (TIMOB-12661 CLI: Support adb's -s option for pointing a build to a specific emulator or device) ** --debug-host ** --deploy-type NEW! (TIMOB-9139 Android: Tooling: How to set the deploytype) ** --key-password NEW! (TIMOB-6423 builder.py should accept an alias password) ** --keystore ** --output-dir ** --store-password (formerly --password) ** --target (emulator, device, dist-playstore) * if 64-bit Linux ** make sure i386 architecture has been added (not sure how to check, but to add run "dpkg --add-architecture i386") ** make sure ia32-libs package is installed (TIMOB-13520 Android Emulator: improve error message from missing ia32-libs dependency on linux) ** make sure /usr/lib/libGL.so exists * enforce sdk dependencies ** check java version is <=1.6 (TIMOB-5010 Latest version of Java unusable for building Android projects) * check that build directory is writeable * read tiapp.xml ** read proguard flag (TIMOB-2782 Android: Generate / Run a Proguard configuration based on API usage) ** determine tool api level *** ensure correct version fallback (TIMOB-11603 Android: invalid android path in bash profile results in project creation error, improve error message) ** packageid must contain at least one period (prepend "com." if no periods present) ** appversion should be the tiapp.xml <version> and is injected into the AndroidManifest.xml (TIMOB-559 Android: Appversion never taken from tiapp.xml) ** default minimum Android SDK is 2.3.3 (10) ** default target Android SDK is latest or 2.3.3 (10) ** classname is the app name, capitalized, only alpha-numeric and _, prepend _ if starts with a number ** make sure deploy type is correct ** validate "ti.ui.defaultunit" property (must be 'system', 'px', 'dp', 'dip', 'mm', 'cm', or 'in') (TIMOB-9682 Android: Packaging:No warning displayed for default system value of 'ti.ui.defaultunit') ** get "ti.android.loadfromsdcard" property ** get "ti.android.compilejs" property ** get "ti.android.include_all_modules" property??? * scrub debugger/profiler args * find the android sdk home * validate icon from tiapp.xml * detect modules from tiapp.xml ** if required module is not found, fail (TIMOB-9930 Android: Packaging: With a non-existing module added to the project in the tiapp.xml,app packages without error and gets installed on device) (TIMOB-14064 Android build select wrong module jars for dex build) ** load module hooks *** allow module hooks to modify classpath (TIMOB-14170 Android: Provide mechanism for partners to specify the classpath for builds)13
438TIMOB-14974Android Build: Detect if need to force rebuild* detect if need to force rebuild (TIMOB-4510 Force full re-build discrepancy between Android and iOS - Android requires modified tiapp.xml) ** yes if --force flag is set ** yes if build/android does not exist ** yes if build/android/AndroidManifest.xml does not exist ** yes if app id changes ** yes if app name changes ** yes if app version changes ** yes if publisher changes ** yes if url changes ** yes if copyright changes ** yes if description changes ** yes if icon changes ** yes if analytics changes ** yes if guid changes ** yes if fullscreen changes ** yes if navbar-hidden changes ** yes if classname changes ** yes if deploy type changes ** yes if compile js changes ** yes if list of modules change ** yes if any of the module's manifest or api name changes ** yes if any module's binary is changed (TIMOB-5837 Tooling: Adding a module requires a clean build) ** yes if new properties are added to tiapp.xml ** yes if Android target SDK version changes ** yes if any changes to activities in the Android <activities> in the tiapp.xml ** yes if any changes to activities in the Android <services> in the tiapp.xml ** yes if any jss files change5
439TIMOB-14976Android Build: Init the build/android directory and files* init the build/android directory and files ** if force rebuild, remove build/android if exists ** create build/android if does not exist ** remove directories, if exists *** build/android/src *** build/android/res ** create directories, if does not exist *** build/android/assets *** build/android/gen *** build/android/gen/<split app id> *** build/android/lib *** build/android/res *** build/android/res/drawable *** build/android/res/values *** build/android/src (IS THIS EVEN USED??? if not, we don't need the aidl file) ** copy over files *** AppInfo.java => build/android/gen/<split app id>/<classname>AppInfo.java *** AndroidManifest.xml => build/android/AndroidManifest.xml *** App.java => build/android/gen/<split app id>/<classname>Application.java *** Activity.java => build/android/gen/<split app id>/<classname>Activity.java *** classpath => build/android/.classpath *** project => build/android/.project **** make sure the .project file is a valid Eclipse project (TIMOB-11700 Make generated android projects importable into eclipse) *** default.properties => build/android/default.properties *** gitignore => build/android/.gitignore *** NOTE: each of the files must be converted from mako templates to handlebars templates ** merge custom classpath with build/android/.classpath ** generate activities from tiapp.xml ** generate services from tiapp.xml ** write app_modules to build/android/bin/assets/app.json??? * create directories, if does not exist ** build/android/bin ** build/android/bin/assets ** build/android/bin/assets/Resources ** build/android/bin/classes5
440TIMOB-14977Android Build: Compile resources* compile resources ** copy Resources directory (exclude all platform directories) *** load dependency.json *** load modules.json *** handle tiapp.xml "ti.android.include_all_modules" property *** walk specified directory **** ignore globally ignored files and directories (TIMOB-2733 Android: Getting Error at Rebuilding after changing tiapp.xml) (TIMOB-7816 Android: Ignore files that start with ._) **** if file is a html file, scan for all <script> tags and mark all app:// URLs to the js minification exclusion list **** if file is a jss file, ignore it **** if file is a js file: ***** AST parse the .js files to find Titanium symbols ****** keep track of what Titanium APIs are being used ***** fire "build.android.compileJsFile" function hook ****** minify the .js files using UglifyJS instead of Closure Compiler (TIMOB-2662 android SDK > 1.5.0 "Compiling Javascript Resources" each time) (TIMOB-13974 Android: KS takes a long time to package - I've seen nine minutes, others report longer in some cases) ****** NOTE: make sure we can read utf-8 encoded .js files (TIMOB-3186 Android: Persistent internal compiler error) **** if file is a drawable resources, copy it to the drawable directories ***** warn if copying duplicate drawable dirs (i.e. high/medium/low => hdpi/mdpi/ldpi) ***** allow either .jpg or .png files (TIMOB-6666 Android: Allow users to specify "Default.jpg" in place of "Default.png") ***** copy xhdpi images (TIMOB-7827 Android: Please add support for extrahigh density (320 dpi) devices) **** else copy the file **** NOTE: for each file copied, be sure to fire "build.android.copyResource" function hook ** copy Resources/android *** same as copy Resources ** copy platform/android *** same as copy Resources *** NOTE: be sure all files are merge such as res/layout files (TIMOB-12372 Android: Layout resources in res/layout/filename.xml no longer work) ** copy module resources *** same as copy Resources ** copy commonjs modules *** same as copy Resources13
441TIMOB-14978Android Build: Create AndroidManifest.xml* create AndroidManifest.xml ** check if using a custom platform/android/AndroidManifest.xml *** validate for sane values ** otherwise generate the build/android/AndroidManifest.xml ** fill in missing info ** if using Ti.Geolocation, make sure the correct permissions are added to the AndroidManifest.xml (TIMOB-5749 Android: AndroidManifest.xml not properly created when using Ti.Geolocation events) ** make sure all Titanium Modules have correct dependency permissions added to the AndroidManifest.xml (TIMOB-14899 Tooling: Include Google Maps V2 metadata into timodule.xml so can be added to the manifest with the correct app id) ** if using custom AndroidManifest, write the default to a separate file 5
442TIMOB-14979Android Build: Build Java files and run dexer* if need to build java files and dex (TIMOB-2209 Android: Re-enable incremental build) ** build generated classes (aka compile java source) *** if any modules, update the classpath *** add "titanium-verify.jar" to classpath *** if not production, add debug and profiler jars *** if production and proguard enabled, allow proguard to run (TIMOB-2782 Android: Generate / Run a Proguard configuration based on API usage) *** run javac on .java files **** build for all desired abis (TIMOB-15305 Android: Add x86 support to Distribution Build) **** NOTE: make sure spaces work, otherwise detect if path has spaces and error before build (TIMOB-3180 Android: JAVA_HOME not recognized when launching some Android applications) ** make sure jars aren't included twice before running dexer (TIMOB-14963 Android: Ti.Map and Ti.Cloudpush return "already added: Lcom/google/android/gms/games/achievement/Achievement") ** fire "build.android.dexer" function hook *** run dexer5
443TIMOB-14980Android Build: Package and sign app* package ** package assets (aapt package) ** only package internal Titanium jars that are required based on the AST parsing (TIMOB-6845 Android: Ti should include only the used features/libs into a new app) ** create unsigned apk (basically a zip file) *** if production, strip debugging symbols (TIMOB-2363 Android: Strip debugging symbols from JARs when building for production) *** if classes.dex (returned by dex command) does not exist in apk or has been updated, then write the classes.dex to the apk file *** for each abi, add the native/libs/<abi>/* to the apk file (TIMOB-14242 Android: x86 libs not included in production APK) ** run jarsigner on unsigned apk *** pass in the store password and key password (if exists) (TIMOB-6423 builder.py should accept an alias password) ** zipalign signed apk5
444TIMOB-14981Android Build: Package Hook* package ** copy apk file output directory2
445TIMOB-14982Android Build: Run Hook* run (TIMOB-10763 CLI: Android: "run" hook for Android apps) ** validate NEW! *** verify --device exists ** post-compile *** if --build-only **** exit, do not start adb (TIMOB-12034 CLI: Building for android with '-b' -build only flag starts the daemon & waits for the device after building the app) *** else **** verify --device still exists **** support multiple devices (TIMOB-7053 Tooling: Android - when using Run on Device provide support for multiple devices) **** wait for device **** install the app (adb install) ***** if install fails with error INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES, adb uninstall the app, then try again (TIMOB-8665 Android: INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES when installing different app with same app id) **** if installed successfully, then "adb shell am start" **** adb forward debugger and profiler5
446TIMOB-14990Code Processor: Add a plugin option to suppress the resultsCurrently, if a plugin is included and can generate output, it will always generate output. Sometimes we want to include a plugin, but not show its output. A plugin option called "suppressOutput" that takes a boolean should be supported5
447TIMOB-14991Android: Javascript can't get path of assets folder of moduleh6.Problem Client is trying to get images from Android Titanium Module and refer to them via Javascript. So instead of return a TiBlob they would like to get path access resolved so they just have to link image in their image proxy on a similar way like: {code} var image = Ti.UI.ImageView({ image: '/modules/com.mod-id.org/images/image.png' }); {code} "image.png" would be contained at "/RootModuleFolder/assets/image.png" As the assets/README suggests, if you put the image.png in an "images/" subdirectory under assets. Then try to refer to it from a Javascript file. h6.assets/README {code} Place your assets like PNG files in this directory and they will be packaged with your module. If you create a file named org.appcelerator.wifissid.js in this directory, it will be compiled and used as your module. This allows you to run pure Javascript modules that are pre-compiled. {code} h6.Steps to reproduce Create the scenario as follows: 1) Create android module 2) Create directory in assets call 'images' 3) Put an image.png in assets/images 4) Create a test app 5) Replace app.js with snippet below. 6) Public the android module into the Test app 7) Launch the test app in an Android Device 8) Notice how nothing shows up If you create an iOS module in the same way as the android module and you publish it, when running the test app on an iOS device, you'll see the image. h6.A Snippet {code} var win = Ti.UI.createWindow({ backgroundColor: 'yellow' }); var view1 = Ti.UI.createImageView({ top: 0, left: 0, height: Ti.UI.SIZE, width: Ti.UI.SIZE, // works for iOS, doesn't work for android image: '/modules/com.mod-id.org/images/image.png' }) win.add(view1); win.open(); {code} h6.Additional details If you try any of these paths and attempt to use a TiUIImageView warning below is thrown as a drawable reference: {code} //None of these paths worked //var imagePNG = '/modules/org.appcelerator.org/yes.png'; //var imagePNG = '/modules/org.appcelerator.org/assets/yes.png'; //var imagePNG = 'modules/org.appcelerator.org/assets/yes.png'; //var imagePNG = '/org.appcelerator.org/assets/yes.png'; var win = Ti.UI.createWindow({ backgroundColor: 'yellow' }); var image = Ti.UI.createImageView({ top: 150, image: imagePNG }); win.add(image); win.open(); {code} - 08-27 09:56:56.778: W/TiDrawableReference(3030): (pool-3-thread-2) [632,632] Could not open stream to get bitmap Other than parity, this can be just a TIDOC issue. But from javascript how does one refer to an image that's included as part of an android module?13
448TIMOB-15009LiveView: cannot see Alloy.Globals in modules when using LiveViewh2. Problem description When using LiveView, the global variable Alloy.Globals is not defined in modules. Disabling LiveView would not throw the error. h2. Code to reproduce Create an Alloy app with this code: index.js {code} var win = Ti.UI.createWindow({ backgroundColor:'#ffffff' }); Ti.API.info(Alloy.Globals.test); var Test = require('test'); new Test(); win.open(); {code} lib/test.js {code} function Test() { Ti.API.info(Alloy.Globals.test); }; module.exports = Test; {code} Add the global variable in alloy.js: {code} Alloy.Globals.test = "TEST"; {code} h2. Actual behavior When running the app with LiveView on, the following error is thrown: {code} [INFO] : [LiveView] Error Evaluating app.js @ Line: 2 [ERROR] : TypeError: 'undefined' is not an object (evaluating 'Alloy.Globals') [ERROR] : File: app.js [ERROR] : Line: 2 [ERROR] : SourceId: 323744256 [ERROR] : Backtrace: [ERROR] : #0 Controller() at :21 [ERROR] : #1 () at :214 [ERROR] : #2 anonymous() at :15 [ERROR] : #3 () at file://localhost/Users/dcassenti/Library/Application%20Support/iPhone%20Simulator/6.1/Applications/4822E77B-90A1-4555-8E22-DA55E5976F16/DavideAlloyTestApp.app/app.js:628 [ERROR] : #4 () at file://localhost/Users/dcassenti/Library/Application%20Support/iPhone%20Simulator/6.1/Applications/4822E77B-90A1-4555-8E22-DA55E5976F16/DavideAlloyTestApp.app/app.js:493 [ERROR] : #5 () at file://localhost/Users/dcassenti/Library/Application%20Support/iPhone%20Simulator/6.1/Applications/4822E77B-90A1-4555-8E22-DA55E5976F16/DavideAlloyTestApp.app/app.js:460 [ERROR] : #6 () at file://localhost/Users/dcassenti/Library/Application%20Support/iPhone%20Simulator/6.1/Applications/4822E77B-90A1-4555-8E22-DA55E5976F16/DavideAlloyTestApp.app/app.js:392 [ERROR] : #7 () at file://localhost/Users/dcassenti/Library/Application%20Support/iPhone%20Simulator/6.1/Applications/4822E77B-90A1-4555-8E22-DA55E5976F16/DavideAlloyTestApp.app/app.js:663 {code} Without LiveView, the error is not shown. Note that in index.js the error is not thrown.13
449TIMOB-15104Android: Add support for showContactsParams.selectedPropertyThe {{showContactsParams.selectedProperty}} callback never gets called. Only the {{showContactsParams.selectedPerson}} does. h1. Steps to reproduce: # Run the following app: {code} var w = Ti.UI.createWindow({backgroundColor:'white'}); var b = Ti.UI.createButton({title:'Select'}); b.addEventListener('click', function () { Ti.Contacts.showContacts({ selectedProperty: function (e) { Ti.API.debug('called'); } }); }); w.add(b); w.open(); {code} # In the console you won't see {{called}} # Replace {{selectedProperty}} by {{selectedPerson}} and run again # This time you *will* see {{called}}8
450TIMOB-15118iOS: SDK should have under 10 compiler warnings (it currently has 159)SDK should have under 10 warnings for a customer application.8
451TIMOB-15705Appcelerator Studio: Titanium CLI command not recognized in Studio terminalh2. Description Not able to build our mobile application from the Appcelerator Studio terminal on Windows using CLI. However it does work from outside in terminal but not in the terminal inside appcelerator studio. h2. Test Case Please find below the error logs : {code} $ titanium Titanium Command-Line Interface, CLI version 3.1.2, Titanium SDK version 3.1.1.GA Copyright (c) 2012-2013, Appcelerator, Inc. All Rights Reserved. Please report bugs to http://jira.appcelerator.org/ [ERROR] "c:\Users\wchen\AppData\Roaming\npm\node_modules\titanium\bin\titanium" is an unrecognized command. Run node.exe help for available commands. $ which titanium /c/Users/wchen/AppData/Roaming/npm/titanium {code} and also {code} $ titanium Titanium Command-Line Interface, CLI version 3.1.2, Titanium SDK version 3.1.2.GA Copyright (c) 2012-2013, Appcelerator, Inc. All Rights Reserved. Please report bugs to http://jira.appcelerator.org/ [ERROR] "c:\Users\wchen\AppData\Roaming\npm\node_modules\titanium\bin\titanium" is an unrecognized command. Run node.exe help for available commands. {code}8
452TIMOB-15181iOS7: Icon assets included in app based on older naming conventionh5. Description: When specifying an icon for iOS in an iOS 6 and iOS 7 project, the user will select "app icon.png" (or any other named icon as base). The icons will be copied over to the project beginning with the base name and then matching any other icons. For example, specification of "app icon.png" as the base, "app icon@2x.png" which is the retina version, will be copied. This presents a challenge in iOS7-only projects. Since we recommend the naming convention formerly followed by apple (appicon.png, appicon@2x.png, appicon-72.png, app icon-72@2x.png, etc...) there is no clarity on how to set the icon names for iOS 7 apps as the name of the base icon we might expect to be "appicon-60@2x.png". If there is no icon called appicon.png and this is selected in tiapp.xml then the packaged app may show the correct icons on the various supported devices, but the Xcode archive may show the titanium ribbon. Apple should attempt to choose the best icon for the purpose, and this is supposed to work regardless of the name. We will investigate. If this is the case, the only change would be to documentation. h5. Steps to reproduce: 1) Attempt to create a project using iOS 7-only icons using our naming convention 2) Select an icon as the base icon h5. Result: Only icons that include the base icon name will be included in the project h5. Expected Result: All relevant icons for both iOS 7 and iOS 6 are included, regardless of name8
453TIMOB-15287iOS7: TableView with SearchBar does not respect autoAdjustScrollViewInsets Window propertyWithout searchBar in TableView, the property is respected. {code} var navWinAdd = Ti.UI.iOS.createNavigationWindow({ modal: true }); var self = Ti.UI.createWindow({ autoAdjustScrollViewInsets: true, extendEdges: [Ti.UI.EXTEND_EDGE_TOP], title: "Models" }); navWinAdd.setWindow(self); var searchBar = Ti.UI.createSearchBar({ hintText: "Search" }); var tableView = Ti.UI.createTableView({ top: 64, search: searchBar }); self.add(tableView); navWinAdd.open(); {code}8
454TIMOB-15339Android: Update Facebook Module to version 3.5We need to update the Facebook SDK Module version. It's almost 1 year old now as per https://github.com/appcelerator/titanium_modules/blob/master/facebook/mobile/android/src/com/facebook/FacebookSdkVersion.java we are currently stuck on version 3.0.0 of the Facebook SDK... And there were a lot of improvements since them... The official Changelog from 3.0.0 to 3.5: https://developers.facebook.com/docs/android/change-log-3.x/ There are many features and improvements since them, not to mention that the latest 3.5 version brings the Native Share Dialog and a lot of bug fixes21
455TIMOB-15483iOS: Add ability to hide bottom border in the window barNew property for window that hide the bottom border in the window bar. So many guys have had problem with that. Is impossible to set up own color or picture, bottom border hampers developers to make nice design. Workaround is use toolbar or own view what is not really good way, especially not if there is long navigation through whole app or more orientation modes. I think every app that is going to have custom-nice design needs to change default navBar/winBar ,so this property is important. {code:javascript} var win1 = Ti.UI.createWindow(); var win2 = Ti.UI.createWindow({ title: "Title", backgroundColor: "#469be0", barColor: "#469be0", barImage: "bg.png", // backgroundImage in #469be0 color [In this case winBar has to merge window backgroundColor] }); var nav = Ti.UI.iPhone.createNavigationGroup({ window: win2 }); win1.add(nav); win1.open(); {code}1
456TIMOB-15468iOS: Titanium.Media.AudioPlayer needs an error eventTitanium.Media.AudioPlayer really needs a proper error event. 'Change' and 'progress' aren't enough. Currently, if a stream is broken, or (as is often the case) has the wrong buffer size set (as can be demonstrated in the KitchenSink remote streaming example) we only forced the same alert "Unable to configure network read stream". This error info isn't very useful. Debug logs shows more info logged by AudioStreamer.m which provides more info eg : "Audio packets are larger than kAQBufSize." 5
457TIMOB-15710Android: Module Packaging - Titanium fails to package android module projecth5.Description Packaging an android product to the titanium SDK directory, into an already created module or to a specified location does not work. Packaging claims to have finished in the console, but an alert will be shown saying that the packaging was unsuccessful. h5.Steps To Reproduce 1. Open Studio 2. Create an android mobile module project 3. Package the project to the Titanium SDK h5.Result Opened an alert: {quote}Launching build and packaging failed. Reason: Could not move: /Users/tester/Documents/Titanium_Studio_Workspace/android/dist/com.appcelerator.android-android-1.0.zip.{quote} h5.Expected Result Project should have packaged successfully into the titanium sdk folder.5
458TIMOB-15443Android: Allow full Activity lifecycle access for Titanium modulesThe current Android module API offers access to the *application* lifecycle, but this is mostly irrelevant for Android (it's the iOS model!), where code needs access to the *Activity* lifecycle (i.e. onCreate, onResume, onPause, onStop, onDestroy, onActivityResult). A good example is this class in the Facebook SDK: https://developers.facebook.com/docs/reference/android/current/UiLifecycleHelper Currently, this class cannot be used in module code that runs in the context of a Window or TabGroup, since the module does not have access to that Activity's lifecycle events. This greatly complicates module porting to Titanium, since using such classes requires creating non-UI activities, and then we need methods to sync between the various Activities. h3. Proposal # Add a new dictionary parameter to Ti.UI.createWindow and createTabGroup, attachAndroidModule: 'modulename' # If attachAndroidModule is specified, the module is loaded prior to Activity creation and its lifecycle events correspond to those of the created UI Activity. # The Javascript does not change - the module is "required" and used as before. # Clearly the module can be attached to multiple Activities in a Titanium app - just as an Android library can be used by multiple Activities in in a native Android app, and in each case the events correspond to the Activity in use. # I would deprecate the current lifecycle events in the Android module, since they're confusing in the Android context. However, if desired, I suppose it's possible to maintain "legacy" module behavior (per module) through tiapp.xml configuration parameters. This is yet another stumbling block to easy porting of 3rd party code. The Titanium community would greatly benefit from this improvement.13
459TIMOB-15448iOS: No event generated on click of map annotation title or subtitleh5. Problem When clicking on an annotation in a mapview, no event is generated for SDK 7.x/8.x but it’s working well for SDK 6.1. For more details visit http://developer.appcelerator.com/question/157471/mapview-click-event-listener-not-working-ios7 h5. Test Code {code} var win2 = Ti.UI.createWindow({ barColor : '#ff0000', extendEdges : [Ti.UI.EXTEND_EDGE_ALL], }); var mountainView = Titanium.Map.createAnnotation({ latitude : 37.390749, longitude : -122.081651, title : "Appcelerator Headquarters", subtitle : 'Mountain View, CA', pincolor : Titanium.Map.ANNOTATION_RED, animate : true, leftButton : '/images/arrow.png', myid : 1 // Custom property to uniquely identify this annotation. }); var mapview = Titanium.Map.createView({ mapType : Titanium.Map.STANDARD_TYPE, region : { latitude : 37.390749, longitude : -122.081651, latitudeDelta : 0.01, longitudeDelta : 0.01 }, animate : true, regionFit : true, userLocation : true, annotations : [mountainView] }); win2.add(mapview); // Handle click events on any annotations on this map. mapview.addEventListener('click', function(evt){ var clicksource = evt.clicksource; alert(clicksource); if (clicksource == 'title' || clicksource == 'rightButton'){ Ti.API.info('Item clicked'); } }); win2.open(); {code} h5. Steps to reproduce Please follow my steps to reproduce this bug:- # Create new project # Replace app.js code to my test code # Run with IOS SDK 6.1 # Click on annotation pin. Annotation appears with title and subtitle # Click on title or subtitle # Its shows alert message # Now change to iOS SDK 7.x/8.x and follow steps 4 to 6 # For iOS 7/8, if you click on title or subtitle, alert message will not display 13
460TIMOB-15519Android: Remove FastDevIn 3.2.0 we deprecated FastDev. In 3.3.0, we need to remove the code altogether. For now, if you wish to use it, you still can from the command line following the instructions in http://docs.appcelerator.com/titanium/latest/#!/guide/Fastdev_Reference_for_Android.3
461TIMOB-15534iOS: Battery Platform event listener doesn't work after first callAdding the event listener for battery change is never called in ios 7 on iphone 4s and 5. Ti.Platform.getBatteryLevel() reports current battery level from first launch of the app but never gets updated. Functions as expected (gives 1% changes) on android {code} var Battery = function UpdateBatteryLevel() { Titanium.Platform.batteryMonitoring = true; Titanium.Platform.addEventListener('battery', UpdateBattery); Ti.App.addEventListener('UpdateBattery', RefreshBattery); }; function UpdateBattery(e) { var battLevel = e.level; if (Ti.Platform.osname == 'iphone') { if (battLevel > -1) { battLevel = battLevel * 100; } } Ti.App.Properties.setDouble('batterylevel', battLevel); Ti.App.fireEvent('BatteryUpdated'); Ti.API.info(new Date() + ' - Battery Level Updated to ' + Ti.App.Properties.getDouble('batterylevel')); } function RefreshBattery() { var battLevel = Ti.Platform.getBatteryLevel(); if (Ti.Platform.osname == 'iphone') { if (battLevel > -1) { battLevel = battLevel * 100; } } Ti.App.Properties.setDouble('batterylevel', battLevel); Ti.API.info(new Date() + ' - Battery Level = ' + Ti.App.Properties.getDouble('batterylevel')); } module.exports = Battery; {code} 5
462TIMOB-15560iOS7: appicon-Small-40 (and @2x) Icon Not Used for iOS 7 when All Icon Sizes Included in BundleThe iOS 7 icons for Spotlight, Settings, and Notifications (appicon-Small-40.png, appicon-Small-40@2x.png) are not used when all of the other icon sizes/versions (including iOS 6) are included. Specifically, include the following icons in Resources/iphone: appicon-Small.png appicon-Small@2x.png appicon-Small-50.png appicon-Small-50@2x.png appicon-Small-40.png appicon-Small-40@2x.png When you run on iOS 7 device or simulator, appicon-Small-40.png and appicon-Small-40@2x.png are not used as expected. Steps to reproduce: 1. Unzip Test.zip, import the Titanium mobile project, and run it in the simulator. 2. Simulate pressing the Home button to close the app and open the default Settings app. 3. Scroll to the bottom and notice the app icon used for "Test" is white. 4. Expected app icon is black. All iOS7 icons included in Test project are black, all iOS6 icons are white. View appicon-Small-40.png and appicon-Small-40@2x.png and confirm they are black. See related Q&A post logged over a month ago that others have confirmed: http://developer.appcelerator.com/question/157401/spotlight-settings-and-notification-icon-not-using-ios-7-versions5
463TIMOB-15570Add support for largeIcon in Titanium.Android.NotificationCurrently Titanium.Android.Notification (http://docs.appcelerator.com/titanium/latest/#!/api/Titanium.Android.Notification) only accepts one icon which is used for both the icon on the status bar and the icon displayed on the notification center. Please add support for the largeIcon (http://developer.android.com/reference/android/app/Notification.html#largeIcon) so it becomes possible to have 2 different icons between the status bar and the notification center. Many thanks5
464TIMOB-15612Android: HttpClient.abort() does not stop file uploadCurrently, it's not possible to stop an upload with HttpClient on Android. Calling abort() does abort the transfer, but the transfer starts over from 0%, and runs to completion, somewhat hidden - even calling the onload() callback when it's done. On the server-side, it's apparant that the socket connection is closed when abort() is called, but a new socket connection is instantly opened, where the upload is restarted. Here's some source (app.js) to reproduce the issue - it starts an upload, then abort() is called after 1 second: {code:js} var win = Ti.UI.createWindow({ exitOnClose: true,}); win.open(); var percent_done = 0; var xhr = Ti.Network.createHTTPClient({ onload : function(e) { alert("onload: "+this.responseText); }, onerror : function(e) { alert("e.error: "+e.error); }, onreadystatechange: function(e){ console.log("onreadystatechange: "+this.readyState); }, onsendstream : function(e){ var curr_percent_done = parseInt(e.progress*100); if (percent_done == curr_percent_done) return; percent_done = curr_percent_done; console.log(percent_done+"% done. readyState: "+this.readyState); }, timeout: 10000 }); function upload(){ console.log("STARTING UPLOAD"); var url = "http://bitfabrikken.dk/upload"; //using this server for simplicity's sake var file = Ti.Filesystem.getFile(Ti.Filesystem.getResourcesDirectory()+"500k_test.mp4"); //just use any large-ish file, 500kb+ or so xhr.open("POST", url); xhr.send({ file: file }); } upload(); setTimeout(function(){ console.log("ABORTING UPLOAD - calling xhr.abort"); xhr.abort(); },1000); {code} The console output looks this, where it's clear to see that somehow the transfer is re-initiated at 0%, when abort() is called: {code} [INFO][TiAPI ( 3108)] STARTING UPLOAD [INFO][ActivityManager( 1015)] Displayed dk.bitfabrikken.nettest/.NettestActivity: +636ms [INFO][TiAPI ( 3108)] onreadystatechange: 1 [INFO][TiAPI ( 3108)] 1% done. readyState: 1 [INFO][TiAPI ( 3108)] 2% done. readyState: 1 [INFO][TiAPI ( 3108)] 3% done. readyState: 1 [INFO][TiAPI ( 3108)] 4% done. readyState: 1 [INFO][TiAPI ( 3108)] 5% done. readyState: 1 [INFO][TiAPI ( 3108)] 6% done. readyState: 1 [INFO][TiAPI ( 3108)] 7% done. readyState: 1 [INFO][TiAPI ( 3108)] 8% done. readyState: 1 [INFO][TiAPI ( 3108)] 9% done. readyState: 1 [INFO][TiAPI ( 3108)] ABORTING UPLOAD - calling xhr.abort [INFO][TiAPI ( 3108)] 0% done. readyState: 1 [INFO][TiAPI ( 3108)] 1% done. readyState: 1 [INFO][TiAPI ( 3108)] 2% done. readyState: 1 [INFO][TiAPI ( 3108)] 3% done. readyState: 1 [INFO][TiAPI ( 3108)] 4% done. readyState: 1 [INFO][TiAPI ( 3108)] 5% done. readyState: 1 [INFO][TiAPI ( 3108)] 6% done. readyState: 1 [INFO][TiAPI ( 3108)] 7% done. readyState: 1 [INFO][TiAPI ( 3108)] 8% done. readyState: 1 [INFO][TiAPI ( 3108)] 9% done. readyState: 1 [INFO][TiAPI ( 3108)] 10% done. readyState: 1 [INFO][TiAPI ( 3108)] 11% done. readyState: 1 [INFO][TiAPI ( 3108)] 12% done. readyState: 1 [INFO][TiAPI ( 3108)] 13% done. readyState: 1 [INFO][TiAPI ( 3108)] 14% done. readyState: 1 -----SNIP - LOTS OF REPETITION----- [INFO][TiAPI ( 3108)] 93% done. readyState: 1 [INFO][TiAPI ( 3108)] 94% done. readyState: 1 [INFO][TiAPI ( 3108)] 95% done. readyState: 1 [INFO][TiAPI ( 3108)] 96% done. readyState: 1 [INFO][TiAPI ( 3108)] 97% done. readyState: 1 [INFO][TiAPI ( 3108)] 98% done. readyState: 1 [INFO][TiAPI ( 3108)] 99% done. readyState: 1 [INFO][TiAPI ( 3213)] 100% done. readyState: 1 [INFO][TiAPI ( 3213)] onreadystatechange: 2 [INFO][TiAPI ( 3213)] onreadystatechange: 3 [INFO][TiAPI ( 3213)] onreadystatechange: 4 [INFO][ALERT ( 3213)] (KrollRuntimeThread) [7533,8510] onload: null {code} Previously I've side-stepped this issue by using TCPSocket to handle uploading. However now my client wants SSL, and since that's not supported with TCPSocket, I'm back to being stuck on this error. Links to a few Q&A threads where this bug is the problem: http://developer.appcelerator.com/question/144392/android-httpclientabort-does-not-stop-file-upload http://developer.appcelerator.com/question/146555/how-to-abort-an-upload http://developer.appcelerator.com/question/158669/how-to-abort-a-file-upload-via-httpclient-android https://developer.appcelerator.com/question/154693/httpclient---how-to-stop-an-upload-in-progress---abort https://developer.appcelerator.com/question/152916/abort-of-sending-by-http-client-show-progress-of-send--receive-characters-stream 5
465TIMOB-15596iOS7: Support built in functionality to add "More" button(s) when user swipe to delete a cell in rowsh6.Request description Like in iOS7 Default Mail app, on swipe left the table view row will show options "More" and "Trash" which on click will prompt optional dialog to pursue the action. h6.Feature Request Titanium Developers would like to request built in functionality for this custom behaviour in upcoming release since many of latest apps requires such a functionality of showing more than one button likewise. Basically need to implement the same tableview row with features similar to iOS7 mail App with 2 or 3 options on swipe left. Please find the attached image to have better idea about the request.8
466TIMOB-16258Android: ListView shifts when loaded a second time or loaded into a window without a tabI've trimmed down the files and code as much as I believe that I can and still maintain the layout / shifting issue. It is very simple compared to the original code. 1) Create a new alloy project or start with the two tab alloy project 2) delete all the .js, .xml and .tss files 3) Add the enclosed index.js, index.tss and index.xml files 4) Compile and run the project on a device or an emulator 5) Note that the text in the first list section is lined up with the text in the second list section. emulator64-armScreenSnapz002.png shows how it looks in my app. It will look different in this project because it has been trimmed down to contain static data with only two sections instead of three. 6) Hit the 'R' button on the top right hand side of the first line of the list view 7) Note that the name on the first line changes color from red to gray to let you know you clicked. 8) Note that all the text after the second column has shifted to the left. emulator64-armScreenSnapz003.png shows what it looks like in my app. The output from these files do not contain any graphics of course and text has been substituted. Results: The first 2 items on the left side of the list view don't move but the next 4 shift to the left. Expected Results: The text doesn't move. This seems to work properly on all the iOS devices and emulators that I've tried, so I believe that this is an Android only issue somewhere between the Titanium runtime and the Android OS. 4
467TIMOB-15703iOS: Debugger - Debugger does not work with iOSh5. Details Debugging does not work on iOS simulators and iOS devices. *This is a regression since this worked with 3.1.3.GA stack.* h5. To reproduce 1. Create a default Titanium or Alloy project 2. Add a break point to the following places: In the default Alloy app, add break point in index.js at line 2 (e.g. alert($.label.text)) In the default Titanium app, add this code and add a break point at the alert {code} label1.addEventListener('click', function(e){ // break point on the alert line alert('clicked'); }); {code} 3. Next, debug to either iOS simulator or iOS device h5. Actual result Debugging to iOS simulator: if you click on the 'I am Window 1' label, studio will not hit that break point. Debugging to iOS device: Debug on iOS device dialog will stall (see debug_device.png) and not app will appear on device.5
468TIMOB-15765Android: TableView - JNI ERROR (app bug): local reference table overflow (max=512)h4. Problem Description This code recreates it. Dies with error : "[ERROR][dalvikvm( 840)] JNI ERROR (app bug): local reference table overflow (max=512)" h4. Test case {code} //Set the number of table rows for this test var numberOfTableRowsToTest = 50; var vAnswerTable = Ti.UI.createTableView({ backgroundColor:'#FFFFFF', data: [Ti.UI.createTableViewRow({title:'Loading...'})], top: 50, left: 0 }); if(numberOfTableRowsToTest < 5){ numberOfTableRowsToTest = 5; } var numOfQuestions = numberOfTableRowsToTest / 5; var numOfAnswers = numOfQuestions * 4; var sections = []; for (var i=0;i<numOfQuestions;i++) { //Loop over questions array //Question Variables from DB. var questionID = "questionID"+i; var question = "Question Content "+i; var position = "question position"+i; //answersArr = questionsArr[i].answersArr; //Answers array. Contains all answer data for this question from DB. //Create the table section for each Question. Each question plus its answers is a section. var questionTableSection = Ti.UI.createTableViewSection({ id:i }); //Create the table row for questions. var questionRow = Ti.UI.createTableViewRow({ //name: "questionRow"+questionID, name: "questionRow", title: "\n"+(i + 1)+". "+question, font:{fontWeight:'bold',fontSize:25}, color:'#000000', touchEnable: false, selectionStyle:'none' }); questionTableSection.add(questionRow);//Add the question row to the table section //BOF: Loop over all of the answers for this question. for (var z=0;z<numOfAnswers;z++) { //Answer Variables from DB. var answerID = "answerID"+z; var answerPosition = "answer position"+z; var answerContent = "content"+z; //Create the row for this answer. var answerRow = Ti.UI.createTableViewRow({ id: answerID, height: 75, color:'#000000', questionID: 1+z, sectionID: i, //The number of the current section. Used in click event to determine what section the click happened in. rowID: z }); //Ti.API.info("Answer Row Created"); //Create the label for displaying the question. var lAnswer = Ti.UI.createLabel({ text: answerContent, textAlign: "left", left:0 }); //Ti.API.info("Answer Label Created"); //Add the answer label to the answer row. answerRow.add(lAnswer); //Ti.API.info("Add Answer label to answer row"); //Add the answer row to this the table section questionTableSection.add(answerRow); //Ti.API.info("Add answer row to question table section"); }//EOF: Loop over all of the answers for this question. sections.push(questionTableSection); } //Add the sections created above to the table view vAnswerTable.setData(sections); for(var i = 0; i < vAnswerTable.data.length; i++){ Ti.API.info("Error here after "+i+" itteratopns outer loop, current section"+ vAnswerTable.data[i]); for(var k = 0; k < vAnswerTable.data[i].rowCount; k++) { Ti.API.info("Error here after "+k+" itteratopns inner loop, "+i+" itterations Outter loop current section row"+ vAnswerTable.data[i].rows[k]); } } {code} h4. Extra information (output of the code) OUTPUT: [INFO][TiAPI ( 840)] Error Hear after 0 itteratopns outer loop, current section[object TableViewSection] [INFO][TiAPI ( 840)] Error Hear after 0 itteratopns inner loop, 0 itterations Outter loop current section row[object TableViewRow] [INFO][TiAPI ( 840)] Error Hear after 1 itteratopns inner loop, 0 itterations Outter loop current section row[object TableViewRow] [INFO][TiAPI ( 840)] Error Hear after 2 itteratopns inner loop, 0 itterations Outter loop current section row[object TableViewRow] h4. Conversation in the Q&A Thread Reference: http://developer.appcelerator.com/question/158112/reference-table-overflow-on-select-all-for-tableview-android#comment-1936278
469TIMOB-15747Android: Images do not scale UP properly on Android (parity issue)h4. Problem Description The 320x180 image in the testcase should be scaled UP to fill the width of the window (left: 0, right: 0) with it's height automatically adjusted to maintain the image aspect ratio. This is exactly what happens on iOS. On android, the ImageViewHeight is contstrained to the original image height, and the image's aspect ratio is maintained, thus leaving a large unfilled area to the left and right of the image. Since the size is set to Ti.UI.SIZE, the expected behaviour would be that the image is scaled up to fit the full width of the ImageView and it's size adjusted upward to fit the contents of the scaled up image. Again, on iOS this expected behaviour is exactly what happens. But on Android, you get the unexpected result of an image with limited width. h4. Steps to reproduce 1. Create a new mobile project 2. Add Android to the supported platforms 3. Add this testcase to app.js {code} var win = Ti.UI.createWindow({ backgroundColor:'white', }); var TestImage = Ti.UI.createImageView({ image: 'http://placehold.it/320x180', left: 0, right: 0, //height: Ti.UI.SIZE, top: 40, backgroundColor: '#ff0000' }); win.add(TestImage); win.open(); {code} 4. If you run this in Android, you will see red next to the image. If you run this in iOS it will be nicely filling the space, no red in the screen. 5
470TIMOB-15871HTTPClient: setting autoRedirect off for 302s on Android calls onerrorIf you set httpclient.autoRedirect to false and then send a GET which returns a 302 (or anything but a 200 I'm guessing), then onerror is called instead of onload. 1. 301, 302, etc. responses shouldn't be deemed an error, but if you're really set on that: 2. Make it consistent. On iOS, onload is called and on Android, onerror is called. Even if you don't, at least... 3. Give us all the information. Provide more than {error:'...'} to onerror. Give us the headers, the status, the responseText, responseData, etc. if they're there in the response. This really reduces confidence in what you're doing and requires so much more testing.3
471TIMOB-15872Android: NPE at android.view.ViewConfiguration.get()h4. Problem Google Play Crash reports contain multiple of the following NullPointerExceptions occuring at the same place: {code} java.lang.NullPointerException at android.view.ViewConfiguration.get(ViewConfiguration.java:228) at android.view.View.<init>(View.java:1888) at android.view.ViewGroup.<init>(ViewGroup.java:281) at android.widget.FrameLayout.<init>(FrameLayout.java:80) at ti.modules.titanium.ui.widget.tableview.TiTableView.<init>(TiTableView.java:266) at ti.modules.titanium.ui.widget.TiUITableView.processProperties(TiUITableView.java:106) at org.appcelerator.kroll.KrollProxy.setModelListener(KrollProxy.java:1129) at org.appcelerator.titanium.proxy.TiViewProxy.realizeViews(TiViewProxy.java:469) at org.appcelerator.titanium.proxy.TiViewProxy.handleGetView(TiViewProxy.java:460) at org.appcelerator.titanium.proxy.TiViewProxy.getOrCreateView(TiViewProxy.java:438) at ti.modules.titanium.ui.TableViewProxy.getTableView(TableViewProxy.java:146) at ti.modules.titanium.ui.TableViewProxy.handleSetData(TableViewProxy.java:689) at ti.modules.titanium.ui.TableViewProxy.handleMessage(TableViewProxy.java:866) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:130) at android.app.ActivityThread.main(ActivityThread.java:3691) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:507) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665) at dalvik.system.NativeStart.main(Native Method) {code} {code} Caused by: java.lang.NullPointerException at android.view.ViewConfiguration.get(ViewConfiguration.java:230) at android.view.View.<init>(View.java:1920) at android.view.ViewGroup.<init>(ViewGroup.java:303) at android.widget.FrameLayout.<init>(FrameLayout.java:80) at ti.modules.titanium.ui.widget.tableview.TiTableView.<init>(TiTableView.java:266) at ti.modules.titanium.ui.widget.TiUITableView.processProperties(TiUITableView.java:106) at org.appcelerator.kroll.KrollProxy.setModelListener(KrollProxy.java:1129) at org.appcelerator.titanium.proxy.TiViewProxy.realizeViews(TiViewProxy.java:469) at org.appcelerator.titanium.proxy.TiViewProxy.handleGetView(TiViewProxy.java:460) at org.appcelerator.titanium.proxy.TiViewProxy.getOrCreateView(TiViewProxy.java:438) at ti.modules.titanium.ui.TableViewProxy.getTableView(TableViewProxy.java:146) at ti.modules.titanium.ui.TableViewProxy.handleSetData(TableViewProxy.java:689) at ti.modules.titanium.ui.TableViewProxy.handleMessage(TableViewProxy.java:866) at android.os.Handler.dispatchMessage(Handler.java:95) at org.appcelerator.kroll.common.TiMessenger.dispatchMessage(TiMessenger.java:364) at org.appcelerator.kroll.common.TiMessenger.dispatchPendingMessages(TiMessenger.java:349) at org.appcelerator.kroll.common.TiMessenger$2.getResult(TiMessenger.java:234) at org.appcelerator.kroll.common.TiMessenger.sendBlockingMessage(TiMessenger.java:261) at org.appcelerator.kroll.common.TiMessenger.sendBlockingRuntimeMessage(TiMessenger.java:186) at org.appcelerator.kroll.KrollProxy.fireSyncEvent(KrollProxy.java:740) at org.appcelerator.titanium.TiBaseActivity.onStop(TiBaseActivity.java:1058) at org.appcelerator.titanium.TiLaunchActivity.onStop(TiLaunchActivity.java:355) at android.app.Instrumentation.callActivityOnStop(Instrumentation.java:1272) at android.app.Activity.performStop(Activity.java:4073) at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3127) ... 11 more {code} {code} Caused by: java.lang.NullPointerException at android.view.ViewConfiguration.get(ViewConfiguration.java:228) at android.view.View.<init>(View.java:1878) at android.view.ViewGroup.<init>(ViewGroup.java:281) at android.widget.FrameLayout.<init>(FrameLayout.java:80) at ti.modules.titanium.ui.widget.tableview.TiTableView.<init>(TiTableView.java:266) at ti.modules.titanium.ui.widget.TiUITableView.processProperties(TiUITableView.java:106) at org.appcelerator.kroll.KrollProxy.setModelListener(KrollProxy.java:1129) at org.appcelerator.titanium.proxy.TiViewProxy.realizeViews(TiViewProxy.java:469) at org.appcelerator.titanium.proxy.TiViewProxy.handleGetView(TiViewProxy.java:460) at org.appcelerator.titanium.proxy.TiViewProxy.getOrCreateView(TiViewProxy.java:438) at ti.modules.titanium.ui.TableViewProxy.getTableView(TableViewProxy.java:146) at ti.modules.titanium.ui.TableViewProxy.handleSetData(TableViewProxy.java:689) at ti.modules.titanium.ui.TableViewProxy.handleMessage(TableViewProxy.java:866) at android.os.Handler.dispatchMessage(Handler.java:95) at org.appcelerator.kroll.common.TiMessenger.dispatchMessage(TiMessenger.java:364) at org.appcelerator.kroll.common.TiMessenger.dispatchPendingMessages(TiMessenger.java:349) at org.appcelerator.kroll.common.TiMessenger$2.getResult(TiMessenger.java:234) at org.appcelerator.kroll.common.TiMessenger.sendBlockingMessage(TiMessenger.java:261) at org.appcelerator.kroll.common.TiMessenger.sendBlockingRuntimeMessage(TiMessenger.java:186) at org.appcelerator.kroll.KrollProxy.fireSyncEvent(KrollProxy.java:740) at org.appcelerator.titanium.TiBaseActivity.onPause(TiBaseActivity.java:917) at org.appcelerator.titanium.TiLaunchActivity.onPause(TiLaunchActivity.java:339) at android.app.Activity.performPause(Activity.java:3851) at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1191) at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2345) ... 12 more {code} h4. Test Case Unfortunately, I haven't been able to find steps to reproduce this issue. The best way to go forward in my opinion is to analyze the code and to try and figure out from there, what is going wrong. h4. My Analysis From the code I see, that in the TiTableViewConstructor a call to "super(proxy.getActivity())" is done. In "proxy.getActivity()" it is noted, that this may return "null". I assume that this would lead to the crash reports above. Could it be that we have a possible race condition or something similar here, where "proxy.getActivity()" is called, before the proxy actually has an activity assigned to it? Is anyone else seeing this problem on a large installation base? It would be great to improve the stability of Titanium further by fixing this issue.3
472TIMOB-15716iOS: tabGroup window flickers on open if barImage or rightNavButton is setWhile opening new window from tab group with navigation bar,a blink is seen in the new window title for a while. In case If we don't set rightnav button or barImage this flicker in the title is not seen. *Steps To Reproduce* : 1.Copy and paste the below code in the newly created project: {code} var tabGroup = Titanium.UI.createTabGroup(); var win1 = Titanium.UI.createWindow({ title:'Tab 1', backgroundColor:'#fff' }); var tab1 = Titanium.UI.createTab({ icon:'KS_nav_views.png', title:'Tab 1', window:win1 }); var btn=Ti.UI.createButton({ title:'Details' }); var newWin=Ti.UI.createWindow({ title:'I am Window 1', backgroundColor:'red', barImage:'KS_nav_ui.png', rightNavButton:btn }); var label1 = Titanium.UI.createLabel({ color:'#999', text:'I am Window 1', font:{fontSize:20,fontFamily:'Helvetica Neue'}, textAlign:'center', width:'auto' }); win1.add(label1); label1.addEventListener('click',function(){ tab1.open(newWin); }); var win2 = Titanium.UI.createWindow({ title:'Tab 2', backgroundColor:'#fff' }); var tab2 = Titanium.UI.createTab({ icon:'KS_nav_ui.png', title:'Tab 2', window:win2 }); tabGroup.addTab(tab1); tabGroup.addTab(tab2); tabGroup.open(); {code} 2. Run the application and *Click on the label of first Tab*. *Expected result* :A new Window should open with no flicker on its title. *Actual result* : 1. *Classic Titanium* : New window opened with flicker on its title only when *both* BarImage and rightNavButton are set. 2. *Alloy* : New window opened with flicker on its title if either BarImage or rightNavButton are set. *Note* : Please find attached alloy project to reproduce the issue. 8
473TIMOB-15718Android: NPE when running Android app in a distribution or debug versionUsing Titanium Studio, build: 3.2.0.201311122225 Titanium SDK 3.2.0, CLI 3.2.0. To reproduce: 1. Create a default mobile project in studio. 2. Run it as a distribution or debug version on device. *Studio log file:* {code} !ENTRY org.eclipse.core.jobs 4 2 2013-11-13 16:39:19.904 !MESSAGE An internal error occurred during: "Android Distribution...". !STACK 0 java.lang.NullPointerException com.appcelerator.titanium.android.core.AndroidSDKEntity.getSDKPath(AndroidSDKEntity.java:179) com.appcelerator.titanium.android.core.launching.AndroidNodeJSCommandsHelper.getPackageProjectArguments(AndroidNodeJSCommandsHelper.java:477) com.appcelerator.titanium.core.internal.cli.NodeTitaniumSDKCommandsHandler.packageProject(NodeTitaniumSDKCommandsHandler.java:416) com.appcelerator.titanium.core.internal.cli.LegacyTitaniumSDKCommandsHandler.packageProject(LegacyTitaniumSDKCommandsHandler.java:606) com.appcelerator.titanium.android.core.launching.AndroidLaunchConfigurationUtil.runAndroidPackagingProcess(AndroidLaunchConfigurationUtil.java:136) com.appcelerator.titanium.android.core.launching.AndroidPackagerLaunchConfigurationDelegate$1.run(AndroidPackagerLaunchConfigurationDelegate.java:108) org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) !ENTRY org.eclipse.core.jobs 4 2 2013-11-14 10:55:38.411 !MESSAGE An internal error occurred during: "Launching Titanium Android Application Installer - timob15018". !STACK 0 java.lang.NullPointerException com.appcelerator.titanium.android.core.AndroidSDKEntity.getSDKPath(AndroidSDKEntity.java:179) com.appcelerator.titanium.android.ui.launching.device.AndroidDebugOnDeviceLaunchConfigurationDelegate.runLogcat(AndroidDebugOnDeviceLaunchConfigurationDelegate.java:277) com.appcelerator.titanium.android.ui.launching.device.AndroidDebugOnDeviceLaunchConfigurationDelegate.launch(AndroidDebugOnDeviceLaunchConfigurationDelegate.java:141) org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:858) org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:707) org.eclipse.debug.internal.ui.DebugUIPlugin.buildAndLaunch(DebugUIPlugin.java:1018) org.eclipse.debug.internal.ui.DebugUIPlugin$8.run(DebugUIPlugin.java:1222) org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) {code} *Diagnostic test output:* {code} Host OS: Mac OS X OS Version: 10.8.5 OS Arch: x86_64 JRE Version: 1.6.0_37 JRE Vendor: Apple Inc. JRE Home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home Titanium Studio Version: 3.2.0.201311122225 Install Directory: file:/Applications/Titanium_Studio/ Workspace Directory: file:/Users/pwang/Documents/Titanium Studio Workspace/ VM Arguments: -Xms128m -Xmx1024m -XX:MaxPermSize=256m -Xverify:none -Declipse.p2.unsignedPolicy=allow -Declipse.log.size.max=10000 -Declipse.log.backup.max=5 -Xdock:icon=../Resources/titanium.icns -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts -Djava.class.path=/Applications/Titanium_Studio/TitaniumStudio.app/Contents/MacOS//../../../plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar Language: en_US ACS App URL: https://api.cloud.appcelerator.com/v1/apps/create.json?key=7fI2AZHmrSvAHNKsSQKzrSXz5NWjo2tt ACS Login URL: https://api.cloud.appcelerator.com/v1/admins/studio_login.json?key=7fI2AZHmrSvAHNKsSQKzrSXz5NWjo2tt XCode Version: 5.0 Latest Titanium SDK: 3.2.0 Titanium SDK Version: 1.7.3 SDK Modules API Version:null SDK Timestamp: 10/17/11 13:44 SDK Build Number: dcf4257 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/1.7.3 Titanium SDK Version: 1.7.5 SDK Modules API Version:null SDK Timestamp: 11/02/11 17:00 SDK Build Number: ab20af7 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/1.7.5 Titanium SDK Version: 1.8.0.1 SDK Modules API Version:2 SDK Timestamp: 12/22/11 13:09 SDK Build Number: fbdc96f SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/1.8.0.1 Titanium SDK Version: 1.8.0.1.RC3 SDK Modules API Version:2 SDK Timestamp: 12/17/11 19:53 SDK Build Number: c903964 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/1.8.0.1.RC3 Titanium SDK Version: 1.8.1 SDK Modules API Version:2 SDK Timestamp: 01/27/12 17:31 SDK Build Number: a24502a SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/1.8.1 Titanium SDK Version: 1.8.2 SDK Modules API Version:2 SDK Timestamp: 02/23/12 17:46 SDK Build Number: 59b3a90 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/1.8.2 Titanium SDK Version: 2.0.0 SDK Modules API Version:2 SDK Timestamp: 08/28/12 11:17 SDK Build Number: 2730634 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/2.0.0 Titanium SDK Version: 2.0.1.GA2 SDK Modules API Version:2 SDK Timestamp: 04/12/12 16:33 SDK Build Number: 999c68a SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/2.0.1.GA2 Titanium SDK Version: 2.0.2.GA SDK Modules API Version:2 SDK Timestamp: 05/30/12 10:21 SDK Build Number: 2ff31a3 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/2.0.2.GA Titanium SDK Version: 2.0.3 SDK Modules API Version:2 SDK Timestamp: 10/12/12 15:44 SDK Build Number: 413a728 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/2.0.3 Titanium SDK Version: 2.1.0 SDK Modules API Version:2 SDK Timestamp: 04/10/13 15:50 SDK Build Number: d0e2b37 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/2.1.0 Titanium SDK Version: 2.1.0.GA SDK Modules API Version:2 SDK Timestamp: 06/28/12 12:16 SDK Build Number: 6e3cab6 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/2.1.0.GA Titanium SDK Version: 2.1.1 SDK Modules API Version:2 SDK Timestamp: 07/23/12 17:34 SDK Build Number: 11e5435 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/2.1.1 Titanium SDK Version: 2.1.1.GA SDK Modules API Version:2 SDK Timestamp: 07/27/12 14:01 SDK Build Number: 0fd84a2 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/2.1.1.GA Titanium SDK Version: 2.1.2 SDK Modules API Version:2 SDK Timestamp: 08/28/12 14:34 SDK Build Number: ed7f777 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/2.1.2 Titanium SDK Version: 2.1.2.GA SDK Modules API Version:2 SDK Timestamp: 08/24/12 14:46 SDK Build Number: ed7f777 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/2.1.2.GA Titanium SDK Version: 2.1.3 SDK Modules API Version:2 SDK Timestamp: 09/27/12 16:31 SDK Build Number: a770187 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/2.1.3 Titanium SDK Version: 2.1.3.GA SDK Modules API Version:2 SDK Timestamp: 10/02/12 16:16 SDK Build Number: 15997d0 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/2.1.3.GA Titanium SDK Version: 2.1.4 SDK Modules API Version:2 SDK Timestamp: 10/26/12 16:49 SDK Build Number: 1208dd9 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/2.1.4 Titanium SDK Version: 2.1.4.GA SDK Modules API Version:2 SDK Timestamp: 11/09/12 12:46 SDK Build Number: 51f2c64 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/2.1.4.GA Titanium SDK Version: 2.2.0 SDK Modules API Version:2 SDK Timestamp: 01/07/13 16:46 SDK Build Number: 77023f0 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/2.2.0 Titanium SDK Version: 2.2.0.1 SDK Modules API Version:2 SDK Timestamp: 09/04/12 09:49 SDK Build Number: 2c0e61d SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/2.2.0.1 Titanium SDK Version: 3.0.0 SDK Modules API Version:2 SDK Timestamp: 12/10/12 17:19 SDK Build Number: b73f165 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/3.0.0 Titanium SDK Version: 3.0.0.1 SDK Modules API Version:2 SDK Timestamp: 10/02/12 17:30 SDK Build Number: 21ddfc3 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/3.0.0.1 Titanium SDK Version: 3.0.0.GA SDK Modules API Version:2 SDK Timestamp: 12/12/12 18:49 SDK Build Number: a5894b3 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/3.0.0.GA Titanium SDK Version: 3.0.1 SDK Modules API Version:2 SDK Timestamp: 01/17/13 16:01 SDK Build Number: 14fb3ea SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/3.0.1 Titanium SDK Version: 3.0.2 SDK Modules API Version:2 SDK Timestamp: 01/31/13 14:52 SDK Build Number: 2da5a10 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/3.0.2 Titanium SDK Version: 3.0.2.GA SDK Modules API Version:2 SDK Timestamp: 02/15/13 19:02 SDK Build Number: 5a77fe7 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/3.0.2.GA Titanium SDK Version: 3.1.0 SDK Modules API Version:2 SDK Timestamp: 10/04/13 13:46 SDK Build Number: fe6c8e7 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/3.1.0 Titanium SDK Version: 3.1.0.GA SDK Modules API Version:2 SDK Timestamp: 04/15/13 18:45 SDK Build Number: 57634ef SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/3.1.0.GA Titanium SDK Version: 3.1.1 SDK Modules API Version:2 SDK Timestamp: 08/02/13 10:45 SDK Build Number: cac341d SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/3.1.1 Titanium SDK Version: 3.1.1.GA SDK Modules API Version:2 SDK Timestamp: 06/15/13 16:09 SDK Build Number: f7592c1 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/3.1.1.GA Titanium SDK Version: 3.1.2 SDK Modules API Version:2 SDK Timestamp: 08/16/13 15:55 SDK Build Number: 8eee2b4 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/3.1.2 Titanium SDK Version: 3.1.2.GA SDK Modules API Version:2 SDK Timestamp: 08/14/13 12:45 SDK Build Number: 5ceaff8 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/3.1.2.GA Titanium SDK Version: 3.1.3 SDK Modules API Version:2 SDK Timestamp: 09/16/13 15:34 SDK Build Number: c35b513 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/3.1.3 Titanium SDK Version: 3.1.3.GA SDK Modules API Version:2 SDK Timestamp: 09/18/13 12:00 SDK Build Number: 222f4d1 SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/3.1.3.GA Titanium SDK Version: 3.2.0 SDK Modules API Version:2 SDK Timestamp: 11/13/13 15:18 SDK Build Number: 981c4fa SDK Location: /Library/Application Support/Titanium/mobilesdk/osx/3.2.0 Browsers - Default system web browser: Unknown (N/A) - Firefox: 16.0.2 (/Applications/Firefox.app/Contents/MacOS/firefox-bin) - Safari: 6.0.5 (/usr/bin/open) - Chrome: 31.0.1650.48 (/Applications/Google Chrome.app/Contents/MacOS/Google Chrome) Android SDK Version: 4.4 Android NDK Version: r7 Titanium CLI Enabled: true Node.ACS Host URL: null Node.JS Version: v0.10.13 NPM Path: /usr/local/bin/npm NPM Version: 1.3.2 /Applications/Titanium_Studio/TitaniumStudio.app/Contents/MacOS └── (empty) npm ls titanium: /Applications/Titanium_Studio/TitaniumStudio.app/Contents/MacOS └── (empty) Packages: /Applications/Titanium_Studio/TitaniumStudio.app/Contents/MacOS └── (empty) NPM_CONFIG_PREFIX env value: null Npm config prefix value : /usr/local ENV: ANDROID_SDK=/Users/pwang/android-sdks ANDROID_NDK=/Users/pwang/android-ndk com.apple.java.jvmMode=client SHLVL=1 __CF_USER_TEXT_ENCODING=0x1F7:0:0 PWD=/Applications/Titanium_Studio/TitaniumStudio.app/Contents/MacOS Apple_Ubiquity_Message=/tmp/launch-wXS1cu/Apple_Ubiquity_Message LOGNAME=pwang SSH_AUTH_SOCK=/tmp/launch-i8e3VL/Listeners SHELL=/bin/bash TMPDIR=/var/folders/vt/m7g5015s2kq16fb8sm99nsqh0000gq/T/ EDITOR=textwrangle NDK_CCACHE=/usr/local/bin/ccache PATH=/Users/pwang/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Users/pwang/android-sdks/platform-tools:/Users/pwang/android-sdks/tools COMMAND_MODE=unix2003 APTANA_VERSION=3.2.0.1364103230 USER=pwang com.apple.java.jvmTask=JNI NUM_CPUS=4 HOME=/Users/pwang Apple_PubSub_Socket_Render=/tmp/launch-wSzk4B/Render LANG=en_US.UTF-8 {code} *Output of "ti info -o json -t android":* {code} pwang$ ti info -o json -t android { "android": { "linux64bit": null, "sdk": { "path": "/Users/pwang/android-sdks", "executables": { "adb": "/Users/pwang/android-sdks/platform-tools/adb", "android": "/Users/pwang/android-sdks/tools/android", "emulator": "/Users/pwang/android-sdks/tools/emulator", "mksdcard": "/Users/pwang/android-sdks/tools/mksdcard", "aapt": "/Users/pwang/android-sdks/build-tools/19.0.0/aapt", "zipalign": "/Users/pwang/android-sdks/tools/zipalign", "aidl": "/Users/pwang/android-sdks/build-tools/19.0.0/aidl", "dx": "/Users/pwang/android-sdks/build-tools/19.0.0/dx" }, "dx": "/Users/pwang/android-sdks/build-tools/19.0.0/lib/dx.jar", "proguard": "/Users/pwang/android-sdks/tools/proguard/lib/proguard.jar", "tools": { "path": "/Users/pwang/android-sdks/tools", "supported": true, "version": "22.3" }, "platformTools": { "path": "/Users/pwang/android-sdks/platform-tools", "supported": true, "version": "19" }, "buildTools": { "path": "/Users/pwang/android-sdks/build-tools/19.0.0", "supported": true, "version": "19" } }, "ndk": { "path": "/Users/pwang/android-ndk", "executables": { "ndkbuild": "/Users/pwang/android-ndk/ndk-build" }, "version": "r7" }, "home": "/Users/pwang/.android", "detectVersion": "2.0", "vendorDependencies": { "android sdk": ">=10 <=19", "android build tools": ">=17 <19.x", "android platform tools": ">=17 <=19.x", "android tools": "22.x", "android ndk": ">=r8e <=r9", "node": ">0.8.0 <=0.10.x", "java": "<=1.7.x" }, "targets": { "1": { "id": "android-7", "name": "Android 2.1", "type": "platform", "api-level": "7", "revision": "3", "skins": [ "HVGA", "QVGA", "WQVGA400", "WQVGA432", "WVGA800", "WVGA854" ], "abis": [ "armeabi" ], "googleApis": false, "path": "/Users/pwang/android-sdks/platforms/android-7", "version": "2.1", "androidJar": "/Users/pwang/android-sdks/platforms/android-7/android.jar", "supported": false, "aidl": "/Users/pwang/android-sdks/platforms/android-7/framework.aidl" }, "2": { "id": "Google Inc.:Google APIs:7", "name": "Google APIs", "type": "add-on", "vendor": "Google Inc.", "revision": "1", "description": "Android + Google APIs", "based-on": { "android-version": "2.1", "api-level": "7" }, "libraries": { "com.google.android.maps": { "jar": "maps.jar", "description": "API for Google Maps" } }, "skins": [ "WVGA854", "WQVGA400", "HVGA", "WQVGA432", "WVGA800", "QVGA" ], "abis": [ "armeabi" ], "googleApis": false, "path": null, "version": "2.1", "androidJar": "/Users/pwang/android-sdks/platforms/android-7/android.jar", "supported": false, "aidl": "/Users/pwang/android-sdks/platforms/android-7/framework.aidl" }, "3": { "id": "android-8", "name": "Android 2.2", "type": "platform", "api-level": "8", "revision": "3", "skins": [ "HVGA", "QVGA", "WQVGA400", "WQVGA432", "WVGA800", "WVGA854" ], "abis": [ "armeabi" ], "googleApis": false, "path": "/Users/pwang/android-sdks/platforms/android-8", "version": "2.2", "androidJar": "/Users/pwang/android-sdks/platforms/android-8/android.jar", "supported": false, "aidl": "/Users/pwang/android-sdks/platforms/android-8/framework.aidl" }, "4": { "id": "Barnes & Noble, Inc.:NOOKcolor:8", "name": "NOOKcolor", "type": "add-on", "vendor": "Barnes & Noble, Inc.", "revision": "1", "description": "nook color", "based-on": { "android-version": "2.2", "api-level": "8" }, "skins": [ "WVGA854", "WQVGA400", "HVGA", "NOOKcolor", "WQVGA432", "WVGA800", "QVGA" ], "abis": [ "armeabi" ], "adds-usb-support-for-devices-(vendor": "0x2080)", "googleApis": false, "path": null, "version": "2.2", "androidJar": "/Users/pwang/android-sdks/platforms/android-8/android.jar", "supported": false, "aidl": "/Users/pwang/android-sdks/platforms/android-8/framework.aidl" }, "5": { "id": "Barnes & Noble, Inc.:NOOKcolor:8", "name": "NOOKcolor", "type": "add-on", "vendor": "Barnes & Noble, Inc.", "revision": "1", "description": "nook color", "based-on": { "android-version": "2.2", "api-level": "8" }, "skins": [ "WVGA854", "WQVGA400", "HVGA", "NOOKcolor", "WQVGA432", "WVGA800", "QVGA" ], "abis": [ "armeabi" ], "adds-usb-support-for-devices-(vendor": "0x2080)", "googleApis": false, "path": null, "version": "2.2", "androidJar": "/Users/pwang/android-sdks/platforms/android-8/android.jar", "supported": false, "aidl": "/Users/pwang/android-sdks/platforms/android-8/framework.aidl" }, "6": { "id": "Barnes & Noble, Inc.:NOOKcolor:8", "name": "NOOKcolor", "type": "add-on", "vendor": "Barnes & Noble, Inc.", "revision": "1", "description": "nook color", "based-on": { "android-version": "2.2", "api-level": "8" }, "skins": [ "WVGA854", "WQVGA400", "HVGA", "NOOKcolor", "WQVGA432", "WVGA800", "QVGA" ], "abis": [ "armeabi" ], "adds-usb-support-for-devices-(vendor": "0x2080)", "googleApis": false, "path": null, "version": "2.2", "androidJar": "/Users/pwang/android-sdks/platforms/android-8/android.jar", "supported": false, "aidl": "/Users/pwang/android-sdks/platforms/android-8/framework.aidl" }, "7": { "id": "Google Inc.:Google APIs:8", "name": "Google APIs", "type": "add-on", "vendor": "Google Inc.", "revision": "2", "description": "Android + Google APIs", "based-on": { "android-version": "2.2", "api-level": "8" }, "libraries": { "com.google.android.maps": { "jar": "maps.jar", "description": "API for Google Maps" } }, "skins": [ "WVGA854", "WQVGA400", "HVGA", "WQVGA432", "WVGA800", "QVGA" ], "abis": [ "armeabi" ], "googleApis": false, "path": null, "version": "2.2", "androidJar": "/Users/pwang/android-sdks/platforms/android-8/android.jar", "supported": false, "aidl": "/Users/pwang/android-sdks/platforms/android-8/framework.aidl" }, "8": { "id": "KYOCERA Corporation:DTS Add-On:8", "name": "DTS Add-On", "type": "add-on", "vendor": "KYOCERA Corporation", "revision": "1", "description": "DTS Add-On", "based-on": { "android-version": "2.2", "api-level": "8" }, "libraries": { "com.kyocera.dualscreen": { "jar": "dualscreen.jar", "description": "Dual Screen optional platform library" } }, "skins": [ "DTS400", "WVGA854", "WQVGA400", "HVGA", "DTS800", "WQVGA432", "WVGA800", "QVGA" ], "abis": [ "armeabi" ], "googleApis": false, "path": null, "version": "2.2", "androidJar": "/Users/pwang/android-sdks/platforms/android-8/android.jar", "supported": false, "aidl": "/Users/pwang/android-sdks/platforms/android-8/framework...3
474TIMOB-15800Ubuntu: Found Missing Modules error on launching any default Mobile apph3. Steps Followed: 1. Create a default mobile app. 2. Launch the app on android device/emulator. Actual Result: Build fails and 'Modules could not be found' error displayed in Console log file. Please refer the attached log and console log file for further reference. h3. Workaround We manually added the required modules folders from mobile SDK location into our Studio WorkSpace in the respective project's module folder. 5
475TIMOB-15805Ubuntu 12.04 : Debugger Not working for Android DeviceDebugger not working for Android Device. Steps to reproduce: 1. Create new classic/alloy Project. 2. Add breakpoint at proper place. 3. Debug the app on device. Expected Result: Must hit the breakpoint and app must be launched successfully. Actual Result: Build Failed with logs and screenshot attached.5
476TIMOB-15812Android: Media: Camera is not opening with overlay property set in Ti.Media.showCamera()Android: Media: Camera is not opening with overlay property set in Ti.Media.showCamera(). It also occur on SDK: 3.1.3.GA Steps to reproduce 1. Run the below app. {code} var _window = Ti.UI.createWindow({ backgroundColor:'white' }); var openCameraButton = Ti.UI.createButton({ title : 'Open Camera' }); openCameraButton.addEventListener('click', function(e) { var cameraOverlay = Ti.UI.createView(); var takePhotoButton = Ti.UI.createButton({ backgroundColor : '#fff', backgroundSelectedColor : '#efefef', borderColor : '#000', borderRadius : 17, borderWidth : 1, bottom : 65, color : '#000', height : 34, opacity : 0.4, title : 'Take Photo', width : '100dp' }); var closeCameraButton = Ti.UI.createButton({ backgroundColor : '#fff', backgroundSelectedColor : '#efefef', borderColor : '#000', borderRadius : 17, borderWidth : 1, bottom : 65, color : '#000', height : 34, opacity : 0.4, right : 10, title : 'Close Camera', top : 10, width : '150dp' }); takePhotoButton.addEventListener('click', function(e) { Ti.Media.takePicture(); }); closeCameraButton.addEventListener('click', function(e) { alert('closing camera'); Ti.Media.hideCamera(); }); cameraOverlay.add(takePhotoButton); cameraOverlay.add(closeCameraButton); Ti.Media.showCamera({ success : function(e) { alert('success callback'); }, cancel : function() { Ti.API.info('cancel callback'); }, error : function(e) { Ti.API.info('error callback'); }, allowEditing : false, animated : false, autohide : false, mediaTypes : [Ti.Media.MEDIA_TYPE_PHOTO], overlay : cameraOverlay, saveToPhotoGallery : false, showControls : false }); }); _window.add(openCameraButton); _window.open(); {code} if overlay property is commented then the app works fine. Expected: Camera is opened. Actual: Camera does not open.3
477TIMOB-15967iOS: keyboardToolbar fails to disappearh4. Expectation Expect keyboardToolbar to disappear AND NEVER RETURN when the parent containing its window is closed. h4. Reality keyboardToolbar slides off the screen to the right instead of down, and will slide in right to left under new keyboard h4. Demonstration App in the Wild: http://screencast.com/t/U78lP3Lhpv Test Case Video: http://screencast.com/t/ig9D9PpePY2a h4. Testcase This test case shows the weird animation (tool bar left to right, instead of sliding up with keyboard), but the bar does not stick as it does in the video. The test case matches the view layers of the affected app. {code} var tabGroup = Ti.UI.createTabGroup(); var textWindow = Titanium.UI.createWindow({ backgroundColor:'#fff' }); var textfield = Ti.UI.createTextField({keyboardType: Ti.UI.KEYBOARD_NUMBER_PAD, returnKeyType: Ti.UI.RETURNKEY_DONE, bubbleParent: false, backgroundColor: '#262626', border: 1, width: 100}); var toolbarDone = Ti.UI.createButton({systemButton: Titanium.UI.iPhone.SystemButton.DONE}); var flexSpace = Titanium.UI.createButton({systemButton : Titanium.UI.iPhone.SystemButton.FLEXIBLE_SPACE}); toolbarDone.addEventListener('click', function(){ textfield.blur(); }); textfield.keyboardToolbarColor = '#80c342'; textfield.keyboardToolbar = [flexSpace, toolbarDone]; var scrlView = Ti.UI.createScrollView({layout:'vertical', scrollType: 'vertical', width: Ti.UI.FILL}); scrlView.add(textfield); textWindow.add(scrlView); textWindow.addEventListener('focus', function(){ textfield.value = ''; }) var secondaryWindow = Ti.UI.createWindow({backgroundColor: 'red'}); var mainWindow = Ti.UI.createWindow({backgroundColor: '#fff'}); var bigButton = Ti.UI.createButton({height: 150, width: 150, title: 'Button', backgroundColor: 'red'}); mainWindow.add(bigButton); var tab1 = Ti.UI.createTab({window: mainWindow, title: 'Main'}); var tab2 = Ti.UI.createTab({window: secondaryWindow, title: 'Second'}); bigButton.addEventListener('click', function(){ tab1.open(textWindow); }); tabGroup.addTab(tab1); tabGroup.addTab(tab2); tabGroup.open(); {code}8
The file is too large to be shown. View Raw