<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jonathan Campos&#039; Blog &#187; Air for Android</title>
	<atom:link href="http://www.unitedmindset.com/jonbcampos/category/development/air-for-android/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.unitedmindset.com/jonbcampos</link>
	<description>Blog on technology and software development typically around Adobe Flash, Flex, and AIR.</description>
	<lastBuildDate>Mon, 07 Nov 2011 22:32:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>ApplicationFinder.ane</title>
		<link>http://www.unitedmindset.com/jonbcampos/2011/11/07/applicationfinder-ane/</link>
		<comments>http://www.unitedmindset.com/jonbcampos/2011/11/07/applicationfinder-ane/#comments</comments>
		<pubDate>Mon, 07 Nov 2011 22:32:18 +0000</pubDate>
		<dc:creator>jonbcampos</dc:creator>
				<category><![CDATA[Air for Android]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[ane]]></category>
		<category><![CDATA[applicationfinder]]></category>

		<guid isPermaLink="false">http://www.unitedmindset.com/jonbcampos/?p=2571</guid>
		<description><![CDATA[This is the first ANE that I made for my own project&#8230; hopefully my other ones can be released soon. Anyways, let&#8217;s get right to it. The ApplicationFinder ANE is something I created to help you find other Applications on your Android system. You can get information 2 ways. isAppInstalled(package:String):PackageInfo This method looks to see [...]]]></description>
			<content:encoded><![CDATA[<p>This is the first ANE that I made for my own project&#8230; hopefully my other ones can be released soon.</p>
<p>Anyways, let&#8217;s get right to it.</p>
<p>The ApplicationFinder ANE is something I created to help you find other Applications on your Android system. You can get information 2 ways.</p>
<p><em>isAppInstalled(package:String):PackageInfo</em></p>
<p>This method looks to see if a particular application (by app id) is installed. If the application is installed ApplicationFinder returns the name, package id, version number, and version name of the application. If the app isn&#8217;t installed you get <em>null</em>.</p>
<p><em>getInstalledApps():Array</em></p>
<p>This method just returns to you the entire list of installed apps. Go nuts, search and find what you need. Like the <em>isAppInstalled</em> you get the name, package id, version number, and version name of the application.</p>
<p>Later I&#8217;ll add things like also returning the app icon, possibly some app management methods (startup, shutdown, etc).</p>
<p>I&#8217;ve included my test app here so you can run it, and then the ANE also. Enjoy!</p>
<p><a href="http://unitedmindset.com/jonbcampos/wp-content/flex_content/applicationfinder/ApplicationFinderApp.fxp">Test Application (FXP)</a><br />
<a href="http://unitedmindset.com/jonbcampos/wp-content/flex_content/applicationfinder/ApplicationFinder.ane">ApplicationFinder.ane</a></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.unitedmindset.com%2Fjonbcampos%2F2011%2F11%2F07%2Fapplicationfinder-ane%2F&amp;title=ApplicationFinder.ane" id="wpa2a_2"><img src="http://www.unitedmindset.com/jonbcampos/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.unitedmindset.com/jonbcampos/2011/11/07/applicationfinder-ane/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Queue Manager for Sony Tablets</title>
		<link>http://www.unitedmindset.com/jonbcampos/2011/10/27/queue-manager-for-sony-tablets/</link>
		<comments>http://www.unitedmindset.com/jonbcampos/2011/10/27/queue-manager-for-sony-tablets/#comments</comments>
		<pubDate>Fri, 28 Oct 2011 03:33:41 +0000</pubDate>
		<dc:creator>jonbcampos</dc:creator>
				<category><![CDATA[Air for Android]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Netflix Flex API]]></category>
		<category><![CDATA[queue manager]]></category>

		<guid isPermaLink="false">http://www.unitedmindset.com/jonbcampos/?p=2564</guid>
		<description><![CDATA[Today I am releasing a custom Queue Manager for the Sony Tablets and the Air App Challenge. Thanks to Adobe AIR and Flex this process was extremely simple. Feel free to poke through if you have a Netflix account. This new version uses the newest versions of Flex and AIR. Feel free to leave comments [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.unitedmindset.com/jonbcampos/wp-content/uploads/2011/10/icon128.png" alt="" title="Queue Manager Icon" width="128" height="128" class="alignleft size-full wp-image-2565" /> Today I am releasing a custom Queue Manager for the Sony Tablets and the Air App Challenge.</p>
<p>Thanks to Adobe AIR and Flex this process was extremely simple. Feel free to poke through if you have a Netflix account. This new version uses the newest versions of Flex and AIR.</p>
<p>Feel free to leave comments and let me know your thoughts.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.unitedmindset.com%2Fjonbcampos%2F2011%2F10%2F27%2Fqueue-manager-for-sony-tablets%2F&amp;title=Queue%20Manager%20for%20Sony%20Tablets" id="wpa2a_4"><img src="http://www.unitedmindset.com/jonbcampos/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.unitedmindset.com/jonbcampos/2011/10/27/queue-manager-for-sony-tablets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Making It Mobile &#8211; 360Flex Preso</title>
		<link>http://www.unitedmindset.com/jonbcampos/2011/04/18/making-it-mobile-360flex-preso/</link>
		<comments>http://www.unitedmindset.com/jonbcampos/2011/04/18/making-it-mobile-360flex-preso/#comments</comments>
		<pubDate>Mon, 18 Apr 2011 16:34:55 +0000</pubDate>
		<dc:creator>jonbcampos</dc:creator>
				<category><![CDATA[Air for Android]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.unitedmindset.com/jonbcampos/?p=2511</guid>
		<description><![CDATA[I was fortunate enough to present last week at 360Flex with good friend Antonio Holguin about how to make a mobile application. Our format of the back and forth designer/developer workflow was an experiment but one that most people seemed to enjoy. Below are our slides, feel free to ask questions about the presentation. Making [...]]]></description>
			<content:encoded><![CDATA[<p>I was fortunate enough to present last week at 360Flex with good friend <a href="http://swfhead.com/blog/?p=1162">Antonio Holguin</a> about how to make a mobile application. Our format of the back and forth designer/developer workflow was an experiment but one that most people seemed to enjoy.</p>
<p>Below are our slides, feel free to ask questions about the presentation.</p>
<div style="width:425px" id="__ss_7652445"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/AntonioHolguin/making-it-mobile360flexjonathancamposantonioholguin" title="Making it mobile_360_flex_jonathancampos_antonioholguin">Making it mobile_360_flex_jonathancampos_antonioholguin</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/7652445" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/AntonioHolguin">AntonioHolguin</a> </div>
</p></div>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.unitedmindset.com%2Fjonbcampos%2F2011%2F04%2F18%2Fmaking-it-mobile-360flex-preso%2F&amp;title=Making%20It%20Mobile%20%26%238211%3B%20360Flex%20Preso" id="wpa2a_6"><img src="http://www.unitedmindset.com/jonbcampos/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.unitedmindset.com/jonbcampos/2011/04/18/making-it-mobile-360flex-preso/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>360Flex: Red Carpet Rumble</title>
		<link>http://www.unitedmindset.com/jonbcampos/2011/04/11/360flex-red-carpet-rumble/</link>
		<comments>http://www.unitedmindset.com/jonbcampos/2011/04/11/360flex-red-carpet-rumble/#comments</comments>
		<pubDate>Mon, 11 Apr 2011 07:00:05 +0000</pubDate>
		<dc:creator>jonbcampos</dc:creator>
				<category><![CDATA[Air for Android]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Flash Builder 4]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Netflix Flex API]]></category>

		<guid isPermaLink="false">http://www.unitedmindset.com/jonbcampos/?p=2503</guid>
		<description><![CDATA[This is the application created by Antonio Holguin and myself for our 360Flex presentation. This app is a &#8220;semi&#8221; playable version of the game we are creating tentatively called &#8220;Red Carpet Rumble&#8221;. If you have an Android device you can use this link to get the game. Disclaimer: By no means do we feel that [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://unitedmindset.com/badassgame/MobileGame.apk"><img src="http://www.unitedmindset.com/jonbcampos/wp-content/uploads/2011/04/001_splash-300x180.jpg" alt="" title="001_splash" width="300" height="180" class="alignnone size-medium wp-image-2505" /></a><br />
This is the application created by <a href="http://twitter.com/antonioholguin">Antonio Holguin</a> and myself for our 360Flex presentation.</p>
<p>This app is a &#8220;semi&#8221; playable version of the game we are creating tentatively called &#8220;Red Carpet Rumble&#8221;.</p>
<p>If you have an Android device you can use <a href="http://unitedmindset.com/badassgame/MobileGame.apk">this link to get the game</a>.</p>
<p>Disclaimer: By no means do we feel that this application is completely done. Yes, we have the full intention of continuing to work on this game and get it out. If you have comments feel free to let us know.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.unitedmindset.com%2Fjonbcampos%2F2011%2F04%2F11%2F360flex-red-carpet-rumble%2F&amp;title=360Flex%3A%20Red%20Carpet%20Rumble" id="wpa2a_8"><img src="http://www.unitedmindset.com/jonbcampos/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.unitedmindset.com/jonbcampos/2011/04/11/360flex-red-carpet-rumble/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Learn from my mobile mistakes</title>
		<link>http://www.unitedmindset.com/jonbcampos/2010/12/28/learn-from-my-mobile-mistakes/</link>
		<comments>http://www.unitedmindset.com/jonbcampos/2010/12/28/learn-from-my-mobile-mistakes/#comments</comments>
		<pubDate>Tue, 28 Dec 2010 15:02:59 +0000</pubDate>
		<dc:creator>jonbcampos</dc:creator>
				<category><![CDATA[Air for Android]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Netflix Flex API]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[queue manager]]></category>

		<guid isPermaLink="false">http://unitedmindset.com/jonbcampos/?p=2393</guid>
		<description><![CDATA[This blog post could also be &#8220;how to lower your stars in the marketplace&#8221;. I say this because now looking back at having an application in the marketplace for a few months I see many places that I have screwed up and things that I could do much better next time. At the point of [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://unitedmindset.com/jonbcampos/wp-content/uploads/2010/10/icon128.png" alt="" title="icon128" width="128" height="128" class="alignleft size-full wp-image-2237" />This blog post could also be &#8220;how to lower your stars in the marketplace&#8221;. I say this because now looking back at having an application in the marketplace for a few months I see many places that I have screwed up and things that I could do much better next time.</p>
<p>At the point of writing this I&#8217;m actually really happy with where Queue Manager has gone.<br />
- Queue Manager has almost 50k users<br />
- Queue Manager is listed highly in the Android Market<br />
- Queue Manager is listed as the top Air for Android app on <a href="http://www.appbrain.com/app/queue-manager/air.com.unitedmindset.QueueManager">AppBrain</a><br />
- Queue Manager is listed highly in <a href="http://appaware.org/app.php?packagename=air.com.unitedmindset.QueueManager">AppAware</a><br />
- Queue Manager is awaiting acceptance into the BlackBerry App World<br />
- <a href="http://www.androidcentral.com/android-central-editors-app-picks-october-28-2010?utm_source=feedburner&#038;utm_medium=feed&#038;utm_campaign=Feed:+androidcentral+(Android+Central)">Android Central</a> listed Queue Manager as a top pick in October and it was stated &#8220;it [Queue Manager] has proven to me the viability of Adobe Air as a development platform for Android&#8221;</p>
<p><img src="http://qrcode.kaywa.com/img.php?s=5&#038;d=market%3A%2F%2Fsearch%3Fq%3Dpname%3Aair.com.unitedmindset.QueueManager" alt="qrcode"/><br />
<span id="more-2393"></span></p>
<p>All this success has not been due to my efforts though, I feel that my efforts have only hindered the application&#8217;s success rather than bolster it. I&#8217;m going to go through the things that I&#8217;ve done &#8211; or have been done to me &#8211; that have hurt Queue Manager and what I have done to fix my mistakes.</p>
<p>Some of these mistakes are embarrassing to admit, especially from a developer that has made multiple applications / products before, yet the old issues still creep up if you let them.</p>
<p><strong>Releasing Too Early</strong><br />
This issue was due to my ego more than anything else. I wanted to have the first Air for Android application on the market and guess what? I did it. The second that Air was pushed to the market I followed right up with Queue Manager. What issues did this cause? You can assume and assume correctly that the initial release was buggy, feature depleted, and could have used some good ole&#8217; optimization. In subsequent releases I fixed up these bugs but due to my buggy release I ended up on triage duty for the first week.</p>
<p><em>To Do Item(s):</em></p>
<ul>
<li>- Release when the app is ready, not based on some other date</li>
</ul>
<p><strong>Frequent Releases</strong><br />
Part of this issue was due to how far I needed to go to compete with other Netflix applications on the Android market, part of this issue was that I was trying to have a specific feature set out by Adobe Max, part of this issue was that I wasn&#8217;t testing thoroughly enough and had to constantly release bug fixes, and part of this issue was that every time I finished a feature I wanted it out to the market as fast as possible. All of these &#8220;parts&#8221; lead to one thing: upset users. While some users appreciated the frequent releases most told me that they would have preferred if they weren&#8217;t quite as frequent as I was making them. As time has gone on my releases have been less frequent as the amount of changes needed to the application have decreased. Along with that I have been testing more on my application prior to release &#8211; not just testing the feature that I worked on. Finally my app has grown to a very stable state so the bugs have been worked out over time.</p>
<p>I currently sit on releases a day or two just to feel good about them.</p>
<p><em>To Do Item(s):</em></p>
<ul>
<li>- Plan releases</li>
<li>- Test throughly so that you&#8217;re not having to follow up a feature release with an immediate bug fix</li>
<li>- Even if you have good code to release, spread it out and possibly merge feature releases</li>
</ul>
<p><strong>Work closely with your API provider</strong><br />
This has actually been one of my biggest problems and a problem I am completely helpless to &#8211; hopefully the app that you make isn&#8217;t dependent on a public API.</p>
<p>The issue is that Netflix provides me X amount of calls against their servers in one day. If Queue Manger gets featured somewhere or a bunch of people decide to use Queue Manager for an extended period of time and Queue Manager hits it&#8217;s Netflix limit then the application starts giving back an error from Netflix. Each time this has happened I have contacted Netflix and they have given me a bump in my limit, yet another few weeks pass by and I start hitting my limit again. I feel for my users, they just want an application that works, yet this is an area that I am completely hopeless.</p>
<p>When this happens I usually end up with a string of 1 star comments in my market reviews.</p>
<blockquote><p>This is particularly bad when I put out a new release because everyone goes and plays with the app to see what has changed. A quarter of my user base could easily put me over my API limit.</p></blockquote>
<p><em>To Do Item(s):</em></p>
<ul>
<li>- Give good feedback to the user</li>
<li>- Limit calls to the server</li>
</ul>
<p><strong>Condense your trips</strong><br />
Mobile is great because it is on the go however you can quickly come across places that on the go doesn&#8217;t equal on the web. With this spotty service possibility even the smallest service call may take quite a long time to fully get back. I learned this the hard way with my initial release.</p>
<p>On my testing computer I received each service call I made almost instantly and the computer was quickly able to parse and visualize the data. When my users started working with my application the initial comments I got back were that they didn&#8217;t know if anything was going on. Even after adding visual loading indicators I had users complaining that the application was &#8220;sluggish&#8221; and the data was taking too long to get back.</p>
<p>This lead to another place for optimization and I spent some long nights working on reorganizing the service calls that I made to the Netflix service. This reduced the data that I was receiving from Netflix, sped up the application and especially the loading time. I still have users that say it takes to long, but eventually there is only so much that I can do about the network, their location, and their device.</p>
<p><em>To Do Item(s):</em></p>
<ul>
<li>- Give good feedback to the user</li>
<li>- Reduce the amount of data you rely on</li>
</ul>
<p><strong>Double check your app id prior to release!</strong><br />
I thought that I would be the only person to hit this but alas my good friend <a href="http://twitter.com/flashcanon" target="_blank">FlashCanon</a> also fell prey to this. Prior to releasing your app to the Android Market double check your app id in the application descriptor file and make sure you are perfectly happy with it <strong>BECAUSE YOU CAN&#8217;T CHANGE IT LATER!</strong> The name of the app, the programming, the colors, and basically everything else about your app can change between releases but your app id will stay the same and can&#8217;t be changed.</p>
<blockquote><p>I know there are rumors that you can contact Google and ask them to help change your app id but I would recommend just getting this right from the beginning.</p></blockquote>
<p>If you need to change the app id you will just have to put up a new application with the right id and get your users to reinstall the new app. Obviously you will lose the stats and whatever else from your initial release but you will get the id that you were wanting.</p>
<p><em>To Do Item(s):</em></p>
<ul>
<li>- Double check your application id!</li>
</ul>
<p><strong>Double check your application descriptor prior to every release</strong><br />
With every release you can remove your application from the Android Market based on the options that are in your application descriptor. There was about a two week period that I removed Queue Manager from the Marketplace because I updated my Flash Builder version and the application descriptor changed just slightly. This slight change altered the filtering options on my application and even my users couldn&#8217;t find the application in a search.</p>
<blockquote><p>Always check your application descriptor and the application manifest. These details lead to filtering in the Android Market.</p></blockquote>
<p>Now prior to every release I read through my application manifest,  double check that the install location is set to auto, and that my user permissions are set properly.</p>
<p><em>To Do Item(s):</em></p>
<ul>
<li>- Double check your permissions</li>
<li>- Make sure that the install location is set to auto for app2sd functionality</li>
<li>- Ensure that your icons stay consistent between releases (and exist)</li>
</ul>
<p><strong>Have error tracking code</strong><br />
As I hinted at earlier there are many things that may go wrong with an application. The device may malfunction, the internet signal may fade, or &#8211; the most obvious &#8211; your code may break. Your users will probably be quick to tell you that your application sucks or has failed but be unclear as to what happened. As I am limited and don&#8217;t know what has happened on the server side (delivered by Netflix) I have an entire section of my application that I am unaware of any issues.</p>
<p>That being said I&#8217;ve had to construct an error tracking system within my application to give the users details as to what happened and ultimately deliver to me the error. All this extra work is very helpful to narrowing down the problem. As an added bonus, if you make error reporting very easy on your users they are more apt to sending you the generated error report.</p>
<p><em>To Do Item(s):</em></p>
<ul>
<li>- Give good feedback to the user</li>
<li>- Make it easy for the user to submit bugs/issues</li>
</ul>
<p><strong>Have statistics gathering code</strong><br />
I love statistics gathering code because once I know what my users are doing on a statistical level I know where to focus my efforts for development. I&#8217;ve recently learned that my users do two things: search for titles and browse through new instant titles. That&#8217;s it. Knowing this I can focus my development practices around making sure that my application can do what my users want.</p>
<p>Where did I fail on this? Well I didn&#8217;t put in my tracking information till recently. If you are working on an application I recommend <a href="http://code.google.com/p/gaforflash/">GA for Flash</a>.</p>
<p><em>To Do Item(s):</em></p>
<ul>
<li>- Add in code to gather use statistics</li>
<li>- Don&#8217;t gather more information than is necessary, this just will cause extra unneeded application chatter</li>
</ul>
<p><strong>Optimize Visuals</strong><br />
My good friend <a href="http://feedgrids.com">Dimi</a> would be proud of me and all the work I did on the icons. Just for the record he designed most of the app and how it looked, I just pieced it all together. The issue was that some of the icons came out as &#8220;crunchy&#8221; (thanks <a href="http://blog.swfhead.com/">Antonio</a>).</p>
<p>I knew to not scale the images yet the icons still came out as &#8220;crunchy&#8221;.</p>
<p>One night I decided to sit down and figure out the problem, it didn&#8217;t take long. The icons that I was using was built at an odd size. Due to the odd size the device has having issues displaying the icon as the device also does some scaling of the icon. However when I rebuilt the icons with their size based on a power of 2 (specifically 36&#215;36) the icon&#8217;s &#8220;crunchy&#8221; look went away and was smooth again.</p>
<p><em>To Do Item(s):</em></p>
<ul>
<li>- Look over all images, make sure they are a multiple of 2 (16&#215;16, 36&#215;36, etc)</li>
</ul>
<p><strong>Test on multiple screens</strong><br />
Testing on multiple devices is the bane of my existence. No matter how many devices I get my hands on there is always one more device that makes my app look just a little bit different and horrible at the same time. At a certain point you are going to need to decide for yourself how many devices is &#8220;good enough&#8221; and move forward.</p>
<p>I&#8217;d recommend testing on at least 3 different phones and 1 tablet. These different sizes and resolutions should help get most of the kinks out. When you see your app on these different resolutions and sizes you&#8217;ll probably realize the same two things that I did. Things that were &#8220;a bit&#8221; on the small size are unusable on some devices and things that &#8220;a bit&#8221; on the large size actually look okay.</p>
<blockquote><p>For the most part I&#8217;ve been really happy with the look of my app across many devices. The Flex Team is doing a good job of keeping design stable across multiple screens.</p></blockquote>
<p><em>To Do Item(s):</em></p>
<ul>
<li>- Get devices</li>
<li>- Test on devices</li>
</ul>
<p><strong>Never accept &#8220;okay&#8221;</strong><br />
There are a few times that I&#8217;ve had to make the hard decision &#8220;I will cut a corner here so I can get this important bug fixed there&#8221;. I thought that my users wouldn&#8217;t notice and that they would be happy to get one bug fixed even if it meant that the update wasn&#8217;t very significant.</p>
<p>I was wrong.</p>
<p>My users did notice and they punished me for it. Users aren&#8217;t happy for incremental changes and they will comment and rate your application on two levels. The first is an overall score while the second is how much has the app improved from the last update. If the user doesn&#8217;t deem the update important enough you&#8217;ll get a nice 1-star rating for wasting their time with the update. Not nice but it is reality.</p>
<p>After seeing this phenomenon I&#8217;ve been very happy to rate applications that I enjoy with 5 stars, even if the updates seem trivial.</p>
<p><em>To Do Item(s):</em></p>
<ul>
<li>- Plan your updates</li>
<li>- Realize that everything is significant and you can&#8217;t skip out anywhere</li>
</ul>
<p><strong>Accept that your users are going to destroy your app</strong><br />
This point was very interesting and something I didn&#8217;t expect. I had a user contact me that the app didn&#8217;t work for them. After a few more emails back and forth I couldn&#8217;t understand what the problem was and was left to just apologizing to the user. Then the user gave me a break through. He had a custom build of the Android OS that gave him a few extra abilities &#8211; including the ability to turn on and off permissions to applications.</p>
<p>Apparently he decided that my application didn&#8217;t need the ability to access the internet but was upset with me when the application couldn&#8217;t access the Netflix API.</p>
<p>The lesson? Sometimes there is nothing you can do.</p>
<p><em>To Do Item(s):</em></p>
<ul>
<li>- Accept defeat</li>
</ul>
<p><strong>Unit Test (where possible)</strong><br />
Don&#8217;t have to go far into this subject. Unit tests work, use them. Even if you think you&#8217;re a &#8220;good developer&#8221; they will help.</p>
<p><em>To Do Item(s):</em></p>
<ul>
<li>- Write your tests</li>
</ul>
<p><strong>Have a release checklist</strong><br />
This may not seem like very important but I&#8217;ve always found release checklists to be helpful. There were a few times in early releases that I didn&#8217;t follow any checklist and I accidentally left in debug information or my testing api key or a few other issues. All of these caused for some bad releases followed by an immediate secondary release followed by upset users.</p>
<p>I recommend writing a script for you to follow when you are making a release. Make sure all of your testing bits are in the script, any settings you have to change, and double check your application descriptor. Once your checklist is completed then make your release.</p>
<p>I originally didn&#8217;t do all this with my app as I considered it a &#8220;small&#8221; app and suspected I could remember all these steps off the cuff. I quickly learned that there is no such thing as a small app and every detail matters.</p>
<p><em>To Do Item(s):</em></p>
<ul>
<li>- Make a script</li>
<li>- Follow your script each time</li>
</ul>
<p><strong>Include your contact information</strong><br />
Finally, give your users a way to contact you. I&#8217;ve found over the entire process that I have some very kind users and also some users that have great ideas and points for improvements. They appreciate that the ability to give feedback and contribute often. I receive roughly 10 emails a day from my users with ideas and requests.</p>
<p><em>To Do Item(s):</em></p>
<ul>
<li>- Include your contact information somewhere</li>
</ul>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.unitedmindset.com%2Fjonbcampos%2F2010%2F12%2F28%2Flearn-from-my-mobile-mistakes%2F&amp;title=Learn%20from%20my%20mobile%20mistakes" id="wpa2a_10"><img src="http://www.unitedmindset.com/jonbcampos/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.unitedmindset.com/jonbcampos/2010/12/28/learn-from-my-mobile-mistakes/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Flex 4.5 PersistenceManager</title>
		<link>http://www.unitedmindset.com/jonbcampos/2010/11/01/flex-4-5-persistencemanager/</link>
		<comments>http://www.unitedmindset.com/jonbcampos/2010/11/01/flex-4-5-persistencemanager/#comments</comments>
		<pubDate>Mon, 01 Nov 2010 15:26:48 +0000</pubDate>
		<dc:creator>jonbcampos</dc:creator>
				<category><![CDATA[Air for Android]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[air for android]]></category>
		<category><![CDATA[flex 4.5]]></category>
		<category><![CDATA[ipersistencemanager]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[persistencemanager]]></category>

		<guid isPermaLink="false">http://unitedmindset.com/jonbcampos/?p=1981</guid>
		<description><![CDATA[The PersistenceManager is the data center backbone to your mobile Flex application. The reason you need to think about the persistance layer of your mobile app more than you needed to before in web and desktop development is because of the high probability of interruption and application closure. In web and desktop development if something [...]]]></description>
			<content:encoded><![CDATA[<p>The PersistenceManager is the data center backbone to your mobile Flex application. The reason you need to think about the persistance layer of your mobile app more than you needed to before in web and desktop development is because of the high probability of interruption and application closure.</p>
<p>In web and desktop development if something else happened on the user&#8217;s computer the user could simply switch windows to handle the interruption and continue their task. This happens so frequently that developers actually never think of this as a issue. However with mobile development there is always the chance of a phone call coming in, or email, or any other application that may take focus away from your application. While you application is not in immediate use you now fall prey to the operating system&#8217;s whim. If the OS decides that your application needs to close for memory or power reasons then the state of your application and any data it was holding may now be lost unless you have created an aggressive data persistance layer.</p>
<p><img src="http://unitedmindset.com/jonbcampos/wp-content/uploads/2010/11/applicationSessionCut.png" alt="" title="applicationSessionCut" width="582" height="225" class="alignnone size-full wp-image-2343" /></p>
<p>On top of that, the views within your application are created and destroyed quite frequently. That means if you were a developer that was used to grabbing data from offscreen or invisible views then your data will no longer be available when these other views are destroyed. Another reason why you need to be very aggressive about moving data into a proper data model and away from the view.</p>
<p>Getting into it let&#8217;s look at the PersistenceManager, what it is, and how we can alter it to do our bidding.<br />
<span id="more-1981"></span><br />
<strong>PersistenceManager</strong><br />
First off the PersistenceManager is a simple way to interact with an LSO (Local Shared Object). This is the default way to persist data across views and sessions. There are only a handful of functions to worry about to get use this class.</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//--------------------------------------------------------------------------</span><br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//</span><br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// &nbsp;Methods</span><br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//</span><br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//--------------------------------------------------------------------------</span><br />
<br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">/**<br />
&nbsp; &nbsp; &nbsp;* &nbsp;Clears all the data that is being stored by the persistence<br />
&nbsp; &nbsp; &nbsp;* &nbsp;manager.<br />
&nbsp; &nbsp; &nbsp;*<br />
&nbsp; &nbsp; &nbsp;* &nbsp;@langversion 3.0<br />
&nbsp; &nbsp; &nbsp;* &nbsp;@playerversion Flash 10.1<br />
&nbsp; &nbsp; &nbsp;* &nbsp;@playerversion AIR 2.5<br />
&nbsp; &nbsp; &nbsp;* &nbsp;@productversion Flex 4.5<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">clear</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>;<br />
<br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">/**<br />
&nbsp; &nbsp; &nbsp;* &nbsp;Flushes the data being managed by the persistence manager to<br />
&nbsp; &nbsp; &nbsp;* &nbsp;disk or another external storage file.<br />
&nbsp; &nbsp; &nbsp;*<br />
&nbsp; &nbsp; &nbsp;* &nbsp;@langversion 3.0<br />
&nbsp; &nbsp; &nbsp;* &nbsp;@playerversion Flash 10.1<br />
&nbsp; &nbsp; &nbsp;* &nbsp;@playerversion AIR 2.5<br />
&nbsp; &nbsp; &nbsp;* &nbsp;@productversion Flex 4.5<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">flush</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>;<br />
<br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">/**<br />
&nbsp; &nbsp; &nbsp;* &nbsp;Initializes the persistence manager.<br />
&nbsp; &nbsp; &nbsp;*<br />
&nbsp; &nbsp; &nbsp;* &nbsp;@langversion 3.0<br />
&nbsp; &nbsp; &nbsp;* &nbsp;@playerversion Flash 10.1<br />
&nbsp; &nbsp; &nbsp;* &nbsp;@playerversion AIR 2.5<br />
&nbsp; &nbsp; &nbsp;* &nbsp;@productversion Flex 4.5<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">function</span> initialize<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>;<br />
<br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">/**<br />
&nbsp; &nbsp; &nbsp;* &nbsp;Returns the value of a property stored in the persistence manager.<br />
&nbsp; &nbsp; &nbsp;*<br />
&nbsp; &nbsp; &nbsp;* &nbsp;@param key The property key<br />
&nbsp; &nbsp; &nbsp;*<br />
&nbsp; &nbsp; &nbsp;* &nbsp;@langversion 3.0<br />
&nbsp; &nbsp; &nbsp;* &nbsp;@playerversion Flash 10.1<br />
&nbsp; &nbsp; &nbsp;* &nbsp;@playerversion AIR 2.5<br />
&nbsp; &nbsp; &nbsp;* &nbsp;@productversion Flex 4.5<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">getProperty</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">key</span>:<span style="color: #0066CC;">String</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Object</span>;<br />
<br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">/**<br />
&nbsp; &nbsp; &nbsp;* &nbsp;Stores a value in the persistence manager.<br />
&nbsp; &nbsp; &nbsp;*<br />
&nbsp; &nbsp; &nbsp;* &nbsp;@param key The key to use to store the value<br />
&nbsp; &nbsp; &nbsp;* &nbsp;@param value The value object to store<br />
&nbsp; &nbsp; &nbsp;*<br />
&nbsp; &nbsp; &nbsp;* &nbsp;@langversion 3.0<br />
&nbsp; &nbsp; &nbsp;* &nbsp;@playerversion Flash 10.1<br />
&nbsp; &nbsp; &nbsp;* &nbsp;@playerversion AIR 2.5<br />
&nbsp; &nbsp; &nbsp;* &nbsp;@productversion Flex 4.5<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">setProperty</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">key</span>:<span style="color: #0066CC;">String</span>, value:<span style="color: #0066CC;">Object</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>;</div></div>
<p>This makes it very easy to set and get data from the persistence layer.</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">var</span> p:PersistanceManager = <span style="color: #000000; font-weight: bold;">new</span> PersistenceManager<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">/* this is a singleton */</span><br />
p.<span style="color: #0066CC;">setProperty</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;key&quot;</span>, <span style="color: #cc66cc;">1232131.123</span><span style="color: #66cc66;">&#41;</span>;<br />
<br />
...<br />
...<br />
<br />
<span style="color: #000000; font-weight: bold;">var</span> p:PersistanceManager = <span style="color: #000000; font-weight: bold;">new</span> PersistenceManager<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">/* this is a singleton */</span><br />
<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">key</span>:<span style="color: #0066CC;">Number</span> = p.<span style="color: #0066CC;">getProperty</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;key&quot;</span><span style="color: #66cc66;">&#41;</span> as <span style="color: #0066CC;">Number</span>;</div></div>
<p><strong>Roll Your Own</strong><br />
Don&#8217;t like using LSOs? Prefer SQLite Databases or some other storage plan? No problem. You don&#8217;t have to roll your own completely if you don&#8217;t want to &#8211; though you could. You can still use the PersistenceManager, just make sure to use the interface: <em>IPersistenceManager</em>. The functions are all the same but now you can make your own and do whatever you want. This is a wonderful example of programming to an interface rather than an implementation.</p>
<p>While the simple functions provided by the <em>IPersistenceManager</em> may not be robust enough for your application then you can just completely write your own class. I prefer to stick to the provided interfaces because then other developers that help out don&#8217;t have to learn an entire new set of methods.</p>
<blockquote><p>
Looking at getting started with Flash Builder Burrito and the new Flex SDK? Check out this post on <a href="http://unitedmindset.com/jonbcampos/2010/10/25/flex-4-5-mobile-development-post-burrito/">Flex Hero development</a>.
</p></blockquote>
<blockquote><p>
Looking at getting going with non-Hero development or don&#8217;t have the new Flash Builder Burrito? Check out this post on <a href="http://unitedmindset.com/jonbcampos/2010/07/19/android-mobile-development/">getting started with Air for Android</a>.
</p></blockquote>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.unitedmindset.com%2Fjonbcampos%2F2010%2F11%2F01%2Fflex-4-5-persistencemanager%2F&amp;title=Flex%204.5%20PersistenceManager" id="wpa2a_12"><img src="http://www.unitedmindset.com/jonbcampos/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.unitedmindset.com/jonbcampos/2010/11/01/flex-4-5-persistencemanager/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Flex Mobile running on the Samsung Tablet</title>
		<link>http://www.unitedmindset.com/jonbcampos/2010/10/29/flex-mobile-running-on-the-samsung-tablet/</link>
		<comments>http://www.unitedmindset.com/jonbcampos/2010/10/29/flex-mobile-running-on-the-samsung-tablet/#comments</comments>
		<pubDate>Fri, 29 Oct 2010 20:19:21 +0000</pubDate>
		<dc:creator>jonbcampos</dc:creator>
				<category><![CDATA[Air for Android]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Netflix Flex API]]></category>
		<category><![CDATA[adobemax]]></category>
		<category><![CDATA[flex mobile]]></category>
		<category><![CDATA[samsung]]></category>

		<guid isPermaLink="false">http://unitedmindset.com/jonbcampos/?p=2327</guid>
		<description><![CDATA[I created this app with Adobe&#8217;s Flex technology and Air for Android. I primarily test and develop on my Evo, but while at Adobe Max I was able to load my app onto the new Samsung Galaxy tablet. With 0 code changes the app just worked and looked really good. You can find the Queue [...]]]></description>
			<content:encoded><![CDATA[<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/FUBVOHsqqHE?fs=1&amp;hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/FUBVOHsqqHE?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></p>
<p>I created this app with Adobe&#8217;s Flex technology and Air for Android. I primarily test and develop on my Evo, but while at Adobe Max I was able to load my app onto the new Samsung Galaxy tablet. With 0 code changes the app just worked and looked really good.</p>
<p>You can find the Queue Manager application in the Android Marketplace right now.<br />
<img src="http://qrcode.kaywa.com/img.php?s=5&#038;d=market%3A%2F%2Fsearch%3Fq%3Dpname%3Aair.com.unitedmindset.QueueManager" alt="qrcode"  /></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.unitedmindset.com%2Fjonbcampos%2F2010%2F10%2F29%2Fflex-mobile-running-on-the-samsung-tablet%2F&amp;title=Flex%20Mobile%20running%20on%20the%20Samsung%20Tablet" id="wpa2a_14"><img src="http://www.unitedmindset.com/jonbcampos/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.unitedmindset.com/jonbcampos/2010/10/29/flex-mobile-running-on-the-samsung-tablet/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Flex 4.5 Mobile Development Post Burrito</title>
		<link>http://www.unitedmindset.com/jonbcampos/2010/10/25/flex-4-5-mobile-development-post-burrito/</link>
		<comments>http://www.unitedmindset.com/jonbcampos/2010/10/25/flex-4-5-mobile-development-post-burrito/#comments</comments>
		<pubDate>Mon, 25 Oct 2010 23:07:55 +0000</pubDate>
		<dc:creator>jonbcampos</dc:creator>
				<category><![CDATA[Air for Android]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://unitedmindset.com/jonbcampos/?p=1976</guid>
		<description><![CDATA[I am REALLY excited to be able to write about this. Hero.. Slider&#8230; It is all Flex. And now a very optimized update to Flex that is specially created to work well on mobile devices. I&#8217;ve been rushing around the new framework additions to put together an app that shows off the new features and [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="Queue Manager Link" src="http://qrcode.kaywa.com/img.php?s=5&#038;d=market%3A%2F%2Fsearch%3Fq%3Dpname%3Aair.com.unitedmindset.QueueManager" title="Queue Manager Link" class="alignleft" width="195" height="195" />I am REALLY excited to be able to write about this.</p>
<p>Hero.. Slider&#8230; It is all Flex. And now a very optimized update to Flex that is specially created to work well on mobile devices. I&#8217;ve been rushing around the new framework additions to put together an app that shows off the new features and can be helpful. You can check out the app I made here: Queue Manager.</p>
<p>Let&#8217;s get started with the new mobile development options&#8230;</p>
<blockquote><p>
Everything I am writing about is available with the new &#8220;Burrito&#8221; Flash Builder releases given out at Adobe Max 2010.
</p></blockquote>
<p><span id="more-1976"></span></p>
<p><a href="http://unitedmindset.com/jonbcampos/wp-content/uploads/2010/10/newproject.png"><img src="http://unitedmindset.com/jonbcampos/wp-content/uploads/2010/10/newproject.png" alt="" title="newproject" width="313" height="261" class="alignleft size-full wp-image-2266" /></a><strong>Starting Up New Application</strong><br />
Once working with the new version of Flash Builder you will see some new options that weren&#8217;t available with earlier. The main difference from earlier Flash Builder releases is the addition of mobile projects, specifically: Flex Mobile Project and Actionscript Mobile Project.</p>
<p>I&#8217;m not going to go over the Actionscript Mobile Project as it is pretty easy to understand. You start right from scratch and can develop anything you want.</p>
<p>Flex Mobile Projects are different as there are many classes that Adobe has created to make your application development easier. We are going to start with the 3 different ways to start up your application: Mobile Application and TabbedMobileApplication.</p>
<p><a href="http://unitedmindset.com/jonbcampos/wp-content/uploads/2010/10/Screen-shot-2010-10-21-at-1.12.53-PM.png"><img src="http://unitedmindset.com/jonbcampos/wp-content/uploads/2010/10/Screen-shot-2010-10-21-at-1.12.53-PM-188x300.png" alt="" title="Basic Mobile App" width="188" height="300" class="alignleft size-medium wp-image-2277" /></a><strong>MobileApplication</strong><br />
The first option you have is MobileApplication. This is the entrance point for your mobile application setting up your <em>Actionbar</em> and <em>Navigator</em> and <em>firstView</em>.</p>
<p>The <em>Actionbar</em> is more of convenience  class than anything else. This is the bar on the top of your application with 3 distinct sections that you can use for navigation, action and title properties. Many mobile applications use this facility to help the user navigate the application and Adobe has set this up for you. You can also choose to hide the Actionbar or change how it overlays your application.</p>
<p>The <em>Navigator</em> is similar to a <em>ViewStack</em>. This is your main view manager that you can pop and push views onto in an array format. With each view pushed onto the stack or popped off you can have nearly limitless application navigation paths. This is your main way to handle different views.</p>
<p>The <em>firstView</em> is your application&#8217;s starting point &#8211; the initial view to push onto the stack. Later you can &#8220;reroot&#8221; your application by popping off all the views and set a new root view.</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&lt;</span>?<span style="color: #0066CC;">xml</span> <span style="color: #0066CC;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> encoding=<span style="color: #ff0000;">&quot;utf-8&quot;</span>?<span style="color: #66cc66;">&gt;</span><br />
<span style="color: #66cc66;">&lt;</span>s:MobileApplication xmlns:fx=<span style="color: #ff0000;">&quot;http://ns.adobe.com/mxml/2009&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;xmlns:s=<span style="color: #ff0000;">&quot;library://ns.adobe.com/flex/spark&quot;</span> firstView=<span style="color: #ff0000;">&quot;views.BlogTestHome&quot;</span><span style="color: #66cc66;">&gt;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&lt;</span>fx:Declarations<span style="color: #66cc66;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&lt;!</span>-- Place non-visual elements <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">e</span>.<span style="color: #006600;">g</span>., services, value objects<span style="color: #66cc66;">&#41;</span> here --<span style="color: #66cc66;">&gt;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&lt;/</span>fx:Declarations<span style="color: #66cc66;">&gt;</span><br />
<span style="color: #66cc66;">&lt;/</span>s:MobileApplication<span style="color: #66cc66;">&gt;</span></div></div>
<p><a href="http://unitedmindset.com/jonbcampos/wp-content/uploads/2010/10/Screen-shot-2010-10-21-at-1.19.36-PM.png"><img src="http://unitedmindset.com/jonbcampos/wp-content/uploads/2010/10/Screen-shot-2010-10-21-at-1.19.36-PM-188x300.png" alt="" title="Tabbed Mobile Applcation" width="188" height="300" class="alignleft size-medium wp-image-2280" /></a><strong>TabbedMobileApplication</strong><br />
The <em>TabbedMobileApplication</em> is similar to the <em>MobileApplication</em> except rather than having one navigator you have many. And each navigator has it&#8217;s own tab in the main TabBar connected to the application. With the <em>TabbedMobileApplication</em> you set up an array of <em>ViewNavigator</em>s and determine each <em>ViewNavigator</em>&#8216;s <em>firstView</em>.</p>
<p>Like normal Flex development with the TabBar the <em>label</em> field determines the label that will be shown on the TabBar.</p>
<p>By clicking on the Buttons created automatically with the TabbedMobileApplication, the user can switch between stacks. You will still want to store the visual data away from the view for safe keeping.</p>
<p>This sets up the basis for you application development.</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&lt;</span>?<span style="color: #0066CC;">xml</span> <span style="color: #0066CC;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> encoding=<span style="color: #ff0000;">&quot;utf-8&quot;</span>?<span style="color: #66cc66;">&gt;</span><br />
<span style="color: #66cc66;">&lt;</span>s:TabbedMobileApplication xmlns:fx=<span style="color: #ff0000;">&quot;http://ns.adobe.com/mxml/2009&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;xmlns:s=<span style="color: #ff0000;">&quot;library://ns.adobe.com/flex/spark&quot;</span><span style="color: #66cc66;">&gt;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&lt;</span>fx:Declarations<span style="color: #66cc66;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&lt;!</span>-- Place non-visual elements <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">e</span>.<span style="color: #006600;">g</span>., services, value objects<span style="color: #66cc66;">&#41;</span> here --<span style="color: #66cc66;">&gt;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&lt;/</span>fx:Declarations<span style="color: #66cc66;">&gt;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&lt;</span>s:ViewNavigator firstView=<span style="color: #ff0000;">&quot;views.BlogTestHome&quot;</span> <span style="color: #0066CC;">width</span>=<span style="color: #ff0000;">&quot;100%&quot;</span> <span style="color: #0066CC;">height</span>=<span style="color: #ff0000;">&quot;100%&quot;</span> label=<span style="color: #ff0000;">&quot;Set 1&quot;</span><span style="color: #66cc66;">/&gt;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&lt;</span>s:ViewNavigator firstView=<span style="color: #ff0000;">&quot;views.TabBlogTestHome&quot;</span> <span style="color: #0066CC;">width</span>=<span style="color: #ff0000;">&quot;100%&quot;</span> <span style="color: #0066CC;">height</span>=<span style="color: #ff0000;">&quot;100%&quot;</span> label=<span style="color: #ff0000;">&quot;Set 2&quot;</span><span style="color: #66cc66;">/&gt;</span><br />
<span style="color: #66cc66;">&lt;/</span>s:TabbedMobileApplication<span style="color: #66cc66;">&gt;</span></div></div>
<p><strong>Pushing and Popping Views</strong><br />
Once you have your <em>firstView</em> set and running the rest of the application is going to fall right into place. When you want to move to the next view you just need to &#8220;push&#8221; on a new view. This is done with the following code.</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0066CC;">this</span>.<span style="color: #006600;">navigator</span>.<span style="color: #006600;">pushView</span><span style="color: #66cc66;">&#40;</span>NewViewClassName,<span style="color: #0066CC;">data</span><span style="color: #66cc66;">&#41;</span>;</div></div>
<p>The <em>data</em> is an untyped object and anything you want to be available in the <em>data</em> property in the new view. This is a very easy way to pass data back and forth between views and helps maintain state.</p>
<p>If the user hits the back button the navigator will automatically do a pop for you &#8211; unless you <em>event.preventDefault();</em>. You can also do this programmatically by just calling the pop function.</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">navigator.<span style="color: #0066CC;">pop</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div></div>
<p>If at any time you want to &#8220;rehome&#8221; your application and reset it&#8217;s view stack just pop all the views off and set the new view. This is helpful if you want to forget the history when someone hits the home button or after some complicated steps that you may not want your user going back to mess up.</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">navigator.<span style="color: #006600;">popAll</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
navigator.<span style="color: #006600;">pushView</span><span style="color: #66cc66;">&#40;</span>ViewClass, <span style="color: #0066CC;">data</span><span style="color: #66cc66;">&#41;</span>;</div></div>
<p>Or you can go back to the original home and remove all the history by using another convenience function <em>popToFirstView</em>.</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">navigator.<span style="color: #006600;">popToFirstView</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div></div>
<p>By default you get the slide to the left transition for all of these functions, but if you wanted to create your own transition or just have something different for your transition, each of these functions have a transition property that you can set for when the effect needs to play.</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">navigator.<span style="color: #006600;">pushView</span><span style="color: #66cc66;">&#40;</span>factory, <span style="color: #0066CC;">data</span>=<span style="color: #000000; font-weight: bold;">null</span>, transition=<span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span>;<br />
navigator.<span style="color: #006600;">popAll</span><span style="color: #66cc66;">&#40;</span>transition=<span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span>;<br />
navigator.<span style="color: #006600;">popToFirstView</span><span style="color: #66cc66;">&#40;</span>transition=<span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span>;<br />
navigator.<span style="color: #006600;">popView</span><span style="color: #66cc66;">&#40;</span>transition=<span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span>;</div></div>
<p><strong>Performance Hints</strong><br />
Before you run off and start building all your amazing application there are a few things I&#8217;d like to pass on that I learned while creating <em>Queue Manager</em>.</p>
<p><em>Don&#8217;t do any work during transitions, you&#8217;ll slow down the transitions.</em><br />
I seriously mean don&#8217;t do ANY work. I was sending off a call for data and that&#8217;s it and even that slowed down my application. No more hiding how long it takes to load data behind slick transitions.</p>
<p><em>Don&#8217;t forget the loading indicator.</em><br />
Right now there is no way to show the user that your app is doing work. Make sure to program in a loading indicator to let them know something is going on.<br />
I&#8217;ve been told in later releases Adobe will provide some helper for this.</p>
<p><em>Don&#8217;t set properties on the Actionbar till the transition is complete.</em><br />
This is mainly an Max Preview Release bug. But if you do your Actionbar transition won&#8217;t finish and your view will look jacked.</p>
<p><em>Use your Splash Screen to hide the application loading</em><br />
One way to make it seem that your app comes up quickly is to use the <em>splashScreen</em> property on the application. This just takes a normal image and stretches it over your screen. If you wanted to be really slick you could make it look like your home screen and hide how long it takes to come up.</p>
<p><em>Check your sessionCachingEnabled</em><br />
Adobe has already programmed in a lot of session caching information into the Flex application. However their implementation may not work for you and your app. It didn&#8217;t work for my app. If this is the case and you want to ensure you aren&#8217;t caching data that shouldn&#8217;t be cached then make sure to turn your <em>sessionCachingEnabled</em> to <em>false</em>.</p>
<p><em>Roll your own session caching</em><br />
The persistance manager by default uses shared object, however if you want to use local databases or some other persistance management technique then all you need to do is use the persistance manager interface and roll your own.</p>
<p><em>Cache Often</em><br />
When working with mobile devices remember that at any moment your application can be interrupted. In the past you may have been lazy about storing user input as they are entering in the data but now that is more important than ever. Each keydown and text change needs to be stored so that if a call comes in and stops the process, you can still have the user&#8217;s info just in case the application was shut down.</p>
<p><em>Close your application</em><br />
Users expect at certain times that when they back or home out of your application that the application should be completely closed and shouldn&#8217;t be taking any resources. Yet at other times they expect that they can skip away and check a text and then come back to the app the way they left it. This is up to you and your application, just be aware of when you should close your application and when you should leave it running.</p>
<p>Close your application with:</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">NativeApplication.<span style="color: #006600;">nativeApplication</span>.<span style="color: #006600;">exit</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div></div>
<p><em>Watch your Activate and Deactivate Events</em><br />
When you application&#8217;s view gets activated or deactivated from the OS due to user input you may want to set or cache some data. I would watch for these events from each of your views and respond appropriately.</p>
<p><em>Actionscript Skins</em><br />
Unless you are dealing with the most simple skins, it&#8217;s best to keep them all Actionscript. No MXML yet.</p>
<p><em>Not all components are Mobile Optimized yet</em><br />
Flash Builder will even give you ASDoc hints as to components that have been Mobile optimized or not. Watch for these hints as some components will not work well as they aren&#8217;t optimized &#8211; others just won&#8217;t work at all.</p>
<p><em>Text Fields</em><br />
In your skins make sure to use the MobileTextField rather than RichTextField or others that don&#8217;t say &#8220;Mobile&#8221;. If you do use one of these non-mobile textfields you will not get any information from your textfield. Trust me on this, it&#8217;s annoying and not obvious!</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.unitedmindset.com%2Fjonbcampos%2F2010%2F10%2F25%2Fflex-4-5-mobile-development-post-burrito%2F&amp;title=Flex%204.5%20Mobile%20Development%20Post%20Burrito" id="wpa2a_16"><img src="http://www.unitedmindset.com/jonbcampos/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.unitedmindset.com/jonbcampos/2010/10/25/flex-4-5-mobile-development-post-burrito/feed/</wfw:commentRss>
		<slash:comments>55</slash:comments>
		</item>
		<item>
		<title>Queue Manager</title>
		<link>http://www.unitedmindset.com/jonbcampos/2010/10/09/queue-manager/</link>
		<comments>http://www.unitedmindset.com/jonbcampos/2010/10/09/queue-manager/#comments</comments>
		<pubDate>Sat, 09 Oct 2010 20:16:20 +0000</pubDate>
		<dc:creator>jonbcampos</dc:creator>
				<category><![CDATA[Air for Android]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Netflix Flex API]]></category>
		<category><![CDATA[netflix]]></category>
		<category><![CDATA[queue manager]]></category>

		<guid isPermaLink="false">http://unitedmindset.com/jonbcampos/?p=2236</guid>
		<description><![CDATA[If you are on of the 17000+ people that have downloaded and use my Queue Manager Android app I thank you. I am actively working to address each and every comment while continuing to add helpful features. If you are curious why I created this app then the answer is simple. I wanted to make [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-2237" title="icon128" src="http://unitedmindset.com/jonbcampos/wp-content/uploads/2010/10/icon128.png" alt="" width="128" height="128" />If you are on of the 17000+ people that have downloaded and use my Queue Manager Android app I thank you. I am actively working to address each and every comment while continuing to add helpful features.</p>
<p>If you are curious why I created this app then the answer is simple. I wanted to make an easier way for me to manage my Netflix queue. I am a Netflix fanatic and am constantly working with my queue.</p>
<p><img src="http://qrcode.kaywa.com/img.php?s=5&amp;d=market%3A%2F%2Fsearch%3Fq%3Dpname%3Aair.com.unitedmindset.QueueManager" alt="qrcode" /></p>
<p><strong>Current State</strong><br />
If you are wondering if I feel the app is complete then the answer is NO! This is a work in progress and I hope you keep updating as I continue to make the app better. Right now I am trying to get through the bare minimum requirements, as I see them. Such as:<br />
- viewing queues<br />
- updating queues<br />
- add/remove/view movies<br />
- update movies queue positions</p>
<p><strong>Donation Link</strong><br />
Like this app? Feel all warm and fuzzy and would like to fund a developer for his hard work? Use this link:</p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input name="cmd" type="hidden" value="_s-xclick" />
<input name="encrypted" type="hidden" value="-----BEGIN PKCS7-----MIIHRwYJKoZIhvcNAQcEoIIHODCCBzQCAQExggEwMIIBLAIBADCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20CAQAwDQYJKoZIhvcNAQEBBQAEgYBLYBzAZK0Wi+ZEHApa3KloegSUmwdl1qplh0FPAEAhpSoF+fBf9xeXhw8EcYFbUrbJOj/27ASJRU4YJmztfY9vY5GJ5lFcWJgt4PxzxQzgDctUxujdfM/wheHrCYp9IlKpENfO8CpapzPuGqxi1RHSCAroYCkN0nsMev/OlVRLEzELMAkGBSsOAwIaBQAwgcQGCSqGSIb3DQEHATAUBggqhkiG9w0DBwQIrBGO7w22H0yAgaAg2E0wz8cR29h4jxHuXFLewjOl9y8D9TU3HloCZ1z/89/+9wcvBHLtyBggb/NEJkJ/BLW4Szfzwl4+pfmYK1gyfJq/SZJCoiGpdg51uneHmqoyPz+08nP+S++CNwGxmckppEWOYXkQ6aa96u+Z2bnSpylu0mwbVjLKuQCKaHb2Eg/DDLR/ttBN5hRxTm5YxiAY4I0iK7OGb2CTnwZnaVVkoIIDhzCCA4MwggLsoAMCAQICAQAwDQYJKoZIhvcNAQEFBQAwgY4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLUGF5UGFsIEluYy4xEzARBgNVBAsUCmxpdmVfY2VydHMxETAPBgNVBAMUCGxpdmVfYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwuY29tMB4XDTA0MDIxMzEwMTMxNVoXDTM1MDIxMzEwMTMxNVowgY4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLUGF5UGFsIEluYy4xEzARBgNVBAsUCmxpdmVfY2VydHMxETAPBgNVBAMUCGxpdmVfYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBR07d/ETMS1ycjtkpkvjXZe9k+6CieLuLsPumsJ7QC1odNz3sJiCbs2wC0nLE0uLGaEtXynIgRqIddYCHx88pb5HTXv4SZeuv0Rqq4+axW9PLAAATU8w04qqjaSXgbGLP3NmohqM6bV9kZZwZLR/klDaQGo1u9uDb9lr4Yn+rBQIDAQABo4HuMIHrMB0GA1UdDgQWBBSWn3y7xm8XvVk/UtcKG+wQ1mSUazCBuwYDVR0jBIGzMIGwgBSWn3y7xm8XvVk/UtcKG+wQ1mSUa6GBlKSBkTCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb22CAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQCBXzpWmoBa5e9fo6ujionW1hUhPkOBakTr3YCDjbYfvJEiv/2P+IobhOGJr85+XHhN0v4gUkEDI8r2/rNk1m0GA8HKddvTjyGw/XqXa+LSTlDYkqI8OwR8GEYj4efEtcRpRYBxV8KxAW93YDWzFGvruKnnLbDAF6VR5w/cCMn5hzGCAZowggGWAgEBMIGUMIGOMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC1BheVBhbCBJbmMuMRMwEQYDVQQLFApsaXZlX2NlcnRzMREwDwYDVQQDFAhsaXZlX2FwaTEcMBoGCSqGSIb3DQEJARYNcmVAcGF5cGFsLmNvbQIBADAJBgUrDgMCGgUAoF0wGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMTAxMjIwMjMxOTQyWjAjBgkqhkiG9w0BCQQxFgQU8o8LxT4gHPUAl5CZOC09+aqzm0wwDQYJKoZIhvcNAQEBBQAEgYA1YELnpgLdjM6pwWulvIRNA0CHxS5HJFy/pb9HxuDilvrPOTVkTH30rdy6dhdW92BiJ3AaLxkXuxpvemeubKwwhhyaXhm6cOJR5q9OnrbEWAg6hFLKjk+d0uz2ILQyT85VrhLXu5O89zLMBd9qhON5if4umWAbHIPGn3ewnc5dWw==-----END PKCS7-----&lt;br /&gt; " />
<input alt="PayPal - The safer, easier way to pay online!" name="submit" src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif" type="image" /> <img src="https://www.paypal.com/en_US/i/scr/pixel.gif" border="0" alt="" width="1" height="1" /></form>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
</form>
<p><span id="more-2236"></span></p>
<p><strong>Planned updates</strong><br />
- Social connections<br />
- Gesture support<br />
- Search filtering<br />
- Bluray support</p>
<p><strong>Release Notes</strong><br />
I will keep this page going as a place for people to post comments and requests and a place for me to keep version update details. This way I can keep transparent as to my progress and you can see if your request is complete.</p>
<p><strong>v1.0.0 &#8211; Initial Release</strong><br />
Basic queue viewing</p>
<p><strong>v1.0.1 &#8211; Visual Change</strong><br />
-Updated browse to search as Netflix doesn&#8217;t provide category browse api</p>
<p><strong>v1.0.10 &#8211; Queue Change</strong><br />
- Paging added to Disc/Instant Queues<br />
- Updated Netflix API to allow Disc/Instant Queue Paging<br />
- Bug fixes<br />
- Loading bar added for visual feedback<br />
- Updated closing the app when backing out of Main Menu<br />
- Updated closing the app on logout</p>
<p><strong>v1.0.12 &#8211; New API Key Added</strong><br />
- Changed API key for higher daily rates</p>
<p><strong>v1.0.13 &#8211; Requests Fulfilled</strong><br />
- Menu closes when focus away from menu<br />
- Added Release Notes link in App Credits</p>
<p><strong>v1.0.14 &#8211; Performance Release</strong><br />
- Updated title load order<br />
- small noticeable performance increase<br />
- transitions are smoother</p>
<p><strong>v1.0.15 &#8211; Performance Release</strong><br />
- Reduced title calls by 1/5th.</p>
<p><strong>v1.0.20 &#8211; Queue Management Release</strong><br />
- Reorder Disc Queue<br />
- Reorder Instant Queue<br />
- Menus go away on option selection<br />
- Fixed Disc removal bug<br />
- Fixed Queue update bug</p>
<p><strong>v1.0.24 &#8211; Bug Release</strong><br />
- added opt-in error emails to me<br />
- quick rerun error calls<br />
- upped font sizes<br />
- added scrollers in some places</p>
<p><strong>v1.0.25 &#8211; Bug Release</strong><br />
- remove title bug fix</p>
<p><strong>v1.0.31 &#8211; Browsing Addition</strong><br />
- fixed add disc bug<br />
- added browsing support with subcategories</p>
<p><strong>v1.0.32 &#8211; Browsing Addition</strong><br />
- browse by genre from title details<br />
- browse similar titles from title details</p>
<p><strong>v1.0.33 &#8211; Bug Release</strong><br />
- null pointer error for missing directors/casts/etc now handled gracefully</p>
<p><strong>v1.0.36 &#8211; Bug Release</strong><br />
- working to fix specific user&#8217;s droid authentication issue<br />
- fixed bug with adding and removing sessions. Loading indicator remained even though service was complete.</p>
<p><strong>v1.0.37 &#8211; Visual Release</strong><br />
- moved paging buttons on screen, not behind menu<br />
- updated timestamp code<br />
- changed url encoding code</p>
<p><strong>v1.0.38</strong><br />
- bug fix &#8211; timestamp fix for authentication<br />
- visual fix &#8211; update to full lists not being visible<br />
- feature &#8211; browse now allows x levels<br />
- feature &#8211; added top level &#8220;new&#8221; dvd/instant/bluray<br />
- added tag showing this was made with Adobe Flex Technology</p>
<p><strong>v1.0.39  &#8211; Immediate Bug Fix</strong><br />
- fix &#8211; found null pointer error introduced in 1.0.31</p>
<p><strong>v1.1.0  &#8211; Horizontal Lists</strong><br />
- App2sd now available<br />
- Horizontal Lists<br />
- Format Availability in lists<br />
- Larger Coverart<br />
- Cleaned up loading and splash screens<br />
- Faster Login Process</p>
<p><strong>v1.1.1  &#8211; Bug Fixes</strong><br />
- Fixed front page misspelling &#8211; I&#8217;m not a writer, I&#8217;m a programer <img src='http://www.unitedmindset.com/jonbcampos/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
- Fixed browse bug that resets to first page on backing into titles list</p>
<p><strong>v1.1.3  &#8211; Bug Fixes</strong><br />
- Horizontal list search selection bug fix<br />
- architecture change (non-noticeable change)<br />
- error logging fix for email errors<br />
- instant/disc queue layout bug fix</p>
<p><strong>v1.1.4  &#8211; Additional Development</strong><br />
- Added additional fault checks<br />
- Fixed up main menu to be laid out a bit better <img src='http://www.unitedmindset.com/jonbcampos/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
- horizontal similars list<br />
- rearchitecture complete, all views simplified<br />
- if an instant title will be removed within 3 months, the list view will give you this warning of removal date</p>
<p><strong>v1.1.5  &#8211; Bug Fixes</strong><br />
- Performance fix for typing in search box<br />
- bug fix for switching layouts causing improper sizing<br />
- layout change for larger screens (tablet devices)<br />
- bug fix for empty horizontal lists</p>
<p><strong>v1.1.6  &#8211; Framework Upgrade</strong></p>
<p><strong>v1.1.7  &#8211; Bug Fix</strong><br />
- fixed bug stopping app from showing in the marketplace</p>
<p><strong>v1.1.8  &#8211; Bug Fix</strong><br />
- fixed multiword search bug</p>
<p><strong>v1.1.16</strong><br />
- fixing failed login issues<br />
- updated icons<br />
- bug fixes<br />
- performance fixes</p>
<p><strong>Donation Link</strong><br />
Like this app? Feel all warm and fuzzy and would like to fund a developer for his hard work? Use this link:</p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input name="cmd" type="hidden" value="_s-xclick" />
<input name="encrypted" type="hidden" value="-----BEGIN PKCS7-----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-----END PKCS7-----&lt;br /&gt; " />
<input alt="PayPal - The safer, easier way to pay online!" name="submit" src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif" type="image" /> <img src="https://www.paypal.com/en_US/i/scr/pixel.gif" border="0" alt="" width="1" height="1" /><br />
</form>
<p><strong>Known Bugs</strong><br />
- Phones not releasing Oauth Tokens effecting Logout. This is due to a <a href="http://developer.netflix.com/forum/read/84179">Netflix logout bug</a>.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.unitedmindset.com%2Fjonbcampos%2F2010%2F10%2F09%2Fqueue-manager%2F&amp;title=Queue%20Manager" id="wpa2a_18"><img src="http://www.unitedmindset.com/jonbcampos/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.unitedmindset.com/jonbcampos/2010/10/09/queue-manager/feed/</wfw:commentRss>
		<slash:comments>153</slash:comments>
		</item>
		<item>
		<title>360&#124;Flex Presentation Resources</title>
		<link>http://www.unitedmindset.com/jonbcampos/2010/10/05/360flex-presentation-resources/</link>
		<comments>http://www.unitedmindset.com/jonbcampos/2010/10/05/360flex-presentation-resources/#comments</comments>
		<pubDate>Tue, 05 Oct 2010 14:00:21 +0000</pubDate>
		<dc:creator>jonbcampos</dc:creator>
				<category><![CDATA[Air for Android]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[360Flex]]></category>
		<category><![CDATA[air for android]]></category>

		<guid isPermaLink="false">http://unitedmindset.com/jonbcampos/?p=2206</guid>
		<description><![CDATA[I was both impressed and humbled by the amount of people that came to my Air for Android Hands-on at 360&#124;Flex DC. I&#8217;ve been even more humbled by the amount of people that want to get the content to my presentation. If you are reading this then you probably follow my blog and have seen [...]]]></description>
			<content:encoded><![CDATA[<p>I was both impressed and humbled by the amount of people that came to my Air for Android Hands-on at 360|Flex DC. I&#8217;ve been even more humbled by the amount of people that want to get the content to my presentation.</p>
<p>If you are reading this then you probably follow my blog and have seen my series on Air for Android features. With each feature I&#8217;ve included all the code and explanations as to how to use the feature. If you missed the presentation and you&#8217;ve gone through my entire series then you&#8217;ve done my hands-on.<br />
<span id="more-2206"></span><br />
Below is the full list of links to my presentation&#8217;s many parts for getting started with your Air for Android development environment.<br />
<a href="http://unitedmindset.com/jonbcampos/2010/07/19/android-mobile-development/">Setting up your Air for Android Environment</a><br />
<a href="http://unitedmindset.com/jonbcampos/2010/07/20/creating-a-flash-professional-android-project/">Hello World in Flash Professional with Air for Android</a><br />
<a href="http://unitedmindset.com/jonbcampos/2010/07/20/creating-a-flash-builder-android-project/">Hello World in Flash Builder with Air for Android</a><br />
<a href="http://unitedmindset.com/jonbcampos/2010/07/21/managing-the-android-development-environment/">Managing your Air for Android Environment</a><br />
<a href="http://unitedmindset.com/jonbcampos/2010/09/08/optimization-techniques-for-air-for-android-apps/">Optimization Techniques for Air for Android</a></p>
<p>Feature Examples:<br />
<a href="http://unitedmindset.com/jonbcampos/2010/08/30/air-for-android-geolocation/">Geolocation</a><br />
<a href="http://unitedmindset.com/jonbcampos/2010/09/01/air-for-android-accelerometer/">Accelerometer</a><br />
<a href="http://unitedmindset.com/jonbcampos/2010/09/16/html-web-view-in-air-for-android/">HTML Web View</a><br />
<a href="http://unitedmindset.com/jonbcampos/2010/09/17/air-for-android-home-menu-back-and-search-buttons/">Home, Menu, Back, and Search buttons</a><br />
<a href="http://unitedmindset.com/jonbcampos/2010/09/20/flash-player-gestures/">Gestures</a><br />
<a href="http://unitedmindset.com/jonbcampos/2010/09/27/air-for-android-screen-orientation/">Screen Orientation</a><br />
<a href="http://unitedmindset.com/jonbcampos/2010/09/28/air-for-android-text-messages-emails-and-phone-calls/">Text Messages, Emails, and Phone Calls</a><br />
<a href="http://unitedmindset.com/jonbcampos/2010/09/29/air-for-android-camera-and-camera-roll/">Camera and Camera Roll Access</a><br />
<a href="http://unitedmindset.com/jonbcampos/2010/10/04/air-for-android-microphone/">Microphone Access</a></p>
<p>Also here is the Prezi presentation that I used at 360|Flex.</p>
<div class="prezi-player">
<style type="text/css" media="screen">.prezi-player { width: 550px; } .prezi-player-links { text-align: center; }</style>
<p><object id="prezi_2cn-u2kuvq6c" name="prezi_2cn-u2kuvq6c" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="550" height="400"><param name="movie" value="http://prezi.com/bin/preziloader.swf"/><param name="allowfullscreen" value="true"/><param name="allowscriptaccess" value="always"/><param name="bgcolor" value="#ffffff"/><param name="flashvars" value="prezi_id=2cn-u2kuvq6c&amp;lock_to_path=0&amp;color=ffffff&amp;autoplay=no&amp;autohide_ctrls=0"/><embed id="preziEmbed_2cn-u2kuvq6c" name="preziEmbed_2cn-u2kuvq6c" src="http://prezi.com/bin/preziloader.swf" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="550" height="400" bgcolor="#ffffff" flashvars="prezi_id=2cn-u2kuvq6c&amp;lock_to_path=0&amp;color=ffffff&amp;autoplay=no&amp;autohide_ctrls=0"></embed></object>
<div class="prezi-player-links">
<p><a title="360Flex Hands On Talk Over Air for Android" href="http://prezi.com/2cn-u2kuvq6c/air-for-android/">Air for Android</a> on <a href="http://prezi.com">Prezi</a></p>
</div>
</div>
<p><a href='http://unitedmindset.com/jonbcampos/wp-content/uploads/2010/10/TestCases.fxp_.zip'><img src="http://unitedmindset.com/jonbcampos/wp-content/uploads/2010/07/Download-icon-150x150.png" alt="" title="360|Flex Presentation Resources - Air for Android Build Files and Applications" width="100" height="100" class="alignleft size-thumbnail wp-image-1715" /></a>And finally the full project for download, including all the source code and ant build files.</p>
<p>You can also check out the &#8220;see&#8221; tag in each application to refer to the original post and the applications have the appropriate comments.</p>
<p>If you have any questions about these files don&#8217;t be afraid to ask.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.unitedmindset.com%2Fjonbcampos%2F2010%2F10%2F05%2F360flex-presentation-resources%2F&amp;title=360%26%23124%3BFlex%20Presentation%20Resources" id="wpa2a_20"><img src="http://www.unitedmindset.com/jonbcampos/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.unitedmindset.com/jonbcampos/2010/10/05/360flex-presentation-resources/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

